def do_all(z_arr, k_arr, cpar, prefix, wig): pcs = csm.PcsPar() pcs.background_set(cpar['om'], cpar['ol'], cpar['ob'], cpar['w0'], cpar['wa'], cpar['hh'], TCMB) if wig: typ = 'EH' else: typ = 'EH_smooth' pcs.set_linear_pk(typ, -3, LKMAX, 0.01, cpar['ns'], cpar['s8']) gf0 = pcs.growth_factor(1) a_arr = 1. / (z_arr + 1) gf_arr = np.array([pcs.growth_factor(a) for a in a_arr]) pk_arr = np.array([[pcs.Pk_linear_0(k) * (gf / gf0)**2 for k in k_arr] for gf in gf_arr]) if PLOT_STUFF == 1: for i in np.arange(len(pk_arr)): plt.plot(k_arr, pk_arr[i], label='$z=%.2lf$' % (z_arr[i])) plt.xlabel('$k\\,[h\\,{\\rm Mpc}^{-1}]$', fontsize=FS) plt.ylabel('$P(k)\\,[{\\rm Mpc}\\,h^{-1}]^3$', fontsize=FS) plt.gca().set_xscale('log') plt.gca().set_yscale('log') plt.legend(loc='lower left') plt.show() if WRITE_STUFF == 1: header_pk = "[0] k (Mpc/h)^-1" for i in np.arange(len(z_arr)): header_pk += ", [%d]" % (i + 2) + " P(k,z=%.1lf) (Mpc/h)^3" % ( z_arr[i]) np.savetxt(prefix + "_pk_eh.txt", np.transpose(np.vstack((k_arr, pk_arr))), header=header_pk)
def get_pz(om, ol, ob, hh, get_nm=False): """Average electron pressure in the relevant redshift range for a set of cosmological parameters""" pcs = csm.PcsPar() pcs.unset_gsl_eh() pcs.background_set(om, ol, ob, -1., 0., hh, 2.7255) g_ratio = pcs.growth_factor( 1.) / dgrowth0 #Growth ratio with respect to background universe pcs.set_linear_pk('EH', -5., 3., 0.01, NS, S8 * g_ratio) pcs.set_mf_params(LMMIN, LMMAX, DLM) cospar = {'OM': om, 'OB': ob, 'h': hh, 'pcs': pcs} marr = np.logspace(LMMIN, LMMAX, NLM) zarr = np.array([Z_EFF]) pzarr = np.zeros_like(zarr) for iz, z in enumerate(zarr): zeff = get_zeff(om, ol, 1 - om - ol, hh, z) #Equivalent redshift in the effective Universe nmarr = np.zeros_like(marr) for im, m in enumerate(marr): bp = get_battaglia(m, zeff, cospar) pmean = integrated_profile(bp) nmarr[im] = pmean * pcs.mass_function_logarithmic( m, zeff, 'Tinker10_200') nmf = interp1d(np.log10(marr), nmarr, bounds_error=False, fill_value=0) pzarr[iz] = itg.quad(nmf, 7.5, LMMAX + 0.5)[0] if get_nm: return marr, nmarr, np.mean(pzarr) else: return np.mean(pzarr)
def do_all(z_arr,cpar,prefix) : pcs=csm.PcsPar() pcs.background_set(cpar['om'],cpar['ol'],cpar['ob'],cpar['w0'],cpar['wa'],cpar['hh'],TCMB) a_arr=1./(z_arr+1) chi_arr=np.array([pcs.radial_comoving_distance(a) for a in a_arr]) if PLOT_STUFF==1 : plt.plot(z_arr,chi_arr); plt.xlabel('$z$',fontsize=FS); plt.ylabel('$\\chi(z)\\,[{\\rm Mpc}\\,h^{-1}]$',fontsize=FS); plt.show() if WRITE_STUFF==1 : np.savetxt(prefix+"_chi.txt",np.transpose([z_arr,chi_arr]),header="[1] z, [2] chi(z) (Mpc/h)")
def get_s8(cp): cospar = cp.copy() pcs = csm.PcsPar() if DEBUG: pcs.set_verbosity(1) else: pcs.set_verbosity(0) om = (cospar['och2'] + cospar['obh2'] + cospar['mnu'] * 0.001 / 93.14) / cospar['hh']**2 ob = cospar['obh2'] / cospar['hh']**2 pcs.background_set(om, 1 - om, ob, cospar['w0'], cospar['wa'], cospar['hh'], TCMB) write_class_param_file(cospar, np.array([0])) pcs.set_linear_pk(PREFIX_SAVE + "pk.dat", -4., 3., 0.01, cospar['ns'], -1) return np.sqrt(pcs.sig0_L(8, 8, 'TopHat', 'TopHat'))
def get_mfunc(cospar, z_min, z_max, nz, lm_min, lm_max, nm, fsky): z_arr = z_min + (z_max - z_min) * (np.arange(nz) + 0.5) / nz z0_arr = z_min + (z_max - z_min) * (np.arange(nz) + 0.0) / nz zf_arr = z_min + (z_max - z_min) * (np.arange(nz) + 1.0) / nz pcs = csm.PcsPar() if DEBUG: pcs.set_verbosity(1) else: pcs.set_verbosity(0) om = (cospar['och2'] + cospar['obh2'] + cospar['mnu'] * 0.001 / 93.14) / cospar['hh']**2 ob = cospar['obh2'] / cospar['hh']**2 pcs.background_set(om, 1 - om, ob, cospar['w0'], cospar['wa'], cospar['hh'], TCMB) write_class_param_file(cospar, z_arr) m_arr = 10.**(lm_min + (lm_max - lm_min) * (np.arange(nm) + 0.5) / nm) r_arr = np.array([pcs.M2R(m) for m in m_arr]) m2_arr = 10.**(lm_min + (lm_max - lm_min) * (np.arange(nm + 1) + 0.0) / nm) lmarr = np.log10(m2_arr) r2_arr = np.array([pcs.M2R(m) for m in m2_arr]) nm_arr = np.zeros([nz, nm]) for iz in np.arange(nz): z = z_arr[iz] z0 = z0_arr[iz] zf = zf_arr[iz] r0 = pcs.radial_comoving_distance(1. / (1 + z0)) rf = pcs.radial_comoving_distance(1. / (1 + zf)) pcs.set_linear_pk(PREFIX_SAVE + "z%d_pk.dat" % (iz + 1), -4., 3., 0.01, cospar['ns'], -1) volz = 4 * np.pi * fsky * (rf**3 - r0**3) / ( 3 * (zf - z0) ) #pcs.radial_comoving_distance(1./(1+z))**2/pcs.hubble(1./(1+z)) sigM_arr = np.sqrt( np.array([pcs.sig0_L(r, r, 'TopHat', 'TopHat') for r in r_arr])) sig2_arr = np.sqrt( np.array([pcs.sig0_L(r, r, 'TopHat', 'TopHat') for r in r2_arr])) dlsdlm_arr = -np.log10(sig2_arr[1:] / sig2_arr[:-1]) / (lmarr[1:] - lmarr[:-1]) nm_arr[iz, :] = (np.log(10.) * volz * dlsdlm_arr * om * RHOCRIT0 * g_nu(sigM_arr, z, cospar['mfName']) / m_arr) os.system("rm " + PREFIX_SAVE + "*") return pcs, nm_arr
def do_all(z_arr, cpar, prefix): pcs = csm.PcsPar() pcs.background_set(cpar['om'], cpar['ol'], cpar['ob'], cpar['w0'], cpar['wa'], cpar['hh'], TCMB) a_arr = 1. / (z_arr + 1) gf_arr = np.array([pcs.growth_factor(a) for a in a_arr]) if PLOT_STUFF == 1: plt.plot(a_arr, gf_arr) plt.xlabel('$a$', fontsize=FS) plt.ylabel('$D(z)$', fontsize=FS) plt.show() if WRITE_STUFF == 1: np.savetxt(prefix + "_gf.txt", np.transpose([z_arr, gf_arr]), header="[1] z, [2] D(z)")
def do_all(m_arr, cpar, prefix): pcs = csm.PcsPar() pcs.background_set(cpar['om'], cpar['ol'], cpar['ob'], cpar['w0'], cpar['wa'], cpar['hh'], TCMB) pcs.set_linear_pk('BBKS', -3, LKMAX, 0.01, cpar['ns'], cpar['s8']) r_arr = np.array([pcs.M2R(m) for m in m_arr]) sm_arr = np.sqrt( np.array([pcs.sig0_L(r, r, 'TopHat', 'TopHat') for r in r_arr])) if PLOT_STUFF == 1: plt.plot(m_arr, sm_arr) plt.xlabel('$M\\,[M_{\\odot}\\,h^{-1}]$', fontsize=FS) plt.ylabel('$\\sigma(M)$', fontsize=FS) plt.gca().set_xscale('log') plt.gca().set_yscale('log') plt.show() if WRITE_STUFF == 1: np.savetxt(prefix + "_sm.txt", np.transpose([m_arr, sm_arr]), header="[1] M (M_sun/h), [2] sigma(M)")
RHOCRIT0 = 2.7744948E11 OM0 = 0.3 HH0 = 0.7 FB0 = 0.1666666 NS = 0.96 S8 = 0.8 NRMAX = 10. LMMIN = 8. LMMAX = 16. DLM = 0.1 NLM = 64 B_CMASS = 2. Z_EFF = 0.5 #Cosmological parameters outside the voide pcs_BG0 = csm.PcsPar() pcs_BG0.unset_gsl_eh() pcs_BG0.background_set(OM0, 1 - OM0, OM0 * FB0, -1., 0., HH0, 2.7255) dgrowth0 = pcs_BG0.growth_factor(1.) #Normalization of the growth factor #Factor needed to scale the void profile at z=Z_EFF to z=0 scale_delta = B_CMASS * pcs_BG0.growth_factor(1. / (1 + Z_EFF)) / dgrowth0 def rDelta(m, z, Delta, cpar): """Returns r_Delta """ hn = (cpar['pcs']).hubble(1. / (1 + z)) / (cpar['pcs']).hubble(1.) rhoc = RHOCRIT0 * hn * hn return (3 * m / (4 * np.pi * Delta * rhoc))**0.333333333 * (1 + z)
import numpy as np import py_cosmo_mad as csm KMAX = 0.2 pcs = csm.PcsPar() pcs.set_verbosity(1) pcs.background_set(0.315, 0.685, 0.049, -1., 0., 0.67, 2.725) def reprocess_file(fname, forgetlmax): data = np.loadtxt(fname, unpack=True) z0 = data[0] zf = data[1] sz = data[2] marg = data[3] zm = (z0 + zf) / 2 if forgetlmax: lmax = 2000 * np.ones_like(sz) else: lmax = np.array([ int(pcs.radial_comoving_distance(1. / (1 + z)) * KMAX) for z in zm ]) np.savetxt(fname, np.transpose([z0, zf, sz, marg, lmax]), fmt='%lf %lf %lf %d %d', header='[0]z0 [1]zf [2]sigma_z [3]marg_sz [4]lmax') reprocess_file('bins_red.txt', False) reprocess_file('bins_blue.txt', False) reprocess_file('bins_gold.txt', True)