Exemple #1
0
    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')
Exemple #2
0
    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"
        )
Exemple #3
0
    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)
Exemple #6
0
 def getSpec(self, *args):
     return oned.onedspec(self.wave, self(*args), mode="waveflux")
Exemple #7
0
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)
Exemple #8
0
 def getSpec(self, *args):
     return oned.onedspec(self.wave, self(*args), mode='waveflux')
Exemple #9
0
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.interpGrid(args), mode='waveflux')