def calc_nonaxi(params, barfile, options, data, logpiso, nlocs, locations, phio): # Average over data and integrate over distance surfmass, meanvr, meanvt, sigmar2, sigmat2, sigmart, vertexdev, surfmass_init, meanvt_init, sigmar2_init, sigmat2_init, ii, jj, grid = read_output( barfile ) xgrid, ygrid = marginalize_phasedist.phiR_input(51, 0.5, 2.0) interpObj = marginalize_phasedist.interp_velocity_field(xgrid, ygrid, surfmass, meanvr, meanvt) interpObjAxi = marginalize_phasedist.interp_velocity_field(xgrid, ygrid, surfmass_init, 0.0, meanvt_init) avg_plate_model = numpy.zeros(nlocs) for ii in range(nlocs): # Calculate vlos | los indx = data["LOCATION"] == locations[ii] thesedata = data[indx] thislogpiso = logpiso[indx, :] if not options.multi is None: mvlos = multi.parallel_map( ( lambda x: mvlosnonaxi( params, interpObj, interpObjAxi, thesedata[x], options, thislogpiso[x, :], phio ) ), range(len(thesedata)), numcores=numpy.amin([len(thesedata), multiprocessing.cpu_count(), options.multi]), ) else: mvlos = numpy.zeros(len(data)) for jj in range(len(thesedata)): print jj mvlos[jj] = mvlosnonaxi( params, interpObj, interpObjAxi, thesedata[jj], options, thislogpiso[jj, :], phio ) # Calculate mean and velocity dispersion avg_plate_model[ii] = numpy.mean(mvlos) return avg_plate_model * _REFV0 * params[0]
def calc_model(params,options,data,logpiso,logpisodwarf,df,nlocs,locations,iso): avg_plate_model= numpy.zeros(nlocs) for ii in range(nlocs): #Calculate vlos | los indx= (data['LOCATION'] == locations[ii]) thesedata= data[indx] thislogpiso= logpiso[indx,:] if options.dwarf: thislogpisodwarf= logpisodwarf[indx,:] else: thislogpisodwarf= None vlos= numpy.linspace(-200.,200.,options.nvlos) pvlos= numpy.zeros(options.nvlos) if not options.multi is None: pvlos= multi.parallel_map((lambda x: pvlosplate(params,vlos[x], thesedata, df,options, thislogpiso, thislogpisodwarf,iso)), range(options.nvlos), numcores=numpy.amin([len(vlos),multiprocessing.cpu_count(),options.multi])) else: for jj in range(options.nvlos): print jj pvlos[jj]= pvlosplate(params,vlos[jj],thesedata,df,options, thislogpiso,thislogpisodwarf) pvlos-= logsumexp(pvlos) pvlos= numpy.exp(pvlos) #Calculate mean and velocity dispersion avg_plate_model[ii]= numpy.sum(vlos*pvlos) return avg_plate_model
def fakeDFData_abundance_singles(binned,options,args,fehs,afes): savename= args[0] if True: if not options.multi is None: dummy= multi.parallel_map((lambda x: fakeDFData_abundance_singles_single(options,args,fehs,afes,x, savename)), range(len(fehs)), numcores=numpy.amin([len(fehs), multiprocessing.cpu_count(), options.multi])) else: for ii in range(len(fehs)): fakeDFData_abundance_singles_single(options,args,fehs,afes,ii, savename) #Combine return combine_abundance_singles(binned,options,savename,fehs,afes)
def calc_nonaxi(params, barfile, options, data, logpiso, nlocs, locations, phio): #Average over data and integrate over distance surfmass, meanvr, meanvt, sigmar2, sigmat2, sigmart, vertexdev, surfmass_init, meanvt_init, sigmar2_init, sigmat2_init, ii, jj, grid = read_output( barfile) xgrid, ygrid = marginalize_phasedist.phiR_input(51, 0.5, 2.) interpObj = marginalize_phasedist.interp_velocity_field( xgrid, ygrid, surfmass, meanvr, meanvt) interpObjAxi = marginalize_phasedist.interp_velocity_field( xgrid, ygrid, surfmass_init, 0., meanvt_init) avg_plate_model = numpy.zeros(nlocs) for ii in range(nlocs): #Calculate vlos | los indx = (data['LOCATION'] == locations[ii]) thesedata = data[indx] thislogpiso = logpiso[indx, :] if not options.multi is None: mvlos = multi.parallel_map((lambda x: mvlosnonaxi( params, interpObj, interpObjAxi, thesedata[x], options, thislogpiso[x, :], phio)), range(len(thesedata)), numcores=numpy.amin([ len(thesedata), multiprocessing.cpu_count(), options.multi ])) else: mvlos = numpy.zeros(len(data)) for jj in range(len(thesedata)): print jj mvlos[jj] = mvlosnonaxi(params, interpObj, interpObjAxi, thesedata[jj], options, thislogpiso[jj, :], phio) #Calculate mean and velocity dispersion avg_plate_model[ii] = numpy.mean(mvlos) return avg_plate_model * _REFV0 * params[0]
def plot_chi2(parser): (options,args)= parser.parse_args() if len(args) == 0 or options.plotfilename is None: parser.print_help() return #Read the data print "Reading the data ..." data= readVclosData(postshutdown=options.postshutdown, fehcut=options.fehcut, cohort=options.cohort, lmin=options.lmin, bmax=options.bmax, ak=True, cutmultiples=options.cutmultiples, validfeh=options.indivfeh, #if indivfeh, we need validfeh jkmax=options.jkmax, datafilename=options.fakedata) #HACK indx= (data['J0MAG']-data['K0MAG'] < 0.5) data['J0MAG'][indx]= 0.5+data['K0MAG'][indx] #Cut inner disk locations #data= data[(data['GLON'] > 75.)] #Cut outliers #data= data[(data['VHELIO'] < 200.)*(data['VHELIO'] > -200.)] print "Using %i data points ..." % len(data) #Set up the isochrone if not options.isofile is None and os.path.exists(options.isofile): print "Loading the isochrone model ..." isofile= open(options.isofile,'rb') iso= pickle.load(isofile) if options.indivfeh: zs= pickle.load(isofile) if options.varfeh: locl= pickle.load(isofile) isofile.close() else: print "Setting up the isochrone model ..." if options.indivfeh: #Load all isochrones iso= [] zs= numpy.arange(0.0005,0.03005,0.0005) for ii in range(len(zs)): iso.append(isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, Z=zs[ii])) elif options.varfeh: locs= list(set(data['LOCATION'])) iso= [] for ii in range(len(locs)): indx= (data['LOCATION'] == locs[ii]) locl= numpy.mean(data['GLON'][indx]*_DEGTORAD) iso.append(isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, marginalizefeh=True, glon=locl)) else: iso= isomodel.isomodel(imfmodel=options.imfmodel,Z=options.Z, expsfh=options.expsfh) if options.dwarf: iso= [iso, isomodel.isomodel(imfmodel=options.imfmodel,Z=options.Z, dwarf=True,expsfh=options.expsfh)] else: iso= [iso] if not options.isofile is None: isofile= open(options.isofile,'wb') pickle.dump(iso,isofile) if options.indivfeh: pickle.dump(zs,isofile) elif options.varfeh: pickle.dump(locl,isofile) isofile.close() df= None print "Pre-calculating isochrone distance prior ..." logpiso= numpy.zeros((len(data),_BINTEGRATENBINS)) ds= numpy.linspace(_BINTEGRATEDMIN,_BINTEGRATEDMAX, _BINTEGRATENBINS) dm= _dm(ds) for ii in range(len(data)): mh= data['H0MAG'][ii]-dm if options.indivfeh: #Find closest Z thisZ= isodist.FEH2Z(data[ii]['FEH']) indx= numpy.argmin((thisZ-zs)) logpiso[ii,:]= iso[0][indx](numpy.zeros(_BINTEGRATENBINS)+(data['J0MAG']-data['K0MAG'])[ii],mh) elif options.varfeh: #Find correct iso indx= (locl == data[ii]['LOCATION']) logpiso[ii,:]= iso[0][indx](numpy.zeros(_BINTEGRATENBINS)+(data['J0MAG']-data['K0MAG'])[ii],mh) else: logpiso[ii,:]= iso[0](numpy.zeros(_BINTEGRATENBINS) +(data['J0MAG']-data['K0MAG'])[ii],mh) if options.dwarf: logpisodwarf= numpy.zeros((len(data),_BINTEGRATENBINS)) dwarfds= numpy.linspace(_BINTEGRATEDMIN_DWARF,_BINTEGRATEDMAX_DWARF, _BINTEGRATENBINS) dm= _dm(dwarfds) for ii in range(len(data)): mh= data['H0MAG'][ii]-dm logpisodwarf[ii,:]= iso[1](numpy.zeros(_BINTEGRATENBINS) +(data['J0MAG']-data['K0MAG'])[ii],mh) else: logpisodwarf= None #Load initial parameters from file savefile= open(args[0],'rb') params= pickle.load(savefile) if not options.index is None: params= params[options.index] savefile.close() #params[0]= 245./235. #params[1]= 8.5/8. #Calculate data means etc. #Calculate means locations= list(set(data['LOCATION'])) nlocs= len(locations) l_plate= numpy.zeros(nlocs) avg_plate= numpy.zeros(nlocs) sig_plate= numpy.zeros(nlocs) siga_plate= numpy.zeros(nlocs) sigerr_plate= numpy.zeros(nlocs) fidlogl= logl.logl(init=params,data=data,options=options) logl_plate= numpy.zeros(nlocs) for ii in range(nlocs): indx= (data['LOCATION'] == locations[ii]) l_plate[ii]= numpy.mean(data['GLON'][indx]) avg_plate[ii]= numpy.mean(data['VHELIO'][indx]) sig_plate[ii]= numpy.std(data['VHELIO'][indx]) siga_plate[ii]= numpy.std(data['VHELIO'][indx])/numpy.sqrt(numpy.sum(indx)) sigerr_plate[ii]= bootstrap_sigerr(data['VHELIO'][indx]) #Logl logl_plate[ii]= -2.*(numpy.sum(fidlogl[indx])-numpy.sum(fidlogl)/len(indx)*numpy.sum(indx)) #Calculate plate means and variances from the model avg_plate_model= numpy.zeros(nlocs) sig_plate_model= numpy.zeros(nlocs) for ii in range(nlocs): #Calculate vlos | los indx= (data['LOCATION'] == locations[ii]) thesedata= data[indx] thislogpiso= logpiso[indx,:] if options.dwarf: thislogpisodwarf= logpisodwarf[indx,:] else: thislogpisodwarf= None vlos= numpy.linspace(-200.,200.,options.nvlos) pvlos= numpy.zeros(options.nvlos) if not options.multi is None: pvlos= multi.parallel_map((lambda x: pvlosplate(params,vlos[x], thesedata, df,options, thislogpiso, thislogpisodwarf,iso)), range(options.nvlos), numcores=numpy.amin([len(vlos),multiprocessing.cpu_count(),options.multi])) else: for jj in range(options.nvlos): print jj pvlos[jj]= pvlosplate(params,vlos[jj],thesedata,df,options, thislogpiso,thislogpisodwarf,iso) pvlos-= logsumexp(pvlos) pvlos= numpy.exp(pvlos) #Calculate mean and velocity dispersion avg_plate_model[ii]= numpy.sum(vlos*pvlos) sig_plate_model[ii]= numpy.sqrt(numpy.sum(vlos**2.*pvlos)\ -avg_plate_model[ii]**2.) #Plot everything left, bottom, width, height= 0.1, 0.4, 0.8, 0.3 axTop= pyplot.axes([left,bottom,width,height]) left, bottom, width, height= 0.1, 0.1, 0.8, 0.3 axChi2= pyplot.axes([left,bottom,width,height]) #left, bottom, width, height= 0.1, 0.1, 0.8, 0.2 #axSig= pyplot.axes([left,bottom,width,height]) fig= pyplot.gcf() #Plot the difference fig.sca(axTop) bovy_plot.bovy_plot([0.,360.],[0.,0.],'-',color='0.5',overplot=True) bovy_plot.bovy_plot(l_plate, avg_plate-avg_plate_model, 'ko',overplot=True) pyplot.errorbar(l_plate,avg_plate-avg_plate_model, yerr=siga_plate,marker='o',color='k',linestyle='none',elinestyle='-') pyplot.ylabel(r'$\langle v_{\mathrm{los}}\rangle_{\mathrm{data}}-\langle v_{\mathrm{los}}\rangle_{\mathrm{model}}$') pyplot.ylim(-14.5,14.5) pyplot.xlim(0.,360.) bovy_plot._add_ticks() nullfmt = NullFormatter() # no labels axTop.xaxis.set_major_formatter(nullfmt) #pyplot.xlabel(r'$\mathrm{Galactic\ longitude}\ [\mathrm{deg}]$') pyplot.xlim(0.,360.) bovy_plot._add_ticks() #Plot the chi2 fig.sca(axChi2) bovy_plot.bovy_plot([0.,360.],[0.,0.],'-',color='0.5',overplot=True) bovy_plot.bovy_plot(l_plate, logl_plate, 'ko',overplot=True) pyplot.ylabel(r'$\Delta \chi^2$') #pyplot.ylim(numpy.amin(logl_plate),numpy.amax(logl_plate)) pyplot.ylim(-150.,150.) pyplot.xlim(0.,360.) bovy_plot._add_ticks() pyplot.xlabel(r'$\mathrm{Galactic\ longitude}\ [\mathrm{deg}]$') pyplot.xlim(0.,360.) bovy_plot._add_ticks() #Save bovy_plot.bovy_end_print(options.plotfilename) return None
def plot_bestfit(parser): (options, args) = parser.parse_args() if len(args) == 0 or options.plotfilename is None: parser.print_help() return # Read the data print "Reading the data ..." data = readVclosData( postshutdown=options.postshutdown, fehcut=options.fehcut, cohort=options.cohort, lmin=options.lmin, bmax=options.bmax, ak=True, cutmultiples=options.cutmultiples, validfeh=options.indivfeh, # if indivfeh, we need validfeh jkmax=options.jkmax, datafilename=options.fakedata, ) # HACK indx = data["J0MAG"] - data["K0MAG"] < 0.5 data["J0MAG"][indx] = 0.5 + data["K0MAG"][indx] # Cut inner disk locations # data= data[(data['GLON'] > 75.)] # Cut outliers # data= data[(data['VHELIO'] < 200.)*(data['VHELIO'] > -200.)] print "Using %i data points ..." % len(data) # Set up the isochrone if not options.isofile is None and os.path.exists(options.isofile): print "Loading the isochrone model ..." isofile = open(options.isofile, "rb") iso = pickle.load(isofile) if options.indivfeh: zs = pickle.load(isofile) if options.varfeh: locl = pickle.load(isofile) isofile.close() else: print "Setting up the isochrone model ..." if options.indivfeh: # Load all isochrones iso = [] zs = numpy.arange(0.0005, 0.03005, 0.0005) for ii in range(len(zs)): iso.append(isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, Z=zs[ii])) elif options.varfeh: locs = list(set(data["LOCATION"])) iso = [] for ii in range(len(locs)): indx = data["LOCATION"] == locs[ii] locl = numpy.mean(data["GLON"][indx] * _DEGTORAD) iso.append( isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, marginalizefeh=True, glon=locl) ) else: iso = isomodel.isomodel(imfmodel=options.imfmodel, Z=options.Z, expsfh=options.expsfh) if options.dwarf: iso = [iso, isomodel.isomodel(imfmodel=options.imfmodel, Z=options.Z, dwarf=True, expsfh=options.expsfh)] else: iso = [iso] if not options.isofile is None: isofile = open(options.isofile, "wb") pickle.dump(iso, isofile) if options.indivfeh: pickle.dump(zs, isofile) elif options.varfeh: pickle.dump(locl, isofile) isofile.close() df = None print "Pre-calculating isochrone distance prior ..." logpiso = numpy.zeros((len(data), _BINTEGRATENBINS)) ds = numpy.linspace(_BINTEGRATEDMIN, _BINTEGRATEDMAX, _BINTEGRATENBINS) dm = _dm(ds) for ii in range(len(data)): mh = data["H0MAG"][ii] - dm if options.indivfeh: # Find closest Z thisZ = isodist.FEH2Z(data[ii]["FEH"]) indx = numpy.argmin(numpy.fabs(thisZ - zs)) logpiso[ii, :] = iso[0][indx](numpy.zeros(_BINTEGRATENBINS) + (data["J0MAG"] - data["K0MAG"])[ii], mh) elif options.varfeh: # Find correct iso indx = locl == data[ii]["LOCATION"] logpiso[ii, :] = iso[0][indx](numpy.zeros(_BINTEGRATENBINS) + (data["J0MAG"] - data["K0MAG"])[ii], mh) else: logpiso[ii, :] = iso[0](numpy.zeros(_BINTEGRATENBINS) + (data["J0MAG"] - data["K0MAG"])[ii], mh) if options.dwarf: logpisodwarf = numpy.zeros((len(data), _BINTEGRATENBINS)) dwarfds = numpy.linspace(_BINTEGRATEDMIN_DWARF, _BINTEGRATEDMAX_DWARF, _BINTEGRATENBINS) dm = _dm(dwarfds) for ii in range(len(data)): mh = data["H0MAG"][ii] - dm logpisodwarf[ii, :] = iso[1](numpy.zeros(_BINTEGRATENBINS) + (data["J0MAG"] - data["K0MAG"])[ii], mh) else: logpisodwarf = None # Calculate data means etc. # Calculate means locations = list(set(data["LOCATION"])) nlocs = len(locations) l_plate = numpy.zeros(nlocs) avg_plate = numpy.zeros(nlocs) sig_plate = numpy.zeros(nlocs) siga_plate = numpy.zeros(nlocs) sigerr_plate = numpy.zeros(nlocs) for ii in range(nlocs): indx = data["LOCATION"] == locations[ii] l_plate[ii] = numpy.mean(data["GLON"][indx]) avg_plate[ii] = numpy.mean(data["VHELIO"][indx]) sig_plate[ii] = numpy.std(data["VHELIO"][indx]) siga_plate[ii] = numpy.std(data["VHELIO"][indx]) / numpy.sqrt(numpy.sum(indx)) sigerr_plate[ii] = bootstrap_sigerr(data["VHELIO"][indx]) # Calculate plate means and variances from the model # Load initial parameters from file savefile = open(args[0], "rb") params = pickle.load(savefile) if not options.index is None: params = params[options.index] savefile.close() # params[0]= 245./235. # params[1]= 8.5/8. avg_plate_model = numpy.zeros(nlocs) sig_plate_model = numpy.zeros(nlocs) for ii in range(nlocs): # Calculate vlos | los indx = data["LOCATION"] == locations[ii] thesedata = data[indx] thislogpiso = logpiso[indx, :] if options.dwarf: thislogpisodwarf = logpisodwarf[indx, :] else: thislogpisodwarf = None vlos = numpy.linspace(-200.0, 200.0, options.nvlos) pvlos = numpy.zeros(options.nvlos) if not options.multi is None: pvlos = multi.parallel_map( (lambda x: pvlosplate(params, vlos[x], thesedata, df, options, thislogpiso, thislogpisodwarf, iso)), range(options.nvlos), numcores=numpy.amin([len(vlos), multiprocessing.cpu_count(), options.multi]), ) else: for jj in range(options.nvlos): print jj pvlos[jj] = pvlosplate(params, vlos[jj], thesedata, df, options, thislogpiso, thislogpisodwarf, iso) pvlos -= logsumexp(pvlos) pvlos = numpy.exp(pvlos) # Calculate mean and velocity dispersion avg_plate_model[ii] = numpy.sum(vlos * pvlos) sig_plate_model[ii] = numpy.sqrt(numpy.sum(vlos ** 2.0 * pvlos) - avg_plate_model[ii] ** 2.0) # Plot everything left, bottom, width, height = 0.1, 0.4, 0.8, 0.5 axTop = pyplot.axes([left, bottom, width, height]) left, bottom, width, height = 0.1, 0.1, 0.8, 0.3 axMean = pyplot.axes([left, bottom, width, height]) # left, bottom, width, height= 0.1, 0.1, 0.8, 0.2 # axSig= pyplot.axes([left,bottom,width,height]) fig = pyplot.gcf() fig.sca(axTop) pyplot.ylabel(r"$\mathrm{Heliocentric\ velocity}\ [\mathrm{km\ s}^{-1}]$") pyplot.xlabel(r"$\mathrm{Galactic\ longitude}\ [\mathrm{deg}]$") pyplot.xlim(0.0, 360.0) pyplot.ylim(-200.0, 200.0) nullfmt = NullFormatter() # no labels axTop.xaxis.set_major_formatter(nullfmt) bovy_plot.bovy_plot(data["GLON"], data["VHELIO"], "k,", yrange=[-200.0, 200.0], xrange=[0.0, 360.0], overplot=True) ndata_t = int(math.floor(len(data) / 1000.0)) ndata_h = len(data) - ndata_t * 1000 bovy_plot.bovy_plot(l_plate, avg_plate, "o", overplot=True, mfc="0.5", mec="none") bovy_plot.bovy_plot(l_plate, avg_plate_model, "x", overplot=True, ms=10.0, mew=1.5, color="0.7") # Legend bovy_plot.bovy_plot([260.0], [150.0], "k,", overplot=True) bovy_plot.bovy_plot([260.0], [120.0], "o", mfc="0.5", mec="none", overplot=True) bovy_plot.bovy_plot([260.0], [90.0], "x", ms=10.0, mew=1.5, color="0.7", overplot=True) bovy_plot.bovy_text(270.0, 145.0, r"$\mathrm{data}$") bovy_plot.bovy_text(270.0, 115.0, r"$\mathrm{data\ mean}$") bovy_plot.bovy_text(270.0, 85.0, r"$\mathrm{model\ mean}$") bovy_plot._add_ticks() # Now plot the difference fig.sca(axMean) bovy_plot.bovy_plot([0.0, 360.0], [0.0, 0.0], "-", color="0.5", overplot=True) bovy_plot.bovy_plot(l_plate, avg_plate - avg_plate_model, "ko", overplot=True) pyplot.errorbar( l_plate, avg_plate - avg_plate_model, yerr=siga_plate, marker="o", color="k", linestyle="none", elinestyle="-" ) pyplot.ylabel(r"$\bar{V}_{\mathrm{data}}-\bar{V}_{\mathrm{model}}$") pyplot.ylim(-14.5, 14.5) pyplot.xlim(0.0, 360.0) bovy_plot._add_ticks() # axMean.xaxis.set_major_formatter(nullfmt) pyplot.xlabel(r"$\mathrm{Galactic\ longitude}\ [\mathrm{deg}]$") pyplot.xlim(0.0, 360.0) bovy_plot._add_ticks() # Save bovy_plot.bovy_end_print(options.plotfilename) return None # Sigma fig.sca(axSig) pyplot.plot([0.0, 360.0], [1.0, 1.0], "-", color="0.5") bovy_plot.bovy_plot(l_plate, sig_plate / sig_plate_model, "ko", overplot=True) pyplot.errorbar( l_plate, sig_plate / sig_plate_model, yerr=sigerr_plate / sig_plate_model, marker="o", color="k", linestyle="none", elinestyle="-", ) pyplot.ylabel(r"$\sigma_{\mathrm{los}}^{\mathrm{data}}/ \sigma_{\mathrm{los}}^{\mathrm{model}}$") pyplot.ylim(0.5, 1.5)
def plot_rovo(filename, plotfilename): if not os.path.exists(filename): raise IOError("given filename does not exist") savefile = open(filename, 'rb') params = pickle.load(savefile) savefile.close() if _ANALYTIC: #Calculate by fixing everything except for Ro anv vo options = plot_pdfs.set_options(None) nros = 15 noos = 15 ros = numpy.linspace(7., 13., nros) oos = numpy.linspace(20., 30., noos) ll = numpy.zeros((noos, nros)) for ii in range(noos): if not _MULTI is None: theseparamss = [] for jj in range(nros): theseparams = copy.copy(params) theseparams[0] = oos[ii] * ros[jj] / _REFV0 theseparams[1] = ros[jj] / _REFR0 theseparamss.append(theseparams) thisll = multi.parallel_map( (lambda x: numpy.sum( logl.logl(init=theseparamss[x], options=options))), range(nros), numcores=numpy.amin( [nros, _MULTI, multiprocessing.cpu_count()])) ll[ii, :] = thisll else: for jj in range(nros): theseparams = copy.copy(params) theseparams[0] = oos[ii] * ros[jj] / _REFV0 theseparams[1] = ros[jj] / _REFR0 ll[ii, jj] = numpy.sum( logl.logl(init=theseparams, options=options)) #Normalize ll -= logsumexp(ll) ll = numpy.exp(ll) levels = list(special.erf(0.5 * numpy.arange(1, 4))) bovy_plot.bovy_dens2d( ll.T, origin='lower', levels=levels, xlabel=r'$\Omega_0\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$', ylabel=r'$R_0\ [\mathrm{kpc}]$', xrange=[20., 35.], yrange=[7., 13.], contours=True, cntrcolors='k', onedhists=True, cmap='gist_yarg') else: vos = numpy.array([s[0] for s in params]) * _REFV0 ros = numpy.array([s[1] for s in params]) * _REFR0 bovy_plot.bovy_print() levels = list(special.erf(0.5 * numpy.arange(1, 4))) levels.append(1.01) #HACK to not plot outliers bovy_plot.scatterplot( vos / ros, ros, 'k,', levels=levels, xlabel=r'$\Omega_0\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$', ylabel=r'$R_0\ [\mathrm{kpc}]$', bins=31, xrange=[200. / 8., 250. / 8.], yrange=[7., 9.], contours=True, cntrcolors='k', onedhists=True, cmap='gist_yarg') bovy_plot.bovy_end_print(plotfilename)
def createFakeData(parser): options, args= parser.parse_args() if len(args) == 0: parser.print_help() return if os.path.exists(options.plotfile): print "Outfile "+options.plotfile+" exists ..." print "Returning ..." return None #Read the data numpy.random.seed(options.seed) print "Reading the data ..." data= readVclosData(postshutdown=options.postshutdown, fehcut=options.fehcut, cohort=options.cohort, lmin=options.lmin, bmax=options.bmax, validfeh=options.indivfeh, #if indivfeh, we need validfeh ak=True, cutmultiples=options.cutmultiples, jkmax=options.jkmax) #HACK indx= (data['J0MAG']-data['K0MAG'] < 0.5) data['J0MAG'][indx]= 0.5+data['K0MAG'][indx] #Set up the isochrone #Set up the isochrone if not options.isofile is None and os.path.exists(options.isofile): print "Loading the isochrone model ..." isofile= open(options.isofile,'rb') iso= pickle.load(isofile) if options.indivfeh: zs= pickle.load(isofile) elif options.varfeh: locl= pickle.load(isofile) isofile.close() else: print "Setting up the isochrone model ..." if options.indivfeh: #Load all isochrones iso= [] zs= numpy.arange(0.0005,0.03005,0.0005) for ii in range(len(zs)): iso.append(isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, Z=zs[ii])) elif options.varfeh: locs= list(set(data['LOCATION'])) iso= [] for ii in range(len(locs)): indx= (data['LOCATION'] == locs[ii]) locl= numpy.mean(data['GLON'][indx]*_DEGTORAD) iso.append(isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, marginalizefeh=True, glon=locl)) else: iso= isomodel.isomodel(imfmodel=options.imfmodel,Z=options.Z, expsfh=options.expsfh) if options.dwarf: iso= [iso, isomodel.isomodel(imfmodel=options.imfmodel,Z=options.Z, dwarf=True,expsfh=options.expsfh)] else: iso= [iso] if not options.isofile is None: isofile= open(options.isofile,'wb') pickle.dump(iso,isofile) if options.indivfeh: pickle.dump(zs,isofile) elif options.varfeh: pickle.dump(locl,isofile) isofile.close() df= None print "Pre-calculating isochrone distance prior ..." logpiso= numpy.zeros((len(data),_BINTEGRATENBINS)) ds= numpy.linspace(_BINTEGRATEDMIN,_BINTEGRATEDMAX, _BINTEGRATENBINS) dm= _dm(ds) for ii in range(len(data)): mh= data['H0MAG'][ii]-dm if options.indivfeh: #Find closest Z thisZ= isodist.FEH2Z(data[ii]['FEH']) indx= numpy.argmin((thisZ-zs)) logpiso[ii,:]= iso[0][indx](numpy.zeros(_BINTEGRATENBINS)+(data['J0MAG']-data['K0MAG'])[ii],mh) elif options.varfeh: #Find correct iso indx= (locl == data[ii]['LOCATION']) logpiso[ii,:]= iso[0][indx](numpy.zeros(_BINTEGRATENBINS)+(data['J0MAG']-data['K0MAG'])[ii],mh) else: logpiso[ii,:]= iso[0](numpy.zeros(_BINTEGRATENBINS) +(data['J0MAG']-data['K0MAG'])[ii],mh) if options.dwarf: logpisodwarf= numpy.zeros((len(data),_BINTEGRATENBINS)) dwarfds= numpy.linspace(_BINTEGRATEDMIN_DWARF,_BINTEGRATEDMAX_DWARF, _BINTEGRATENBINS) dm= _dm(dwarfds) for ii in range(len(data)): mh= data['H0MAG'][ii]-dm logpisodwarf[ii,:]= iso[1](numpy.zeros(_BINTEGRATENBINS) +(data['J0MAG']-data['K0MAG'])[ii],mh) else: logpisodwarf= None #Load initial parameters from file savefile= open(args[0],'rb') params= pickle.load(savefile) savefile.close() #Prep data l= data['GLON']*_DEGTORAD b= data['GLAT']*_DEGTORAD sinl= numpy.sin(l) cosl= numpy.cos(l) sinb= numpy.sin(b) cosb= numpy.cos(b) jk= data['J0MAG']-data['K0MAG'] jk[(jk < 0.5)]= 0.5 #BOVY: FIX THIS HACK BY EMAILING GAIL h= data['H0MAG'] #Re-sample vlos= numpy.linspace(-200.,200.,options.nvlos) pvlos= numpy.zeros((len(data),options.nvlos)) if options.dwarf: thislogpisodwarf= logpisodwarf else: thislogpisodwarf= None if not options.multi is None and options.multi > 1: thismulti= options.multi options.multi= 1 #To avoid conflict thispvlos= multi.parallel_map((lambda x: -mloglike(params, numpy.zeros(len(data))+vlos[x], l, b, jk, h, df,options, sinl, cosl, cosb, sinb, logpiso, thislogpisodwarf, True, None,None,None)), range(options.nvlos), numcores=numpy.amin([len(vlos),multiprocessing.cpu_count(),thismulti])) for jj in range(options.nvlos): pvlos[:,jj]= thispvlos[jj] else: for jj in range(options.nvlos): pvlos[:,jj]= -mloglike(params,numpy.zeros(len(data))+vlos[jj], l, b, jk, h, df,options, sinl, cosl, cosb, sinb, logpiso, thislogpisodwarf,True,None,None,None) """ for jj in range(options.nvlos): pvlos[:,jj]= -mloglike(params,numpy.zeros(len(data))+vlos[jj], l, b, jk, h, df,options, sinl, cosl, cosb, sinb, logpiso, thislogpisodwarf,True,None,None,None) """ for ii in range(len(data)): pvlos[ii,:]-= logsumexp(pvlos[ii,:]) pvlos[ii,:]= numpy.exp(pvlos[ii,:]) pvlos[ii,:]= numpy.cumsum(pvlos[ii,:]) pvlos[ii,:]/= pvlos[ii,-1] #Draw randindx= numpy.random.uniform() kk= 0 while pvlos[ii,kk] < randindx: kk+= 1 data['VHELIO'][ii]= vlos[kk] #Dump raw fitsio.write(options.plotfile,data,clobber=True)
indx = (data['LOCATION'] == location) thesedata = data[indx] thislogpiso = logpiso[indx, :] if options.dwarf: thislogpisodwarf = logpisodwarf[indx, :] else: thislogpisodwarf = None #Calculate vlos | los vlos = numpy.linspace(-200., 200., options.nvlos) pvlos = numpy.zeros(options.nvlos) if not options.multi is None: pvlos = multi.parallel_map((lambda x: pvlosplate( params, vlos[x], thesedata, df, options, thislogpiso, thislogpisodwarf, iso)), range(options.nvlos), numcores=numpy.amin([ len(vlos), multiprocessing.cpu_count(), options.multi ])) else: for ii in range(options.nvlos): print ii pvlos[ii] = pvlosplate(params, vlos[ii], thesedata, df, options, thislogpiso, thislogpisodwarf, iso) pvlos -= logsumexp(pvlos) pvlos = numpy.exp(pvlos) if _PLOTZERO: pvloszero = numpy.zeros(options.nvlos) params[2] = -3.8
def plot_rovo(filename,plotfilename): if not os.path.exists(filename): raise IOError("given filename does not exist") savefile= open(filename,'rb') params= pickle.load(savefile) savefile.close() if _ANALYTIC: #Calculate by fixing everything except for Ro anv vo options= plot_pdfs.set_options(None) nros= 15 noos= 15 ros= numpy.linspace(7.,13.,nros) oos= numpy.linspace(20.,30.,noos) ll= numpy.zeros((noos,nros)) for ii in range(noos): if not _MULTI is None: theseparamss= [] for jj in range(nros): theseparams= copy.copy(params) theseparams[0]= oos[ii]*ros[jj]/_REFV0 theseparams[1]= ros[jj]/_REFR0 theseparamss.append(theseparams) thisll= multi.parallel_map((lambda x: numpy.sum(logl.logl(init=theseparamss[x],options=options))), range(nros), numcores=numpy.amin([nros,_MULTI,multiprocessing.cpu_count()])) ll[ii,:]= thisll else: for jj in range(nros): theseparams= copy.copy(params) theseparams[0]= oos[ii]*ros[jj]/_REFV0 theseparams[1]= ros[jj]/_REFR0 ll[ii,jj]= numpy.sum(logl.logl(init=theseparams, options=options)) #Normalize ll-= logsumexp(ll) ll= numpy.exp(ll) levels= list(special.erf(0.5*numpy.arange(1,4))) bovy_plot.bovy_dens2d(ll.T,origin='lower',levels=levels, xlabel=r'$\Omega_0\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$', ylabel=r'$R_0\ [\mathrm{kpc}]$', xrange=[20.,35.], yrange=[7.,13.], contours=True, cntrcolors='k', onedhists=True, cmap='gist_yarg') else: vos= numpy.array([s[0] for s in params])*_REFV0 ros= numpy.array([s[1] for s in params])*_REFR0 bovy_plot.bovy_print() levels= list(special.erf(0.5*numpy.arange(1,4))) levels.append(1.01) #HACK to not plot outliers bovy_plot.scatterplot(vos/ros,ros,'k,',levels=levels, xlabel=r'$\Omega_0\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$', ylabel=r'$R_0\ [\mathrm{kpc}]$', bins=31, xrange=[200./8.,250./8.], yrange=[7.,9.], contours=True, cntrcolors='k', onedhists=True, cmap='gist_yarg') bovy_plot.bovy_end_print(plotfilename)
def createFakeData(parser): options, args = parser.parse_args() if len(args) == 0: parser.print_help() return if os.path.exists(options.plotfile): print "Outfile " + options.plotfile + " exists ..." print "Returning ..." return None #Read the data numpy.random.seed(options.seed) print "Reading the data ..." data = readVclosData( postshutdown=options.postshutdown, fehcut=options.fehcut, cohort=options.cohort, lmin=options.lmin, bmax=options.bmax, validfeh=options.indivfeh, #if indivfeh, we need validfeh ak=True, cutmultiples=options.cutmultiples, jkmax=options.jkmax) #HACK indx = (data['J0MAG'] - data['K0MAG'] < 0.5) data['J0MAG'][indx] = 0.5 + data['K0MAG'][indx] #Set up the isochrone #Set up the isochrone if not options.isofile is None and os.path.exists(options.isofile): print "Loading the isochrone model ..." isofile = open(options.isofile, 'rb') iso = pickle.load(isofile) if options.indivfeh: zs = pickle.load(isofile) elif options.varfeh: locl = pickle.load(isofile) isofile.close() else: print "Setting up the isochrone model ..." if options.indivfeh: #Load all isochrones iso = [] zs = numpy.arange(0.0005, 0.03005, 0.0005) for ii in range(len(zs)): iso.append( isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, Z=zs[ii])) elif options.varfeh: locs = list(set(data['LOCATION'])) iso = [] for ii in range(len(locs)): indx = (data['LOCATION'] == locs[ii]) locl = numpy.mean(data['GLON'][indx] * _DEGTORAD) iso.append( isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, marginalizefeh=True, glon=locl)) else: iso = isomodel.isomodel(imfmodel=options.imfmodel, Z=options.Z, expsfh=options.expsfh) if options.dwarf: iso = [ iso, isomodel.isomodel(imfmodel=options.imfmodel, Z=options.Z, dwarf=True, expsfh=options.expsfh) ] else: iso = [iso] if not options.isofile is None: isofile = open(options.isofile, 'wb') pickle.dump(iso, isofile) if options.indivfeh: pickle.dump(zs, isofile) elif options.varfeh: pickle.dump(locl, isofile) isofile.close() df = None print "Pre-calculating isochrone distance prior ..." logpiso = numpy.zeros((len(data), _BINTEGRATENBINS)) ds = numpy.linspace(_BINTEGRATEDMIN, _BINTEGRATEDMAX, _BINTEGRATENBINS) dm = _dm(ds) for ii in range(len(data)): mh = data['H0MAG'][ii] - dm if options.indivfeh: #Find closest Z thisZ = isodist.FEH2Z(data[ii]['FEH']) indx = numpy.argmin((thisZ - zs)) logpiso[ii, :] = iso[0][indx](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) elif options.varfeh: #Find correct iso indx = (locl == data[ii]['LOCATION']) logpiso[ii, :] = iso[0][indx](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) else: logpiso[ii, :] = iso[0](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) if options.dwarf: logpisodwarf = numpy.zeros((len(data), _BINTEGRATENBINS)) dwarfds = numpy.linspace(_BINTEGRATEDMIN_DWARF, _BINTEGRATEDMAX_DWARF, _BINTEGRATENBINS) dm = _dm(dwarfds) for ii in range(len(data)): mh = data['H0MAG'][ii] - dm logpisodwarf[ii, :] = iso[1](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) else: logpisodwarf = None #Load initial parameters from file savefile = open(args[0], 'rb') params = pickle.load(savefile) savefile.close() #Prep data l = data['GLON'] * _DEGTORAD b = data['GLAT'] * _DEGTORAD sinl = numpy.sin(l) cosl = numpy.cos(l) sinb = numpy.sin(b) cosb = numpy.cos(b) jk = data['J0MAG'] - data['K0MAG'] jk[(jk < 0.5)] = 0.5 #BOVY: FIX THIS HACK BY EMAILING GAIL h = data['H0MAG'] #Re-sample vlos = numpy.linspace(-200., 200., options.nvlos) pvlos = numpy.zeros((len(data), options.nvlos)) if options.dwarf: thislogpisodwarf = logpisodwarf else: thislogpisodwarf = None if not options.multi is None and options.multi > 1: thismulti = options.multi options.multi = 1 #To avoid conflict thispvlos = multi.parallel_map( (lambda x: -mloglike(params, numpy.zeros(len(data)) + vlos[x], l, b, jk, h, df, options, sinl, cosl, cosb, sinb, logpiso, thislogpisodwarf, True, None, None, None)), range(options.nvlos), numcores=numpy.amin( [len(vlos), multiprocessing.cpu_count(), thismulti])) for jj in range(options.nvlos): pvlos[:, jj] = thispvlos[jj] else: for jj in range(options.nvlos): pvlos[:, jj] = -mloglike( params, numpy.zeros(len(data)) + vlos[jj], l, b, jk, h, df, options, sinl, cosl, cosb, sinb, logpiso, thislogpisodwarf, True, None, None, None) """ for jj in range(options.nvlos): pvlos[:,jj]= -mloglike(params,numpy.zeros(len(data))+vlos[jj], l, b, jk, h, df,options, sinl, cosl, cosb, sinb, logpiso, thislogpisodwarf,True,None,None,None) """ for ii in range(len(data)): pvlos[ii, :] -= logsumexp(pvlos[ii, :]) pvlos[ii, :] = numpy.exp(pvlos[ii, :]) pvlos[ii, :] = numpy.cumsum(pvlos[ii, :]) pvlos[ii, :] /= pvlos[ii, -1] #Draw randindx = numpy.random.uniform() kk = 0 while pvlos[ii, kk] < randindx: kk += 1 data['VHELIO'][ii] = vlos[kk] #Dump raw fitsio.write(options.plotfile, data, clobber=True)
def plot_bestfit(parser): (options, args) = parser.parse_args() if len(args) == 0 or options.plotfilename is None: parser.print_help() return #Read the data print "Reading the data ..." data = readVclosData( postshutdown=options.postshutdown, fehcut=options.fehcut, cohort=options.cohort, lmin=options.lmin, bmax=options.bmax, ak=True, cutmultiples=options.cutmultiples, validfeh=options.indivfeh, #if indivfeh, we need validfeh jkmax=options.jkmax, datafilename=options.fakedata) #HACK indx = (data['J0MAG'] - data['K0MAG'] < 0.5) data['J0MAG'][indx] = 0.5 + data['K0MAG'][indx] #Cut inner disk locations #data= data[(data['GLON'] > 75.)] #Cut outliers #data= data[(data['VHELIO'] < 200.)*(data['VHELIO'] > -200.)] print "Using %i data points ..." % len(data) #Set up the isochrone if not options.isofile is None and os.path.exists(options.isofile): print "Loading the isochrone model ..." isofile = open(options.isofile, 'rb') iso = pickle.load(isofile) if options.indivfeh: zs = pickle.load(isofile) if options.varfeh: locl = pickle.load(isofile) isofile.close() else: print "Setting up the isochrone model ..." if options.indivfeh: #Load all isochrones iso = [] zs = numpy.arange(0.0005, 0.03005, 0.0005) for ii in range(len(zs)): iso.append( isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, Z=zs[ii])) elif options.varfeh: locs = list(set(data['LOCATION'])) iso = [] for ii in range(len(locs)): indx = (data['LOCATION'] == locs[ii]) locl = numpy.mean(data['GLON'][indx] * _DEGTORAD) iso.append( isomodel.isomodel(imfmodel=options.imfmodel, expsfh=options.expsfh, marginalizefeh=True, glon=locl)) else: iso = isomodel.isomodel(imfmodel=options.imfmodel, Z=options.Z, expsfh=options.expsfh) if options.dwarf: iso = [ iso, isomodel.isomodel(imfmodel=options.imfmodel, Z=options.Z, dwarf=True, expsfh=options.expsfh) ] else: iso = [iso] if not options.isofile is None: isofile = open(options.isofile, 'wb') pickle.dump(iso, isofile) if options.indivfeh: pickle.dump(zs, isofile) elif options.varfeh: pickle.dump(locl, isofile) isofile.close() df = None print "Pre-calculating isochrone distance prior ..." logpiso = numpy.zeros((len(data), _BINTEGRATENBINS)) ds = numpy.linspace(_BINTEGRATEDMIN, _BINTEGRATEDMAX, _BINTEGRATENBINS) dm = _dm(ds) for ii in range(len(data)): mh = data['H0MAG'][ii] - dm if options.indivfeh: #Find closest Z thisZ = isodist.FEH2Z(data[ii]['FEH']) indx = numpy.argmin(numpy.fabs(thisZ - zs)) logpiso[ii, :] = iso[0][indx](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) elif options.varfeh: #Find correct iso indx = (locl == data[ii]['LOCATION']) logpiso[ii, :] = iso[0][indx](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) else: logpiso[ii, :] = iso[0](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) if options.dwarf: logpisodwarf = numpy.zeros((len(data), _BINTEGRATENBINS)) dwarfds = numpy.linspace(_BINTEGRATEDMIN_DWARF, _BINTEGRATEDMAX_DWARF, _BINTEGRATENBINS) dm = _dm(dwarfds) for ii in range(len(data)): mh = data['H0MAG'][ii] - dm logpisodwarf[ii, :] = iso[1](numpy.zeros(_BINTEGRATENBINS) + (data['J0MAG'] - data['K0MAG'])[ii], mh) else: logpisodwarf = None #Calculate data means etc. #Calculate means locations = list(set(data['LOCATION'])) nlocs = len(locations) l_plate = numpy.zeros(nlocs) avg_plate = numpy.zeros(nlocs) sig_plate = numpy.zeros(nlocs) siga_plate = numpy.zeros(nlocs) sigerr_plate = numpy.zeros(nlocs) for ii in range(nlocs): indx = (data['LOCATION'] == locations[ii]) l_plate[ii] = numpy.mean(data['GLON'][indx]) avg_plate[ii] = numpy.mean(data['VHELIO'][indx]) sig_plate[ii] = numpy.std(data['VHELIO'][indx]) siga_plate[ii] = numpy.std(data['VHELIO'][indx]) / numpy.sqrt( numpy.sum(indx)) sigerr_plate[ii] = bootstrap_sigerr(data['VHELIO'][indx]) #Calculate plate means and variances from the model #Load initial parameters from file savefile = open(args[0], 'rb') params = pickle.load(savefile) if not options.index is None: params = params[options.index] savefile.close() #params[0]= 245./235. #params[1]= 8.5/8. avg_plate_model = numpy.zeros(nlocs) sig_plate_model = numpy.zeros(nlocs) for ii in range(nlocs): #Calculate vlos | los indx = (data['LOCATION'] == locations[ii]) thesedata = data[indx] thislogpiso = logpiso[indx, :] if options.dwarf: thislogpisodwarf = logpisodwarf[indx, :] else: thislogpisodwarf = None vlos = numpy.linspace(-200., 200., options.nvlos) pvlos = numpy.zeros(options.nvlos) if not options.multi is None: pvlos = multi.parallel_map( (lambda x: pvlosplate(params, vlos[x], thesedata, df, options, thislogpiso, thislogpisodwarf, iso)), range(options.nvlos), numcores=numpy.amin( [len(vlos), multiprocessing.cpu_count(), options.multi])) else: for jj in range(options.nvlos): print jj pvlos[jj] = pvlosplate(params, vlos[jj], thesedata, df, options, thislogpiso, thislogpisodwarf, iso) pvlos -= logsumexp(pvlos) pvlos = numpy.exp(pvlos) #Calculate mean and velocity dispersion avg_plate_model[ii] = numpy.sum(vlos * pvlos) sig_plate_model[ii]= numpy.sqrt(numpy.sum(vlos**2.*pvlos)\ -avg_plate_model[ii]**2.) #Plot everything left, bottom, width, height = 0.1, 0.4, 0.8, 0.5 axTop = pyplot.axes([left, bottom, width, height]) left, bottom, width, height = 0.1, 0.1, 0.8, 0.3 axMean = pyplot.axes([left, bottom, width, height]) #left, bottom, width, height= 0.1, 0.1, 0.8, 0.2 #axSig= pyplot.axes([left,bottom,width,height]) fig = pyplot.gcf() fig.sca(axTop) pyplot.ylabel(r'$\mathrm{Heliocentric\ velocity}\ [\mathrm{km\ s}^{-1}]$') pyplot.xlabel(r'$\mathrm{Galactic\ longitude}\ [\mathrm{deg}]$') pyplot.xlim(0., 360.) pyplot.ylim(-200., 200.) nullfmt = NullFormatter() # no labels axTop.xaxis.set_major_formatter(nullfmt) bovy_plot.bovy_plot(data['GLON'], data['VHELIO'], 'k,', yrange=[-200., 200.], xrange=[0., 360.], overplot=True) ndata_t = int(math.floor(len(data) / 1000.)) ndata_h = len(data) - ndata_t * 1000 bovy_plot.bovy_plot(l_plate, avg_plate, 'o', overplot=True, mfc='0.5', mec='none') bovy_plot.bovy_plot(l_plate, avg_plate_model, 'x', overplot=True, ms=10., mew=1.5, color='0.7') #Legend bovy_plot.bovy_plot([260.], [150.], 'k,', overplot=True) bovy_plot.bovy_plot([260.], [120.], 'o', mfc='0.5', mec='none', overplot=True) bovy_plot.bovy_plot([260.], [90.], 'x', ms=10., mew=1.5, color='0.7', overplot=True) bovy_plot.bovy_text(270., 145., r'$\mathrm{data}$') bovy_plot.bovy_text(270., 115., r'$\mathrm{data\ mean}$') bovy_plot.bovy_text(270., 85., r'$\mathrm{model\ mean}$') bovy_plot._add_ticks() #Now plot the difference fig.sca(axMean) bovy_plot.bovy_plot([0., 360.], [0., 0.], '-', color='0.5', overplot=True) bovy_plot.bovy_plot(l_plate, avg_plate - avg_plate_model, 'ko', overplot=True) pyplot.errorbar(l_plate, avg_plate - avg_plate_model, yerr=siga_plate, marker='o', color='k', linestyle='none', elinestyle='-') pyplot.ylabel(r'$\bar{V}_{\mathrm{data}}-\bar{V}_{\mathrm{model}}$') pyplot.ylim(-14.5, 14.5) pyplot.xlim(0., 360.) bovy_plot._add_ticks() #axMean.xaxis.set_major_formatter(nullfmt) pyplot.xlabel(r'$\mathrm{Galactic\ longitude}\ [\mathrm{deg}]$') pyplot.xlim(0., 360.) bovy_plot._add_ticks() #Save bovy_plot.bovy_end_print(options.plotfilename) return None #Sigma fig.sca(axSig) pyplot.plot([0., 360.], [1., 1.], '-', color='0.5') bovy_plot.bovy_plot(l_plate, sig_plate / sig_plate_model, 'ko', overplot=True) pyplot.errorbar(l_plate, sig_plate / sig_plate_model, yerr=sigerr_plate / sig_plate_model, marker='o', color='k', linestyle='none', elinestyle='-') pyplot.ylabel( r'$\sigma_{\mathrm{los}}^{\mathrm{data}}/ \sigma_{\mathrm{los}}^{\mathrm{model}}$' ) pyplot.ylim(0.5, 1.5)
if options.plottype.lower() == 'pvloslos': for location in locations: indx= (data['LOCATION'] == location) thesedata= data[indx] thislogpiso= logpiso[indx,:] if options.dwarf: thislogpisodwarf= logpisodwarf[indx,:] else: thislogpisodwarf= None #Calculate vlos | los vlos= numpy.linspace(-200.,200.,options.nvlos) pvlos= numpy.zeros(options.nvlos) if not options.multi is None: pvlos= multi.parallel_map((lambda x: pvlosplate(params,vlos[x], thesedata,df,options, thislogpiso, thislogpisodwarf,iso)), range(options.nvlos), numcores=numpy.amin([len(vlos),multiprocessing.cpu_count(),options.multi])) else: for ii in range(options.nvlos): print ii pvlos[ii]= pvlosplate(params,vlos[ii],thesedata,df,options, thislogpiso,thislogpisodwarf,iso) pvlos-= logsumexp(pvlos) pvlos= numpy.exp(pvlos) if _PLOTZERO: pvloszero= numpy.zeros(options.nvlos) params[2]= -3.8 if not options.multi is None: pvloszero= multi.parallel_map((lambda x: pvlosplate(params,vlos[x], thesedata,df,options,