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
(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=",")
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
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
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