Exemplo n.º 1
0
def star_config(koi,
                bands=['g', 'r', 'i', 'z', 'J', 'H', 'K'],
                unc=dict(g=0.05,
                         r=0.05,
                         i=0.05,
                         z=0.05,
                         J=0.02,
                         H=0.02,
                         K=0.02),
                **kwargs):
    """returns star config object for given KOI
    """
    folder = os.path.join(KOI_FPPDIR, ku.koiname(koi))
    if not os.path.exists(folder):
        os.makedirs(folder)

    config = ConfigObj(os.path.join(folder, 'star.ini'))

    koi = ku.koiname(koi)

    maxAV = koi_maxAV(koi)
    config['maxAV'] = maxAV

    mags = ku.KICmags(koi)
    for band in bands:
        if not np.isnan(mags[band]):
            config[band] = (mags[band], unc[band])
    config['Kepler'] = mags['Kepler']

    kepid = KOIDATA.ix[koi, 'kepid']
    try:
        m = re.match('SPE', kicu.DATA.ix[kepid, 'teff_prov'])
    except KeyError:
        raise MissingStellarError('{} not in stellar table?'.format(kepid))
    if m:
        teff, e_teff = (kicu.DATA.ix[kepid, 'teff'], kicu.DATA.ix[kepid,
                                                                  'teff_err1'])
        if not any(np.isnan([teff, e_teff])):
            config['Teff'] = (teff, e_teff)

        feh, e_feh = (kicu.DATA.ix[kepid, 'feh'], kicu.DATA.ix[kepid,
                                                               'feh_err1'])
        if not any(np.isnan([feh, e_feh])):
            config['feh'] = (feh, e_feh)
        try:
            logg, e_logg = (kicu.DATA.ix[kepid,
                                         'logg'], kicu.DATA.ix[kepid,
                                                               'logg_err1'])
            if not any(np.isnan([logg, e_logg])):
                config['logg'] = (logg, e_logg)
        except:
            pass

    for kw, val in kwargs.items():
        config[kw] = val

    return config
Exemplo n.º 2
0
def star_config(koi, bands=['g','r','i','z','J','H','K'],
                unc=dict(g=0.05, r=0.05, i=0.05, z=0.05,
                         J=0.02, H=0.02, K=0.02), **kwargs):

    """returns star config object for given KOI
    """
    folder = os.path.join(KOI_FPPDIR, ku.koiname(koi))
    if not os.path.exists(folder):
        os.makedirs(folder)

    config = ConfigObj(os.path.join(folder,'star.ini'))

    koi = ku.koiname(koi)

    maxAV = koi_maxAV(koi)
    config['maxAV'] = maxAV

    mags = ku.KICmags(koi)
    for band in bands:
        if not np.isnan(mags[band]):
            config[band] = (mags[band], unc[band])
    config['Kepler'] = mags['Kepler']

    kepid = KOIDATA.ix[koi,'kepid']

    if use_property(kepid, 'teff'):
        teff, e_teff = (kicu.DATA.ix[kepid, 'teff'],
                          kicu.DATA.ix[kepid, 'teff_err1'])
        if not any(np.isnan([teff, e_teff])):
            config['Teff'] = (teff, e_teff)

    if use_property(kepid, 'logg'):
        logg, e_logg = (kicu.DATA.ix[kepid, 'logg'],
                          kicu.DATA.ix[kepid, 'logg_err1'])
        if not any(np.isnan([logg, e_logg])):
            config['logg'] = (logg, e_logg)

    if use_property(kepid, 'feh'):
        feh, e_feh = (kicu.DATA.ix[kepid, 'feh'],
                          kicu.DATA.ix[kepid, 'feh_err1'])
        if not any(np.isnan([feh, e_feh])):
            config['feh'] = (feh, e_feh)

    for kw,val in kwargs.items():
        config[kw] = val

    return config
Exemplo n.º 3
0
    def __init__(self,
                 koi,
                 recalc=False,
                 use_JRowe=True,
                 trsig_kws=None,
                 tag=None,
                 starmodel_mcmc_kws=None,
                 **kwargs):

        koi = koiname(koi)

        #if saved popset exists, load
        folder = os.path.join(KOI_FPPDIR, koi)
        if tag is not None:
            folder += '_{}'.format(tag)

        if not os.path.exists(folder):
            os.makedirs(folder)

        if trsig_kws is None:
            trsig_kws = {}

        #first check if pickled signal is there to be loaded
        trsigfile = os.path.join(folder, 'trsig.pkl')
        if os.path.exists(trsigfile):
            trsig = pickle.load(open(trsigfile, 'rb'))
        else:
            if use_JRowe:
                trsig = JRowe_KeplerTransitSignal(koi, **trsig_kws)
            else:
                trsig = KeplerTransitSignal(koi, **trsig_kws)

        popsetfile = os.path.join(folder, 'popset.h5')
        if os.path.exists(popsetfile) and not recalc:
            popset = PopulationSet(popsetfile, **kwargs)

        else:
            koinum = koiname(koi, koinum=True)
            kepid = ku.DATA.ix[koi, 'kepid']

            if 'mass' not in kwargs:
                kwargs['mass'] = koi_propdist(koi, 'mass')
            if 'radius' not in kwargs:
                kwargs['radius'] = koi_propdist(koi, 'radius')
            if 'feh' not in kwargs:
                kwargs['feh'] = koi_propdist(koi, 'feh')
            if 'age' not in kwargs:
                try:
                    kwargs['age'] = koi_propdist(koi, 'age')
                except:
                    kwargs['age'] = (9.7, 0.1)  #default age
            if 'Teff' not in kwargs:
                kwargs['Teff'] = kicu.DATA.ix[kepid, 'teff']
            if 'logg' not in kwargs:
                kwargs['logg'] = kicu.DATA.ix[kepid, 'logg']
            if 'rprs' not in kwargs:
                if use_JRowe:
                    kwargs['rprs'] = trsig.rowefit.ix['RD1', 'val']
                else:
                    kwargs['rprs'] = ku.DATA.ix[koi, 'koi_ror']

            #if stellar properties are determined spectroscopically,
            # fit stellar model
            if 'starmodel' not in kwargs:
                if re.match('SPE', kicu.DATA.ix[kepid, 'teff_prov']):
                    logging.info(
                        'Spectroscopically determined stellar properties.')
                    #first, see if there already is a starmodel to load

                    #fit star model
                    Teff = kicu.DATA.ix[kepid, 'teff']
                    e_Teff = kicu.DATA.ix[kepid, 'teff_err1']
                    logg = kicu.DATA.ix[kepid, 'logg']
                    e_logg = kicu.DATA.ix[kepid, 'logg_err1']
                    feh = kicu.DATA.ix[kepid, 'feh']
                    e_feh = kicu.DATA.ix[kepid, 'feh_err1']
                    logging.info(
                        'fitting StarModel (Teff=({},{}), logg=({},{}), feh=({},{}))...'
                        .format(Teff, e_Teff, logg, e_logg, feh, e_feh))

                    dar = Dartmouth_Isochrone()
                    starmodel = StarModel(dar,
                                          Teff=(Teff, e_Teff),
                                          logg=(logg, e_logg),
                                          feh=(feh, e_feh))
                    if starmodel_mcmc_kws is None:
                        starmodel_mcmc_kws = {}
                    starmodel.fit_mcmc(**starmodel_mcmc_kws)
                    logging.info('Done.')
                    kwargs['starmodel'] = starmodel

            if 'mags' not in kwargs:
                kwargs['mags'] = ku.KICmags(koi)
            if 'ra' not in kwargs:
                kwargs['ra'], kwargs['dec'] = ku.radec(koi)
            if 'period' not in kwargs:
                kwargs['period'] = ku.DATA.ix[koi, 'koi_period']

            if 'pl_kws' not in kwargs:
                kwargs['pl_kws'] = {}

            if 'fp_specific' not in kwargs['pl_kws']:
                rp = kwargs['radius'].mu * kwargs['rprs'] * RSUN / REARTH
                kwargs['pl_kws']['fp_specific'] = fp_fressin(rp)

            #trilegal_filename = os.path.join(folder,'starfield.h5')
            trilegal_filename = kepler_starfield_file(koi)
            popset = PopulationSet(trilegal_filename=trilegal_filename,
                                   **kwargs)
            #popset.save_hdf('{}/popset.h5'.format(folder), overwrite=True)

        lhoodcachefile = os.path.join(folder, 'lhoodcache.dat')
        self.koi = koi
        FPPCalculation.__init__(self, trsig, popset, folder=folder)
        self.save()
        self.apply_default_constraints()