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 fitMass(): #Read data vcircdata= numpy.loadtxt('vcirc.txt',comments='#',delimiter='|') vcircdata[:,0]/= _REFR0 vcircdata[:,1]/= _REFV0 vcircdata[:,2]/= _REFV0 #Set-up bp= HernquistPotential(a=0.6/_REFR0,normalize=1./3.) if _dexp: dp= DoubleExponentialDiskPotential(normalize=1./3., hr=3.25/_REFR0, hz=0.3/_REFR0) else: dp= MiyamotoNagaiPotential(normalize=1./3., a=3.25/_REFR0, b=0.3/_REFR0) hp= NFWPotential(normalize=1./3., a=5./_REFR0) init= numpy.array([0.6,0.35,218./_REFV0,15./_REFR0,3.25/_REFR0]) #print _convertrho out= optimize.fmin_powell(obj,init,args=(vcircdata,bp,dp,hp), callback=cb) print out #Calculate mass #Halo mass halo= halomass(out) bulge= halomass(out) disk= diskmass(out) print halo, disk, bulge, totalmass(out) #Sample samples= bovy_mcmc.markovpy(out,0.05, (lambda x: -obj(x,vcircdata,bp,dp,hp)), (), isDomainFinite=[[True,True], [True,True], [True,True], [True,True], [True,True]], domain=[[0.,1.], [0.,1.], [0.,2.], [0.,10.], [0.,2.]], nwalkers=8, nsamples=10000) print "Done with sampling ..." print numpy.mean(numpy.array(samples),axis=0) print numpy.std(numpy.array(samples),axis=0) samples= numpy.random.permutation(samples)[0:500] #halo totalmasssamples= [] for s in samples: totalmasssamples.append(halomass(s)) totalmasssamples= numpy.array(totalmasssamples) print "halo mass: ", numpy.mean(totalmasssamples), numpy.std(totalmasssamples) print sixtyeigthinterval(halomass(out),totalmasssamples,quantile=.68) #total totalmasssamples= [] for s in samples: totalmasssamples.append(totalmass(s)) totalmasssamples= numpy.array(totalmasssamples) print "total mass: ", numpy.mean(totalmasssamples), numpy.std(totalmasssamples) print sixtyeigthinterval(totalmass(out),totalmasssamples,quantile=.68) bovy_plot.bovy_print() bovy_plot.bovy_hist(totalmasssamples,bins=16,range=[0.,2.]) bovy_plot.bovy_end_print('totalmass.png') return None #disk totalmasssamples= [] for s in samples: totalmasssamples.append(diskmass(s)) totalmasssamples= numpy.array(totalmasssamples) print "disk mass: ", numpy.mean(totalmasssamples), numpy.std(totalmasssamples) #bulge totalmasssamples= [] for s in samples: totalmasssamples.append(bulgemass(s)) totalmasssamples= numpy.array(totalmasssamples) print "bulge mass: ", numpy.mean(totalmasssamples), numpy.std(totalmasssamples) return None
def mockNonFlatTable(parser): (options, args) = parser.parse_args() cmdline = '%python mockNonFlatTable.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() #Set up sections names = [ '$V_c(R_0)\ [\mathrm{km\ s}^{-1}]$', '$\\beta$', '$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$' ] missing = [0, 1, 0, 0, 0, 0, 0, 0] #1 if missing for flat scale = [_REFV0, 1., _REFR0, _VRSUN, 1., _REFV0, 1., 1.] flatbestfits = [] flatxs = [] #V_c flatbestfits.append(flatparams[0]) flatxs.append(numpy.array([s[0] for s in flatsamples])) #beta flatbestfits.append(None) flatxs.append(None) #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])) #Make table quantile = 0.68 outfile = open(args[0], 'w') for kk in range(_NSECTIONS): #Open savefile for all mocks' fit and samples mockparams = [] mocksamples = [] for ii in range(_NMOCKS): savefile = open(_MOCKFIT[ii].replace('FLAT', _SECTIONS[kk]), 'rb') mockparams.append(pickle.load(savefile)) savefile.close() savefile = open(_MOCKSAMPLES[ii].replace('FLAT', _SECTIONS[kk]), 'rb') mocksamples.append(pickle.load(savefile)) savefile.close() mockbestfits = [] mockxs = [] ##Same for all mocks if _SECTIONS[kk] == 'powerlaw' or _SECTIONS[kk] == 'linear': skip = 1 elif _SECTIONS[kk] == 'quadratic': skip = 2 elif _SECTIONS[kk] == 'cubic': skip = 3 if _SECTIONS[kk] == 'linear': names[ 1] = '$\\mathrm{d} V_c / \mathrm{d} R \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$' elif _SECTIONS[kk] == 'quadratic': names.insert( 2, '$\\mathrm{d}^2 V_c / \mathrm{d} R^2 \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-2}]$' ) flatbestfits.insert(2, None) flatxs.insert(2, None) missing.insert(2, 1) scale.insert(2, 1.) elif _SECTIONS[kk] == 'cubic': if not 'quadratic' in _SECTIONS: #First insert quadratic names.insert( 2, '$\\mathrm{d}^2 V_c / \mathrm{d} R^2 \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-2}]$' ) flatbestfits.insert(2, None) flatxs.insert(2, None) missing.insert(2, 1) scale.insert(2, 1.) #Assumes that quadratic was already inserted names.insert( 3, '$\\mathrm{d}^3 V_c / \mathrm{d} R^3 \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-3}]$' ) flatbestfits.insert(3, None) flatxs.insert(3, None) missing.insert(3, 1) scale.insert(3, 1.) 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]])) #Beta if _SECTIONS[kk] == 'powerlaw': thisbestfits.append(mockparams[ii][6]) thisxs.append(numpy.array([s[6] for s in mocksamples[ii]])) elif _SECTIONS[kk] == 'linear' or _SECTIONS[ kk] == 'quadratic' or _SECTIONS[kk] == 'cubic': thisbestfits.append(mockparams[ii][6] * _REFV0 / _REFR0) thisxs.append( numpy.array( [s[6] * _REFV0 / _REFR0 for s in mocksamples[ii]])) if _SECTIONS[kk] == 'quadratic' or _SECTIONS[kk] == 'cubic': thisbestfits.append(mockparams[ii][7] * _REFV0 / _REFR0**2.) thisxs.append( numpy.array( [s[7] * _REFV0 / _REFR0**2. for s in mocksamples[ii]])) if _SECTIONS[kk] == 'cubic': thisbestfits.append(mockparams[ii][8] * _REFV0 / _REFR0**3.) thisxs.append( numpy.array( [s[8] * _REFV0 / _REFR0**3. 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 + skip]) thisxs.append(numpy.array([s[6 + skip] for s in mocksamples[ii]])) #Omega_sun thisbestfits.append(mockparams[ii][7 + skip] * _PMSGRA) thisxs.append( numpy.array([s[7 + skip] * _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 + skip]) thisxs.append( numpy.array([s[1] * s[9 + skip] for s in mocksamples[ii]])) #X^2 thisbestfits.append(mockparams[ii][8 + skip]) thisxs.append(numpy.array([s[8 + skip] for s in mocksamples[ii]])) #Append all mockbestfits.append(thisbestfits) mockxs.append(thisxs) for ii in range(len(names)): #Set up line if ii == 0: if _SECTIONS[kk] == 'powerlaw': printline = 'power-law' else: printline = _SECTIONS[kk] else: printline = " " printline += ' & ' printline += names[ii] #Flat printline += ' & ' if missing[ii]: 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])) 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 += ' & ' print _SECTIONS[kk], jj, ii, mockbestfits[jj][ii] 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 (kk == (_NSECTIONS - 1) and ii == (len(names) - 1)): printline += '\\\\' if not kk == (_NSECTIONS - 1) and ii == (len(names) - 1): printline += '\\\\' outfile.write(printline + '\n') outfile.write('\\enddata\n') outfile.write(cmdline + '\n') outfile.close()
def mockNonFlatTable(parser): (options,args)= parser.parse_args() cmdline= '%python mockNonFlatTable.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() #Set up sections names= ['$V_c(R_0)\ [\mathrm{km\ s}^{-1}]$', '$\\beta$', '$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$'] missing= [0,1,0,0,0,0,0,0] #1 if missing for flat scale= [_REFV0,1., _REFR0,_VRSUN,1.,_REFV0,1.,1.] flatbestfits= [] flatxs= [] #V_c flatbestfits.append(flatparams[0]) flatxs.append(numpy.array([s[0] for s in flatsamples])) #beta flatbestfits.append(None) flatxs.append(None) #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])) #Make table quantile= 0.68 outfile= open(args[0],'w') for kk in range(_NSECTIONS): #Open savefile for all mocks' fit and samples mockparams= [] mocksamples= [] for ii in range(_NMOCKS): savefile= open(_MOCKFIT[ii].replace('FLAT',_SECTIONS[kk]),'rb') mockparams.append(pickle.load(savefile)) savefile.close() savefile= open(_MOCKSAMPLES[ii].replace('FLAT',_SECTIONS[kk]),'rb') mocksamples.append(pickle.load(savefile)) savefile.close() mockbestfits= [] mockxs= [] ##Same for all mocks if _SECTIONS[kk] == 'powerlaw' or _SECTIONS[kk] == 'linear': skip= 1 elif _SECTIONS[kk] == 'quadratic': skip= 2 elif _SECTIONS[kk] == 'cubic': skip= 3 if _SECTIONS[kk] == 'linear': names[1]= '$\\mathrm{d} V_c / \mathrm{d} R \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-1}]$' elif _SECTIONS[kk] == 'quadratic': names.insert(2,'$\\mathrm{d}^2 V_c / \mathrm{d} R^2 \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-2}]$') flatbestfits.insert(2,None) flatxs.insert(2,None) missing.insert(2,1) scale.insert(2,1.) elif _SECTIONS[kk] == 'cubic': if not 'quadratic' in _SECTIONS: #First insert quadratic names.insert(2,'$\\mathrm{d}^2 V_c / \mathrm{d} R^2 \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-2}]$') flatbestfits.insert(2,None) flatxs.insert(2,None) missing.insert(2,1) scale.insert(2,1.) #Assumes that quadratic was already inserted names.insert(3,'$\\mathrm{d}^3 V_c / \mathrm{d} R^3 \left(R_0 \\right)\ [\mathrm{km\ s}^{-1}\ \mathrm{kpc}^{-3}]$') flatbestfits.insert(3,None) flatxs.insert(3,None) missing.insert(3,1) scale.insert(3,1.) 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]])) #Beta if _SECTIONS[kk] == 'powerlaw': thisbestfits.append(mockparams[ii][6]) thisxs.append(numpy.array([s[6] for s in mocksamples[ii]])) elif _SECTIONS[kk] == 'linear' or _SECTIONS[kk] == 'quadratic' or _SECTIONS[kk] == 'cubic': thisbestfits.append(mockparams[ii][6]*_REFV0/_REFR0) thisxs.append(numpy.array([s[6]*_REFV0/_REFR0 for s in mocksamples[ii]])) if _SECTIONS[kk] == 'quadratic' or _SECTIONS[kk] == 'cubic': thisbestfits.append(mockparams[ii][7]*_REFV0/_REFR0**2.) thisxs.append(numpy.array([s[7]*_REFV0/_REFR0**2. for s in mocksamples[ii]])) if _SECTIONS[kk] == 'cubic': thisbestfits.append(mockparams[ii][8]*_REFV0/_REFR0**3.) thisxs.append(numpy.array([s[8]*_REFV0/_REFR0**3. 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+skip]) thisxs.append(numpy.array([s[6+skip] for s in mocksamples[ii]])) #Omega_sun thisbestfits.append(mockparams[ii][7+skip]*_PMSGRA) thisxs.append(numpy.array([s[7+skip]*_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+skip]) thisxs.append(numpy.array([s[1]*s[9+skip] for s in mocksamples[ii]])) #X^2 thisbestfits.append(mockparams[ii][8+skip]) thisxs.append(numpy.array([s[8+skip] for s in mocksamples[ii]])) #Append all mockbestfits.append(thisbestfits) mockxs.append(thisxs) for ii in range(len(names)): #Set up line if ii == 0: if _SECTIONS[kk] == 'powerlaw': printline= 'power-law' else: printline= _SECTIONS[kk] else: printline= " " printline+= ' & ' printline+= names[ii] #Flat printline+= ' & ' if missing[ii]: 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])) 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+= ' & ' print _SECTIONS[kk], jj, ii, mockbestfits[jj][ii] 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 (kk == (_NSECTIONS-1) and ii == (len(names)-1)): printline+= '\\\\' if not kk == (_NSECTIONS-1) and ii == (len(names)-1): printline+= '\\\\' outfile.write(printline+'\n') outfile.write('\\enddata\n') outfile.write(cmdline+'\n') outfile.close()
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()