def indiv_calc(ii,zs,options,njks,jks,nmks,mks,logpz): print zs[ii] out= numpy.empty((2,njks,nmks)) rc= rcmodel.rcmodel(Z=zs[ii],loggmin=1.8,loggmax='custom', band=options.band,basti=options.basti, imfmodel=options.imfmodel, expsfh=options.expsfh, parsec=options.parsec, stage=options.stage) for jj in range(njks): if zs[ii] > rcmodel.jkzcut(jks[jj],upper=True) \ or zs[ii] < rcmodel.jkzcut(jks[jj]): out[0,jj,:]= -numpy.finfo(numpy.dtype(numpy.float64)).max out[1,jj,:]= -numpy.finfo(numpy.dtype(numpy.float64)).max continue for kk in range(nmks): out[0,jj,kk]= logpz[ii]+rc(jks[jj],mks[kk])+numpy.log(-mks[kk]) out[1,jj,kk]= logpz[ii]+rc(jks[jj],mks[kk]) return out
def indiv_calc(ii,zs,options,njks,jks): print zs[ii] rc= rcmodel.rcmodel(Z=zs[ii],loggmin=1.8,loggmax=loggmax, band=options.band,basti=options.basti, imfmodel=options.imfmodel, expsfh=options.expsfh, parsec=options.parsec, eta=options.eta) out= numpy.empty(njks) for jj in range(njks): if options.type == 'mode': try: out[jj]= rc.mode(jks[jj]) except ValueError: out[jj]= numpy.nan elif options.type == 'sig': try: out[jj]= rc.sigmafwhm(jks[jj]) except ValueError: out[jj]= numpy.nan return out
def plot_mx_jkz(parser): options,args= parser.parse_args() rc= rcmodel.rcmodel(Z=options.Z,loggmin=1.8,loggmax=loggmax, basti=options.basti,band=options.band, parsec=options.parsec, expsfh=options.expsfh, imfmodel=options.imfmodel, eta=options.eta,afe=options.afe) #Calculate mode and hm njks= 101 jks= numpy.linspace(0.5,0.8,njks) modes= numpy.array([rc.mode(jk) for jk in jks]) hms= numpy.zeros((njks,2)) for ii in range(njks): try: minhm, maxhm= rc.sigmafwhm(jks[ii],straight=True) except ValueError: minhm, maxhm= numpy.nan, numpy.nan hms[ii,0]= minhm hms[ii,1]= maxhm #Now plot bovy_plot.bovy_print(text_fontsize=20., legend_fontsize=24., xtick_labelsize=18., ytick_labelsize=18., axes_labelsize=24.) rc.plot(nbins=101,conditional=True) bovy_plot.bovy_plot(jks,modes,'w-',lw=2.,overplot=True) bovy_plot.bovy_plot(jks,hms[:,0],'-',lw=2.,color='0.85',overplot=True) bovy_plot.bovy_plot(jks,hms[:,1],'-',lw=2.,color='0.85',overplot=True) #Overplot the cuts in J-Ks for this Z bovy_plot.bovy_plot([rcmodel.zjkcut(options.Z),rcmodel.zjkcut(options.Z)], [0.,-3.],'k--',lw=2.,overplot=True) bovy_plot.bovy_plot([rcmodel.zjkcut(options.Z,upper=True),rcmodel.zjkcut(options.Z,upper=True)], [0.,-3.],'k--',lw=2.,overplot=True) if options.Z < 0.01: zstr= r'$Z = %.3f$' % options.Z else: zstr= r'$Z = %.2f$' % options.Z if options.afe: bovy_plot.bovy_text(zstr+'\n'+r'$[\alpha/\mathrm{Fe}] = 0.4$', bottom_right=True,size=20.) else: bovy_plot.bovy_text(zstr, bottom_right=True,size=20.) if options.basti and options.Z < 0.01: pyplot.annotate(r'$\mathrm{BaSTI}\rightarrow$',(0.5,1.08), xycoords='axes fraction', horizontalalignment='center', verticalalignment='top',size=24.) #bovy_plot.bovy_text(r'$\mathrm{BaSTI}$',title=True,size=20.) elif options.parsec and options.Z < 0.01: pyplot.annotate(r'$\mathrm{PARSEC}\rightarrow$',(0.5,1.08), xycoords='axes fraction', horizontalalignment='center', verticalalignment='top',size=24.) #bovy_plot.bovy_text(r'$\mathrm{PARSEC}$',title=True,size=20.) elif options.Z < 0.01: pyplot.annotate(r'$\mathrm{Padova}\rightarrow$',(0.5,1.08), xycoords='axes fraction', horizontalalignment='center', verticalalignment='top',size=24.) #bovy_plot.bovy_text(r'$\mathrm{Padova}$',title=True,size=20.) bovy_plot.bovy_end_print(options.outfilename) return None
def plot_logg_jk_apokasc(parser): options,args= parser.parse_args() #Setup Zs if os.path.exists(args[0]): savefile= open(args[0],'rb') outhist= pickle.load(savefile) hists= pickle.load(savefile) edgess= pickle.load(savefile) data= pickle.load(savefile) savefile.close() else: zs= numpy.arange(0.0005,0.03005,0.0005) if _DEBUG: zs= numpy.arange(0.0005,0.03005,0.005) fehs= isodist.Z2FEH(zs,zsolar=0.017)#0.017 for APOGEE analysis zs= zs[numpy.fabs(fehs-options.feh) < 0.2] if _DEBUG: zs= [zs[numpy.fabs(fehs-options.feh) < 0.2][0]] fehs= isodist.Z2FEH(zs,zsolar=0.017) #Load the RC models for each feh individually rcms= [] hists= [] edgess= [] for z in zs: print z trc= rcmodel.rcmodel(Z=z,loggmin=1.,loggmax=3.5, band=options.band,basti=options.basti, imfmodel=options.imfmodel, parsec=options.parsec) rcms.append(trc) sample= numpy.vstack([trc._sample[:,0],trc._loggs[:,0]]).T weights= trc._weights hist, edges= numpy.histogramdd(sample,weights=weights,bins=31, range=[[0.5,0.8],[1.,3.5]]) hists.append(hist) edgess.append(edges) #Load APOKASC data data= apread.apokasc() indx= (data['KASC_RG_LOGG_SCALE_2'] > 1.)\ *(data['KASC_RG_LOGG_SCALE_2'] < 3.5)\ *(data['METALS'] > options.feh-0.2)\ *(data['METALS'] <= options.feh+0.2) print "Using %i APOKASC objects ..." % (numpy.sum(indx)) data= data[indx] ndata= numpy.sum(indx) #Stack predictions outhist= numpy.zeros_like(hists[0]) for ii in range(ndata): zindx= numpy.argmin(numpy.fabs(fehs-data['METALS'][ii])) outhist+= hists[zindx] save_pickles(args[0],outhist,hists,edgess,data) #Normalize each J-K for ii in range(len(outhist[:,0])): outhist[ii,:]/= numpy.nanmax(outhist[ii,:])/numpy.nanmax(outhist) rev= copy.copy(outhist[ii,::-1]) #reverse, but in one go does not always work outhist[ii,:]= rev if True: #Reload apokasc data data= apread.apokasc() indx= (data['KASC_RG_LOGG_SCALE_2'] > 1.)\ *(data['KASC_RG_LOGG_SCALE_2'] < 3.5)\ *(data['METALS'] > options.feh-0.2)\ *(data['METALS'] <= options.feh+0.2) data= data[indx] #Plot everything bovy_plot.bovy_print() bovy_plot.bovy_dens2d(outhist.T,origin='lower',cmap='gist_yarg', xrange=[edgess[0][0][0],edgess[0][0][-1]], yrange=[edgess[0][1][-1],edgess[0][1][0]], aspect=(edgess[0][0][-1]-edgess[0][0][0])/float(edgess[0][1][-1]-edgess[0][1][0]), xlabel=r'$(J-K_s)_0\ [\mathrm{mag}]$', ylabel=r'$\mathrm{Seismic}\ \log g$', shrink=0.78, interpolation='nearest') #Overplot APOKASC data noseismo= data['SEISMO EVOL'] == 'UNKNOWN' if numpy.sum(noseismo) > 0: bovy_plot.bovy_plot(data['J0'][noseismo]-data['K0'][noseismo], data['KASC_RG_LOGG_SCALE_2'][noseismo],'bo', overplot=True, mec='none',ms=3.) clumpseismo= data['SEISMO EVOL'] == 'CLUMP' if numpy.sum(clumpseismo) > 0: bovy_plot.bovy_plot(data['J0'][clumpseismo]-data['K0'][clumpseismo], data['KASC_RG_LOGG_SCALE_2'][clumpseismo],'yo', overplot=True, mec='none',ms=4.5) noclumpseismo= (data['SEISMO EVOL'] == 'RGB') \ + (data['SEISMO EVOL'] == 'DWARF/SUBGIANT') if numpy.sum(noclumpseismo) > 0: bovy_plot.bovy_plot(data['J0'][noclumpseismo]-data['K0'][noclumpseismo], data['KASC_RG_LOGG_SCALE_2'][noclumpseismo],'ro', overplot=True, mec='none',ms=3.) bovy_plot.bovy_text(r'$%.1f < [\mathrm{M/H}] \leq %.1f$' % (options.feh-0.2,options.feh+0.2), top_left=True,size=14.) bovy_plot.bovy_end_print(options.outfilename) return None
def _calc_one(z, options, nages, lages, dlages): print z if options.allapogee or options.redapogee: rc = rcmodel.rcmodel( Z=z, loggmax=3.5, band=options.band, basti=options.basti, imfmodel=options.imfmodel, parsec=options.parsec, eta=options.eta, ) else: rc = rcmodel.rcmodel( Z=z, loggmin=1.8, loggmax="custom", band=options.band, basti=options.basti, imfmodel=options.imfmodel, parsec=options.parsec, eta=options.eta, ) out = numpy.zeros(nages) for jj in range(nages): jk = rc._jks aindx = (rc._lages <= lages[jj] + dlages) * (rc._lages > lages[jj] - dlages) if options.allapogee: aindx *= jk > 0.5 elif options.redapogee: aindx *= jk > 0.8 else: rcd = rcmodel.rcdist("../../rcdist-apogee/data/rcmodel_mode_jkz_ks_parsec_newlogg.sav") predH = numpy.array([rcd(j, z) for j in jk]) predH = numpy.reshape(predH, len(jk)) aindx *= ( (jk < 0.8) * (jk > 0.5) * (z <= rcmodel.jkzcut(jk, upper=True)) * (z >= rcmodel.jkzcut(jk)) * (z <= 0.06) * (rc._sample[:, 1] > (predH - 0.4)) * (rc._sample[:, 1] < (predH + 0.4)) * (rc._sample[:, 1] > -3.0) * (rc._loggs[:, 0] <= 3.5) ) if options.type == "omega": try: out[jj] = numpy.mean(rc._massweights[aindx]) except ValueError: out[jj] = numpy.nan elif options.type == "numfrac": try: out[jj] = numpy.mean(rc._weights[aindx]) except ValueError: out[jj] = numpy.nan elif options.type == "mass": try: out[jj] = numpy.sum(rc._masses[aindx] * rc._weights[aindx]) / numpy.sum(rc._weights[aindx]) except ValueError: out[jj] = numpy.nan return out
def plot_Z_jk_apokasc(parser): options, args = parser.parse_args() # Setup Zs if os.path.exists(args[0]): savefile = open(args[0], "rb") outhist = pickle.load(savefile) hists = pickle.load(savefile) edgess = pickle.load(savefile) data = pickle.load(savefile) savefile.close() else: if _PREDICT: zs = numpy.arange(0.0005, 0.06005, 0.0005) if _DEBUG: zs = numpy.arange(0.0005, 0.06005, 0.005) # Load the RC models for each feh individually rcms = [] hists = [] edgess = [] for z in zs: print z trc = rcmodel.rcmodel( Z=z, loggmin=1.8, loggmax=2.8, band=options.band, basti=options.basti, imfmodel=options.imfmodel, parsec=options.parsec, ) rcms.append(trc) sample = numpy.vstack([trc._sample[:, 0], z * numpy.ones(trc._sample.shape[0])]).T weights = trc._weights hist, edges = numpy.histogramdd( sample, weights=weights, bins=12, range=[[0.5, 0.8], [0.0, 0.06]] # 12*(10-_DEBUG*9), ) hists.append(hist) edgess.append(edges) # Load APOKASC data data = apread.apokasc() indx = (data["KASC_RG_LOGG_SCALE_2"] > 2.25) * (data["KASC_RG_LOGG_SCALE_2"] < 2.65) print "Using %i APOKASC objects ..." % (numpy.sum(indx)) data = data[indx] if _PREDICT: # Stack predictions outhist = numpy.zeros_like(hists[0]) for ii in range(len(hists)): outhist += hists[ii] save_pickles(args[0], outhist, hists, edgess, data) if _PREDICT: # Normalize each color pass # for ii in range(len(outhist[:,0])): # outhist[ii,:]/= numpy.nanmax(outhist[ii,:])/numpy.nanmax(outhist) # for ii in range(len(outhist[0,:])): # outhist[:,ii]/= numpy.nanmax(outhist[:,ii])/numpy.nanmax(outhist) # Plot everything bovy_plot.bovy_print() if _PREDICT: bovy_plot.bovy_dens2d( outhist.T, origin="lower", cmap="gist_yarg", xrange=[edgess[0][0][0], edgess[0][0][-1]], yrange=[edgess[0][1][0], edgess[0][1][-1]], aspect=(edgess[0][0][-1] - edgess[0][0][0]) / float(edgess[0][1][-1] - edgess[0][1][0]), xlabel=r"$(J-K_s)_0\ [\mathrm{mag}]$", ylabel=r"$Z$", shrink=0.78, interpolation="nearest", ) # Overplot APOKASC data # Load APOKASC data data = apread.apokasc() indx = (data["KASC_RG_LOGG_SCALE_2"] > 1.8) * (data["KASC_RG_LOGG_SCALE_2"] < 2.8) print "Using %i APOKASC objects ..." % (numpy.sum(indx)) data = data[indx] bovy_plot.bovy_plot( data["J0"] - data["K0"], options.zsolar * 10.0 ** data["METALS"], c=data["KASC_RG_LOGG_SCALE_2"] - 2.45, s=20.0, edgecolors="none", scatter=True, colorbar=True, overplot=True, ) # mec='none',ms=3.) # Overplot cuts jks = numpy.linspace(0.5, 0.8, 201) bovy_plot.bovy_plot(jks, rcmodel.jkzcut(jks), "k--", lw=2.0, overplot=True) bovy_plot.bovy_plot(jks, rcmodel.jkzcut(jks, upper=True), "k--", lw=2.0, overplot=True) bovy_plot.bovy_end_print(options.outfilename) return None