def plotPriorSurf(plotfilename): #Calculate the surface density profile for each trial potential, then plot the range if '.png' in plotfilename: savefilename= plotfilename.replace('.png','.sav') elif '.ps' in plotfilename: savefilename= plotfilename.replace('.ps','.sav') if not os.path.exists(savefilename): options= setup_options(None) options.potential= 'dpdiskplhalofixbulgeflatwgasalt' options.fitdvt= False rs= numpy.linspace(4.2,9.8,101) rds= numpy.linspace(2.,3.4,8) fhs= numpy.linspace(0.,1.,16) surfz= numpy.zeros((len(rs),len(rds)*len(fhs)))+numpy.nan ro= 1. vo= 230./220. dlnvcdlnr= 0. zh= 400. for jj in range(len(rds)): for kk in range(len(fhs)): #Setup potential to calculate stuff potparams= numpy.array([numpy.log(rds[jj]/8.),vo,numpy.log(zh/8000.),fhs[kk],dlnvcdlnr]) try: pot= setup_potential(potparams,options,0,returnrawpot=True) except RuntimeError: continue for ii in range(len(rs)): surfz[ii,jj*len(fhs)+kk]= 2.*integrate.quad((lambda zz: potential.evaluateDensities(rs[ii]/8.,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro #Find minimum and maximum curves minsurfz= numpy.nanmin(surfz,axis=1) maxsurfz= numpy.nanmax(surfz,axis=1) #Save save_pickles(savefilename,rs,minsurfz,maxsurfz) else: savefile= open(savefilename,'rb') rs= pickle.load(savefile) minsurfz= pickle.load(savefile) maxsurfz= pickle.load(savefile) savefile.close() #Plot bovy_plot.bovy_print() bovy_plot.bovy_plot([numpy.nan],[numpy.nan],'ko', xlabel=r'$R\ (\mathrm{kpc})$', ylabel=r'$\Sigma(R,|Z| \leq 1.1\,\mathrm{kpc})\ (M_\odot\,\mathrm{pc}^{-2})$', xrange=[4.,10.], yrange=[10,1050.], semilogy=True) pyplot.fill_between(rs,minsurfz,maxsurfz, color='0.50') bovy_plot.bovy_text(8.,68.,r'$\odot$',size=16.,verticalalignment='center', horizontalalignment='center') bovy_plot.bovy_end_print(plotfilename) return None
def plot_forces(): potparams= numpy.array([numpy.log(2.15/_REFR0), 1., numpy.log(0.3/_REFR0), 0.307169914244, -1.79107550983]) options= setup_options(None) options.potential= 'dpdiskplhalofixcutbulgeflatwgasalt' pot= setup_potential(potparams,options,0,returnrawpot=True) bovy_plot.bovy_print(fig_width=8.,fig_height=5.) potential.plotDensities(pot,rmin=-15./8.,rmax=15./8.,nrs=100, zmin=-10./8,zmax=10./8.,nzs=101,ncontours=10, aspect=5./5.,log=True) bovy_plot.bovy_end_print('/home/bovy/Desktop/test.png') pass
def illustrateBestR(options,args): if options.sample.lower() == 'g': npops= 62 elif options.sample.lower() == 'k': npops= 54 if options.sample.lower() == 'g': savefile= open('binmapping_g.sav','rb') elif options.sample.lower() == 'k': savefile= open('binmapping_k.sav','rb') fehs= pickle.load(savefile) afes= pickle.load(savefile) savefile.close() #For bin 10, calculate the correlation between sigma and Rd bin= options.index derivProps= calcAllSurfErr(bin,options,args) #rs= numpy.linspace(4.5,9.,101) #derivProps= numpy.zeros((101,6)) rs= derivProps[:,0] #also calculate the full surface density profile for each Rd's best fh if _NOTDONEYET: spl= options.restart.split('.') else: spl= args[0].split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % bin newname+= spl[-1] options.potential= 'dpdiskplhalofixbulgeflatwgasalt' options.fitdvt= False savefile= open(newname,'rb') try: if not _NOTDONEYET: params= pickle.load(savefile) mlogl= pickle.load(savefile) logl= pickle.load(savefile) except: raise finally: savefile.close() if _NOTDONEYET: logl[(logl == 0.)]= -numpy.finfo(numpy.dtype(numpy.float64)).max logl[numpy.isnan(logl)]= -numpy.finfo(numpy.dtype(numpy.float64)).max marglogl= numpy.zeros((logl.shape[0],logl.shape[3])) sigs= numpy.zeros((logl.shape[0],len(rs))) rds= numpy.linspace(2.,3.4,8) fhs= numpy.linspace(0.,1.,16) hiresfhs= numpy.linspace(0.,1.,101) ro= 1. vo= options.fixvc/_REFV0 for jj in range(logl.shape[0]): for kk in range(logl.shape[3]): marglogl[jj,kk]= misc.logsumexp(logl[jj,0,0,kk,:,:,:,0].flatten()) #interpolate tindx= marglogl[jj,:] > -1000000000. intp= interpolate.InterpolatedUnivariateSpline(fhs[tindx],marglogl[jj,tindx], k=3) ml= intp(hiresfhs) indx= numpy.argmax(ml) indx2= numpy.argmax(marglogl[jj,:]) #Setup potential to calculate stuff potparams= numpy.array([numpy.log(rds[jj]/8.),vo,numpy.log(options.fixzh/8000.),hiresfhs[indx],options.dlnvcdlnr]) try: pot= setup_potential(potparams,options,0,returnrawpot=True) except RuntimeError: continue #Total surface density for ll in range(len(rs)): surfz= 2.*integrate.quad((lambda zz: potential.evaluateDensities(rs[ll]/_REFR0,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro sigs[jj,ll]= surfz #Now plot sigs bovy_plot.bovy_print(fig_height=7.,fig_width=5.) left, bottom, width, height= 0.1, 0.35, 0.8, 0.4 axTop= pyplot.axes([left,bottom,width,height]) fig= pyplot.gcf() fig.sca(axTop) ii= 0 bovy_plot.bovy_plot(rs,sigs[ii,:],'k-', xlabel=r'$R\ (\mathrm{kpc})$', ylabel=r'$\Sigma(R,|Z| \leq 1.1\,\mathrm{kpc})\ (M_\odot\,\mathrm{pc}^{-2})$', xrange=[4.,10.], yrange=[10,1050.], semilogy=True,overplot=True) for ii in range(1,logl.shape[0]): bovy_plot.bovy_plot(rs,sigs[ii,:],'k-',overplot=True) thisax= pyplot.gca() thisax.set_yscale('log') nullfmt = NullFormatter() # no labels thisax.xaxis.set_major_formatter(nullfmt) thisax.set_ylim(10.,1050.) thisax.set_xlim(4.,10.) pyplot.ylabel(r'$\Sigma_{1.1}(R)\ (M_\odot\,\mathrm{pc}^{-2})$') bovy_plot._add_ticks(yticks=False) bovy_plot.bovy_text(r'$[\mathrm{Fe/H}] = %.2f$' % (fehs[bin]) +'\n' r'$[\alpha/\mathrm{Fe}] = %.3f$' % (afes[bin]), size=16.,top_right=True) left, bottom, width, height= 0.1, 0.1, 0.8, 0.25 ax2= pyplot.axes([left,bottom,width,height]) fig= pyplot.gcf() fig.sca(ax2) bovy_plot.bovy_plot(rs,derivProps[:,2],'k-',lw=2., xrange=[4.,10.], overplot=True) indx= numpy.argmin(numpy.fabs(derivProps[:,2])) bovy_plot.bovy_plot([4.,10.],[0.,0.],'-',color='0.5',overplot=True) bovy_plot.bovy_plot([rs[indx],rs[indx]],[derivProps[indx,2],1000.], 'k--',overplot=True) thisax= pyplot.gca() pyplot.ylabel(r'$\mathrm{Correlation\ between}$'+'\n'+r'$\!\!\!\!\!\!\!\!R_d\ \&\ \Sigma_{1.1}(R)$') pyplot.xlabel(r'$R\ (\mathrm{kpc})$') pyplot.xlim(4.,10.) pyplot.ylim(-.5,.5) bovy_plot._add_ticks() pyplot.sca(axTop) bovy_plot.bovy_plot([rs[indx],rs[indx]],[0.01,sigs[3,indx]], 'k--',overplot=True) bovy_plot.bovy_end_print(options.outfilename)
def plot_hrhrvshr(options,args): """Plot hr^out/hr^in as a function of hr for various sr""" if len(args) == 0.: print "Must provide a savefilename ..." print "Returning ..." return None if os.path.exists(args[0]): #Load savefile= open(args[0],'rb') plotthis= pickle.load(savefile) hrs= pickle.load(savefile) srs= pickle.load(savefile) savefile.close() else: #Grid of models to test hrs= numpy.linspace(options.hrmin,options.hrmax,options.nhr) srs= numpy.linspace(options.srmin,options.srmax,options.nsr) #Tile hrs= numpy.tile(hrs,(options.nsr,1)).T srs= numpy.tile(srs,(options.nhr,1)) plotthis= numpy.zeros((options.nhr,options.nsr)) #Setup potential and aA poptions= setup_options(None) #poptions.potential= 'dpdiskplhalofixbulgeflatwgasalt' #params= [0.,0.,0.,0.,0.,0.,-1.16315,1.,-3.,0.4,0.] poptions.potential= 'btii' params= None #pot= MWPotential pot= setup_potential(params,poptions,1) if options.aAmethod.lower() == 'staeckel': aA= actionAngleStaeckel(pot=pot,delta=0.45,c=True) else: aA=actionAngleAdiabaticGrid(pot=pot,nR=16,nEz=16,nEr=31,nLz=31, zmax=1.,Rmax=5.) for ii in range(options.nhr): for jj in range(options.nsr): qdf= quasiisothermaldf(hrs[ii,jj]/8.,srs[ii,jj]/220., srs[ii,jj]/numpy.sqrt(3.)/220., 7./8.,1., pot=pot,aA=aA) plotthis[ii,jj]= qdf.estimate_hr(1.,z=0.8/8., dR=0.33, gl=True)/hrs[ii,jj]*8. print ii*options.nsr+jj+1, options.nsr*options.nhr, \ hrs[ii,jj], srs[ii,jj], plotthis[ii,jj] #Save save_pickles(args[0],plotthis,hrs,srs) #Now plot bovy_plot.bovy_print(fig_width=6., text_fontsize=20., legend_fontsize=24., xtick_labelsize=18., ytick_labelsize=18., axes_labelsize=24.) indx= 0 lines= [] colors= [cm.jet(ii/float(options.nsr-1.)*1.+0.) for ii in range(options.nsr)] lss= ['-' for ii in range(options.nsr)]#,'--','-.','..'] labels= [] lines.append(bovy_plot.bovy_plot(hrs[:,indx],plotthis[:,indx], color=colors[indx],ls=lss[indx], xrange=[0.5,5.5], yrange=[0.,2.], xlabel=r'$h^{\mathrm{in}}_R\ \mathrm{at}\ 8\,\mathrm{kpc}$', ylabel=r'$h^{\mathrm{out}}_R / h^{\mathrm{in}}_R$')) labels.append(r'$\sigma_R = %.0f \,\mathrm{km\,s}^{-1}$' % srs[0,indx]) for indx in range(1,options.nsr): lines.append(bovy_plot.bovy_plot(hrs[:,indx],plotthis[:,indx], color=colors[indx],ls=lss[indx], overplot=True)) labels.append(r'$\sigma_R = %.0f \,\mathrm{km\,s}^{-1}$' % srs[0,indx]) """ #Legend pyplot.legend(lines,#(line1[0],line2[0],line3[0],line4[0]), labels,#(r'$v_{bc} = 0$', # r'$v_{bc} = 1\,\sigma_{bc}$', # r'$v_{bc} = 2\,\sigma_{bc}$', # r'$v_{bc} = 3\,\sigma_{bc}$'), loc='lower right',#bbox_to_anchor=(.91,.375), numpoints=2, prop={'size':14}, frameon=False) """ #Add colorbar map = cm.ScalarMappable(cmap=cm.jet) map.set_array(srs[0,:]) map.set_clim(vmin=numpy.amin(srs[0,:]),vmax=numpy.amax(srs[0,:])) cbar= pyplot.colorbar(map,fraction=0.15) cbar.set_clim(numpy.amin(srs[0,:]),numpy.amax(srs[0,:])) cbar.set_label(r'$\sigma_R \,(\mathrm{km\,s}^{-1})$') bovy_plot.bovy_end_print(options.plotfilename)
def plot_szszvssz(options,args): """Plot sz^out/sz^in as a function of sz for various hr""" if len(args) == 0.: print "Must provide a savefilename ..." print "Returning ..." return None if os.path.exists(args[0]): #Load savefile= open(args[0],'rb') plotthis= pickle.load(savefile) szs= pickle.load(savefile) hrs= pickle.load(savefile) savefile.close() else: #Grid of models to test if options.subtype.lower() == 'sr': szs= numpy.linspace(options.srmin,options.srmax,options.nsz) else: szs= numpy.linspace(options.szmin,options.szmax,options.nsz) hrs= numpy.linspace(options.hrmin,options.hrmax,options.nhr) #Tile szs= numpy.tile(szs,(options.nhr,1)).T hrs= numpy.tile(hrs,(options.nsz,1)) plotthis= numpy.zeros((options.nsz,options.nhr)) #Setup potential and aA poptions= setup_options(None) #poptions.potential= 'dpdiskplhalofixbulgeflatwgasalt' #params= [0.,0.,0.,0.,0.,0.,-1.16315,1.,-3.,0.4,0.] poptions.potential= 'btii' params= None #pot= MWPotential pot= setup_potential(params,poptions,1) if options.aAmethod.lower() == 'staeckel': aA= actionAngleStaeckel(pot=pot,delta=0.45,c=True) else: aA=actionAngleAdiabaticGrid(pot=pot,nR=16,nEz=16,nEr=31,nLz=31, zmax=1.,Rmax=5.) for ii in range(options.nsz): for jj in range(options.nhr): if options.subtype.lower() == 'sr': qdf= quasiisothermaldf(hrs[ii,jj]/8., szs[ii,jj]/220., szs[ii,jj]/220./numpy.sqrt(3.), 7./8.,1., pot=pot,aA=aA) else: qdf= quasiisothermaldf(hrs[ii,jj]/8., szs[ii,jj]/220.*numpy.sqrt(3.), szs[ii,jj]/220., 7./8.,1., pot=pot,aA=aA) if options.subtype.lower() == 'sr': plotthis[ii,jj]= numpy.sqrt(qdf.sigmaR2(1.,0.8/8., gl=True))/szs[ii,jj]*220. else: plotthis[ii,jj]= numpy.sqrt(qdf.sigmaz2(1.,0.8/8., gl=True))/szs[ii,jj]*220. print ii*options.nhr+jj+1, options.nhr*options.nsz, \ szs[ii,jj], hrs[ii,jj], plotthis[ii,jj] #Save save_pickles(args[0],plotthis,szs,hrs) #Now plot bovy_plot.bovy_print(fig_width=6., text_fontsize=20., legend_fontsize=24., xtick_labelsize=18., ytick_labelsize=18., axes_labelsize=24.) indx= 0 lines= [] colors= [cm.jet(ii/float(options.nhr-1.)*1.+0.) for ii in range(options.nhr)] lss= ['-' for ii in range(options.nhr)]#,'--','-.','..'] labels= [] if options.subtype.lower() == 'sr': lines.append(bovy_plot.bovy_plot(szs[:,indx],plotthis[:,indx], color=colors[indx],ls=lss[indx], xrange=[10.,85.], yrange=[0.8,1.5], xlabel=r'$\sigma^{\mathrm{in}}_R\ \mathrm{at}\ R = 8\,\mathrm{kpc}$', ylabel=r'$\sigma^{\mathrm{out}}_R / \sigma^{\mathrm{in}}_R$')) else: lines.append(bovy_plot.bovy_plot(szs[:,indx],plotthis[:,indx], color=colors[indx],ls=lss[indx], xrange=[10.,115.], yrange=[0.5,1.2], xlabel=r'$\sigma^{\mathrm{in}}_Z\ \mathrm{at}\ R = 8\,\mathrm{kpc}$', ylabel=r'$\sigma^{\mathrm{out}}_Z / \sigma^{\mathrm{in}}_Z$')) for indx in range(1,options.nhr): lines.append(bovy_plot.bovy_plot(szs[:,indx],plotthis[:,indx], color=colors[indx],ls=lss[indx], overplot=True)) #Add colorbar map = cm.ScalarMappable(cmap=cm.jet) map.set_array(hrs[0,:]) map.set_clim(vmin=numpy.amin(hrs[0,:]),vmax=numpy.amax(hrs[0,:])) cbar= pyplot.colorbar(map,fraction=0.15) cbar.set_clim(numpy.amin(hrs[0,:]),numpy.amax(hrs[0,:])) cbar.set_label(r'$h_R\, (\mathrm{kpc})$') bovy_plot.bovy_end_print(options.plotfilename)
def plotSurfRdfh(plotfilename): #Calculate the surface density profile for each trial potential, then plot in 2D if '.png' in plotfilename: savefilename= plotfilename.replace('.png','.sav') elif '.ps' in plotfilename: savefilename= plotfilename.replace('.ps','.sav') if not os.path.exists(savefilename): options= setup_options(None) options.potential= 'dpdiskplhalofixbulgeflatwgasalt' options.fitdvt= False rs= numpy.array([5.,8.,11.]) rds= numpy.linspace(2.,3.4,_NRDS) fhs= numpy.linspace(0.,1.,_NFHS) surfz= numpy.zeros((len(rs),len(rds),len(fhs)))+numpy.nan ro= 1. vo= _VC/ _REFV0 dlnvcdlnr= _DLNVCDLNR zh= _ZH for jj in range(len(rds)): for kk in range(len(fhs)): #Setup potential to calculate stuff potparams= numpy.array([numpy.log(rds[jj]/8.),vo,numpy.log(zh/8000.),fhs[kk],dlnvcdlnr]) try: pot= setup_potential(potparams,options,0,returnrawpot=True) except RuntimeError: continue for ii in range(len(rs)): if False: surfz[ii,jj,kk]= -potential.evaluatezforces(rs[ii]/_REFR0,options.height/_REFR0/ro,pot)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro/2./numpy.pi else: surfz[ii,jj,kk]= 2.*integrate.quad((lambda zz: potential.evaluateDensities(rs[ii]/8.,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro #Save save_pickles(savefilename,rs,rds,fhs,surfz) else: savefile= open(savefilename,'rb') rs= pickle.load(savefile) rds= pickle.load(savefile) fhs= pickle.load(savefile) surfz= pickle.load(savefile) savefile.close() #Now plot bovy_plot.bovy_print() data = numpy.ma.masked_invalid(surfz[1,:,:]) bovy_plot.bovy_dens2d(data.filled(data.mean()).T, origin='lower', cmap='jet', colorbar=True, shrink=0.775, xlabel=r'$\mathrm{disk\ scale\ length}\,(\mathrm{kpc})$', ylabel=r'$\mathrm{relative\ halo\ contribution\ to}\ V^2_c(R_0)$', zlabel=r'$\Sigma(R_0,|Z| \leq 1.1\,\mathrm{kpc})\, (M_\odot\,\mathrm{pc}^{-2})$', xrange=[rds[0]-(rds[1]-rds[0])/2., rds[-1]+(rds[1]-rds[0])/2.], yrange=[fhs[0]-(fhs[1]-fhs[0])/2., fhs[-1]+(fhs[1]-fhs[0])/2.]) #Fix bad data bad_data = numpy.ma.masked_where(~data.mask, data.mask) bovy_plot.bovy_dens2d(bad_data.T, origin='lower', interpolation='nearest', cmap=cm.gray_r, overplot=True, xrange=[rds[0]-(rds[1]-rds[0])/2., rds[-1]+(rds[1]-rds[0])/2.], yrange=[fhs[0]-(fhs[1]-fhs[0])/2., fhs[-1]+(fhs[1]-fhs[0])/2.]) #Overlay contours of sigma at other R bovy_plot.bovy_dens2d(surfz[0,:,:].T,origin='lower', xrange=[rds[0]-(rds[1]-rds[0])/2., rds[-1]+(rds[1]-rds[0])/2.], yrange=[fhs[0]-(fhs[1]-fhs[0])/2., fhs[-1]+(fhs[1]-fhs[0])/2.], overplot=True, justcontours=True, contours=True, cntrcolors='k', cntrls='-') bovy_plot.bovy_dens2d(surfz[2,:,:].T,origin='lower', xrange=[rds[0]-(rds[1]-rds[0])/2., rds[-1]+(rds[1]-rds[0])/2.], yrange=[fhs[0]-(fhs[1]-fhs[0])/2., fhs[-1]+(fhs[1]-fhs[0])/2.], overplot=True, justcontours=True, contours=True, cntrcolors='w', # cntrlabel=True, cntrls='--') #Add labels bovy_plot.bovy_text(r'$\Sigma(R=5\,\mathrm{kpc})$' +'\n' +r'$\Sigma(R=11\,\mathrm{kpc})$', bottom_left=True,size=14.) bovy_plot.bovy_plot([2.575,2.8],[0.15,0.31],'-',color='0.5',overplot=True) bovy_plot.bovy_plot([2.625,2.95],[0.06,0.1525],'-',color='0.5',overplot=True) #overplot actual gridpoints gridrds= numpy.linspace(2.,3.4,8) gridfhs= numpy.linspace(0.,1.,16) for ii in range(len(gridrds)): bovy_plot.bovy_plot(gridrds[ii]+numpy.zeros(len(gridfhs)), gridfhs, 's', color='w',ms=3.,overplot=True, markeredgecolor='none') bovy_plot.bovy_end_print(plotfilename) return None
def plot_DFRotcurves(options,args): raw= read_rawdata(options) #Bin the data binned= pixelAfeFeh(raw,dfeh=options.dfeh,dafe=options.dafe) if options.tighten: tightbinned= pixelAfeFeh(raw,dfeh=options.dfeh,dafe=options.dafe, fehmin=-1.6,fehmax=0.5,afemin=-0.05, afemax=0.55) else: tightbinned= binned #Map the bins with ndata > minndata in 1D fehs, afes= [], [] counter= 0 abindx= numpy.zeros((len(binned.fehedges)-1,len(binned.afeedges)-1), dtype='int') for ii in range(len(binned.fehedges)-1): for jj in range(len(binned.afeedges)-1): data= binned(binned.feh(ii),binned.afe(jj)) if len(data) < options.minndata: continue #print binned.feh(ii), binned.afe(jj), len(data) fehs.append(binned.feh(ii)) afes.append(binned.afe(jj)) abindx[ii,jj]= counter counter+= 1 nabundancebins= len(fehs) fehs= numpy.array(fehs) afes= numpy.array(afes) #Load each solutions sols= [] savename= args[0] initname= options.init for ii in range(nabundancebins): spl= savename.split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % ii newname+= spl[-1] savefilename= newname #Read savefile try: savefile= open(savefilename,'rb') except IOError: print "WARNING: MISSING ABUNDANCE BIN" sols.append(None) else: sols.append(pickle.load(savefile)) savefile.close() #Load samples as well if options.mcsample: #Do the same for init spl= initname.split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % ii newname+= spl[-1] options.init= newname mapfehs= monoAbundanceMW.fehs() mapafes= monoAbundanceMW.afes() #Now plot #Run through the pixels and plot rotation curves if options.type == 'afe': vmin, vmax= 0.0,.5 zlabel=r'$[\alpha/\mathrm{Fe}]$' elif options.type == 'feh': vmin, vmax= -1.6,0.4 zlabel=r'$[\mathrm{Fe/H}]$' overplot= False if options.subtype is None or options.subtype.lower() != 'median': bovy_plot.bovy_print(fig_height=3.87,fig_width=5.) medianvc= [] medianvc_disk= [] medianvc_halo= [] medianvc_bulge= [] medianrs= numpy.linspace(0.001,2.,1001) for ii in range(tightbinned.npixfeh()): for jj in range(tightbinned.npixafe()): data= binned(tightbinned.feh(ii),tightbinned.afe(jj)) if len(data) < options.minndata: if options.type.lower() == 'afe' or options.type.lower() == 'feh' or options.type.lower() == 'fehafe' \ or options.type.lower() == 'afefeh': continue else: plotthis[ii,jj]= numpy.nan continue #Find abundance indx fehindx= binned.fehindx(tightbinned.feh(ii))#Map onto regular binning afeindx= binned.afeindx(tightbinned.afe(jj)) solindx= abindx[fehindx,afeindx] monoabindx= numpy.argmin((tightbinned.feh(ii)-mapfehs)**2./0.01 \ +(tightbinned.afe(jj)-mapafes)**2./0.0025) if sols[solindx] is None: if options.type.lower() == 'afe' or options.type.lower() == 'feh' or options.type.lower() == 'fehafe' \ or options.type.lower() == 'afefeh': continue else: plotthis[ii,jj]= numpy.nan continue s= get_potparams(sols[solindx],options,1) #Setup potential pot= setup_potential(sols[solindx],options,1,returnrawpot=True) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.type.lower() == 'afe': plotc= tightbinned.afe(jj) elif options.type.lower() == 'feh': plotc= tightbinned.feh(jj) colormap = cm.jet if options.subtype is None or options.subtype.lower() == 'full': potential.plotRotcurve(pot,Rrange=[0.001,2.], overplot=overplot,ls='-', color=colormap(_squeeze(plotc,vmin,vmax)), yrange=[0.,1.29], ylabel= r"$V_c(R)/V_c(R_0)$", zorder=int(numpy.random.uniform()*100)) elif options.subtype.lower() == 'disk': if 'mwpotential' in options.potential.lower(): diskpot= pot[0] elif 'wgas' in options.potential.lower(): diskpot= [pot[0],pot[-1]] elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': diskpot= pot[0] elif 'dpdisk' in options.potential.lower(): diskpot= pot[0] potential.plotRotcurve(diskpot,Rrange=[0.001,2.], yrange=[0.,1.29], overplot=overplot,ls='-', color=colormap(_squeeze(plotc,vmin,vmax)), ylabel= r"$V_c(R)/V_c(R_0)$", zorder=int(numpy.random.uniform()*100)) elif options.subtype.lower() == 'halo': halopot= pot[1] potential.plotRotcurve(halopot,Rrange=[0.001,2.], overplot=overplot,ls='-', yrange=[0.,1.29], ylabel= r"$V_c(R)/V_c(R_0)$", color=colormap(_squeeze(plotc,vmin,vmax)), zorder=int(numpy.random.uniform()*100)) elif options.subtype.lower() == 'bulge': bulgepot= pot[2] potential.plotRotcurve(bulgepot,Rrange=[0.001,2.], overplot=overplot,ls='-', ylabel= r"$V_c(R)/V_c(R_0)$", yrange=[0.,1.29], color=colormap(_squeeze(plotc,vmin,vmax)), zorder=int(numpy.random.uniform()*100)) elif options.subtype.lower() == 'median': if 'mwpotential' in options.potential.lower(): diskpot= pot[0] elif 'wgas' in options.potential.lower(): diskpot= [pot[0],pot[-1]] elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': diskpot= pot[0] elif 'dpdisk' in options.potential.lower(): diskpot= pot[0] halopot= pot[1] bulgepot= pot[2] vo= get_vo(sols[solindx],options,1) medianvc.append(vo*potential.calcRotcurve(pot,medianrs)) medianvc_disk.append(vo*potential.calcRotcurve(diskpot,medianrs)) medianvc_halo.append(vo*potential.calcRotcurve(halopot,medianrs)) medianvc_bulge.append(vo*potential.calcRotcurve(bulgepot,medianrs)) overplot=True if options.subtype is None or options.subtype.lower() != 'median': #Add colorbar m = cm.ScalarMappable(cmap=cm.jet) m.set_array(plotc) m.set_clim(vmin=vmin,vmax=vmax) cbar= pyplot.colorbar(m,fraction=0.15) cbar.set_clim((vmin,vmax)) cbar.set_label(zlabel) if options.subtype is None: pass elif options.subtype.lower() == 'disk': bovy_plot.bovy_text(r'$\mathrm{Disk}$',bottom_right=True,size=_legendsize) elif options.subtype.lower() == 'halo': bovy_plot.bovy_text(r'$\mathrm{Halo}$',bottom_right=True,size=_legendsize) elif options.subtype.lower() == 'bulge': bovy_plot.bovy_text(r'$\mathrm{Bulge}$',bottom_right=True,size=_legendsize) else: #Calc medians nbins= len(medianvc) vc= numpy.empty((len(medianrs),nbins)) vc_disk= numpy.empty((len(medianrs),nbins)) vc_bulge= numpy.empty((len(medianrs),nbins)) vc_halo= numpy.empty((len(medianrs),nbins)) for ii in range(nbins): vc[:,ii]= medianvc[ii] vc_disk[:,ii]= medianvc_disk[ii] vc_halo[:,ii]= medianvc_halo[ii] vc_bulge[:,ii]= medianvc_bulge[ii] vc= numpy.median(vc,axis=1)*_REFV0 #vcro= vc[numpy.argmin(numpy.fabs(medianrs-1.))] #vc/= vcro vc_disk= numpy.median(vc_disk,axis=1)*_REFV0 vc_halo= numpy.median(vc_halo,axis=1)*_REFV0 vc_bulge= numpy.median(vc_bulge,axis=1)*_REFV0 bovy_plot.bovy_print(fig_height=3.87,fig_width=5.) bovy_plot.bovy_plot(medianrs,vc,'k-', xlabel=r"$R/R_0$", ylabel= r"$V_c(R)\ [\mathrm{km\,s}^{-1}]$", yrange=[0.,1.29*_REFV0], xrange=[0.,2.]) linedisk= bovy_plot.bovy_plot(medianrs,vc_disk,'k--', overplot=True) linedisk[0].set_dashes([5,5]) bovy_plot.bovy_plot(medianrs,vc_halo,'k:', overplot=True) linebulge= bovy_plot.bovy_plot(medianrs,vc_bulge,'k--', overplot=True) linebulge[0].set_dashes([10,4]) bovy_plot.bovy_text(1.95,120.,r'$\mathrm{Disk}$',size=_legendsize, horizontalalignment='right') bovy_plot.bovy_text(1.95,193.,r'$\mathrm{Halo}$',size=_legendsize, horizontalalignment='right') bovy_plot.bovy_text(1.95,28.,r'$\mathrm{Bulge}$',size=_legendsize, horizontalalignment='right') bovy_plot.bovy_end_print(options.outfilename)
def generate_fakeDFData(options,args): #Check whether the savefile already exists if os.path.exists(args[0]): savefile= open(args[0],'rb') print "Savefile already exists, not re-sampling and overwriting ..." return None #Read the data print "Reading the data ..." if options.sample.lower() == 'g': if options.select.lower() == 'program': raw= read_gdwarfs(_GDWARFFILE,logg=True,ebv=True,sn=options.snmin,nosolar=True,nocoords=True) else: raw= read_gdwarfs(logg=True,ebv=True,sn=options.snmin,nosolar=True,nocoords=True) elif options.sample.lower() == 'k': if options.select.lower() == 'program': raw= read_kdwarfs(_KDWARFFILE,logg=True,ebv=True,sn=options.snmin,nosolar=True,nocoords=True) else: raw= read_kdwarfs(logg=True,ebv=True,sn=options.snmin,nosolar=True, nocoords=True) if not options.bmin is None: #Cut on |b| raw= raw[(numpy.fabs(raw.b) > options.bmin)] if not options.fehmin is None: raw= raw[(raw.feh >= options.fehmin)] if not options.fehmax is None: raw= raw[(raw.feh < options.fehmax)] if not options.afemin is None: raw= raw[(raw.afe >= options.afemin)] if not options.afemax is None: raw= raw[(raw.afe < options.afemax)] if not options.plate is None and not options.loo: raw= raw[(raw.plate == options.plate)] elif not options.plate is None: raw= raw[(raw.plate != options.plate)] #Bin the data binned= pixelAfeFeh(raw,dfeh=options.dfeh,dafe=options.dafe) #Map the bins with ndata > minndata in 1D fehs, afes= [], [] for ii in range(len(binned.fehedges)-1): for jj in range(len(binned.afeedges)-1): data= binned(binned.feh(ii),binned.afe(jj)) if len(data) < options.minndata: continue fehs.append(binned.feh(ii)) afes.append(binned.afe(jj)) nabundancebins= len(fehs) fehs= numpy.array(fehs) afes= numpy.array(afes) if not options.singlefeh is None: if options.loo: pass else: #Set up single feh indx= binned.callIndx(options.singlefeh,options.singleafe) if numpy.sum(indx) == 0: raise IOError("Bin corresponding to singlefeh and singleafe is empty ...") data= copy.copy(binned.data[indx]) print "Using %i data points ..." % (len(data)) #Bin again binned= pixelAfeFeh(data,dfeh=options.dfeh,dafe=options.dafe) fehs, afes= [], [] for ii in range(len(binned.fehedges)-1): for jj in range(len(binned.afeedges)-1): data= binned(binned.feh(ii),binned.afe(jj)) if len(data) < options.minndata: continue fehs.append(binned.feh(ii)) afes.append(binned.afe(jj)) nabundancebins= len(fehs) fehs= numpy.array(fehs) afes= numpy.array(afes) #Setup the selection function #Load selection function plates= numpy.array(list(set(list(raw.plate))),dtype='int') #Only load plates that we use print "Using %i plates, %i stars ..." %(len(plates),len(raw)) sf= segueSelect(plates=plates,type_faint='tanhrcut', sample=options.sample,type_bright='tanhrcut', sn=options.snmin,select=options.select, indiv_brightlims=options.indiv_brightlims) platelb= bovy_coords.radec_to_lb(sf.platestr.ra,sf.platestr.dec, degree=True) if options.sample.lower() == 'g': grmin, grmax= 0.48, 0.55 rmin,rmax= 14.50001, 20.199999 #so we don't go out of the range if options.sample.lower() == 'k': grmin, grmax= 0.55, 0.75 rmin,rmax= 14.50001, 18.999999 colorrange=[grmin,grmax] mapfehs= monoAbundanceMW.fehs() mapafes= monoAbundanceMW.afes() #Setup params if not options.init is None: #Load initial parameters from file savefile= open(options.init,'rb') tparams= pickle.load(savefile) savefile.close() #Setup the correct form params= initialize(options,fehs,afes) params[0:6]= get_dfparams(tparams,options.index,options,log=True) params[6:11]= tparams[-5:len(tparams)] else: params= initialize(options,fehs,afes) #Setup potential if (options.potential.lower() == 'flatlog' or options.potential.lower() == 'flatlogdisk') \ and not options.flatten is None: #Set flattening potparams= list(get_potparams(params,options,len(fehs))) potparams[0]= options.flatten params= set_potparams(potparams,params,options,len(fehs)) pot= setup_potential(params,options,len(fehs)) aA= setup_aA(pot,options) if not options.multi is None: binned= fakeDFData_abundance_singles(binned,options,args,fehs,afes) else: for ii in range(len(fehs)): print "Working on population %i / %i ..." % (ii+1,len(fehs)) #Setup qdf dfparams= get_dfparams(params,ii,options,log=False) vo= get_vo(params,options,len(fehs)) ro= get_ro(params,options) if options.dfmodel.lower() == 'qdf': #Normalize hr= dfparams[0]/ro sr= dfparams[1]/vo sz= dfparams[2]/vo hsr= dfparams[3]/ro hsz= dfparams[4]/ro print hr, sr, sz, hsr, hsz qdf= quasiisothermaldf(hr,sr,sz,hsr,hsz,pot=pot,aA=aA,cutcounter=True) #Some more selection stuff data= binned(fehs[ii],afes[ii]) #feh and color feh= fehs[ii] fehrange= [feh-options.dfeh/2.,feh+options.dfeh/2.] #FeH fehdist= DistSpline(*numpy.histogram(data.feh,bins=5, range=fehrange), xrange=fehrange,dontcuttorange=False) #Color colordist= DistSpline(*numpy.histogram(data.dered_g\ -data.dered_r, bins=9,range=colorrange), xrange=colorrange) #Re-sample binned= fakeDFData(binned,qdf,ii,params,fehs,afes,options, rmin,rmax, platelb, grmin,grmax, fehrange, colordist, fehdist,feh,sf, mapfehs,mapafes, ro=None,vo=None) #Save to new file fitsio.write(args[0],binned.data) return None
def plot_DFsingles(options,args): raw= read_rawdata(options) #Bin the data binned= pixelAfeFeh(raw,dfeh=options.dfeh,dafe=options.dafe) if options.tighten: tightbinned= pixelAfeFeh(raw,dfeh=options.dfeh,dafe=options.dafe, fehmin=-1.6,fehmax=0.5,afemin=-0.05, afemax=0.55) else: tightbinned= binned #Map the bins with ndata > minndata in 1D fehs, afes= [], [] counter= 0 abindx= numpy.zeros((len(binned.fehedges)-1,len(binned.afeedges)-1), dtype='int') for ii in range(len(binned.fehedges)-1): for jj in range(len(binned.afeedges)-1): data= binned(binned.feh(ii),binned.afe(jj)) if len(data) < options.minndata: continue #print binned.feh(ii), binned.afe(jj), len(data) fehs.append(binned.feh(ii)) afes.append(binned.afe(jj)) abindx[ii,jj]= counter counter+= 1 nabundancebins= len(fehs) fehs= numpy.array(fehs) afes= numpy.array(afes) #Load each solutions sols= [] savename= args[0] initname= options.init for ii in range(nabundancebins): spl= savename.split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % ii newname+= spl[-1] savefilename= newname #Read savefile try: savefile= open(savefilename,'rb') except IOError: print "WARNING: MISSING ABUNDANCE BIN" sols.append(None) else: sols.append(pickle.load(savefile)) savefile.close() #Load samples as well if options.mcsample: #Do the same for init spl= initname.split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % ii newname+= spl[-1] options.init= newname mapfehs= monoAbundanceMW.fehs() mapafes= monoAbundanceMW.afes() #Now plot #Run through the pixels and gather if options.type.lower() == 'afe' or options.type.lower() == 'feh' \ or options.type.lower() == 'fehafe' \ or options.type.lower() == 'afefeh': plotthis= [] errors= [] else: plotthis= numpy.zeros((tightbinned.npixfeh(),tightbinned.npixafe())) for ii in range(tightbinned.npixfeh()): for jj in range(tightbinned.npixafe()): data= binned(tightbinned.feh(ii),tightbinned.afe(jj)) if len(data) < options.minndata: if options.type.lower() == 'afe' or options.type.lower() == 'feh' or options.type.lower() == 'fehafe' \ or options.type.lower() == 'afefeh': continue else: plotthis[ii,jj]= numpy.nan continue #Find abundance indx fehindx= binned.fehindx(tightbinned.feh(ii))#Map onto regular binning afeindx= binned.afeindx(tightbinned.afe(jj)) solindx= abindx[fehindx,afeindx] monoabindx= numpy.argmin((tightbinned.feh(ii)-mapfehs)**2./0.01 \ +(tightbinned.afe(jj)-mapafes)**2./0.0025) if sols[solindx] is None: if options.type.lower() == 'afe' or options.type.lower() == 'feh' or options.type.lower() == 'fehafe' \ or options.type.lower() == 'afefeh': continue else: plotthis[ii,jj]= numpy.nan continue if options.type.lower() == 'q': s= get_potparams(sols[solindx],options,1) plotthis[ii,jj]= s[0] if not options.flatten is None: plotthis[ii,jj]/= options.flatten elif options.type.lower() == 'vc': if options.fixvo: plotthis[ii,jj]= 1. else: s= get_potparams(sols[solindx],options,1) plotthis[ii,jj]= s[1] elif options.type.lower() == 'rd': s= get_potparams(sols[solindx],options,1) plotthis[ii,jj]= numpy.exp(s[0]) elif options.type.lower() == 'zh': s= get_potparams(sols[solindx],options,1) plotthis[ii,jj]= numpy.exp(s[2-(1-(options.fixvo is None))]) elif options.type.lower() == 'ndata': plotthis[ii,jj]= len(data) elif options.type.lower() == 'hr': s= get_dfparams(sols[solindx],0,options) plotthis[ii,jj]= s[0]*_REFR0 if options.relative: thishr= monoAbundanceMW.hr(mapfehs[monoabindx],mapafes[monoabindx]) plotthis[ii,jj]/= thishr elif options.type.lower() == 'sz': s= get_dfparams(sols[solindx],0,options) plotthis[ii,jj]= s[2]*_REFV0 if options.relative: thissz= monoAbundanceMW.sigmaz(mapfehs[monoabindx],mapafes[monoabindx]) plotthis[ii,jj]/= thissz elif options.type.lower() == 'sr': s= get_dfparams(sols[solindx],0,options) plotthis[ii,jj]= s[1]*_REFV0 if options.relative: thissr= monoAbundanceMW.sigmaz(mapfehs[monoabindx],mapafes[monoabindx])*2. plotthis[ii,jj]/= thissr elif options.type.lower() == 'srsz': #Setup everything pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) aA= setup_aA(pot,options) dfparams= get_dfparams(sols[solindx],0,options,log=False) if options.dfmodel.lower() == 'qdf': #Normalize hr= dfparams[0]/ro sr= dfparams[1]/vo sz= dfparams[2]/vo hsr= dfparams[3]/ro hsz= dfparams[4]/ro #Setup qdf= quasiisothermaldf(hr,sr,sz,hsr,hsz,pot=pot, aA=aA,cutcounter=True) plotthis[ii,jj]= numpy.sqrt(qdf.sigmaR2(1.,1./_REFR0/ro, ngl=options.ngl,gl=True)\ /qdf.sigmaz2(1.,1./_REFR0/ro, ngl=options.ngl,gl=True)) elif options.type.lower() == 'outfrac': s= get_dfparams(sols[solindx],0,options) plotthis[ii,jj]= s[5] elif options.type.lower() == 'rhodm': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if 'mwpotential' in options.potential.lower(): plotthis[ii,jj]= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': plotthis[ii,jj]= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskflplhalofixplfixbulgeflat': plotthis[ii,jj]= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.type.lower() == 'rhoo': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) plotthis[ii,jj]= potential.evaluateDensities(1.,0.,pot)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.type.lower() == 'surfz': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) plotthis[ii,jj]= 2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro elif options.type.lower() == 'surfzdisk': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if 'mpdisk' in options.potential.lower() or 'mwpotential' in options.potential.lower(): plotthis[ii,jj]= 2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot[0])),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro elif options.type.lower() == 'kz': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) plotthis[ii,jj]= numpy.fabs(potential.evaluatezforces(1.,options.height/ro/_REFR0,pot)/2./numpy.pi/4.302*_REFV0**2.*vo**2./_REFR0/ro) elif options.type.lower() == 'plhalo': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': plotthis[ii,jj]= pot[1].alpha elif options.type.lower() == 'qhalo': #Setup potential s= get_potparams(sols[solindx],options,1) if options.potential.lower() == 'mpdiskflplhalofixplfixbulgeflat': plotthis[ii,jj]= s[4] elif options.type.lower() == 'dlnvcdlnr': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) plotthis[ii,jj]= potential.dvcircdR(pot,1.) elif options.type.lower() == 'fd': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if 'mwpotential' in options.potential.lower(): plotthis[ii,jj]= (pot[0].vcirc(1.))**2. elif options.type.lower() == 'fh': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if 'mwpotential' in options.potential.lower(): plotthis[ii,jj]= (pot[1].vcirc(1.))**2. elif options.type.lower() == 'fb': #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if 'mwpotential' in options.potential.lower(): plotthis[ii,jj]= (pot[2].vcirc(1.))**2. elif options.type.lower() == 'afe' or options.type.lower() == 'feh' or options.type.lower() == 'fehafe' \ or options.type.lower() == 'afefeh': thisplot=[tightbinned.feh(ii), tightbinned.afe(jj), len(data)] if options.subtype.lower() == 'qvc': s= get_potparams(sols[solindx],options,1) thisq= s[0] if not options.flatten is None: thisq/= options.flatten thisvc= s[1] thisplot.extend([thisq,thisvc]) elif options.subtype.lower() == 'rdzh': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) thisplot.extend([thisrd,thiszh]) elif options.subtype.lower() == 'zhvc': s= get_potparams(sols[solindx],options,1) thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) thisvc= s[1]*_REFV0 thisplot.extend([thiszh,thisvc]) elif options.subtype.lower() == 'dlnvcdlnrvc': s= get_potparams(sols[solindx],options,1) thisslope= s[3-(1-(options.fixvo is None))]/30. thisvc= s[1]*_REFV0 thisplot.extend([thisslope,thisvc]) elif options.subtype.lower() == 'rdvc': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) thisvc= s[1]*_REFV0 thisplot.extend([thisrd,thisvc]) elif options.subtype.lower() == 'rdplhalo': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisplhalo= pot[1].alpha thisplot.extend([thisrd,thisplhalo]) elif options.subtype.lower() == 'dlnvcdlnrplhalo': s= get_potparams(sols[solindx],options,1) thisslope= s[3-(1-(options.fixvo is None))]/30. #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisplhalo= pot[1].alpha thisplot.extend([thisslope,thisplhalo]) elif options.subtype.lower() == 'dlnvcdlnrzh': s= get_potparams(sols[solindx],options,1) thisslope= s[3-(1-(options.fixvo is None))]/30. thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) thisplot.extend([thisslope,thiszh]) elif options.subtype.lower() == 'vc14plhalo': s= get_potparams(sols[solindx],options,1) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisplhalo= pot[1].alpha thisvc14= potential.vcirc(pot,14./_REFR0/ro)*_REFV0*vo thisplot.extend([thisplhalo,thisvc14]) elif options.subtype.lower() == 'plhalovc': s= get_potparams(sols[solindx],options,1) thisvc= s[1]*_REFV0 #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisplhalo= pot[1].alpha thisplot.extend([thisplhalo,thisvc]) elif options.subtype.lower() == 'zhplhalo': s= get_potparams(sols[solindx],options,1) thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisplhalo= pot[1].alpha thisplot.extend([thiszh,thisplhalo]) elif options.subtype.lower() == 'rhodmzh': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) if 'mwpotential' in options.potential.lower(): thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. thisplot.extend([thisrhodm,thiszh]) elif options.subtype.lower() == 'rhodmsurfz': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) thissurfz= 2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro if 'mwpotential' in options.potential.lower(): thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. thisplot.extend([thisrhodm,thissurfz]) elif options.subtype.lower() == 'surfzzh': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) thissurfz= 2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro thisplot.extend([thissurfz,thiszh]) elif options.subtype.lower() == 'rhoozh': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) thiszh= numpy.exp(s[2-(1-(options.fixvo is None))]) thisrhoo= potential.evaluateDensities(1.,0.,pot)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. thisplot.extend([thisrhoo,thiszh]) elif options.subtype.lower() == 'rhodmvc': s= get_potparams(sols[solindx],options,1) thisvc= s[1]*_REFV0 #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if 'mwpotential' in options.potential.lower(): thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. thisplot.extend([thisrhodm,thisvc]) elif options.subtype.lower() == 'rhodmrd': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) thisrdh= numpy.exp(s[0]) if 'mwpotential' in options.potential.lower(): thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. thisplot.extend([thisrhodm,thisrd]) elif options.subtype.lower() == 'rhodmplhalo': s= get_potparams(sols[solindx],options,1) thisrd= numpy.exp(s[0]) #Setup potential pot= setup_potential(sols[solindx],options,1) vo= get_vo(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisplhalo= pot[1].alpha if 'mwpotential' in options.potential.lower(): thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': thisrhodm= pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. thisplot.extend([thisrhodm,thisplhalo]) plotthis.append(thisplot) #Set up plot if options.type.lower() == 'q': if not options.flatten is None: vmin, vmax= 0.9, 1.1 zlabel=r'$\mathrm{flattening}\ q / %.1f$' % options.flatten elif 'real' in options.outfilename.lower(): vmin, vmax= 0.9, 1.1 medianq= numpy.median(plotthis[numpy.isfinite(plotthis)]) plotthis/= medianq zlabel=r'$\mathrm{flattening}\ q / %.2f$' % medianq else: vmin, vmax= 0.5, 1.2 zlabel=r'$\mathrm{flattening}\ q$' elif options.type.lower() == 'vc': vmin, vmax= 0.95, 1.05 zlabel=r'$V_c / %i\ \mathrm{km\,s}^{-1}$' % int(_REFV0) if 'real' in options.outfilename.lower(): medianvc= numpy.median(plotthis[numpy.isfinite(plotthis)]) plotthis/= medianvc zlabel=r'$V_c / %i\ \mathrm{km\,s}^{-1}$' % int(_REFV0*medianvc) elif options.type.lower() == 'rhodm': vmin, vmax= 0.00, 0.02 zlabel=r'$\rho_{\mathrm{DM}}(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.type.lower() == 'rhoo': vmin, vmax= 0.00, 0.2 zlabel=r'$\rho(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.type.lower() == 'surfz': vmin, vmax= 50.,120. zlabel=r'$\Sigma(%.1f\,\mathrm{kpc};R_0)\ [M_\odot\,\mathrm{pc}^{-2}]$' % options.height elif options.type.lower() == 'surfzdisk': vmin, vmax= 20.,90. zlabel=r'$\Sigma_{\mathrm{disk}}(%.1f\,\mathrm{kpc};R_0)\ [M_\odot\,\mathrm{pc}^{-2}]$' % options.height elif options.type.lower() == 'kz': vmin, vmax= 50.,120. zlabel=r'$K_Z(%.1f\,\mathrm{kpc};R_0)\ [M_\odot\,\mathrm{pc}^{-2}]$' % options.height elif options.type.lower() == 'dlnvcdlnr': vmin, vmax= -0.3,0.2 zlabel=r'$\frac{\mathrm{d} \ln V_c}{\mathrm{d} \ln R}$' elif options.type.lower() == 'fd': vmin, vmax= 0.00, 1. zlabel=r'$V_{c,\mathrm{disk}} / V_c\,(R_0)$' elif options.type.lower() == 'fh': vmin, vmax= 0.00, 1. zlabel=r'$V_{c,\mathrm{halo}} / V_c\,(R_0)$' elif options.type.lower() == 'fb': vmin, vmax= 0.00, .1 zlabel=r'$V_{c,\mathrm{halo}} / V_c\,(R_0)$' elif options.type.lower() == 'rd': vmin, vmax= 0.2, 0.6 zlabel=r'$R_d / R_0$' elif options.type.lower() == 'zh': vmin, vmax= 0.0125, 0.075 zlabel=r'$z_h / R_0$' elif options.type.lower() == 'plhalo': vmin, vmax= 0.0, 2. zlabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' elif options.type.lower() == 'qhalo': vmin, vmax= 0.4, 1.15 zlabel=r'$q_\Phi^{\mathrm{halo}}$' elif options.type.lower() == 'ndata': vmin, vmax= numpy.nanmin(plotthis), numpy.nanmax(plotthis) zlabel=r'$N_\mathrm{data}$' elif options.type == 'hr': if options.relative: vmin, vmax= 0.8, 1.2 zlabel=r'$\mathrm{input / output\ radial\ scale\ length}$' else: vmin, vmax= 1.35,4.5 zlabel=r'$\mathrm{model\ radial\ scale\ length\ [kpc]}$' elif options.type == 'sz': if options.relative: vmin, vmax= 0.8, 1.2 zlabel= r'$\mathrm{input / output\ model}\ \sigma_z$' else: vmin, vmax= 10.,60. zlabel= r'$\mathrm{model}\ \sigma_z\ [\mathrm{km\ s}^{-1}]$' elif options.type == 'sr': if options.relative: vmin, vmax= 0.8, 1.2 zlabel= r'$\mathrm{input/output\ model}\ \sigma_R$' else: vmin, vmax= 10.,60. zlabel= r'$\mathrm{model}\ \sigma_R\ [\mathrm{km\ s}^{-1}]$' elif options.type == 'srsz': vmin, vmax= 0.5,2. zlabel= r'$\sigma_R/\sigma_z\ (R_0,1\,\mathrm{kpc})$' elif options.type == 'outfrac': vmin, vmax= 0., 1. zlabel= r'$\mathrm{relative\ number\ of\ outliers}$' elif options.type == 'afe': vmin, vmax= 0.0,.5 zlabel=r'$[\alpha/\mathrm{Fe}]$' elif options.type == 'feh': vmin, vmax= -1.6,0.4 zlabel=r'$[\mathrm{Fe/H}]$' elif options.type == 'fehafe': vmin, vmax= -.7,.7 zlabel=r'$[\mathrm{Fe/H}]-[\mathrm{Fe/H}]_{1/2}([\alpha/\mathrm{Fe}])$' elif options.type == 'afefeh': vmin, vmax= -.15,.15 zlabel=r'$[\alpha/\mathrm{Fe}]-[\alpha/\mathrm{Fe}]_{1/2}([\mathrm{Fe/H}])$' if options.tighten: xrange=[-1.6,0.5] yrange=[-0.05,0.55] else: xrange=[-2.,0.5] yrange=[-0.2,0.6] #Now plot if options.type.lower() == 'afe' or options.type.lower() == 'feh' \ or options.type.lower() == 'fehafe': #Gather everything afe, feh, ndata, x, y= [], [], [], [], [] for ii in range(len(plotthis)): afe.append(plotthis[ii][1]) feh.append(plotthis[ii][0]) ndata.append(plotthis[ii][2]) x.append(plotthis[ii][3]) y.append(plotthis[ii][4]) afe= numpy.array(afe) feh= numpy.array(feh) ndata= numpy.array(ndata) x= numpy.array(x) y= numpy.array(y) #Process ndata ndata= ndata**.5 ndata= ndata/numpy.median(ndata)*35. if options.type.lower() == 'afe': plotc= afe elif options.type.lower() == 'feh': plotc= feh elif options.type.lower() == 'afefeh': #Go through the bins to determine whether feh is high or low for this alpha plotc= numpy.zeros(len(afe)) for ii in range(tightbinned.npixfeh()): fehbin= ii data= tightbinned.data[(tightbinned.data.feh > tightbinned.fehedges[fehbin])\ *(tightbinned.data.feh <= tightbinned.fehedges[fehbin+1])] medianafe= numpy.median(data.afe) for jj in range(len(afe)): if feh[jj] == tightbinned.feh(ii): plotc[jj]= afe[jj]-medianafe else: #Go through the bins to determine whether feh is high or low for this alpha plotc= numpy.zeros(len(feh)) for ii in range(tightbinned.npixafe()): afebin= ii data= tightbinned.data[(tightbinned.data.afe > tightbinned.afeedges[afebin])\ *(tightbinned.data.afe <= tightbinned.afeedges[afebin+1])] medianfeh= numpy.median(data.feh) for jj in range(len(feh)): if afe[jj] == tightbinned.afe(ii): plotc[jj]= feh[jj]-medianfeh onedhists=False if options.subtype.lower() == 'qvc': if not options.flatten is None: xrange= [0.9,1.1] xlabel=r'$\mathrm{flattening}\ q / %.1f$' % options.flatten elif 'real' in options.outfilename.lower(): xrange= [0.9,1.1] medianq= numpy.median(x[numpy.isfinite(x)]) x/= medianq xlabel=r'$\mathrm{flattening}\ q / %.2f$' % medianq else: xrange= [0.5, 1.2] xlabel=r'$\mathrm{flattening}\ q$' yrange= [0.95, 1.05] ylabel=r'$V_c / %i\ \mathrm{km\,s}^{-1}$' % int(_REFV0) if 'real' in options.outfilename.lower(): medianvc= numpy.median(y[numpy.isfinite(y)]) y/= medianvc ylabel=r'$V_c / %i\ \mathrm{km\,s}^{-1}$' % int(_REFV0*medianvc) elif options.subtype.lower() == 'rdzh': yrange= [0.0125,0.1] xrange= [0.2,0.8] xlabel=r'$R_d / R_0$' ylabel=r'$z_h / R_0$' elif options.subtype.lower() == 'rdplhalo': yrange= [0.,2.] xrange= [0.2,0.8] xlabel=r'$R_d / R_0$' ylabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' elif options.subtype.lower() == 'vc14plhalo': yrange= [210.,280.] xrange= [0.,2.] xlabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' ylabel=r'$V_c (R=14\,\mathrm{kpc})\ [\mathrm{km\,s}^{-1}$]' elif options.subtype.lower() == 'zhplhalo': yrange= [0.,2.] xrange= [0.0125,0.1] ylabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' xlabel=r'$z_h / R_0$' elif options.subtype.lower() == 'rhodmplhalo': xrange= [0.,0.02] yrange= [0.,2.] ylabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' xlabel=r'$\rho_{\mathrm{DM}}(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.subtype.lower() == 'rhodmzh': yrange= [0.0125,0.1] xrange= [0.,0.02] ylabel=r'$z_h / R_0$' xlabel=r'$\rho_{\mathrm{DM}}(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.subtype.lower() == 'rhoozh': yrange= [0.0125,0.1] xrange= [0.,0.2] ylabel=r'$z_h / R_0$' xlabel=r'$\rho(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.subtype.lower() == 'surfzzh': yrange= [0.0125,0.1] xrange= [50.+20.*(options.height-1.1),120.+20.*(options.height-1.1)] ylabel=r'$z_h / R_0$' xlabel=r'$\Sigma(%.1f\,\mathrm{kpc};R_0)\ [M_\odot\,\mathrm{pc}^{-2}]$' % options.height elif options.subtype.lower() == 'rhodmsurfz': yrange= [50.+20.*(options.height-1.1),120.+20.*(options.height-1.1)] xrange= [0.,0.02] ylabel=r'$\Sigma(%.1f\,\mathrm{kpc};R_0)\ [M_\odot\,\mathrm{pc}^{-2}]$' % options.height xlabel=r'$\rho_{\mathrm{DM}}(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.subtype.lower() == 'rhodmrd': yrange= [0.2,0.8] xrange= [0.,0.02] ylabel=r'$R_d / R_0$' xlabel=r'$\rho_{\mathrm{DM}}(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.subtype.lower() == 'rdvc': yrange= [210.,250.] xrange= [0.2,0.8] xlabel=r'$R_d / R_0$' ylabel=r'$V_c\ [\mathrm{km\,s}^{-1}]$' elif options.subtype.lower() == 'zhvc': yrange= [210.,250.] xrange= [0.0125,0.1] xlabel=r'$z_h / R_0$' ylabel=r'$V_c\ [\mathrm{km\,s}^{-1}]$' elif options.subtype.lower() == 'dlnvcdlnrvc': yrange= [210.,250.] xrange= [-0.2,0.07] xlabel=r'$\mathrm{d}\ln V_c / \mathrm{d}\ln R\, (R_0)$' ylabel=r'$V_c\ [\mathrm{km\,s}^{-1}]$' onedhists=True elif options.subtype.lower() == 'dlnvcdlnrplhalo': yrange= [0.,2.] ylabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' xrange= [-0.2,0.07] xlabel=r'$\mathrm{d}\ln V_c / \mathrm{d}\ln R\, (R_0)$' elif options.subtype.lower() == 'dlnvcdlnrzh': yrange= [0.0125,0.1] ylabel=r'$z_h / R_0$' xrange= [-0.2,0.07] xlabel=r'$\mathrm{d}\ln V_c / \mathrm{d}\ln R\, (R_0)$' elif options.subtype.lower() == 'rhodmvc': yrange= [210.,250.] xrange= [0.,0.02] ylabel=r'$V_c\ [\mathrm{km\,s}^{-1}]$' xlabel=r'$\rho_{\mathrm{DM}}(R_0,0)\ [M_\odot\,\mathrm{pc}^{-3}]$' elif options.subtype.lower() == 'plhalovc': yrange= [210.,250.] xrange= [0.,2.] xlabel=r'$\alpha\ \mathrm{in}\ \rho_{\mathrm{halo}} \propto 1/r^\alpha$' ylabel=r'$V_c\ [\mathrm{km\,s}^{-1}$]' bovy_plot.bovy_print(fig_height=3.87,fig_width=5.) ax= bovy_plot.bovy_plot(x,y, s=ndata,c=plotc, cmap='jet', xlabel=xlabel,ylabel=ylabel, clabel=zlabel, xrange=xrange,yrange=yrange, vmin=vmin,vmax=vmax, scatter=True,edgecolors='none', colorbar=True-onedhists, onedhists=onedhists, onedhistxnormed=onedhists, onedhistynormed=onedhists, bins=15) if onedhists: axS, axx, axy= ax if options.subtype.lower() == 'dlnvcdlnrvc': #Plot prior on one-d axes sb= numpy.linspace(-0.2,0.0399,1001) fsb= numpy.exp(numpy.log((0.04-sb)/0.04)-(0.04-sb)/0.04) fsb/= numpy.sum(fsb)*(sb[1]-sb[0]) axx.plot(sb,fsb,'-',color='0.65') tvc= numpy.linspace(150.,350.,1001) fvc= numpy.exp(-(tvc-225.)**2./2./15.**2.) fvc/= numpy.sum(fvc)*(tvc[1]-tvc[0]) axy.plot(fvc,tvc,'-',color='0.65') else: bovy_plot.bovy_print() bovy_plot.bovy_dens2d(plotthis.T,origin='lower',cmap='jet', interpolation='nearest', xlabel=r'$[\mathrm{Fe/H}]$', ylabel=r'$[\alpha/\mathrm{Fe}]$', zlabel=zlabel, xrange=xrange,yrange=yrange, vmin=vmin,vmax=vmax, contours=False, colorbar=True,shrink=0.78) if options.type.lower() == 'q' or options.type.lower() == 'vc' \ or options.relative or options.type.lower() == 'rd' \ or options.type.lower() == 'fd' \ or options.type.lower() == 'fh' \ or options.type.lower() == 'fb' \ or options.type.lower() == 'plhalo' \ or options.type.lower() == 'surfz' \ or options.type.lower() == 'surfzdisk' \ or options.type.lower() == 'rhoo' \ or options.type.lower() == 'qhalo' \ or options.type.lower() == 'kz': bovy_plot.bovy_text(r'$\mathrm{median} = %.2f \pm %.2f$' % (numpy.median(plotthis[numpy.isfinite(plotthis)]), 1.4826*numpy.median(numpy.fabs(plotthis[numpy.isfinite(plotthis)]-numpy.median(plotthis[numpy.isfinite(plotthis)])))), bottom_left=True,size=14.) if options.type.lower() == 'zh' or options.type.lower() == 'rhodm': bovy_plot.bovy_text(r'$\mathrm{median} = %.4f \pm %.4f$' % (numpy.median(plotthis[numpy.isfinite(plotthis)]), 1.4826*numpy.median(numpy.fabs(plotthis[numpy.isfinite(plotthis)]-numpy.median(plotthis[numpy.isfinite(plotthis)])))), bottom_left=True,size=14.) bovy_plot.bovy_end_print(options.outfilename) return None
def calcDFResults(options,args,boot=True,nomedian=False): if len(args) == 2 and options.sample == 'gk': toptions= copy.copy(options) toptions.sample= 'g' toptions.select= 'all' outg= calcDFResults(toptions,[args[0]],boot=boot,nomedian=True) toptions.sample= 'k' toptions.select= 'program' outk= calcDFResults(toptions,[args[1]],boot=boot,nomedian=True) #Combine out= {} for k in outg.keys(): valg= outg[k] valk= outk[k] val= numpy.zeros(len(valg)+len(valk)) val[0:len(valg)]= valg val[len(valg):len(valg)+len(valk)]= valk out[k]= val if nomedian: return out else: return add_median(out,boot=boot) raw= read_rawdata(options) #Bin the data binned= pixelAfeFeh(raw,dfeh=options.dfeh,dafe=options.dafe) tightbinned= binned #Map the bins with ndata > minndata in 1D fehs, afes= [], [] counter= 0 abindx= numpy.zeros((len(binned.fehedges)-1,len(binned.afeedges)-1), dtype='int') for ii in range(len(binned.fehedges)-1): for jj in range(len(binned.afeedges)-1): data= binned(binned.feh(ii),binned.afe(jj)) if len(data) < options.minndata: continue #print binned.feh(ii), binned.afe(jj), len(data) fehs.append(binned.feh(ii)) afes.append(binned.afe(jj)) abindx[ii,jj]= counter counter+= 1 nabundancebins= len(fehs) fehs= numpy.array(fehs) afes= numpy.array(afes) #Load each of the solutions sols= [] chi2s= [] savename= args[0] initname= options.init for ii in range(nabundancebins): spl= savename.split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % ii newname+= spl[-1] savefilename= newname #Read savefile try: savefile= open(savefilename,'rb') except IOError: print "WARNING: MISSING ABUNDANCE BIN" sols.append(None) chi2s.append(None) else: sols.append(pickle.load(savefile)) chi2s.append(pickle.load(savefile)) savefile.close() #Load samples as well if options.mcsample: #Do the same for init spl= initname.split('.') newname= '' for jj in range(len(spl)-1): newname+= spl[jj] if not jj == len(spl)-2: newname+= '.' newname+= '_%i.' % ii newname+= spl[-1] options.init= newname mapfehs= monoAbundanceMW.fehs() mapafes= monoAbundanceMW.afes() #Now plot #Run through the pixels and gather fehs= [] afes= [] ndatas= [] zmedians= [] #Basic parameters hrs= [] srs= [] szs= [] hsrs= [] hszs= [] outfracs= [] rds= [] rdexps= [] vcs= [] zhs= [] zhexps= [] dlnvcdlnrs= [] plhalos= [] rorss= [] dvts= [] #derived parameters surfzs= [] surfz800s= [] surfzdisks= [] massdisks= [] rhoos= [] rhooalts= [] rhodms= [] vcdvcros= [] vcdvcs= [] vescs= [] mloglikemins= [] for ii in range(tightbinned.npixfeh()): for jj in range(tightbinned.npixafe()): data= binned(tightbinned.feh(ii),tightbinned.afe(jj)) if len(data) < options.minndata: continue #Find abundance indx fehindx= binned.fehindx(tightbinned.feh(ii))#Map onto regular binning afeindx= binned.afeindx(tightbinned.afe(jj)) solindx= abindx[fehindx,afeindx] monoabindx= numpy.argmin((tightbinned.feh(ii)-mapfehs)**2./0.01 \ +(tightbinned.afe(jj)-mapafes)**2./0.0025) if sols[solindx] is None: continue try: pot= setup_potential(sols[solindx],options,1,interpDens=True, interpdvcircdr=True,returnrawpot=True) except RuntimeError: print "A bin has an unphysical potential ..." continue # if 'dpdisk' in options.potential.lower(): # try: # rawpot= setup_potential(sols[solindx],options,1, # returnrawpot=True) # except RuntimeError: # print "A bin has an unphysical potential ..." # continue fehs.append(tightbinned.feh(ii)) afes.append(tightbinned.afe(jj)) zmedians.append(numpy.median(numpy.fabs(data.zc+_ZSUN))) #vc s= get_potparams(sols[solindx],options,1) ro= get_ro(sols[solindx],options) if options.fixvo: vcs.append(options.fixvo*_REFV0) else: vcs.append(s[1]*_REFV0) #rd rds.append(numpy.exp(s[0])) #zh zhs.append(numpy.exp(s[2-(1-(options.fixvo is None))])) #rdexp & zhexp if options.sample == 'g': tz= 1.1/_REFR0/ro elif options.sample == 'k': tz= 0.84/_REFR0/ro if 'mpdisk' in options.potential.lower() or 'mwpotential' in options.potential.lower(): mp= potential.MiyamotoNagaiPotential(a=rds[-1],b=zhs[-1]) #rdexp f= mp.dens(1.,0.125) dr= 10.**-3. df= (mp.dens(1.+dr/2.,0.125)-mp.dens(1.-dr/2.,0.125))/dr rdexps.append(-f/df) #zhexp f= mp.dens(1.,tz) dz= 10.**-3. df= (mp.dens(1.,tz+dz/2.)-mp.dens(1.,tz-dz/2.))/dz zhexps.append(-f/df) elif 'dpdisk' in options.potential.lower(): rdexps.append(numpy.exp(s[0])) zhexps.append(numpy.exp(s[2-(1-(options.fixvo is None))])) #ndata ndatas.append(len(data)) #hr dfparams= get_dfparams(sols[solindx],0,options) if options.relative: thishr= monoAbundanceMW.hr(mapfehs[monoabindx],mapafes[monoabindx]) hrs.append(dfparams[0]*_REFR0/thishr) else: hrs.append(dfparams[0]*_REFR0) #sz if options.relative: thissz= monoAbundanceMW.sigmaz(mapfehs[monoabindx],mapafes[monoabindx]) szs.append(dfparams[2]*_REFV0/thissz) else: szs.append(dfparams[2]*_REFV0) #sr if options.relative: thissr= monoAbundanceMW.sigmaz(mapfehs[monoabindx],mapafes[monoabindx])*2.#BOVY: UPDATE srs.append(dfparams[1]*_REFV0/thissr) else: srs.append(dfparams[1]*_REFV0) #hsr hsrs.append(dfparams[3]*_REFR0) #hsz hszs.append(dfparams[4]*_REFR0) #outfrac outfracs.append(dfparams[5]) #rhodm #Setup potential vo= get_vo(sols[solindx],options,1) if 'mwpotential' in options.potential.lower(): rhodms.append(pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.) elif options.potential.lower() == 'mpdiskplhalofixbulgeflat': rhodms.append(pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.) elif options.potential.lower() == 'mpdiskflplhalofixplfixbulgeflat': rhodms.append(pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.) elif options.potential.lower() == 'dpdiskplhalofixbulgeflat' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgas' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgasalt' \ or options.potential.lower() == 'dpdiskflplhalofixbulgeflatwgas': rhodms.append(pot[1].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.) #rhoo rhoos.append(potential.evaluateDensities(1.,0.,pot)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.) #surfz surfzs.append(2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot)),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro) #surfz800 surfz800s.append(2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot)),0.,0.8/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro) #surzdisk if 'mpdisk' in options.potential.lower() or 'mwpotential' in options.potential.lower(): surfzdisks.append(2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot[0])),0.,options.height/_REFR0/ro)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro) surfzdiskzm= 2.*integrate.quad((lambda zz: potential.evaluateDensities(1.,zz,pot[0])),0.,tz)[0]*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*_REFR0*ro elif 'dpdisk' in options.potential.lower(): surfzdisks.append(2.*pot[0].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.*zhexps[-1]*ro*_REFR0*1000.) #rhooalt if options.potential.lower() == 'mpdiskplhalofixbulgeflat': rhooalts.append(rhoos[-1]-pot[0].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3.+surfzdiskzm/2./zhexps[-1]/ro/_REFR0/1000./(1.-numpy.exp(-tz/zhexps[-1]))) elif options.potential.lower() == 'dpdiskplhalofixbulgeflat' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgas' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgasalt' \ or options.potential.lower() == 'dpdiskflplhalofixbulgeflatwgas': rhooalts.append(rhoos[-1]) #massdisk if options.potential.lower() == 'dpdiskplhalofixbulgeflat' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgas' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgasalt' \ or options.potential.lower() == 'dpdiskflplhalofixbulgeflatwgas': rhod= pot[0].dens(1.,0.)*_REFV0**2.*vo**2./_REFR0**2./ro**2./4.302*10.**-3. else: rhod= surfzdiskzm/2./zhexps[-1]/ro/_REFR0/1000./(1.-numpy.exp(-tz/zhexps[-1])) massdisks.append(rhod*2.*zhexps[-1]*numpy.exp(1./rdexps[-1])*rdexps[-1]**2.*2.*numpy.pi*(ro*_REFR0)**3./10.) #plhalo if options.potential.lower() == 'mpdiskplhalofixbulgeflat': plhalos.append(pot[1].alpha) plhalos.append((1.-pot[1].alpha)/(pot[1].alpha-3.)) elif options.potential.lower() == 'dpdiskplhalofixbulgeflat' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgas' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgasalt' \ or options.potential.lower() == 'dpdiskflplhalofixbulgeflatwgas': plhalos.append(pot[1].alpha) rorss.append((1.-pot[1].alpha)/(pot[1].alpha-3.)) #dlnvcdlnr if options.potential.lower() == 'dpdiskplhalofixbulgeflat' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgas' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgasalt' \ or options.potential.lower() == 'dpdiskflplhalofixbulgeflatwgas': dlnvcdlnrs.append(potential.dvcircdR(pot,1.)) else: dlnvcdlnrs.append(potential.dvcircdR(pot,1.)) #vcdvc if options.potential.lower() == 'dpdiskplhalofixbulgeflat' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgas' \ or options.potential.lower() == 'dpdiskplhalofixbulgeflatwgasalt' \ or options.potential.lower() == 'dpdiskflplhalofixbulgeflatwgas': vcdvcros.append(pot[0].vcirc(1.)/potential.vcirc(pot,1.)) vcdvcs.append(pot[0].vcirc(2.2*rdexps[-1])/potential.vcirc(pot,2.2*rdexps[-1])) else: vcdvcros.append(pot[0].vcirc(1.)/potential.vcirc(pot,1.)) vcdvcs.append(pot[0].vcirc(2.2*rdexps[-1])/potential.vcirc(pot,2.2*rdexps[-1])) #mloglike mloglikemins.append(chi2s[solindx]) #escape velocity vescs.append(potential.vesc(pot,1.)*_REFV0) if options.fitdvt: dvts.append(sols[solindx][0]) #Gather fehs= numpy.array(fehs) afes= numpy.array(afes) zmedians= numpy.array(zmedians) ndatas= numpy.array(ndatas) #Basic parameters hrs= numpy.array(hrs) srs= numpy.array(srs) szs= numpy.array(szs) hsrs= numpy.array(hsrs) hszs= numpy.array(hszs) outfracs= numpy.array(outfracs) vcs= numpy.array(vcs) rds= numpy.array(rds) zhs= numpy.array(zhs) rdexps= numpy.array(rdexps) zhexps= numpy.array(zhexps) dlnvcdlnrs= numpy.array(dlnvcdlnrs) plhalos= numpy.array(plhalos) rorss= numpy.array(rorss) if options.fitdvt: dvts= numpy.array(dvts) #derived parameters surfzs= numpy.array(surfzs) surfz800s= numpy.array(surfz800s) surfzdisks= numpy.array(surfzdisks) massdisks= numpy.array(massdisks) rhoos= numpy.array(rhoos) rhooalts= numpy.array(rhooalts) rhodms= numpy.array(rhodms) vcdvcros= numpy.array(vcdvcros) vcdvcs= numpy.array(vcdvcs) rexps= numpy.sqrt(2.)*(rds+zhs)/2.2 mloglikemins= numpy.array(mloglikemins) vescs= numpy.array(vescs) #Load into dictionary out= {} out['feh']= fehs out['afe']= afes out['zmedian']= zmedians out['ndata']= ndatas out['hr']= hrs out['sr']= srs out['sz']= szs out['hsr']= hsrs out['hsz']= hszs out['outfrac']= outfracs out['vc']= vcs out['rd']= rds out['zh']= zhs out['rdexp']= rdexps out['zhexp']= zhexps out['dlnvcdlnr']= dlnvcdlnrs out['plhalo']= plhalos out['rors']= rorss out['surfz']= surfzs out['surfz800']= surfz800s out['surfzdisk']= surfzdisks out['massdisk']= massdisks out['rhoo']= rhoos out['rhooalt']= rhooalts out['rhodm']= rhodms out['vcdvc']= vcdvcs out['vcdvcro']= vcdvcros out['rexp']= rexps out['mloglikemin']= mloglikemins out['vesc']= vescs if options.fitdvt: out['dvt']= dvts if nomedian: return out else: return add_median(out,boot=boot)