def getModel(self,teff,logg): """ Return the model atmosphere for given effective temperature and log g. Not yet scaled to the distance! Units returned are (micron,Jy) @param teff: the stellar effective temperature @type teff: float @param logg: the log g value @type logg: float @return: The model spectrum in (micron,Jy) @rtype: recarray """ c = 2.99792458e18 #in angstrom/s if self.modelgrid is None: self.readModelGrid() mg = self.modelgrid #- Find the closest temperature in the grid teff_prox = mg['TEFF'][argmin(abs(mg['TEFF']-teff))] #- Select all models with that temperature mgsel = mg[mg['TEFF']==teff_prox] #- Select the closest log g in the selection logg_prox = mgsel['LOGG'][argmin(abs(mgsel['LOGG']-logg))] #- Get the index of the model closest to teff and logg imodel = mgsel[mgsel['LOGG']==logg_prox]['INDEX'][0] self.teff_actual = teff_prox self.logg_actual = logg_prox wave = self.ff[imodel].data.field('wavelength') flux = self.ff[imodel].data.field('flux') if self.header['FLXUNIT'] == 'erg/s/cm2/A': #- Go to erg/s/cm2/Hz, lFl = nFn, then to Jy (factor 10**(23)) flux = flux * wave**2 / c * 10**(23) else: raise Error('Flux unit unknown in atmosphere model fits file.') if self.header['WAVUNIT'] == 'angstrom': wave = wave * 10**(-4) else: raise Error('Wavelength unit unknown in atmosphere model fits file.') model = rec.fromarrays([wave,flux],names=['wave','flux']) return model
def getModel(self, teff, logg): """ Return the model atmosphere for given effective temperature and log g. Not yet scaled to the distance! Units returned are (micron,Jy) @param teff: the stellar effective temperature @type teff: float @param logg: the log g value @type logg: float @return: The model spectrum in (micron,Jy) @rtype: recarray """ c = 2.99792458e18 #in angstrom/s if self.modelgrid is None: self.readModelGrid() mg = self.modelgrid #- Find the closest temperature in the grid teff_prox = mg['TEFF'][argmin(abs(mg['TEFF'] - teff))] #- Select all models with that temperature mgsel = mg[mg['TEFF'] == teff_prox] #- Select the closest log g in the selection logg_prox = mgsel['LOGG'][argmin(abs(mgsel['LOGG'] - logg))] #- Get the index of the model closest to teff and logg imodel = mgsel[mgsel['LOGG'] == logg_prox]['INDEX'][0] self.teff_actual = teff_prox self.logg_actual = logg_prox wave = self.ff[imodel].data.field('wavelength') flux = self.ff[imodel].data.field('flux') if self.header['FLXUNIT'] == 'erg/s/cm2/A': #- Go to erg/s/cm2/Hz, lFl = nFn, then to Jy (factor 10**(23)) flux = flux * wave**2 / c * 10**(23) else: raise Error('Flux unit unknown in atmosphere model fits file.') if self.header['WAVUNIT'] == 'angstrom': wave = wave * 10**(-4) else: raise Error( 'Wavelength unit unknown in atmosphere model fits file.') model = rec.fromarrays([wave, flux], names=['wave', 'flux']) return model
def readModelGrid(self): """ Read the model atmosphere fits file. """ self.ff = pyfits.open(self.filepath) self.header = self.ff[0].header teffs = array( [self.ff[i].header['TEFF'] for i in xrange(1, len(self.ff))]) loggs = array( [self.ff[i].header['LOGG'] for i in xrange(1, len(self.ff))]) self.modelgrid = rec.fromarrays([array(range(1,len(self.ff))),teffs,\ loggs],\ names=['INDEX','TEFF','LOGG'])
def readModelGrid(self): """ Read the model atmosphere fits file. """ self.ff = pyfits.open(self.filepath) self.header = self.ff[0].header teffs = array([self.ff[i].header['TEFF'] for i in xrange(1,len(self.ff))]) loggs = array([self.ff[i].header['LOGG'] for i in xrange(1,len(self.ff))]) self.modelgrid = rec.fromarrays([array(range(1,len(self.ff))),teffs,\ loggs],\ names=['INDEX','TEFF','LOGG'])