示例#1
0
def test_compare_starmodels(props=props):
    m1 = StarModel(mist, **props)
    m2 = BasicStarModel(mist, **props)

    # Ensure priors are identical
    for k in ["mass", "feh", "age", "distance", "AV", "eep"]:
        m2.set_prior(**{k: m1._priors[k]})

    pars = [300, 9.8, 0.01, 100, 0.1]
    assert np.isclose(m1.lnlike(pars), m2.lnlike(pars))
    assert np.isclose(m1.lnprior(pars), m2.lnprior(pars))
    assert np.isclose(m1.lnpost(pars), m2.lnpost(pars))

    m1_bin = StarModel(mist, **props, N=2)
    m2_bin = BasicStarModel(mist, **props, N=2)

    # Ensure priors are identical
    for k in ["mass", "feh", "age", "distance", "AV", "eep"]:
        m2_bin.set_prior(**{k: m1_bin._priors[k]})

    pars = [300, 280, 9.8, 0.01, 100, 0.1]
    assert np.isclose(m1_bin.lnlike(pars), m2_bin.lnlike(pars))
    assert np.isclose(m1_bin.lnprior(pars), m2_bin.lnprior(pars))
    assert np.isclose(m1_bin.lnpost(pars), m2_bin.lnpost(pars))

    m1_trip = StarModel(mist, **props, N=3)
    m2_trip = BasicStarModel(mist, **props, N=3)

    # Ensure priors are identical
    for k in ["mass", "feh", "age", "distance", "AV", "eep"]:
        m2_trip.set_prior(**{k: m1_trip._priors[k]})

    pars = [300, 280, 260.0, 9.8, 0.01, 100, 0.1]
    assert np.isclose(m1_trip.lnlike(pars), m2_trip.lnlike(pars))
    assert np.isclose(m1_trip.lnprior(pars), m2_trip.lnprior(pars))
    assert np.isclose(m1_trip.lnpost(pars), m2_trip.lnpost(pars))
示例#2
0
文件: kepler.py 项目: lavjams/VESPA
    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()