def calcAllSurfErrZ(ii,options,args): #Go through all of the bins 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() if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5: return numpy.zeros((101,4)) 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.' % ii newname+= spl[-1] #zs,mean_surfz, cov, std_surfz= calcSurfRdCorrZ(newname,vo=options.fixvc/_REFV0, zs,mean_surfz, std_surfz= calcSurfErrZ(newname,vo=options.fixvc/_REFV0, zh=options.fixzh, dlnvcdlnr=options.dlnvcdlnr) if zs is None: return numpy.zeros((101,4)) out= numpy.zeros((len(zs),4)) out[:,0]= zs out[:,1]= mean_surfz out[:,2]= std_surfz/mean_surfz out[:,3]= std_surfz return out
def plotprops(options,args): #Go through all of the bins if options.sample.lower() == 'g': npops= 62 savefile= open('binmapping_g.sav','rb') elif options.sample.lower() == 'k': npops= 30 savefile= open('binmapping_k.sav','rb') fehs= pickle.load(savefile) afes= pickle.load(savefile) ndatas= pickle.load(savefile) savefile.close() for ii in range(npops): bovy_plot.bovy_print() bovy_plot.bovy_text(r'$[\mathrm{Fe/H}] = %.2f$' % (fehs[ii]) +'\n' r'$[\alpha/\mathrm{Fe}] = %.3f$' % (afes[ii]) +'\n' r'$N_{\mathrm{data}} = %i$' % (ndatas[ii]) +'\n' r'$\ln h_R / 8\,\mathrm{kpc} = %.1f$' % (numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii])/8.)) +'\n' +r'$\ln \sigma_R / 220\,\mathrm{km\,s}^{-1} = %.1f$' % (numpy.log(monoAbundanceMW.sigmar(fehs[ii],afes[ii])/220.)) +'\n' +r'$\ln \sigma_Z / 220\,\mathrm{km\,s}^{-1} = %.1f$' % (numpy.log(monoAbundanceMW.sigmaz(fehs[ii],afes[ii])/220.)), top_left=True,size=16.) #Plotname spl= options.outfilename.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] bovy_plot.bovy_end_print(newname)
def calcAllDerivProps(ii,options,args): #Go through all of the bins 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() if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5: return None 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.' % ii newname+= spl[-1] derivProps= calcDerivProps(newname,vo=options.fixvc/_REFV0,zh=options.fixzh, dlnvcdlnr=options.dlnvcdlnr) return derivProps
def generateHTML(options,args): outfile= open(options.outfilename,'w') outfile.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n') outfile.write('<html xmlns="http://www.w3.org/1999/xhtml">\n') outfile.write('<head>\n') outfile.write('<meta http-equiv="content-type" content="text/html; charset=utf-8" />\n') outfile.write('<title>Fit results for %s dwarfs</title>\n' % (options.sample.upper())) outfile.write('<meta name="description" content="Fit results for %s dwarfs" />\n' % (options.sample.upper())) outfile.write('</head>') outfile.write('<body>') 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) npops= len(fehs) savefile.close() if False: types= ['rdfh','rdfhrdvt','rdhr','rdsz', 'rdpout','rddvt','srsz','pout','dvt', 'loglhist','props','rdfhrdf','rdfhrdvtrdf'] if False: types= ['rdfh','rdhr','rdhrc','rdsz', 'rdpout','rdpoutc','fhpoutc','rddvt','srsz','srszc','pout', 'loglhist','props'] types= ['rdfh','rdhr','rdhrc','rdsz', 'hszsz','hszszc','pout',#'hrreal', 'loglhist','derived','props'] ntypes= len(types) for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k'))/8.) > -0.5: continue outfile.write('<p style="font-size:xx-large;">%i</p>\n' % ii) line= '' for jj in range(ntypes): line+= '<img src="%s" alt="" width="300" /> ' % (os.path.join(options.figdir,options.basename+'_%s_%i.png' % (types[jj],ii))) outfile.write(line+'<br>\n') outfile.write('<hr size="3" color="black">\n') outfile.write('</body>\n') outfile.write('</html>\n') outfile.close()
def calcAllPDFs(ii,options,args): #Go through all of the bins 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() if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): return numpy.zeros((options.nrds,options.nfhs)) 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.' % ii newname+= spl[-1] savefile= open(newname,'rb') try: if not _NOTDONEYET: params= pickle.load(savefile) mlogl= pickle.load(savefile) logl= pickle.load(savefile) except: return None 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])) for jj in range(marglogl.shape[0]): for kk in range(marglogl.shape[1]): marglogl[jj,kk]= misc.logsumexp(logl[jj,0,0,kk,:,:,:,0].flatten()) if marglogl[-1,-1] < -10000000000000.: return numpy.zeros((options.nrds,options.nfhs)) else: return marglogl
def plot1d(options,args): """Make a plot of a quantity's best-fit vs. FeH and aFe""" 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() #First calculate the derivative properties if not options.multi is None: derivProps= multi.parallel_map((lambda x: calcAllDerivProps(x,options,args)), range(npops), numcores=numpy.amin([options.multi, npops, multiprocessing.cpu_count()])) else: derivProps= [] for ii in range(npops): derivProps.append(calcAllDerivProps(ii,options,args)) #Load into plotthis plotthis= numpy.zeros(npops)+numpy.nan for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): continue plotthis[ii]= derivProps[ii][options.subtype.lower()] #Now plot bovy_plot.bovy_print() monoAbundanceMW.plotPixelFunc(fehs,afes,plotthis, zlabel=labels[options.subtype.lower()]) bovy_plot.bovy_end_print(options.outfilename) return None
colormap = matplotlib.cm.jet def _squeeze(o,omin,omax): return (o-omin)/(omax-omin) d = pickle.load(open('01024/g1536.01024.z0agedecomp.dat')) hz = d['hz']*1000 hzerr = d['hzerr']*1000 rexp = d['rexp'][(d['hzerr'] < 99)] rexperr = d['rexperr'][(d['hzerr'] < 99)] mass = d['mass'][(d['hzerr'] < 99)] #Bovy stuff bovyhz,bovyhzerr=zip(*[mam.hz(u[0],u[1],err=True) for u in zip(mam.fehs(),mam.afes())]) bovyrexp,bovyrexperr=zip(*[mam.hr(u[0],u[1],err=True) for u in zip(mam.fehs(),mam.afes())]) bovymass=np.array([mam.abundanceDist(u[0],u[1]) for u in zip(mam.fehs(),mam.afes())]) maxhr = 5 maxhz = 2000 bovyplotrexp = np.copy(bovyrexp) bighr = bovyrexp > maxhr bovyplotrexp[bighr] = maxhr-0.3 ax = plt.subplot(1,1,1) ages = [i['mean'] for i in d['age']] sizes = 10*(d['mass']/4e8) print sizes scat = plt.scatter(d['rexp'],hz,c=ages,s=sizes,edgecolors='none') plt.xlim(1,6.5)
def plotRdfh(options,args): #Go through all of the bins 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) npops= len(fehs) savefile.close() for ii in range(npops): 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.' % ii newname+= spl[-1] savefile= open(newname,'rb') try: if not _NOTDONEYET: params= pickle.load(savefile) mlogl= pickle.load(savefile) logl= pickle.load(savefile) except: continue finally: savefile.close() if _NOTDONEYET: logl[(logl == 0.)]= -numpy.finfo(numpy.dtype(numpy.float64)).max if options.restrictdvt: logl= logl[:,:,:,:,:,:,:,1:4,:,:,:] if options.restrictdf: hrs= numpy.log(numpy.linspace(1.5,5.,logl.shape[4])/_REFR0) srs= numpy.log(numpy.linspace(25.,70.,logl.shape[5])/_REFV0) szs= numpy.log(numpy.linspace(15.,60.,logl.shape[6])/_REFV0) lnhrin, lnsrin, lnszin= approxFitResult(fehs[ii],afes[ii]) hrindx= numpy.argmin((hrs-lnhrin)**2.) srindx= numpy.argmin((srs-lnsrin)**2.) szindx= numpy.argmin((szs-lnszin)**2.) minhrindx= hrindx-1 maxhrindx= hrindx+1 if minhrindx < 0: minhrindx+= 1 maxhrindx+= 1 elif maxhrindx >= logl.shape[4]: minhrindx-= 1 maxhrindx-= 1 minsrindx= srindx-1 maxsrindx= srindx+1 if minsrindx < 0: minsrindx+= 1 maxsrindx+= 1 elif maxsrindx >= logl.shape[5]: minsrindx-= 1 maxsrindx-= 1 minszindx= szindx-1 maxszindx= szindx+1 if minszindx < 0: minszindx+= 1 maxszindx+= 1 elif maxszindx >= logl.shape[6]: minszindx-= 1 maxszindx-= 1 logl= logl[:,:,:,:,minhrindx:maxhrindx+1,minsrindx:maxsrindx+1, minszindx:maxszindx+1,:,:,:,:] marglogl= numpy.zeros((logl.shape[0],logl.shape[3])) marglogldvt0= numpy.zeros((logl.shape[0],logl.shape[3])) condfh= numpy.zeros((logl.shape[3])) condlogp= numpy.zeros(logl.shape[0]) condfhdvt0= numpy.zeros((logl.shape[3])) condlogpdvt0= numpy.zeros(logl.shape[0]) if ii == 0: allmarglogl= numpy.zeros((logl.shape[0],logl.shape[3],npops)) for jj in range(marglogl.shape[0]): for kk in range(marglogl.shape[1]): indx= True-numpy.isnan(logl[jj,0,0,kk,:,:,:,:,:,:,:].flatten()) indxdvt0= True-numpy.isnan(logl[jj,0,0,kk,:,:,:,2,:,:,:].flatten()) if numpy.sum(indx) > 0: marglogl[jj,kk]= misc.logsumexp(logl[jj,0,0,kk,:,:,:,:,:,:,:].flatten()[indx]) else: marglogl[jj,kk]= -numpy.finfo(numpy.dtype(numpy.float64)).max if numpy.sum(indxdvt0) > 0: marglogldvt0[jj,kk]= misc.logsumexp(logl[jj,0,0,kk,:,:,:,2,:,:,:].flatten()[indxdvt0]) else: marglogldvt0[jj,kk]= -numpy.finfo(numpy.dtype(numpy.float64)).max condlogp[jj]= misc.logsumexp(marglogl[jj,:]) condlogl= marglogl[jj,:]-misc.logsumexp(marglogl[jj,:]) condfh[jj]= numpy.sum(numpy.exp(condlogl)*numpy.linspace(0.,1.,logl.shape[3]))/numpy.sum(numpy.exp(condlogl)) condlogpdvt0[jj]= misc.logsumexp(marglogldvt0[jj,:]) condlogldvt0= marglogldvt0[jj,:]-misc.logsumexp(marglogldvt0[jj,:]) condfhdvt0[jj]= numpy.sum(numpy.exp(condlogldvt0)*numpy.linspace(0.,1.,logl.shape[3]))/numpy.sum(numpy.exp(condlogldvt0)) if monoAbundanceMW.hr(fehs[ii],afes[ii]) < 3.5 \ and numpy.amax(logl) < 0.: #latter removes ridiculous bins allmarglogl[:,:,ii]= marglogl #Normalize alogl= marglogl-numpy.amax(marglogl) bovy_plot.bovy_print() bovy_plot.bovy_dens2d(numpy.exp(alogl).T, origin='lower',cmap='gist_yarg', interpolation='nearest', xrange=[1.5,4.5],yrange=[0.,1.], xlabel=r'$R_d$',ylabel=r'$f_h$') s= 2.*condlogp s-= numpy.amax(s) s+= 16. s*= 3. bovy_plot.bovy_plot(numpy.linspace(1.5,4.5,logl.shape[0]), condfh,color='0.75',ls='-', overplot=True,zorder=2) bovy_plot.bovy_plot(numpy.linspace(1.5,4.5,logl.shape[0]), condfh,color='0.75',marker='o', s=s,scatter=True,overplot=True,zorder=10) maxindx= numpy.argmax(s) bovy_plot.bovy_plot(numpy.linspace(1.5,4.5,logl.shape[0])[maxindx], condfh[maxindx],color='blue',marker='o', ls='none', ms=8.,mec='none', overplot=True,zorder=13) #dvt0 s= 2.*condlogpdvt0 s-= numpy.amax(s) s+= 16. s*= 3. if not options.restrictdvt: bovy_plot.bovy_plot(numpy.linspace(1.5,4.5,logl.shape[0]), condfhdvt0,color='0.25',ls='-', overplot=True,zorder=1) bovy_plot.bovy_plot(numpy.linspace(1.5,4.5,logl.shape[0]), condfhdvt0,color='0.25',marker='o', s=s,scatter=True,overplot=True,zorder=11) maxindx= numpy.argmax(s) bovy_plot.bovy_plot(numpy.linspace(1.5,4.5,logl.shape[0])[maxindx], condfhdvt0[maxindx],color='red',marker='o', ls='none', ms=8.,mec='none', overplot=True,zorder=12) #Plotname spl= options.outfilename.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] if options.restrictdf and not options.restrictdvt: bovy_plot.bovy_text(r'$\mathrm{Restricted\ DF\ parameters}$', top_right=True,size=14.) elif options.restrictdvt and not options.restrictdf: bovy_plot.bovy_text(r'$\mathrm{Restricted}\ \Delta \bar{V}_T\ \mathrm{range}$', top_right=True,size=14.) elif options.restrictdvt and options.restrictdf: bovy_plot.bovy_text(r'$\mathrm{Restricted\ DF\ parameters}$' +'\n' +r'$\mathrm{Restricted}\ \Delta \bar{V}_T\ \mathrm{range}$', top_right=True,size=14.) bovy_plot.bovy_end_print(newname) #Now plot combined alogl= numpy.sum(allmarglogl,axis=2)\ -numpy.amax(numpy.sum(allmarglogl,axis=2)) bovy_plot.bovy_print() bovy_plot.bovy_dens2d(numpy.exp(alogl).T, origin='lower',cmap='gist_yarg', interpolation='nearest', xrange=[1.5,4.5],yrange=[0.,1.], xlabel=r'$R_d$',ylabel=r'$f_h$') bovy_plot.bovy_end_print(options.outfilename)
def plot2d(options,args): """Make a plot of a quantity's best-fit vs. FeH and aFe""" 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() #First calculate the derivative properties if not options.multi is None: derivProps= multi.parallel_map((lambda x: calcAllDerivProps(x,options,args)), range(npops), numcores=numpy.amin([options.multi, npops, multiprocessing.cpu_count()])) else: derivProps= [] for ii in range(npops): derivProps.append(calcAllDerivProps(ii,options,args)) xprop= options.subtype.split(',')[0] yprop= options.subtype.split(',')[1] if xprop == 'fracfaint' or yprop == 'fracfaint': #Read the data print "Reading the data ..." raw= read_rawdata(options) #Bin the data binned= pixelAfeFeh(raw,dfeh=0.1,dafe=0.05) for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and (ii == 50 or ii == 57)) \ or (options.sample.lower() == 'k' and ii < 7): continue data= binned(fehs[ii],afes[ii]) indx= (data.dered_r > 17.8) derivProps[ii]['fracfaint']= numpy.sum(indx)/float(len(indx)) derivProps[ii]['fracfaint_err']= 0. if xprop == 'nfaint' or yprop == 'nfaint': #Read the data print "Reading the data ..." raw= read_rawdata(options) #Bin the data binned= pixelAfeFeh(raw,dfeh=0.1,dafe=0.05) for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): continue data= binned(fehs[ii],afes[ii]) indx= (data.dered_r > 17.8) derivProps[ii]['nfaint']= numpy.sum(indx) derivProps[ii]['nfaint_err']= 0. if xprop == 'hz' or yprop == 'hz': for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): continue hz, hzerr= monoAbundanceMW.hz(fehs[ii],afes[ii], k=(options.sample.lower() == 'k'), err=True) derivProps[ii]['hz']= hz derivProps[ii]['hz_err']= hzerr if xprop == 'hr' or yprop == 'hr': for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): continue hr, hrerr= monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k'), err=True) derivProps[ii]['hr']= hr derivProps[ii]['hr_err']= hrerr #Load into plotthis plotthis_x= numpy.zeros(npops)+numpy.nan plotthis_y= numpy.zeros(npops)+numpy.nan plotthis_x_err= numpy.zeros(npops)+numpy.nan plotthis_y_err= numpy.zeros(npops)+numpy.nan for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): continue plotthis_x[ii]= derivProps[ii][xprop] plotthis_y[ii]= derivProps[ii][yprop] plotthis_x_err[ii]= derivProps[ii][xprop+'_err'] plotthis_y_err[ii]= derivProps[ii][yprop+'_err'] #Now plot bovy_plot.bovy_print(fig_width=6.) bovy_plot.bovy_plot(plotthis_x,plotthis_y, s=25.,c=afes, cmap='jet', xlabel=labels[xprop],ylabel=labels[yprop], clabel=r'$[\alpha/\mathrm{Fe}]$', xrange=ranges[xprop],yrange=ranges[yprop], vmin=0.,vmax=0.5, scatter=True,edgecolors='none', colorbar=True) colormap = cm.jet for ii in range(npops): if numpy.isnan(plotthis_x[ii]): continue pyplot.errorbar(plotthis_x[ii], plotthis_y[ii], xerr=plotthis_x_err[ii], yerr=plotthis_y_err[ii], color=colormap(_squeeze(afes[ii], numpy.amax([numpy.amin(afes)]), numpy.amin([numpy.amax(afes)]))), elinewidth=1.,capsize=3,zorder=0) bovy_plot.bovy_end_print(options.outfilename) return None
def plotbestz(options,args): """Make a plot of a quantity's best-fit vs. FeH and aFe""" 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() #First calculate the derivative properties if not options.multi is None: derivProps= multi.parallel_map((lambda x: calcAllSurfErrZ(x,options,args)), range(npops), numcores=numpy.amin([options.multi, npops, multiprocessing.cpu_count()])) else: derivProps= [] for ii in range(npops): derivProps.append(calcAllSurfErrZ(ii,options,args)) #Load into plotthis plotthis= numpy.zeros(npops)+numpy.nan plotthis_y= numpy.zeros(npops)+numpy.nan plotthis_y_err= numpy.zeros(npops)+numpy.nan for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and ii < 6) \ or (options.sample.lower() == 'k' and ii < 7): continue #Determine best-r #indx= numpy.argmin(derivProps[ii][:,2]/numpy.fabs(derivProps[ii][:,1])) indx= numpy.argmin(numpy.fabs(derivProps[ii][:,2])) plotthis[ii]= derivProps[ii][indx,0] plotthis_y[ii]= derivProps[ii][indx,1] plotthis_y_err[ii]= derivProps[ii][indx,3] #Now plot bovy_plot.bovy_print() print plotthis, plotthis_y bovy_plot.bovy_plot(plotthis,plotthis_y,'ko', xlabel=r'$Z\ (\mathrm{kpc})$', ylabel=r'$\Sigma(R_0,|Z|)\ (M_\odot\,\mathrm{pc}^{-2})$', xrange=[0.,5.], yrange=[10.,1050.],#,numpy.nanmin(plotthis_y)-10., # numpy.nanmax(plotthis_y)+10.], semilogy=True) pyplot.errorbar(plotthis, plotthis_y, yerr=plotthis_y_err, elinewidth=1.,capsize=3,zorder=0, color='k',linestyle='none') #trs= numpy.linspace(4.3,9.,1001) #pyplot.plot(trs,72.*numpy.exp(-(trs-8.)/3.),'k--') #pyplot.plot(trs,72.*numpy.exp(-(trs-8.)/2.),'k-.') #pyplot.plot(trs,72.*numpy.exp(-(trs-8.)/4.),'k:') bovy_plot.bovy_end_print(options.outfilename.replace('.png','_zvssurf.png')) return None
def plotbestr(options,args): """Make a plot of a quantity's best-fit vs. FeH and aFe""" 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() #First calculate the derivative properties if not options.multi is None: derivProps= multi.parallel_map((lambda x: calcAllSurfErr(x,options,args)), range(npops), numcores=numpy.amin([options.multi, npops, multiprocessing.cpu_count()])) else: derivProps= [] for ii in range(npops): derivProps.append(calcAllSurfErr(ii,options,args)) #If a second argument is given, this gives a set of rs at which also to calculate the surface density if len(args) > 1: if os.path.exists(args[1]): surffile= open(args[1],'rb') altsurfrs= pickle.load(surffile) surffile.close() calcExtra= True else: raise IOError("extra savefilename with surface-densities has to exist when it is specified") else: calcExtra= False if not calcExtra: #Fiducial, for which we also calculate everything at the mean radius of each MAP #Load g orbits orbitsfile= 'gOrbitsNew.sav' savefile= open(orbitsfile,'rb') orbits= pickle.load(savefile) savefile.close() #Cut to S/N, logg, and EBV indx= (orbits.sna > 15.)*(orbits.logga > 4.2)*(orbits.ebv < 0.3) orbits= orbits[indx] #Load the orbits into the pixel structure pix= pixelAfeFeh(orbits,dfeh=0.1,dafe=0.05) #Now calculate meanr rmean= numpy.zeros(npops) for ii in range(npops): data= pix(fehs[ii],afes[ii]) vals= data.densrmean*8. if False:#True: rmean[ii]= numpy.mean(vals) else: rmean[ii]= numpy.median(vals) #Load into plotthis plotthis= numpy.zeros(npops)+numpy.nan plotthis_y= numpy.zeros(npops)+numpy.nan plotthis_y_err= numpy.zeros(npops)+numpy.nan plotthiskz_y= numpy.zeros(npops)+numpy.nan plotthiskz_y_err= numpy.zeros(npops)+numpy.nan altplotthis= numpy.zeros(npops)+numpy.nan altplotthis_y= numpy.zeros(npops)+numpy.nan altplotthis_y_err= numpy.zeros(npops)+numpy.nan altplotthiskz_y= numpy.zeros(npops)+numpy.nan altplotthiskz_y_err= numpy.zeros(npops)+numpy.nan for ii in range(npops): if numpy.log(monoAbundanceMW.hr(fehs[ii],afes[ii], k=(options.sample.lower() == 'k')) /8.) > -0.5 \ or (options.sample.lower() == 'g' and (ii < 0 or ii == 50)) \ or (options.sample.lower() == 'k' and ii < 7): continue #Determine best-r #indx= numpy.argmin(derivProps[ii][:,2]/numpy.fabs(derivProps[ii][:,1])) indx= numpy.argmin(numpy.fabs(derivProps[ii][:,2])) if indx == 0: indx= int(numpy.floor(numpy.random.uniform()*10)) plotthis[ii]= derivProps[ii][indx,0] plotthis_y[ii]= derivProps[ii][indx,1] plotthis_y_err[ii]= derivProps[ii][indx,3] plotthiskz_y[ii]= derivProps[ii][indx,4] plotthiskz_y_err[ii]= derivProps[ii][indx,5] if calcExtra: indx= numpy.argmin(numpy.fabs(derivProps[ii][:,0]-altsurfrs[ii])) altplotthis[ii]= derivProps[ii][indx,0] altplotthis_y[ii]= derivProps[ii][indx,1] altplotthis_y_err[ii]= derivProps[ii][indx,3] altplotthiskz_y[ii]= derivProps[ii][indx,4] altplotthiskz_y_err[ii]= derivProps[ii][indx,5] else: indx= numpy.argmin(numpy.fabs(derivProps[ii][:,0]-rmean[ii])) altplotthis[ii]= derivProps[ii][indx,0] altplotthis_y[ii]= derivProps[ii][indx,1] altplotthis_y_err[ii]= derivProps[ii][indx,3] altplotthiskz_y[ii]= derivProps[ii][indx,4] altplotthiskz_y_err[ii]= derivProps[ii][indx,5] #Now plot bovy_plot.bovy_print() monoAbundanceMW.plotPixelFunc(fehs,afes,plotthis, zlabel=r'$R_\Sigma\ (\mathrm{kpc})$') bovy_plot.bovy_end_print(options.outfilename) bovy_plot.bovy_print() print plotthis, plotthis_y bovy_plot.bovy_plot(plotthis,plotthis_y,'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.],#,numpy.nanmin(plotthis_y)-10., # numpy.nanmax(plotthis_y)+10.], semilogy=True) pyplot.errorbar(plotthis, plotthis_y, yerr=plotthis_y_err, elinewidth=1.,capsize=3,zorder=0, color='k',linestyle='none') trs= numpy.linspace(4.3,9.,1001) pyplot.plot(trs,72.*numpy.exp(-(trs-8.)/3.),'k--') pyplot.plot(trs,72.*numpy.exp(-(trs-8.)/2.),'k-.') pyplot.plot(trs,72.*numpy.exp(-(trs-8.)/4.),'k:') #Fit exponential #indx= (plotthis < 8.) #plotthis= plotthis[indx] #plotthis_y= plotthis_y[indx] #plotthis_y_err= plotthis_y_err[indx] exp_params= optimize.fmin_powell(expcurve, numpy.log(numpy.array([72.,2.5])), args=(plotthis,plotthis_y,plotthis_y_err)) pyplot.plot(trs,numpy.exp(exp_params[0]-(trs-8.)/numpy.exp(exp_params[1])), 'k-',lw=2.) print numpy.exp(exp_params) bovy_plot.bovy_end_print(options.outfilename.replace('.png','_rvssurf.png')) #Save if calcExtra: save_pickles(options.outfilename.replace('.png','_rvssurf.sav'), plotthis,plotthis_y,plotthis_y_err, plotthiskz_y,plotthiskz_y_err, altplotthis,altplotthis_y,altplotthis_y_err, altplotthiskz_y,altplotthiskz_y_err) else: save_pickles(options.outfilename.replace('.png','_rvssurf.sav'), plotthis,plotthis_y,plotthis_y_err, plotthiskz_y,plotthiskz_y_err, altplotthis,altplotthis_y,altplotthis_y_err, altplotthiskz_y,altplotthiskz_y_err) 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 plotActionData(options,args): #Read the data print "Reading the data ..." raw= read_rawdata(options) #Setup error mc integration options.nmcerr= 1#in case this isn't set correctly raw, errstuff= setup_err_mc(raw,options) #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 #print binned.feh(ii), binned.afe(jj), len(data) fehs.append(binned.feh(ii)) afes.append(binned.afe(jj)) nabundancebins= len(fehs) fehs= numpy.array(fehs) afes= numpy.array(afes) #print numpy.argmin((fehs+0.25)**2.+(afes-0.175)**2.) #Setup potential params= numpy.array([-1.33663190049,0.998420232634,-3.49031638164,0.31949840593,-1.63965169376]) try: pot= setup_potential(params,options,0)#Assume that the potential parameters come from a file with a single set of df parameters first except RuntimeError: #if this set of parameters gives a nonsense potential raise ro= 1. vo= params[1] aA= setup_aA(pot,options) jr, lz, jz= [], [], [] #Get data ready params= [None,None,None,None,None,None,params[0],params[1],params[2],params[3],params[4]] for indx in range(len(fehs)): if numpy.log(monoAbundanceMW.hr(fehs[indx],afes[indx],k=(options.sample.lower() == 'k'))/8.) > -0.5 : continue R,vR,vT,z,vz,e,ee,eee= prepare_coordinates(params,indx,fehs,afes,binned, errstuff, options,1) tjr, tlz, tjz= aA(R.flatten(),vR.flatten(),vT.flatten(),z.flatten(),vz.flatten()) jr.extend(list(tjr)) lz.extend(list(tlz)) jz.extend(list(tjz)) #Now plot jr= numpy.array(jr).flatten()*ro*vo*_REFR0*_REFV0 lz= numpy.array(lz).flatten()*ro*vo*_REFR0*_REFV0 jz= numpy.array(jz).flatten()*ro*vo*_REFR0*_REFV0 bovy_plot.bovy_print() levels= special.erf(numpy.sqrt(0.5)*numpy.arange(1,3)) levels= list(levels) levels.append(1.01) print len(jr) if options.type.lower() == 'lzjr': axScatter, axHistx,axHisty= bovy_plot.scatterplot(lz/220.,jr/220.,',', xlabel=r'$L_z\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$', ylabel=r'$J_R\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$', xrange=[0.,3600./220.], yrange=[0.,500./220.], onedhists=True, bins=41, levels=levels,retAxes=True) axScatter.set_xlim(0.,3600./220.) axScatter.set_ylim(0.,500./220.) axScatter.set_xlabel(r'$L_z\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$') axScatter.set_ylabel(r'$J_R\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$') axHistx.set_xlim( axScatter.get_xlim() ) axHisty.set_ylim( axScatter.get_ylim() ) #Calculate locus of 6 kpc pericenter nlzs= 1001 plzs= numpy.linspace(0.,6./8.,nlzs) pjrs= numpy.zeros(nlzs) for ii in range(nlzs): pjrs[ii]= aA(6./8.,0.,plzs[ii]/6.*8.,0.,0.)[0]*ro*vo*_REFR0*_REFV0 bovy_plot.bovy_plot(plzs*ro*vo*_REFR0*_REFV0/220., pjrs/220.,'k--',overplot=True) plzs= numpy.linspace(11./8.,2.,nlzs) pjrs= numpy.zeros(nlzs) for ii in range(nlzs): pjrs[ii]= aA(11./8.,0.,plzs[ii]/11.*8.,0.,0.)[0]*ro*vo*_REFR0*_REFV0 bovy_plot.bovy_plot(plzs*ro*vo*_REFR0*_REFV0/220., pjrs/220.,'k--',overplot=True) elif options.type.lower() == 'jrjz': axScatter, axHistx, axHisty= bovy_plot.scatterplot(jr/220.,jz/220.,color='k',marker=',',ls='none', xlabel=r'$J_R\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$', ylabel=r'$J_Z\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$', xrange=[0.,500./220.], yrange=[0.,250./220.], bins=41, onedhists=True, levels=levels, retAxes=True) axScatter.set_xlim(0.,500./220.) axScatter.set_ylim(0.,250./220.) axScatter.set_ylabel(r'$J_Z\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$') axScatter.set_xlabel(r'$J_R\ (220\,\mathrm{km\,s}^{-1}\,\mathrm{kpc})$') axHistx.set_xlim( axScatter.get_xlim() ) axHisty.set_ylim( axScatter.get_ylim() ) #if options.sample == 'g': # bovy_plot.bovy_text(r'$\mathrm{G\!-\!type\ dwarfs}$',top_right=True,size=16.) #elif options.sample == 'k': # bovy_plot.bovy_text(r'$\mathrm{K\!-\!type\ dwarfs}$',top_right=True,size=16.) 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)