def plot_rotcurve_samples(options=None,args=None): """Plot sample rotation curves""" options= set_options(options) params= numpy.random.permutation(load_samples(args[0])) rotcurves= [] rs= numpy.linspace(3.5,16.,1001) add= 0 if options.nooutliermean: add-= 1 if not options.dwarf: add-= 1 for ii in range(options.nsamples): if options.rotcurve.lower() == 'flat': thisrc= params[ii][0]*rs**0.*_REFV0 elif options.rotcurve.lower() == 'powerlaw': thisrc= params[ii][0]*(rs/_REFR0/params[ii][1])**params[ii][6+add]*_REFV0 elif options.rotcurve.lower() == 'linear': thisrc= (params[ii][0]+params[ii][6+add]*(rs/_REFR0/params[ii][1]-1.))*_REFV0 elif options.rotcurve.lower() == 'quadratic': thisrc= (params[ii][0]+params[ii][6+add]*(rs/_REFR0/params[ii][1]-1.)+params[ii][7+add]*(rs/_REFR0/params[ii][1]-1)**2.)*_REFV0 elif options.rotcurve.lower() == 'cubic': thisrc= (params[ii][0]+params[ii][6+add]*(rs/_REFR0/params[ii][1]-1)+params[ii][7+add]*(rs/_REFR0/params[ii][1]-1.)**2.+params[ii][8+add]*(rs/_REFR0/params[ii][1]-1.)**3.)*_REFV0 rotcurves.append(thisrc) bovy_plot.bovy_print(fig_width=8.) ii= 0 bovy_plot.bovy_plot(rs,rotcurves[ii],'-',color='0.65', xlabel=r'$R\ [\mathrm{kpc}]$', ylabel=r'$V_c\ [\mathrm{km\ s}^{-1}]$', xrange=[0.,20.], yrange=[150.,300.]) for ii in range(1,options.nsamples): bovy_plot.bovy_plot(rs,rotcurves[ii],'-',color='0.65',overplot=True,alpha=0.1) if _PLOTM31: #Read file m31data= numpy.loadtxt('../data/m31.dat',comments='#') rm31= m31data[:,0] vcm31= m31data[:,1] bovy_plot.bovy_plot(rm31,vcm31,'ks',overplot=True,mfc='none',mew=2.) bovy_plot.bovy_text(17.,260.,r'$\mathrm{M31}$',size=14.) indx= (rm31 > 15.2)*(rm31 <= 16.8) bovy_plot.bovy_plot([17.,rm31[indx]],[260.,vcm31[indx]],'k-', overplot=True) bovy_plot.bovy_end_print(options.plotfilename) return None
def plot_rotcurve_samples(options=None, args=None): """Plot sample rotation curves""" options = set_options(options) params = numpy.random.permutation(load_samples(args[0])) rotcurves = [] rs = numpy.linspace(3.5, 16., 1001) add = 0 if options.nooutliermean: add -= 1 if not options.dwarf: add -= 1 for ii in range(options.nsamples): if options.rotcurve.lower() == 'flat': thisrc = params[ii][0] * rs**0. * _REFV0 elif options.rotcurve.lower() == 'powerlaw': thisrc = params[ii][0] * ( rs / _REFR0 / params[ii][1])**params[ii][6 + add] * _REFV0 elif options.rotcurve.lower() == 'linear': thisrc = (params[ii][0] + params[ii][6 + add] * (rs / _REFR0 / params[ii][1] - 1.)) * _REFV0 elif options.rotcurve.lower() == 'quadratic': thisrc = (params[ii][0] + params[ii][6 + add] * (rs / _REFR0 / params[ii][1] - 1.) + params[ii][7 + add] * (rs / _REFR0 / params[ii][1] - 1)**2.) * _REFV0 elif options.rotcurve.lower() == 'cubic': thisrc = (params[ii][0] + params[ii][6 + add] * (rs / _REFR0 / params[ii][1] - 1) + params[ii][7 + add] * (rs / _REFR0 / params[ii][1] - 1.)**2. + params[ii][8 + add] * (rs / _REFR0 / params[ii][1] - 1.)**3.) * _REFV0 rotcurves.append(thisrc) bovy_plot.bovy_print(fig_width=8.) ii = 0 bovy_plot.bovy_plot(rs, rotcurves[ii], '-', color='0.65', xlabel=r'$R\ [\mathrm{kpc}]$', ylabel=r'$V_c\ [\mathrm{km\ s}^{-1}]$', xrange=[0., 20.], yrange=[150., 300.]) for ii in range(1, options.nsamples): bovy_plot.bovy_plot(rs, rotcurves[ii], '-', color='0.65', overplot=True, alpha=0.1) if _PLOTM31: #Read file m31data = numpy.loadtxt('../data/m31.dat', comments='#') rm31 = m31data[:, 0] vcm31 = m31data[:, 1] bovy_plot.bovy_plot(rm31, vcm31, 'ks', overplot=True, mfc='none', mew=2.) bovy_plot.bovy_text(17., 260., r'$\mathrm{M31}$', size=14.) indx = (rm31 > 15.2) * (rm31 <= 16.8) bovy_plot.bovy_plot([17., rm31[indx]], [260., vcm31[indx]], 'k-', overplot=True) bovy_plot.bovy_end_print(options.plotfilename) return None
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 mockTable(parser): (options, args) = parser.parse_args() cmdline = '%python mockTable.py ' + args[0] if len(args) == 0: parser.print_help() return #Open savefile for flat fit and samples savefile = open(_FLATFIT, 'rb') flatparams = pickle.load(savefile) savefile.close() savefile = open(_FLATSAMPLES, 'rb') flatsamples = pickle.load(savefile) savefile.close() #Open savefile for all mocks' fit and samples mockparams = [] mocksamples = [] for ii in range(_NMOCKS): savefile = open(_MOCKFIT[ii], 'rb') mockparams.append(pickle.load(savefile)) savefile.close() savefile = open(_MOCKSAMPLES[ii], 'rb') mocksamples.append(pickle.load(savefile)) savefile.close() #Set up sections names = [ '$V_c(R_0)\ [\mathrm{km\ s}^{-1}]$', '$R_0\ [\mathrm{kpc}]$', '$V_{R,\odot}\ [\mathrm{km\ s}^{-1}]$', '$\Omega_{\odot}\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$', '$\\sigma_R(R_0)\ [\mathrm{km\ s}^{-1}]$', '$R_0/h_\sigma$', '$X^2 \equiv \sigma_\phi^2 / \sigma_R^2$', '$\Delta\chi^2/\mathrm{dof}$' ] scale = [_REFV0, _REFR0, _VRSUN, 1., _REFV0, 1., 1., 1.] flatbestfits = [] flatxs = [] mockbestfits = [] mockxs = [] #V_c flatbestfits.append(flatparams[0]) flatxs.append(numpy.array([s[0] for s in flatsamples])) #R_0 flatbestfits.append(flatparams[1]) flatxs.append(numpy.array([s[1] for s in flatsamples])) #VRsun flatbestfits.append(flatparams[6]) flatxs.append(numpy.array([s[6] for s in flatsamples])) #Omega_sun flatbestfits.append(flatparams[7] * _PMSGRA) flatxs.append(numpy.array([s[7] * _PMSGRA for s in flatsamples])) #\sigma_R(R_0) flatbestfits.append(numpy.exp(flatparams[2])) flatxs.append(numpy.exp(numpy.array([s[2] for s in flatsamples]))) #R_0/h_sigma flatbestfits.append(flatparams[1] * flatparams[9]) flatxs.append(numpy.array([s[1] * s[9] for s in flatsamples])) #X^2 flatbestfits.append(flatparams[8]) flatxs.append(numpy.array([s[8] for s in flatsamples])) #chi2 options = set_options(None) data = readVclosData(validfeh=True) options.isofile = '../fits/isos.dat' thislogl = logl.logl(init=flatparams, options=options, data=data) flatbestfits.append(-2. * numpy.sum(thislogl) / (len(data) - len(flatparams))) if _INDIVCHI2: locs = numpy.array(sorted(list(set(data['LOCATION'])))) nlocs = len(locs) platel = numpy.zeros(nlocs) for ii in range(nlocs): indx = (data['LOCATION'] == locs[ii]) platel[ii] = numpy.mean(data['GLON'][indx]) sortindx = numpy.argsort(platel) locs = locs[sortindx] platel = platel[sortindx] for jj in range(len(locs)): names.append( '$\Delta\chi^2/\mathrm{dof}\ \mathrm{w/o}\ l=%i^\circ$' % int(round(platel[jj]))) scale.append(1.) indx = (data['LOCATION'] != locs[jj]) flatbestfits.append(-2. * numpy.sum(thislogl[indx]) / (len(data[indx]) - len(flatparams))) else: locs = [] ##Same for all mocks for ii in range(_NMOCKS): thisbestfits = [] thisxs = [] #V_c thisbestfits.append(mockparams[ii][0]) thisxs.append(numpy.array([s[0] for s in mocksamples[ii]])) #R_0 thisbestfits.append(mockparams[ii][1]) thisxs.append(numpy.array([s[1] for s in mocksamples[ii]])) #VRsun thisbestfits.append(mockparams[ii][6]) thisxs.append(numpy.array([s[6] for s in mocksamples[ii]])) #Omega_sun thisbestfits.append(mockparams[ii][7] * _PMSGRA) thisxs.append(numpy.array([s[7] * _PMSGRA for s in mocksamples[ii]])) #\sigma_R(R_0) thisbestfits.append(numpy.exp(mockparams[ii][2])) thisxs.append(numpy.exp(numpy.array([s[2] for s in mocksamples[ii]]))) #R_0/h_sigma thisbestfits.append(mockparams[ii][1] * mockparams[ii][9]) thisxs.append(numpy.array([s[1] * s[9] for s in mocksamples[ii]])) #X^2 thisbestfits.append(mockparams[ii][8]) thisxs.append(numpy.array([s[8] for s in mocksamples[ii]])) #chi2 #Load mock data data = readVclosData(datafilename=_MOCKDATA[ii]) thislogl = logl.logl(init=mockparams[ii], data=data, options=options) thisbestfits.append(-2. * numpy.sum(thislogl) / (len(data) - len(mockparams[ii]))) if _INDIVCHI2: for jj in range(len(locs)): indx = (data['LOCATION'] != locs[jj]) thisbestfits.append(-2. * numpy.sum(thislogl[indx]) / (len(data[indx]) - len(mockparams))) #Append all mockbestfits.append(thisbestfits) mockxs.append(thisxs) #Make table quantile = 0.68 outfile = open(args[0], 'w') for ii in range(len(names)): #Set up line printline = names[ii] #Flat printline += ' & ' if ii >= len(names) - (len(locs) + 1): #chi2 printline += ' \ldots & ' else: bestfit = flatbestfits[ii] * scale[ii] xs = flatxs[ii] * scale[ii] lowval, highval = sixtyeigthinterval(bestfit, xs, quantile=quantile) dlow, dhigh = bestfit - lowval, highval - bestfit #Prepare maxerr = numpy.amin(numpy.fabs([dlow, dhigh])) print names[ii], maxerr if math.log10(maxerr) >= 0.: value = '$%.0f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 1.: err = '$\pm$%.0f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.0f}_{-%.0f}$' % (dhigh, dlow) elif math.log10(maxerr) >= -1.: value = '$%.1f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.1: err = '$\pm$%.1f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.1f}_{-%.1f}$' % (dhigh, dlow) elif math.log10(maxerr) >= -2.: value = '$%.2f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.01: err = '$\pm$%.2f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.2f}_{-%.2f}$' % (dhigh, dlow) elif math.log10(maxerr) >= -3.: value = '$%.3f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.001: err = '$\pm$%.3f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.3f}_{-%.3f}$' % (dhigh, dlow) else: value = '$%.4f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.0001: err = '$\pm$%.4f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.4f}_{-%.4f}$' % (dhigh, dlow) printline += value + '&' + err #Mocks for jj in range(_NMOCKS): printline += ' & ' if ii >= len(names) - (len(locs) + 1): #chi2 bestfit = mockbestfits[jj][ii] * scale[ii] - flatbestfits[ ii] * scale[ii] printline += '$%.2f$ & ' % bestfit if jj == _NMOCKS - 1: if not ii == (len(names) - 1): printline += '\\\\' outfile.write(printline + '\n') continue bestfit = mockbestfits[jj][ii] * scale[ii] xs = mockxs[jj][ii] * scale[ii] lowval, highval = sixtyeigthinterval(bestfit, xs, quantile=quantile) dlow, dhigh = bestfit - lowval, highval - bestfit #Prepare maxerr = numpy.amin(numpy.fabs([dlow, dhigh])) if math.log10(maxerr) >= 0.: value = '$%.0f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 1.: err = '$\pm$%.0f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.0f}_{-%.0f}$' % (dhigh, dlow) elif math.log10(maxerr) >= -1.: value = '$%.1f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.1: err = '$\pm$%.1f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.1f}_{-%.1f}$' % (dhigh, dlow) elif math.log10(maxerr) >= -2.: value = '$%.2f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.01: err = '$\pm$%.2f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.2f}_{-%.2f}$' % (dhigh, dlow) elif math.log10(maxerr) >= -3.: value = '$%.3f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.001: err = '$\pm$%.3f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.3f}_{-%.3f}$' % (dhigh, dlow) else: value = '$%.4f$' % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.0001: err = '$\pm$%.4f' % ((dlow + dhigh) / 2.) else: err = '$^{+%.4f}_{-%.4f}$' % (dhigh, dlow) printline += value + '&' + err if not ii == (len(names) - 1): printline += '\\\\' if ii == (len(names) - (len(locs) + 2)): printline += '\\\\' if ii < (len(names) - (len(locs) + 1)): outfile.write(printline + '\n') outfile.write('\\enddata\n') outfile.write(cmdline + '\n') outfile.close()
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 plot_rotcurve_samples(options=None,args=None): """Plot sample rotation curves""" options= set_options(options) params= numpy.random.permutation(load_samples(args[0])) if options.removerooutliers: indx= numpy.zeros(len(params),dtype='bool') indx[:]= True for ii in range(len(params)): if params[ii][1] > (9./_REFR0): indx[ii]= False params= params[indx] options.nsamples= numpy.amin([options.nsamples,len(params)]) print len(params) bestfitparams= load_samples(args[1]) rotcurves= [] rs= numpy.linspace(3.5,14.,1001) fs= numpy.zeros((len(rs),options.nsamples)) besfitrc= numpy.zeros_like(rs) add= 0 if options.nooutliermean: add-= 1 if not options.dwarf: add-= 1 if options.rotcurve.lower() == 'flat': bestfitrc= bestfitparams[0]*rs**0.*_REFV0 elif options.rotcurve.lower() == 'powerlaw': bestfitrc= bestfitparams[0]*(rs/_REFR0/bestfitparams[1])**bestfitparams[6+add]*_REFV0 elif options.rotcurve.lower() == 'linear': bestfitrc= (bestfitparams[0]+bestfitparams[6+add]*(rs/_REFR0/bestfitparams[1]-1.))*_REFV0 elif options.rotcurve.lower() == 'quadratic': bestfitrc= (bestfitparams[0]+bestfitparams[6+add]*(rs/_REFR0/bestfitparams[1]-1.)+bestfitparams[7+add]*(rs/_REFR0/bestfitparams[1]-1)**2.)*_REFV0 elif options.rotcurve.lower() == 'cubic': bestfitrc= (bestfitparams[0]+bestfitparams[6+add]*(rs/_REFR0/bestfitparams[1]-1)+bestfitparams[7+add]*(rs/_REFR0/bestfitparams[1]-1.)**2.+bestfitparams[8+add]*(rs/_REFR0/bestfitparams[1]-1.)**3.)*_REFV0 for ii in range(options.nsamples): if options.rotcurve.lower() == 'flat': thisrc= params[ii][0]*rs**0.*_REFV0 elif options.rotcurve.lower() == 'powerlaw': thisrc= params[ii][0]*(rs/_REFR0/params[ii][1])**params[ii][6+add]*_REFV0 elif options.rotcurve.lower() == 'linear': thisrc= (params[ii][0]+params[ii][6+add]*(rs/_REFR0/params[ii][1]-1.))*_REFV0 elif options.rotcurve.lower() == 'quadratic': thisrc= (params[ii][0]+params[ii][6+add]*(rs/_REFR0/params[ii][1]-1.)+params[ii][7+add]*(rs/_REFR0/params[ii][1]-1)**2.)*_REFV0 elif options.rotcurve.lower() == 'cubic': thisrc= (params[ii][0]+params[ii][6+add]*(rs/_REFR0/params[ii][1]-1)+params[ii][7+add]*(rs/_REFR0/params[ii][1]-1.)**2.+params[ii][8+add]*(rs/_REFR0/params[ii][1]-1.)**3.)*_REFV0 fs[:,ii]= thisrc #Now plot the mean and std-dev from the posterior rcmean= numpy.zeros(len(rs)) nsigs= 3 rcsigs= numpy.zeros((len(rs),2*nsigs)) #Record mean and std-devs rcmean[:]= numpy.mean(fs,axis=1) bovy_plot.bovy_print(fig_width=8.) bovy_plot.bovy_plot(rs,bestfitrc,'k-', xlabel=r'$R\ [\mathrm{kpc}]$', ylabel=r'$V_c\ [\mathrm{km\ s}^{-1}]$', xrange=[0.,20.], yrange=[150.,300.]) for ii in range(nsigs): for jj in range(len(rs)): thisf= sorted(fs[jj,:]) thiscut= 0.5*special.erfc((ii+1.)/math.sqrt(2.)) rcsigs[jj,2*ii]= thisf[int(math.floor(thiscut*options.nsamples))] thiscut= 1.-thiscut rcsigs[jj,2*ii+1]= thisf[int(math.floor(thiscut*options.nsamples))] colord, cc= (1.-0.75)/(nsigs+1.), 1 nsigma= nsigs pyplot.fill_between(rs,rcsigs[:,0],rcsigs[:,1],color='0.75') while nsigma > 1: pyplot.fill_between(rs,rcsigs[:,cc+1],rcsigs[:,cc-1], color='%f' % (.75+colord*cc)) pyplot.fill_between(rs,rcsigs[:,cc],rcsigs[:,cc+2], color='%f' % (.75+colord*cc)) cc+= 2 nsigma-= 1 bovy_plot.bovy_plot(rs,bestfitrc,'k-',overplot=True) if options.plotm31: #Read file m31data= numpy.loadtxt('../data/m31.dat',comments='#') rm31= m31data[:,0] vcm31= m31data[:,1] bovy_plot.bovy_plot(rm31,vcm31,'ks',overplot=True,mfc='none',mew=2.) bovy_plot.bovy_text(17.,260.,r'$\mathrm{M31}$',size=14.) indx= (rm31 > 15.2)*(rm31 <= 16.8) bovy_plot.bovy_plot([17.,rm31[indx]],[260.,vcm31[indx]],'k-', overplot=True) #Labels if options.rotcurve.lower() == 'flat': print "This is silly" elif options.rotcurve.lower() == 'powerlaw': bovy_plot.bovy_text(r'$\mathrm{Power\!\!-\!\!law\ rotation\ curve\ model}$', top_left=True,size=16.) elif options.rotcurve.lower() == 'linear': bovy_plot.bovy_text(r'$\mathrm{Linearly rising\ rotation\ curve\ model}$', top_left=True,size=16.) elif options.rotcurve.lower() == 'quadratic': bovy_plot.bovy_text(r'$\mathrm{Quadratic polynomial\ rotation\ curve\ model}$', top_left=True,size=16.) elif options.rotcurve.lower() == 'cubic': bovy_plot.bovy_text(r'$\mathrm{Cubic\ polynomial\ rotation\ curve\ model}$', top_left=True,size=16.) if options.removerooutliers: bovy_plot.bovy_text(r'$R_0 < 9\,\mathrm{kpc}$', top_right=True,size=16.) if options.addmock2: bovy_plot.bovy_text(r'$\mathrm{Mock\ 2}$', bottom_right=True,size=16.) bovy_plot.bovy_end_print(options.plotfilename) return None
def mockTable(parser): (options, args) = parser.parse_args() cmdline = "%python mockTable.py " + args[0] if len(args) == 0: parser.print_help() return # Open savefile for flat fit and samples savefile = open(_FLATFIT, "rb") flatparams = pickle.load(savefile) savefile.close() savefile = open(_FLATSAMPLES, "rb") flatsamples = pickle.load(savefile) savefile.close() # Open savefile for all mocks' fit and samples mockparams = [] mocksamples = [] for ii in range(_NMOCKS): savefile = open(_MOCKFIT[ii], "rb") mockparams.append(pickle.load(savefile)) savefile.close() savefile = open(_MOCKSAMPLES[ii], "rb") mocksamples.append(pickle.load(savefile)) savefile.close() # Set up sections names = [ "$V_c(R_0)\ [\mathrm{km\ s}^{-1}]$", "$R_0\ [\mathrm{kpc}]$", "$V_{R,\odot}\ [\mathrm{km\ s}^{-1}]$", "$\Omega_{\odot}\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$", "$\\sigma_R(R_0)\ [\mathrm{km\ s}^{-1}]$", "$R_0/h_\sigma$", "$X^2 \equiv \sigma_\phi^2 / \sigma_R^2$", "$\Delta\chi^2/\mathrm{dof}$", ] scale = [_REFV0, _REFR0, _VRSUN, 1.0, _REFV0, 1.0, 1.0, 1.0] flatbestfits = [] flatxs = [] mockbestfits = [] mockxs = [] # V_c flatbestfits.append(flatparams[0]) flatxs.append(numpy.array([s[0] for s in flatsamples])) # R_0 flatbestfits.append(flatparams[1]) flatxs.append(numpy.array([s[1] for s in flatsamples])) # VRsun flatbestfits.append(flatparams[6]) flatxs.append(numpy.array([s[6] for s in flatsamples])) # Omega_sun flatbestfits.append(flatparams[7] * _PMSGRA) flatxs.append(numpy.array([s[7] * _PMSGRA for s in flatsamples])) # \sigma_R(R_0) flatbestfits.append(numpy.exp(flatparams[2])) flatxs.append(numpy.exp(numpy.array([s[2] for s in flatsamples]))) # R_0/h_sigma flatbestfits.append(flatparams[1] * flatparams[9]) flatxs.append(numpy.array([s[1] * s[9] for s in flatsamples])) # X^2 flatbestfits.append(flatparams[8]) flatxs.append(numpy.array([s[8] for s in flatsamples])) # chi2 options = set_options(None) data = readVclosData(validfeh=True) options.isofile = "../fits/isos.dat" thislogl = logl.logl(init=flatparams, options=options, data=data) flatbestfits.append(-2.0 * numpy.sum(thislogl) / (len(data) - len(flatparams))) if _INDIVCHI2: locs = numpy.array(sorted(list(set(data["LOCATION"])))) nlocs = len(locs) platel = numpy.zeros(nlocs) for ii in range(nlocs): indx = data["LOCATION"] == locs[ii] platel[ii] = numpy.mean(data["GLON"][indx]) sortindx = numpy.argsort(platel) locs = locs[sortindx] platel = platel[sortindx] for jj in range(len(locs)): names.append("$\Delta\chi^2/\mathrm{dof}\ \mathrm{w/o}\ l=%i^\circ$" % int(round(platel[jj]))) scale.append(1.0) indx = data["LOCATION"] != locs[jj] flatbestfits.append(-2.0 * numpy.sum(thislogl[indx]) / (len(data[indx]) - len(flatparams))) else: locs = [] ##Same for all mocks for ii in range(_NMOCKS): thisbestfits = [] thisxs = [] # V_c thisbestfits.append(mockparams[ii][0]) thisxs.append(numpy.array([s[0] for s in mocksamples[ii]])) # R_0 thisbestfits.append(mockparams[ii][1]) thisxs.append(numpy.array([s[1] for s in mocksamples[ii]])) # VRsun thisbestfits.append(mockparams[ii][6]) thisxs.append(numpy.array([s[6] for s in mocksamples[ii]])) # Omega_sun thisbestfits.append(mockparams[ii][7] * _PMSGRA) thisxs.append(numpy.array([s[7] * _PMSGRA for s in mocksamples[ii]])) # \sigma_R(R_0) thisbestfits.append(numpy.exp(mockparams[ii][2])) thisxs.append(numpy.exp(numpy.array([s[2] for s in mocksamples[ii]]))) # R_0/h_sigma thisbestfits.append(mockparams[ii][1] * mockparams[ii][9]) thisxs.append(numpy.array([s[1] * s[9] for s in mocksamples[ii]])) # X^2 thisbestfits.append(mockparams[ii][8]) thisxs.append(numpy.array([s[8] for s in mocksamples[ii]])) # chi2 # Load mock data data = readVclosData(datafilename=_MOCKDATA[ii]) thislogl = logl.logl(init=mockparams[ii], data=data, options=options) thisbestfits.append(-2.0 * numpy.sum(thislogl) / (len(data) - len(mockparams[ii]))) if _INDIVCHI2: for jj in range(len(locs)): indx = data["LOCATION"] != locs[jj] thisbestfits.append(-2.0 * numpy.sum(thislogl[indx]) / (len(data[indx]) - len(mockparams))) # Append all mockbestfits.append(thisbestfits) mockxs.append(thisxs) # Make table quantile = 0.68 outfile = open(args[0], "w") for ii in range(len(names)): # Set up line printline = names[ii] # Flat printline += " & " if ii >= len(names) - (len(locs) + 1): # chi2 printline += " \ldots & " else: bestfit = flatbestfits[ii] * scale[ii] xs = flatxs[ii] * scale[ii] lowval, highval = sixtyeigthinterval(bestfit, xs, quantile=quantile) dlow, dhigh = bestfit - lowval, highval - bestfit # Prepare maxerr = numpy.amin(numpy.fabs([dlow, dhigh])) print names[ii], maxerr if math.log10(maxerr) >= 0.0: value = "$%.0f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 1.0: err = "$\pm$%.0f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.0f}_{-%.0f}$" % (dhigh, dlow) elif math.log10(maxerr) >= -1.0: value = "$%.1f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.1: err = "$\pm$%.1f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.1f}_{-%.1f}$" % (dhigh, dlow) elif math.log10(maxerr) >= -2.0: value = "$%.2f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.01: err = "$\pm$%.2f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.2f}_{-%.2f}$" % (dhigh, dlow) elif math.log10(maxerr) >= -3.0: value = "$%.3f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.001: err = "$\pm$%.3f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.3f}_{-%.3f}$" % (dhigh, dlow) else: value = "$%.4f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.0001: err = "$\pm$%.4f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.4f}_{-%.4f}$" % (dhigh, dlow) printline += value + "&" + err # Mocks for jj in range(_NMOCKS): printline += " & " if ii >= len(names) - (len(locs) + 1): # chi2 bestfit = mockbestfits[jj][ii] * scale[ii] - flatbestfits[ii] * scale[ii] printline += "$%.2f$ & " % bestfit if jj == _NMOCKS - 1: if not ii == (len(names) - 1): printline += "\\\\" outfile.write(printline + "\n") continue bestfit = mockbestfits[jj][ii] * scale[ii] xs = mockxs[jj][ii] * scale[ii] lowval, highval = sixtyeigthinterval(bestfit, xs, quantile=quantile) dlow, dhigh = bestfit - lowval, highval - bestfit # Prepare maxerr = numpy.amin(numpy.fabs([dlow, dhigh])) if math.log10(maxerr) >= 0.0: value = "$%.0f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 1.0: err = "$\pm$%.0f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.0f}_{-%.0f}$" % (dhigh, dlow) elif math.log10(maxerr) >= -1.0: value = "$%.1f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.1: err = "$\pm$%.1f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.1f}_{-%.1f}$" % (dhigh, dlow) elif math.log10(maxerr) >= -2.0: value = "$%.2f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.01: err = "$\pm$%.2f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.2f}_{-%.2f}$" % (dhigh, dlow) elif math.log10(maxerr) >= -3.0: value = "$%.3f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.001: err = "$\pm$%.3f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.3f}_{-%.3f}$" % (dhigh, dlow) else: value = "$%.4f$" % (bestfit) if numpy.fabs((dlow - dhigh)) < 0.0001: err = "$\pm$%.4f" % ((dlow + dhigh) / 2.0) else: err = "$^{+%.4f}_{-%.4f}$" % (dhigh, dlow) printline += value + "&" + err if not ii == (len(names) - 1): printline += "\\\\" if ii == (len(names) - (len(locs) + 2)): printline += "\\\\" if ii < (len(names) - (len(locs) + 1)): outfile.write(printline + "\n") outfile.write("\\enddata\n") outfile.write(cmdline + "\n") outfile.close()