4 from scipy.interpolate
import interp1d
5 from astropy.cosmology
import Planck15
as cosmo
6 from astropy.constants
import c,G
7 from astropy
import units
as u
8 from scipy.integrate
import quad
as scipy_int1d
12 cosmo_fid=dict({
'h':0.7,
's8':0.8,
'Omc':0.3,
'Og':0.0,
'Omb':0.0,
'Om':0.3,
'm_nu':[0,0,0],
13 'Neff':3.046,
'Omk':0,
'tau':0.06,
'ns':0.96,
'Tcmb0':0})
16 cosmo=cosmo.clone(H0=cosmo_fid[
'h']*100,Ob0=cosmo_fid[
'Omb'],Om0=cosmo_fid[
'Om'],
17 m_nu=cosmo_fid[
'm_nu']*u.eV,Neff=cosmo_fid[
'Neff'],Tcmb0=cosmo_fid[
'Tcmb0'])
18 cosmo_h=cosmo.clone(H0=100)
20 pk_params={
'non_linear':0,
'kmax':1E3,
'kmin':5.e-5,
'nk':5000}
23 def __init__(self,cosmo_params=cosmo_fid,pk_params=pk_params,cosmo=cosmo,cosmo_h=None):
36 G2=G.to(u.Mpc/u.Msun*u.km**2/u.second**2)
37 rc=3*self.cosmo_h.H0**2/(8*np.pi*G2)
38 rc=rc.to(u.Msun/u.pc**2/u.Mpc)
45 return (1+z)/(cosmo.H(z).value)**3
47 Dz=np.zeros_like(z,dtype=
'float32')
50 Dz[j]=cosmo.H(i).value*scipy_int1d(intf,i,np.inf,epsrel=1.e-6,epsabs=1e-6)[0]
52 Dz*=(2.5*cosmo.Om0*cosmo.H0.value**2)
58 ds=cosmo_h.comoving_transverse_distance(zs)
59 dl=cosmo_h.comoving_transverse_distance(zl)
60 ddls=1-np.multiply.outer(1./ds,dl)
61 w=(3./2.)*((cosmo_h.H0/c)**2)*(1+zl)*dl/self.
Rho_crit(cosmo_h)
73 cosmo_ccl=pyccl.Cosmology(h=cosmo_params[
'h'],Omega_c=cosmo_params[
'Omc'],Omega_b=cosmo_params[
'Omb'],
74 sigma8=cosmo_params[
's8'],n_s=cosmo_params[
'ns'],
75 transfer_function=
'bbks', matter_power_spectrum=
'linear',
76 Omega_g=cosmo_params[
'Og'])
78 kh=np.logspace(np.log10(pk_params[
'kmin']),np.log10(pk_params[
'kmax']),pk_params[
'nk'])
80 ps=np.zeros((nz,pk_params[
'nk']))
84 pyccl_pkf=pyccl.linear_matter_power
85 if pk_params[
'non_linear']==1:
86 pyccl_pkf=pyccl.nonlin_matter_power
87 for i
in np.arange(nz):
89 ps[i]= pyccl_pkf(cosmo_ccl,kh,1./(1+z[i]))
90 except Exception
as err:
91 print (
'CCL err',err,z[i])
93 ps0=pyccl.linear_matter_power(cosmo_ccl,kh,1./(1.+z0))
94 Dz=self.
DZ_int(z=[z0,z[i]])
95 ps[i]=ps0*(Dz[1]/Dz[0])**2
96 return ps*cosmo_params[
'h']**3,kh/cosmo_params[
'h']
98 def cl_z(self,z=[],l=np.arange(3000)+1,pk_params=
None,cosmo_h=
None,
99 cosmo=
None,pk_func=
None):
103 pk_func=self.camb_pk_too_many_z
108 pk,kh=
pk_func(z=z,pk_params=pk_params)
110 cls=np.zeros((nz,nl),dtype=
'float32')*u.Mpc
111 for i
in np.arange(nz):
112 DC_i=cosmo_h.comoving_transverse_distance(z[i]).value
114 DC_i=cosmo_h.comoving_transverse_distance(z[i]).value
115 pk_int=interp1d(lz,pk[i]/DC_i**2,bounds_error=
False,fill_value=0)
116 cls[i][:]+=pk_int(l)*u.Mpc
119 def kappa_cl(self,zl_min=1.e-4,zl_max=1100,n_zl=10,log_zl=False,pk_func=None,
120 zs1=[1100],p_zs1=[1],zs2=[1100],p_zs2=[1],
121 pk_params=
None,cosmo_h=
None,l=np.arange(0,3001)):
126 zl=np.logspace(np.log10(
max(zl_min,1.e-4)),np.log10(zl_max),n_zl)
128 zl=np.linspace(zl_min,zl_max,n_zl)
130 clz=self.
cl_z(z=zl,l=l,cosmo_h=cosmo_h,pk_params=pk_params,pk_func=pk_func)
132 clz=(clz.T*(c/(cosmo_h.efunc(zl)*cosmo_h.H0))).T
136 rho=self.
Rho_crit(cosmo_h=cosmo_h)*cosmo_h.Om0
137 sigma_c1=rho/self.
sigma_crit(zl=zl,zs=zs1,cosmo_h=cosmo_h)
138 sigma_c2=rho/self.
sigma_crit(zl=zl,zs=zs2,cosmo_h=cosmo_h)
141 dzs1=np.gradient(zs1)
if len(zs1)>1
else 1
142 dzs2=np.gradient(zs2)
if len(zs2)>1
else 1
144 cl_zs_12=np.einsum(
'ji,ki,il',sigma_c2,sigma_c1*dzl,clz)
145 cl=np.dot(p_zs2*dzs2,np.dot(p_zs1*dzs1,cl_zs_12))
147 cl/=np.sum(p_zs2*dzs2)*np.sum(p_zs1*dzs1)
148 f=l*(l+1.)/(l+0.5)**2
154 def g_kappa_cl(self,pk_func=None,zs=[1100],p_zs=[1],zg=[1],p_zg=[1],bias_g=1,
155 pk_params=
None,cosmo_h=
None,l=np.arange(0,3001)):
159 clz=self.
cl_z(z=zg,l=l,cosmo_h=cosmo_h,pk_params=pk_params,pk_func=pk_func)
162 rho=self.
Rho_crit(cosmo_h=cosmo_h)*cosmo_h.Om0
163 sigma_c=rho/self.
sigma_crit(zl=zg,zs=zs,cosmo_h=cosmo_h)
164 dzg=np.gradient(zg)
if len(zg)>1
else 1
165 dzs=np.gradient(zs)
if len(zs)>1
else 1
167 cl_zs_12=np.dot(sigma_c*dzg*p_zg,clz)
168 cl=np.dot(p_zs*dzs,cl_zs_12)
169 cl/=np.sum(p_zs*dzs)*np.sum(p_zg*dzg)
173 if __name__ ==
"__main__":
178 zg=np.genfromtxt(
'../codecomp_step2_outputs/bin1_histo.txt',
180 l,cl_g_cmb=PS.g_kappa_cl(pk_func=PS.ccl_pk_bbks,zs=[1100],p_zs=[1],zg=zg[
'z'],p_zg=zg[
'pz'],bias_g=1,)
181 np.savetxt(
"../codecomp_step2_outputs/run_b1b1histo_log_cl_dc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
184 zg=np.genfromtxt(
'../codecomp_step2_outputs/bin2_histo.txt',
186 l,cl_g_cmb=PS.g_kappa_cl(pk_func=PS.ccl_pk_bbks,zs=[1100],p_zs=[1],zg=zg[
'z'],p_zg=zg[
'pz'],bias_g=1,)
187 np.savetxt(
"../codecomp_step2_outputs/run_b2b2histo_log_cl_dc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
191 zav=np.linspace(0,10.,10000)
192 pza=1./(np.sqrt(2*math.pi)*sigz1)*np.exp(-0.5*((zav-1)/sigz1)**2)
193 za={
'z':zav,
'pz':pza}
194 l,cl_g_cmb=PS.g_kappa_cl(pk_func=PS.ccl_pk_bbks,zs=[1100],p_zs=[1],zg=za[
'z'],p_zg=za[
'pz'],bias_g=1,)
195 np.savetxt(
"../codecomp_step2_outputs/run_b1b1analytic_log_cl_dc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
198 pza=1./(np.sqrt(2*math.pi)*sigz1)*np.exp(-0.5*((zav-1.5)/sigz1)**2)
199 za={
'z':zav,
'pz':pza}
200 l,cl_g_cmb=PS.g_kappa_cl(pk_func=PS.ccl_pk_bbks,zs=[1100],p_zs=[1],zg=za[
'z'],p_zg=za[
'pz'],bias_g=1,)
201 np.savetxt(
"../codecomp_step2_outputs/run_b2b2analytic_log_cl_dc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
205 zg=np.genfromtxt(
'../codecomp_step2_outputs/bin1_histo.txt',
207 l,cl_g_cmb=PS.kappa_cl(pk_func=PS.ccl_pk_bbks,n_zl=1000,zs2=zg[
'z'],p_zs2=zg[
'pz'],zl_max=10)
208 np.savetxt(
"../codecomp_step2_outputs/run_b1b1histo_log_cl_lc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
211 zg=np.genfromtxt(
'../codecomp_step2_outputs/bin2_histo.txt',
213 l,cl_g_cmb=PS.kappa_cl(pk_func=PS.ccl_pk_bbks,n_zl=1000,zs2=zg[
'z'],p_zs2=zg[
'pz'],zl_max=10)
214 np.savetxt(
"../codecomp_step2_outputs/run_b2b2histo_log_cl_lc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
218 zav=np.linspace(0,10.,10000)
219 pza=1./(np.sqrt(2*math.pi)*sigz1)*np.exp(-0.5*((zav-1)/sigz1)**2)
220 za={
'z':zav,
'pz':pza}
221 l,cl_g_cmb=PS.kappa_cl(pk_func=PS.ccl_pk_bbks,n_zl=1000,zs2=za[
'z'],p_zs2=za[
'pz'],zl_max=10)
222 np.savetxt(
"../codecomp_step2_outputs/run_b1b1analytic_log_cl_lc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
225 pza=1./(np.sqrt(2*math.pi)*sigz1)*np.exp(-0.5*((zav-1.5)/sigz1)**2)
226 za={
'z':zav,
'pz':pza}
227 l,cl_g_cmb=PS.kappa_cl(pk_func=PS.ccl_pk_bbks,n_zl=1000,zs2=za[
'z'],p_zs2=za[
'pz'],zl_max=10)
228 np.savetxt(
"../codecomp_step2_outputs/run_b2b2analytic_log_cl_lc.txt",np.column_stack((l,cl_g_cmb)),fmt=[
'%i',
'%.18e'])
def ccl_pk_bbks(self, z, cosmo_params=None, pk_params=None)
def cl_z(self, z=[], l=np.arange(3000)+1, pk_params=None, cosmo_h=None, cosmo=None, pk_func=None)
def Rho_crit(self, cosmo_h=None)
def __init__(self, cosmo_params=cosmo_fid, pk_params=pk_params, cosmo=cosmo, cosmo_h=None)
static T max(const std::vector< T > &data)
def kappa_cl(self, zl_min=1.e-4, zl_max=1100, n_zl=10, log_zl=False, pk_func=None, zs1=[1100], p_zs1=[1], zs2=[1100], p_zs2=[1], pk_params=None, cosmo_h=None, l=np.arange(0, 3001))
def sigma_crit(self, zl=[], zs=[], cosmo_h=None)
def DZ_int(self, z=[0], cosmo=None)
def g_kappa_cl(self, pk_func=None, zs=[1100], p_zs=[1], zg=[1], p_zg=[1], bias_g=1, pk_params=None, cosmo_h=None, l=np.arange(0, 3001))