Esempio n. 1
0
def fit_planets(k,sname,initphases,vmag,rplanets,mplanets,planetids,veloff,outfile,writefit=False,veldir="../VelsFiles",outdir="../PlanetFitting"):
    
    fn = sname + ".vels"
    indata = fit_TESS_APF.readin_velsfile(os.path.join(veldir,fn))

    m = SystPy.matrix_to_array(SystPy.getResidualMatrix(k))
    txt = fit_TESS_APF.fit_dates_vels(m[:,0],m[:,1],m[:,2])
    otxt = "%s %f" % (txt, k.getRMS())
    print (otxt)

    if writefit:
        outname = "%s.fit" % (sname)
        outname = os.path.join(outdir,outname)
        outfp = open(outname,"w")
        outfp.write(otxt+"\n")

    kl = SystPy.MCMC(k,nChains = 4, rStop = 1.05)

    stds = kl.getElementsStats(SystPy.K_STAT_STDDEV)
    meds = kl.getElementsStats(SystPy.K_STAT_MEDIAN)
    mads = 1.4826*kl.getElementsStats(SystPy.K_STAT_MAD)    
    for i in range(0,len(initphases)):
        fperiod = k.getElement(i+1,SystPy.K_PER)
        phases = getpriority.compute_currentphase(indata['jd'],fperiod,initphases[i])
        

        K = meds[i+1,SystPy.K_SEMIAMP]
        err_K = mads[i+1,SystPy.K_SEMIAMP]

        ostr = "%s %f %f %f %.4g %.4g %.4g %d\n" % (sname,fperiod,K,err_K,k.getElement(i+1,SystPy.K_MASS)*317.8281,mads[i+1,SystPy.K_MASS]*317.8281,rplanets[i],len(phases))
        # period (days) K (m/s) err_K (m/s) planet mass (M_earth) error (M_earth) R (R_earth) #vs #phase1 #phase2 #phase3 #phase4 #phase5
        outfile.write(ostr)
        if writefit:
            outfp.write(ostr)


    if writefit:
        outfp.close()
    return
Esempio n. 2
0
(options, args) = parser.parse_args()

whole_filelist = glob('../SimFiles/*.sim')

googledex = ascii.read(options.infile)

phase_edges = [
    getpriority.EDGE1, getpriority.EDGE2, getpriority.EDGE3, getpriority.EDGE4,
    getpriority.EDGE5
]

for fn in whole_filelist:
    m = re.search("(TESSAPF\d+)\.sim", fn)
    if m:
        objn = m.group(1)
        match = googledex['starname'] == objn
        simvals = ascii.read(fn, names=["JD", "i2", "unc", "dev"])
        phases = getpriority.compute_currentphase(
            simvals['JD'], googledex['foldperiod'][match],
            googledex['initialphase'][match])
        dailydates, dailyphases = bin_phase_dates(simvals['JD'], phases)
        print objn, dailydates, dailyphases
        binnum = np.digitize(dailyphases, phase_edges)
        for n in range(0, 5):
            nobs = len(binnum[binnum == n])
            strn = "phase%dbin" % (n)
            googledex[strn][match] = nobs

ascii.write(googledex, options.infile, delimiter=",")
Esempio n. 3
0
def plot_planets(k,sname,initphases,vmag,rplanets,mplanets,planetids,veloff,writefit=False,veldir="../VelsFiles",outdir="../PlanetFitting"):
    
    fn = sname + ".vels"
    indata = readin_velsfile(os.path.join(veldir,fn))

    m = SystPy.matrix_to_array(SystPy.getResidualMatrix(k))
    txt = fit_dates_vels(m[:,0],m[:,1],m[:,2])
    otxt = "%s %f" % (txt, k.getRMS())
    print (otxt)

    if writefit:
        outname = "%s.fit" % (sname)
        outname = os.path.join(outdir,outname)
        outfp = open(outname,"w")
        outfp.write(otxt+"\n")

    kl = SystPy.MCMC(k,nChains = 4, rStop = 1.05)

    stds = kl.getElementsStats(SystPy.K_STAT_STDDEV)
    meds = kl.getElementsStats(SystPy.K_STAT_MEDIAN)
    mads = 1.4826*kl.getElementsStats(SystPy.K_STAT_MAD)    
    for i in range(0,len(initphases)):
        fperiod = k.getElement(i+1,SystPy.K_PER)
        phases = getpriority.compute_currentphase(indata['jd'],fperiod,initphases[i])
        daterange=np.linspace(np.min(indata['jd']),np.min(indata['jd'])+fperiod,num=200)
        plotting_phases=getpriority.compute_currentphase(daterange,fperiod,initphases[i])
        plotting_phases = plotting_phases[(plotting_phases > 0) & (plotting_phases < 1)]
        plotting_phases = np.sort(plotting_phases)
        
        plt.errorbar(phases,indata['velocity'],yerr=indata['int unc'],fmt='bo')
        
        plt.xlabel('Phases',fontsize=14)
        plt.ylabel('Velocity (m s$^{-1}$)',fontsize=14)
        plt.title('Phase folded velocities for ' + sname)

        K = meds[i+1,SystPy.K_SEMIAMP] 
        err_K = mads[i+1,SystPy.K_SEMIAMP]
        M = meds[i+1,SystPy.K_MASS] 
        err_M = mads[i+1,SystPy.K_MASS]
        f=plotting_phases*2.*sc.pi
        pvels=(np.cos(f+OMEGA) + ECC*np.cos(OMEGA))
        plt.plot(plotting_phases,K*pvels + meds[i+1,SystPy.K_P_DATA1],'k-')
        top = K*pvels+err_K + meds[i+1,SystPy.K_P_DATA1]
        bot = K*pvels-err_K + meds[i+1,SystPy.K_P_DATA1]
        plt.fill_between(plotting_phases,bot,top,color='blue',alpha=0.2)

        ylims = plt.ylim()
        plt.xlim(0,1)
        xs = np.asarray([getpriority.EDGE1,getpriority.EDGE2])
        plt.fill_between(xs,ylims[0],ylims[1],facecolor='grey',alpha=0.2)
        xs = np.asarray([getpriority.EDGE3,getpriority.EDGE4])
        plt.fill_between(xs,ylims[0],ylims[1],facecolor='grey',alpha=0.2)
        pstr= "Period %.2f days M=%.2f M$_{sun}$ V = %.2f mag" % (fperiod,k.getElement(0,1),vmag[i])
        plt.text(0.37,ylims[1]*0.9,pstr,va='bottom')
        pstr= "$M=%.2g \pm %.2g\ M_J$"% (M,err_M)
        plt.text(0.37,ylims[1]*0.8,pstr,va='bottom')        
        pstr="$(K = %.2f \pm %.2f \ m\ s^{-1})$" %(K,err_K)
        plt.text(0.37,ylims[1]*0.7,pstr,va='bottom')
        pstr= "$\sigma$=%.2f m s$^{-1}$ $\mu$=%.2f deg" % (k.getRms(),k.getElement(i+1,SystPy.K_MA))
        plt.text(0.37,ylims[1]*0.6,pstr,va='bottom')

        binedges = [getpriority.EDGE1,getpriority.EDGE2,getpriority.EDGE3,getpriority.EDGE4,getpriority.EDGE5]
        phasebins = np.digitize(phases,binedges,right=True)
        ninbins = []
        for nbin in range(0,len(binedges)):
            cpb = phasebins[phasebins == nbin]
            ninbins.append(len(cpb))

        figname = "%s_planet%d_PhasedVelocities.pdf" % (sname,i+1)
        figname = os.path.join(outdir,figname)
        plt.savefig(figname, bbox_inches='tight')
        plt.close()
        if writefit:
            ostr = "%f %f %f %.4g %.4g %.4g %d" % (fperiod,K,err_K,M*317.8281,err_M*317.8281,rplanets[i],len(phases))
            # period (days) K (m/s) err_K (m/s) planet mass (M_earth) error (M_earth) R (R_earth) #vs #phase1 #phase2 #phase3 #phase4 #phase5
            bstr = ""
            for i in range(0,len(ninbins)):
                bstr += " %d" % ninbins[i]
            bstr += "\n"
            outfp.write(ostr)
            outfp.write(bstr)

    kernelname = "%s" % (sname)
    kernelname = os.path.join(outdir,kernelname)
    k.save(kernelname)
    if writefit:
        outfp.close()
    return
Esempio n. 4
0
def update_local_googledex(time,
                           googledex_file="newgoogledex.csv",
                           observed_file="observed_targets"):
    """
        Update the local copy of the googledex with the last observed star time.
        update_local_googledex(time,googledex_file="googledex.dat", observed_file="observed_targets")

        opens googledex_file and inputs date of last observation from observed_file
        in principle can use timestamps as well as scriptobs uth and utm values
    """
    names, times = getObserved(observed_file)

    phase_edges = [
        getpriority.EDGE1, getpriority.EDGE2, getpriority.EDGE3,
        getpriority.EDGE4, getpriority.EDGE5
    ]

    try:
        full_codex = ascii.read(googledex_file)
    except IOError:
        apflog("googledex file did not exist, so can't be updated", echo=True)
        return names, times

    if type(time) != datetime:
        time = datetime.utcnow()

    if len(names):
        name = names[0]
        # We have observed this star, so lets update the lastobs / phasebins
        otime = times[names.index(name)]
        if isinstance(otime, float):
            t = datetime.fromtimestamp(otime)
        else:
            ohr, omin = otime
        t = datetime(time.year, time.month, time.day, ohr, omin)

        jd = float(ephem.julian_date(t))
        sidx, = np.where(full_codex['starname'] == name)
        full_codex['lastobs'][sidx] = jd
        if full_codex['initialphase'][sidx] > 0:
            phases = getpriority.compute_currentphase(
                jd, full_codex['foldperiod'][sidx],
                full_codex['initialphase'][sidx])
            binnedphase = np.average(phases)
            try:
                length = len(binnedphase)
                binnum = np.digitize(binnedphase, phase_edges)
            except:
                binnum = np.digitize([binnedphase], phase_edges)
            if binnum > 3:
                binnum = 0
            binname = "phase%dbin" % (binnum + 1)

            full_codex[binname][sidx] += 1
            apflog("Updating local googledex star %s phase bin %s to %d" %
                   (name, binname, int(full_codex[binname][sidx])),
                   echo=True)

        ascii.write(full_codex, googledex_file, delimiter=",")

    return names, times
Esempio n. 5
0
def mcmc_planets(k,
                 sname,
                 TESSAPFdata,
                 indices,
                 veloff,
                 writefit=False,
                 veldir="../VelsFiles",
                 outdir="../PlanetFitting"):

    initphases = TESSAPFdata['phase'][indices]
    vmag = TESSAPFdata['vmag'][indices]
    rplanets = TESSAPFdata['rplanet'][indices]
    mplanets = TESSAPFdata['true_mass'][indices]
    planetids = TESSAPFdata['Index'][indices]

    fn = sname + ".vels"
    indata = readin_velsfile(os.path.join(veldir, fn))

    m = SystPy.matrix_to_array(SystPy.getResidualMatrix(k))
    txt = fit_dates_vels(m[:, 0], m[:, 1], m[:, 2])
    otxt = "%s %f" % (txt, k.getRMS())

    if writefit:
        outname = "%s_mcmc.fit" % (sname)
        outname = os.path.join(outdir, outname)
        outfp = open(outname, "w")
        outfp.write(otxt + "\n")

    kl = SystPy.MCMC(k, nChains=4, rStop=1.05)
    bsname = os.path.join(outdir, sname + ".kl")
    SystPy.KLSave(kl, bsname)
    stds = kl.getElementsStats(SystPy.K_STAT_STDDEV)
    meds = kl.getElementsStats(SystPy.K_STAT_MEDIAN)
    mads = 1.4826 * kl.getElementsStats(SystPy.K_STAT_MAD)
    for i in range(0, len(initphases)):
        fperiod = k.getElement(i + 1, SystPy.K_PER)
        phases = getpriority.compute_currentphase(indata['jd'], fperiod,
                                                  initphases[i])

        K = meds[i + 1, SystPy.K_SEMIAMP]
        err_K = mads[i + 1, SystPy.K_SEMIAMP]

        binedges = [
            getpriority.EDGE1, getpriority.EDGE2, getpriority.EDGE3,
            getpriority.EDGE4, getpriority.EDGE5
        ]
        phasebins = np.digitize(phases, binedges, right=True)
        ninbins = []
        for nbin in range(0, len(binedges)):
            cpb = phasebins[phasebins == nbin]
            ninbins.append(len(cpb))

        if writefit:
            ostr = "%f %f %f %.4g %.4g %.4g %d" % (
                fperiod, K, err_K, k.getElement(i + 1, SystPy.K_MASS) *
                317.8281, mads[i + 1, SystPy.K_MASS] * 317.8281, rplanets[i],
                len(phases))
            # period (days) K (m/s) err_K (m/s) planet mass (M_earth) error (M_earth) R (R_earth) #vs #phase1 #phase2 #phase3 #phase4 #phase5
            bstr = ""
            for i in range(0, len(ninbins)):
                bstr += " %d" % ninbins[i]
            bstr += "\n"
            outfp.write(ostr)
            outfp.write(bstr)


#    kernelname = "%s" % (sname)
#    kernelname = os.path.join(outdir,kernelname)
#    k.save(kernelname)
    if writefit:
        outfp.close()
    return