Beispiel #1
0
 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 
     
     
Beispiel #2
0
    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
Beispiel #3
0
    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'])
Beispiel #4
0
 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'])