def __init__(self, ebvRange, wave, enableDIB=False, enableFlux=True, extinctionLaw='gal3', normRange=None): self.points = np.array(ebvRange) values = [] for ebv in ebvRange: extinctFlux = np.ones(wave.shape) if enableFlux: extinct = pysynphot.Extinction(ebv, extinctionLaw) extinctThroughPut = extinct.GetThroughput()[::-1] f = interpolate.interp1d(extinct.wave[::-1], extinctThroughPut) extinctFlux *= f(wave) if enableDIB: extinctFlux *= pydib.makeSpectrum(wave, ebv).flux if normRange != None: extinctFluxSpec = oned.onedspec(wave, extinctFlux, mode='waveflux') extinctFlux /= np.mean(extinctFluxSpec[slice(*normRange)].flux) values.append(extinctFlux) self.values = np.array(values) self.interpGrid = interpolate.interp1d(self.points, self.values.transpose(), fill_value=1, bounds_error=False, kind='cubic')
def __init__(self, ebvRange, wave, enableDIB=False, enableFlux=True, extinctionLaw="gal3", normRange=None): self.points = np.array(ebvRange) values = [] for ebv in ebvRange: extinctFlux = np.ones(wave.shape) if enableFlux: extinct = pysynphot.Extinction(ebv, extinctionLaw) extinctThroughPut = extinct.GetThroughput()[::-1] f = interpolate.interp1d(extinct.wave[::-1], extinctThroughPut) extinctFlux *= f(wave) if enableDIB: extinctFlux *= pydib.makeSpectrum(wave, ebv).flux if normRange != None: extinctFluxSpec = oned.onedspec(wave, extinctFlux, mode="waveflux") extinctFlux /= np.mean(extinctFluxSpec[slice(*normRange)].flux) values.append(extinctFlux) self.values = np.array(values) self.interpGrid = interpolate.interp1d( self.points, self.values.transpose(), fill_value=1, bounds_error=False, kind="cubic" )
def __call__(self, offset, teff, logg, feh, v_rad): new_model = self.grid.interpolate_spectrum(teff=teff, logg=logg, feh=feh) new_model = new_model.shift_velocity(v_rad, interp=False) if abs(new_model.flux[0] + 1) < 1e-10 : print 'outside of grid' new_model.flux *= 1e10 return new_model.interpolate(self.spectrum.wave) new_model_flux = np.interp(self.spectrum.wave, new_model.wave, new_model.flux) + offset V = self.Vandermonde * (new_model_flux/ self.error2)[:,np.newaxis] scl = np.sqrt((V * V).sum(0)) sol, resids, rank, s = np.linalg.lstsq(V/scl, self.fluxbye2, self.rcond) sol = (sol.T/scl).T if (rank != self.npol) and self.warn_conditioned: msg = "The fit may be poorly conditioned" warnings.warn(msg) fit = np.dot(V, sol) * self.error2 fitspec = oned.onedspec(self.spectrum.wave, fit, mode='waveflux') self.fitspec = fitspec return fitspec
def getSpec(self, *args): return oned.onedspec(self.wave, self.interpGrid(args), mode='waveflux')
def getSpecs(specDataDir, fnames, config, **kwargs): #reading config waveFName = config.get('wave', 'wave') specDType = config.get('structure', 'datatype') specSize = config.getint('structure', 'specsize') specsize = config.getint('wave', 'islog') R = config.getfloat('params', 'r') if kwargs.has_key('smoothres'): if kwargs['smoothres']>R: raise ValueError('requested resolution (R=%f) higher than' 'models intrinsic resolution (R=%f)' % (kwargs['smoothres'], R)) #Reading wave solution wave = np.fromfile(os.path.join(specDataDir, waveFName)) if kwargs.has_key('wave'): gridSize = len(fnames) * len(kwargs['wave'].tostring()) / 1024**2 else: gridSize = len(fnames) * specSize / 1024**2 print "Processing %d spectra" % len(fnames) print "Processing %.3f MB in to Memory." % gridSize specs = [] if kwargs.has_key('normrange'): if kwargs.has_key('normmode'): normMode = kwargs['normmode'] else: normMode = 'simple' if normMode == 'simple': normSlice = slice(*[wave.searchsorted(item) for item in kwargs['normrange']]) else: raise NotImplementedError('Normalisation mode %s has not been implemented yet' % normMode) startTime = time.time() for i, specFName in enumerate(fnames): flux = np.fromfile(os.path.join(specDataDir, 'data', specFName)) spec = oned.onedspec(wave, flux, mode='waveflux') if i%100 == 0: print "@%d took %.2f s" % (i, time.time() - startTime) startTime = time.time() if kwargs.has_key('wave'): spec = spec.interpolate(kwargs['wave']) if kwargs.has_key('normrange'): normFac = np.mean(spec[normSlice].flux) spec /= normFac if kwargs.has_key('smoothres') or kwargs.has_key('smoothrot'): if kwargs.has_key('wave'): tmpSpec = spec[float(kwargs['wave'].min()):float(kwargs['wave'].max())] logDelta, logSpec = tmpSpec.interpolate_log() else: logDelta, logSpec = spec.interpolate_log() if kwargs.has_key('smoothres'): logSpec = logSpec.convolve_profile(kwargs['smoothres'], smallDelta=logDelta) if kwargs.has_key('smoothrot'): logSpec = logSpec.convolve_rotation(kwargs['smoothrot'], smallDelta=logDelta) spec = logSpec specs.append(spec.flux) if kwargs.has_key('wave'): return kwargs['wave'], np.array(specs) else: return wave, np.array(specs)
def getSpec(self, *args): return oned.onedspec(self.wave, self(*args), mode="waveflux")
def getSpecs(specDataDir, fnames, config, **kwargs): # reading config waveFName = config.get("wave", "wave") specDType = config.get("structure", "datatype") specSize = config.getint("structure", "specsize") specsize = config.getint("wave", "islog") R = config.getfloat("params", "r") if kwargs.has_key("smoothres"): if kwargs["smoothres"] > R: raise ValueError( "requested resolution (R=%f) higher than" "models intrinsic resolution (R=%f)" % (kwargs["smoothres"], R) ) # Reading wave solution wave = np.fromfile(os.path.join(specDataDir, waveFName)) if kwargs.has_key("wave"): gridSize = len(fnames) * len(kwargs["wave"].tostring()) / 1024 ** 2 else: gridSize = len(fnames) * specSize / 1024 ** 2 print "Processing %d spectra" % len(fnames) print "Processing %.3f MB in to Memory." % gridSize specs = [] startTime = time.time() for i, specFName in enumerate(fnames): flux = np.fromfile(os.path.join(specDataDir, "data", specFName)) spec = oned.onedspec(wave, flux, mode="waveflux") if i % 100 == 0: print "@%d took %.2f s" % (i, time.time() - startTime) startTime = time.time() if kwargs.has_key("normrange"): normrange = kwargs["normrange"] normFac = np.mean(spec[slice(*normrange)].flux) spec.flux /= normFac if kwargs.has_key("smoothres") or kwargs.has_key("smoothrot"): if kwargs.has_key("wave"): tmpSpec = spec[float(kwargs["wave"].min()) : float(kwargs["wave"].max())] logDelta, logSpec = tmpSpec.interpolate_log() else: logDelta, logSpec = spec.interpolate_log() if kwargs.has_key("smoothres"): logSpec = logSpec.convolve_profile(kwargs["smoothres"], smallDelta=logDelta) if kwargs.has_key("smoothrot"): logSpec = logSpec.convolve_rotation(kwargs["smoothrot"], smallDelta=logDelta) spec = logSpec if kwargs.has_key("wave"): spec = spec.interpolate(kwargs["wave"]) else: spec = spec.interpolate(wave) specs.append(spec.flux) if kwargs.has_key("wave"): return kwargs["wave"], np.array(specs) else: return wave, np.array(specs)
def getSpec(self, *args): return oned.onedspec(self.wave, self(*args), mode='waveflux')
def getSpecs(specDataDir, fnames, config, **kwargs): #reading config waveFName = config.get('wave', 'wave') specDType = config.get('structure', 'datatype') specSize = config.getint('structure', 'specsize') specsize = config.getint('wave', 'islog') R = config.getfloat('params', 'r') if kwargs.has_key('smoothres'): if kwargs['smoothres'] > R: raise ValueError('requested resolution (R=%f) higher than' 'models intrinsic resolution (R=%f)' % (kwargs['smoothres'], R)) #Reading wave solution wave = np.fromfile(os.path.join(specDataDir, waveFName)) if kwargs.has_key('wave'): gridSize = len(fnames) * len(kwargs['wave'].tostring()) / 1024**2 else: gridSize = len(fnames) * specSize / 1024**2 print "Processing %d spectra" % len(fnames) print "Processing %.3f MB in to Memory." % gridSize specs = [] startTime = time.time() for i, specFName in enumerate(fnames): flux = np.fromfile(os.path.join(specDataDir, 'data', specFName)) spec = oned.onedspec(wave, flux, mode='waveflux') if i % 100 == 0: print "@%d took %.2f s" % (i, time.time() - startTime) startTime = time.time() if kwargs.has_key('normrange'): normrange = kwargs['normrange'] normFac = np.mean(spec[slice(*normrange)].flux) spec.flux /= normFac if kwargs.has_key('smoothres') or kwargs.has_key('smoothrot'): if kwargs.has_key('wave'): tmpSpec = spec[float(kwargs['wave'].min() ):float(kwargs['wave'].max())] logDelta, logSpec = tmpSpec.interpolate_log() else: logDelta, logSpec = spec.interpolate_log() if kwargs.has_key('smoothres'): logSpec = logSpec.convolve_profile(kwargs['smoothres'], smallDelta=logDelta) if kwargs.has_key('smoothrot'): logSpec = logSpec.convolve_rotation(kwargs['smoothrot'], smallDelta=logDelta) spec = logSpec if kwargs.has_key('wave'): spec = spec.interpolate(kwargs['wave']) else: spec = spec.interpolate(wave) specs.append(spec.flux) if kwargs.has_key('wave'): return kwargs['wave'], np.array(specs) else: return wave, np.array(specs)