def trial_check(d): a = np.linspace(-1, 1, n_points) b = np.linspace(1e-5, 1e-1, n_points) r = np.linspace(0, 1, n_points) e = np.linspace(1e-4, 1e-2, n_points) A, B, R, S, E = np.meshgrid(a, b, r, r, e) array = np.array([]) for i in d: integrand = sp.integrate.trapz(sp.integrate.trapz(sp.integrate.trapz( sp.integrate.trapz(sp.integrate.trapz( (i * A + E) / (B**2 + i**2 / uf.chi(R)**2 + E**2 - 2 * B * np.sqrt(i**2 / uf.chi(R)**2 + E**2) * A) * R * S, a, axis=0), b, axis=0), r, axis=0), r, axis=0), e, axis=0) array = np.append(array, integrand) return array
def Cl_21(ell,y,z): #Cl=[] Cl=np.array([]) for i in ell: kpar=y/uf.r(z) k=np.sqrt(kpar**2+(i/uf.chi(z))**2) mu_k_sq=kpar**2/k**2 a=uf.b_HI+uf.f(z)*mu_k_sq Cl_one=(uf.T_mean(z)*a*uf.D_1(z))**2*uf.Mps_interpf(k)/(uf.chi(z)**2*uf.r(z)) Cl=np.append(Cl,Cl_one) return Cl
def F_three_ints(ell, z): Kp = np.geomspace(1.e-10, 10., n_points) Mu = np.linspace(-0.9999, 0.9999, n_points) Phi = np.geomspace(1.e-4, 2 * np.pi, n_points) mu, phi, kp = np.meshgrid(Mu, Phi, Kp) C_l = np.zeros((len(z), len(ell))) theta_kp_arr = np.array([]) theta_K_arr = np.array([]) for j in range(len(z)): for i in range(len(ell)): k = ell[i] / uf.chi(z[j]) K = np.sqrt(k**2 + kp**2 - 2 * k * kp * mu * np.cos(phi)) theta_kp = np.sqrt(1 - mu**2) theta_kp_arr = np.append(theta_kp_arr, theta_kp) theta_K = -np.sqrt(1 - mu**2) * kp / K theta_K_arr = np.append(theta_K_arr, theta_K) I = theta_kp / kp**2 + theta_K * theta_kp / K / kp z_part = (1 + z[j])**2 * np.exp(-2 * tau_inst(z[j])) * f( z[j])**2 * D(z[j])**4 / chi(z[j])**2 * H(z[j]) integral = z_part * sp.integrate.trapz(sp.integrate.trapz( sp.integrate.trapz( kp**2 * I * Mps_interpf(kp) * Mps_interpf(K), Mu, axis=0), Phi, axis=0), Kp, axis=0) C_l[j, i] = integral return C_l, theta_kp_arr, theta_K_arr
def C_l_castro_integrand(ell, z): Kp = np.geomspace(k_min, k_max, n_points) Y1 = Kp * uf.chi(z) / ell Mu = np.linspace(-1, 1, n_points) mu, y1 = np.meshgrid(Mu, Y1) H = uf.H chi = uf.chi tau = uf.tau_inst #chi_Z=chi(Z) f = uf.f D = uf.D_1 const = 1e12 * T_rad**2 * x**2 / cc.c_light_Mpc_s * (sigma_T * rho_g0 / (mu_e * m_p))**2 #kp_norm=np.linalg.norm(Kp) #k_norm=np.linalg.norm(ell/chi_Z) C_l = np.array([]) for i in z: k = ell / chi(i) constants = 1 / (2 * np.pi)**(3 / 2) * 2 * np.pi / 2 #mu=np.dot(k,Kp)/(k_norm*kp_norm) #I=k*(k-2*kp*j)*(1-j**2)/(k**2+kp**2-2*k*kp*j) integral = [ constants * sp.integrate.trapz(sp.integrate.trapz( f(i)**2 * Mps_interpf(k * y1) * Mps_interpf(k * np.sqrt(1 + y1**2 - 2 * y1 * mu)) * k * (1 - 2 * y1 * mu)**2 * (1 - mu**2) / (1 + y1**2 - 2 * y1 * mu)**2 * const * (1 + i)**2 * H(i) * D(i)**4 * np.exp(-2 * tau(i)) / chi(i)**2, Y1, axis=0), Mu, axis=0) ] C_l = np.append(C_l, integral) return C_l
def C_l_mu_single_ell(ell): Kp = np.geomspace(1e-4, 100, n_points) Mu = np.linspace(-0.9999, 0.9999, n_points) Z = np.geomspace(1e-4, z_r, n_points) mu, kp, z = np.meshgrid(Mu, Kp, Z) H_z = uf.H(Z) chi_z = uf.chi(Z) #chi_Z=chi(Z) tau_z = uf.tau_inst(Z) f_z = uf.f(Z) D_z = uf.D_1(Z) const = 1e12 * T_rad**2 * x**2 / cc.c_light_Mpc_s * ( sigma_T * rho_g0 / (mu_e * m_p))**2 / 8 / np.pi**2 #kp_norm=np.linalg.norm(Kp) #k_norm=np.linalg.norm(ell/chi_Z) k = ell / chi_z K = np.sqrt(k**2 + kp**2 - 2 * k * kp * mu) integral = sp.integrate.trapz(sp.integrate.trapz( sp.integrate.trapz(Mps_interpf(kp) * np.exp(-2 * tau_z) * f_z**2 * D_z**4 * H_z * (1 - mu**2) * (1 + z)**2 / chi_z**2, Mu, axis=0), Kp, axis=0), Z, axis=0) return integral
def C_l_integrand(ell, z): Kp = np.geomspace(1e-4, k_max, n_points) Mu = np.linspace(-0.9999, 0.9999, n_points) mu, kp = np.meshgrid(Mu, Kp) H_z = uf.H(z) chi_z = uf.chi(z) #chi_Z=chi(Z) tau_z = uf.tau_inst(z) f_z = uf.f(z) D_z = uf.D_1(z) const = 1e12 * T_rad**2 * x**2 / cc.c_light_Mpc_s * ( sigma_T * rho_g0 / (mu_e * m_p))**2 / 8 / np.pi**2 #kp_norm=np.linalg.norm(Kp) #k_norm=np.linalg.norm(ell/chi_Z) C_l = np.array([]) for i in ell: k = i / chi_z K = np.sqrt(np.abs(k**2 + kp**2 - 2 * k * kp * mu)) integral = [ const * sp.integrate.trapz(sp.integrate.trapz( k * (k - 2 * kp * mu) * (1 - mu**2) / K**2 * Mps_interpf(kp) * Mps_interpf(K) * (1 + z)**2 * np.exp(-2 * tau_z) * f_z**2 * D_z**4 / chi_z**2 * H_z, Mu, axis=0), Kp, axis=0) ] C_l = np.append(C_l, integral) return C_l
def power_spec(ell): kpar = np.geomspace(1e-4, 1e-1, 1000) array = np.array([]) z = 1 for i in ell: k = np.sqrt(kpar**2 + i**2 / uf.chi(z)**2) integrand = Mps_interpf(k) integral = sp.integrate.trapz(integrand, kpar, axis=0) array = np.append(array, integral) return array
def Delta_b_noredshift_single(ell, z): kp_norm = np.linalg.norm(kp) k = ell / uf.chi(z) k_norm = np.linalg.norm(k) mu = np.dot(k, kp) / (k_norm * kp_norm) I = k * (k - 2 * kp * mu) * (1 - mu**2) / (k**2 + kp**2 - 2 * k * kp * mu) constants = 1 / ((2 * np.pi**2) * (2 * np.pi)**3) delta_sq = constants * Mps_interpf(kp) * Mps_interpf(np.abs(ell - kp)) * I Integral = sp.integrate.trapz(delta_sq, kp) return Integral
def Cl_21_func_of_y(ell, z, y): z1 = 1. kpar = y / r(z1) chi_1 = uf.chi(z1) f_1 = uf.f(z1) D_1 = uf.D_1(z1) k = np.sqrt(kpar**2 + (ell / chi_1)**2) mu_k_sq = kpar**2 / k**2 a = uf.b_HI + f_1 * mu_k_sq Cl = (uf.T_mean(z1) * a * D_1)**2 * uf.Mps_interpf(k) / chi_1**2 / r(z1) return Cl
def Mps_k(ell): #Cl=np.array([]) Mps=np.array([]) kpar=(2/uf.r(1)) for i in ell: k=np.sqrt(kpar**2+(i/uf.chi(1))**2) Mps_one_ell=uf.Mps_interpf(k) #Mps_div_ell=Mps*kpar**4*(T_mean(1)*(kpar**2/k**2))**2/(chi(1)**2*r(1)) #Cl=np.append(Cl,Mps_div_ell) Mps=np.append(Mps,Mps_one_ell) return Mps
def Cl_21_lksz(ell,y,z): #Cl=[] Cl=np.array([]) for i in ell: a=uf.b_HI+uf.f(z)*mu_k(i,y,z)**2 #print (a) delta_tcm=(uf.T_mean(z)*a*uf.D_1(z))/(uf.chi(z)**2*uf.r(z)) #print (delta_tcm) delta_lksz=const*u(z_r)*np.abs(np.cos(uf.kpar(y,z_r)*chi_r))/k(i,y,z_r)**2*lksz.Mps_interpf(k(i,y,z_r)) #print (delta_lksz) Cl_one=delta_tcm*delta_lksz Cl=np.append(Cl,Cl_one) return Cl
def C_l_mu_integral_threeints(ell, z_min): Kp = np.geomspace(1.e-10, 10., n_points) Mu = np.linspace(-0.9999, 0.9999, n_points) Phi = np.geomspace(1.e-4, 2 * np.pi, n_points) Z = np.geomspace(z_min, z_r, n_points) mu, phi, kp, z = np.meshgrid(Mu, Phi, Kp, Z) H_z = uf.H(z) chi_z = uf.chi(z) #chi_Z=chi(Z) tau_z = uf.tau_inst(z) f_z = uf.f(z) D_z = uf.D_1(z) const = 1e12 * T_rad**2 * x**2 / cc.c_light_Mpc_s * ( sigma_T * rho_g0 / (mu_e * m_p))**2 / 16 / np.pi**3 #kp_norm=np.linalg.norm(Kp) #k_norm=np.linalg.norm(ell/chi_Z) theta_kp_arr = np.array([]) theta_K_arr = np.array([]) I_arr = np.array([]) C_l = np.array([]) for i in ell: k = i / chi_z K = np.sqrt(k**2 + kp**2 - 2 * k * kp * mu * np.cos(phi)) theta_kp = np.sqrt(1 - mu**2) theta_K = -np.sqrt(1 - mu**2) * kp / K theta_kp_arr = np.append(theta_kp_arr, theta_kp) theta_K_arr = np.append(theta_K_arr, theta_K) I = theta_kp**2 / kp**2 + theta_K * theta_kp / K / kp I_arr = np.append(I_arr, I) #I=k*(k-2*kp*mu)*(1-mu**2)/K**2 integral = [ const * sp.integrate.trapz(sp.integrate.trapz(sp.integrate.trapz( sp.integrate.trapz( kp**2 * I * Mps_interpf(kp) * Mps_interpf(K) * (1 + z)**2 * np.exp(-2 * tau_z) * f_z**2 * D_z**4 / chi_z**2 * H_z, Mu, axis=0), Phi, axis=0), Kp, axis=0), Z, axis=0) ] C_l = np.append(C_l, integral) return C_l, theta_kp_arr, theta_K_arr, I_arr
def Cl_21(ell, z1): y = np.linspace(1, 3000, n_points) kpar = np.geomspace(1e-10, 1e-2, n_points) kpar = y / r(z1) Cl = np.array([]) for i in ell: #integral=sp.integrate.quadrature(lambda kpar:Cl_21_func_of_y(z1,kpar,i),1e-4,1e-1)[0] chi_1 = uf.chi(z1) f_1 = uf.f(z1) D_1 = uf.D_1(z1) k = np.sqrt(kpar**2 + (i / chi_1)**2) mu_k_sq = kpar**2 / k**2 a = uf.b_HI + f_1 * mu_k_sq integral = sp.integrate.trapz((uf.T_mean(z1) * a * D_1)**2 * uf.Mps_interpf(k) / chi_1**2 / r(z1), y, axis=0) Cl = np.append(Cl, integral) return Cl
def C_l(ell): C_l=np.array([]) zz=z[:,np.newaxis] kk=kp[np.newaxis,:] kk_norm=np.linalg.norm(kk) for i in ell: #mu=kk/i #mu=(i**2+kk**2-(np.abs(i-kk))**2)/(2*i*kk) #print (mu) #I=i**2/(kk**2*(i**2+kk**2)) k_norm=np.linalg.norm(i/chi(zz)) mu=np.dot(i/chi(zz),kk)/(k_norm*kk_norm) #print (mu) I=i/chi(zz)*(i/chi(zz)-2*kk*mu)*(1-mu**2)/((i/chi(zz))**2+kk**2-2*i/chi(zz)*kk*mu) constants=(i/chi(zz))**3/((2*np.pi**2)*(2*np.pi)**3) delta_sq=constants*Mps_interpf(kk)*Mps_interpf(np.abs(i/chi(zz)-kk))*I const=8*np.pi**2*T_rad**2*x**2/cc.c_light_Mpc_s*(sigma_T*rho_g0/(mu_e*m_p))**2 integrand=[const*(1+zz)**2*uf.f(zz)**2*delta_sq*uf.chi(zz)*uf.H(zz)*np.exp(-2*tau(zz))] C_l=np.append(C_l,sp.integrate.trapz(sp.integrate.trapz(integrand,zz,axis=0),kp,axis=0)) return C_l
def C_l_castro_triplemesh(ell, z_min): Z = np.geomspace(z_min, z_r, n_points) kp = np.geomspace(k_min, k_max, n_points) Y1 = kp * uf.chi(Z) / ell Mu = np.linspace(-1, 1, n_points) mu, y1, z = np.meshgrid(Mu, Y1, Z) H = uf.H chi = uf.chi #chi_Z=chi(Z) tau = uf.tau_inst f = uf.f D = uf.D_1 const = 1e12 * T_rad**2 * x**2 / cc.c_light_Mpc_s * (sigma_T * rho_g0 / (mu_e * m_p))**2 #kp_norm=np.linalg.norm(Kp) #k_norm=np.linalg.norm(ell/chi_Z) constants = 1 / (2 * np.pi)**(3 / 2) * 2 * np.pi / 2 C_l = np.array([]) for i in ell: print(i) #mu=np.dot(k,Kp)/(k_norm*kp_norm) #I=k*(k-2*kp*j)*(1-j**2)/(k**2+kp**2-2*k*kp*j) integral = [ constants * sp.integrate.trapz(sp.integrate.trapz(sp.integrate.trapz( f(z)**2 * Mps_interpf(i * y1 / chi(z)) * Mps_interpf(i / chi(z) * np.sqrt(1 + y1**2 - 2 * y1 * mu)) * i / chi(z) * (1 - 2 * y1 * mu) * (1 - mu**2) / (1 + y1**2 - 2 * y1 * mu) * const * (1 + z)**2 * H(z) * D(z)**4 * np.exp(-2 * tau(z)) / chi(z)**2, Y1, axis=0), Mu, axis=0), Z, axis=0) ] C_l = np.append(C_l, integral) return C_l
def C_l_mu_integral_squeezed(ell, z_min): Kp = np.geomspace(1.e-10, .1, n_points) Mu = np.linspace(-0.9999, 0.9999, n_points) Z = np.geomspace(z_min, z_r, n_points) mu, kp, z = np.meshgrid(Mu, Kp, Z) H_z = uf.H(z) chi_z = uf.chi(z) #chi_Z=chi(Z) tau_z = uf.tau_inst(z) f_z = uf.f(z) D_z = uf.D_1(z) const = 1e12 * T_rad**2 * x**2 / cc.c_light_Mpc_s * ( sigma_T * rho_g0 / (mu_e * m_p))**2 / 8 / np.pi**2 #kp_norm=np.linalg.norm(Kp) #k_norm=np.linalg.norm(ell/chi_Z) C_l = np.array([]) for i in ell: k = i / chi_z #K=np.sqrt(k**2+kp**2-2*k*kp*mu) #original K K = np.sqrt(k**2 + kp**2 - 2 * k * kp * (np.sqrt(1 - mu**2))) #changed K, correct one #I=(1-mu**2) #in squeezed with original #I=k*(k-2*kp*mu)*(1-mu**2)/K**2 #original I, without squeezed #I=k*(k-2*kp*np.sqrt(1-mu**2))*(mu**2)/K**2 #I, without squeezed, changed, correct one I = mu**2 #I, with squeezed, changed, correct one integral = [ const * sp.integrate.trapz(sp.integrate.trapz(sp.integrate.trapz( I * Mps_interpf(kp) * Mps_interpf(k) * (1 + z)**2 * np.exp(-2 * tau_z) * f_z**2 * D_z**4 / chi_z**2 * H_z, Mu, axis=0), Kp, axis=0), Z, axis=0) ] C_l = np.append(C_l, integral) return C_l
def k(i,y,z): k=np.sqrt(uf.kpar(y,z)**2+(i/uf.chi(z))**2) return k
from decimal import Decimal cosmo=uf.cosmo Mps_interpf=uf.Mps_interpf n_points=uf.n_points z_r=10. x_e=1. G=cc.G_const_Mpc_Msun_s/cc.M_sun_g #rho_c=3*H0**2/(8.*np.pi*G) rho_c=den.cosmo_densities(**cosmo)[0]*cc.M_sun_g #in units of g/Mpc^3 sigma_T=cc.sigma_T_Mpc tau_r=0.055 T_rad=2.73 #In Kelvin chi_r = uf.chi(z_r) chi_m = uf.chi(1100) chi_min=0.0001 k_min=1e-3 k_max=0.1 chi_array=np.linspace(chi_min,chi_m,n_points) #tau_r=0.046*omega_b_0*h*x_e[np.sqrt(omega_M_0(1+z_r)**3+(1-omega_M_0))-1] #get matter power spec data mu_e=1.44 m_p=cc.m_p_g #in grams rho_g0=cosmo['omega_b_0']*rho_c #plt.loglog(uf.kabs,Mps_interpf(uf.kabs)) #plt.show() zed=uf.zed z=uf.z
if n_u(i/(2.*np.pi))==0: n_u1=1/1e100 else: n_u1=n_u(i/(2.*np.pi)) n=np.append(n,n_u1) Nbs= 1024.*(1024.-1.) #norm=Nbs/sp.integrate.trapz(n*2*np.pi*(l/(2.*np.pi)), l/(2.*np.pi)) C=n#*noprint (nu_min) A_bull= ((Tsys**2)*(lam**4)*Sarea) / (nu21*npol*Ttot*(Aeff**2)*Fov_deg*Nbeam) Warren=Tsys**2*lam**2/Aeff*4.*np.pi/(nu21*npol*Nbeam*Ttot) #return (Warren/C)*1e12 return (A_bull/C)*1e12 ell_large=np.geomspace(1.e-10,1.e6,10000) kperp_min_orig,kperp_max_orig=uf.ell_lims(z,6.,6*1024)/uf.chi(z) kperp_min,kperp_max=kperp_min_orig,kperp_max_orig #print (kperp_min,kperp_max) kpar_min=uf.kpar_min(z,delta_z) #print (kpar_min) kperp_arr=np.geomspace(kperp_min,kperp_max,n) kpar_arr=np.geomspace(kpar_min,5.,n) ell_min,ell_max=uf.chi(z)*kperp_min,uf.chi(z)*kperp_max ell=np.geomspace(ell_min,ell_max,n) ell=np.geomspace(1.,1.e4,n) kperp_arr=ell/chi(1.26) kpar_arr=np.geomspace(1.e-4,.15,n) y=kpar_arr*r(1.26)
def P_delta_N_v(z, kperp, kpar, Noise): k = np.sqrt(kperp**2 + kpar**2) Nv_func_of_k = Noise(uf.chi(z) * kperp) / k**4 * kpar**2 return Nv_func_of_k * Mps_interpf(k)
def P_v_N_delta(z, kperp, kpar, Noise): k = np.sqrt(kperp**2 + kpar**2) Pv_func_of_k = Mps_interpf(k) / k**4 * kpar**2 return Pv_func_of_k * Noise(uf.chi(z) * kperp)
Ttot) #return (Warren/C)*1e12 return (A_bull / C) * 1e12 ell_large = np.geomspace(1.e-10, 1.e5, 10000) kperp_min_orig, kperp_max_orig = uf.kperp_lims(z, 6., 6. * 1024.) kperp_min, kperp_max = kperp_min_orig, kperp_max_orig #print (kperp_min,kperp_max) kpar_min = uf.kpar_min(z, delta_z) #print (kpar_min) kperp_arr = np.geomspace(kperp_min, kperp_max, n) kpar_arr = np.geomspace(kpar_min, 5., n) ell_min, ell_max = uf.chi(z) * kperp_min, uf.chi(z) * kperp_max ell = np.geomspace(ell_min, ell_max, n) ell = np.geomspace(1., 1.e4, n) #np.savetxt('Hirax_noise_z_1_Ddish_6_Dsep_7_geom.out',(ell_large,HiraxNoise(ell_large,6.,7.,1.))) #ell_new,Hirax_noise_z_1=np.genfromtxt('/home/zahra/python_scripts/kSZ_21cm_signal/Hirax_noise_z_1_Ddish_6_Dsep_7.out') Hirax_noise_z_1pt26_deltaz_pt2 = interp1d(ell_large, HiraxNoise(ell_large, 6., 7., 1.26, 0.2), bounds_error=False) Hirax_noise_z_1pt26_deltaz_pt05 = interp1d(ell_large, HiraxNoise(ell_large, 6., 7., 1.26, 0.05), bounds_error=False) Hirax_noise_z_1pt26_deltaz_pt0015 = interp1d(ell_large, HiraxNoise(
x_e = 1. G = cc.G_const_Mpc_Msun_s / cc.M_sun_g #rho_c=3*H0**2/(8.*np.pi*G) rho_c = den.cosmo_densities(**cosmo)[0] * cc.M_sun_g #in units of g/Mpc^3 sigma_T = cc.sigma_T_Mpc tau_r = 0.055 T_rad = 2.725 #In Kelvin chi_m = uf.chi(1100) chi_min = 0.0001 k_min = 1e-4 k_max = 4.5e-2 chi_array = np.linspace(chi_min, chi_m, n_points) #tau_r=0.046*omega_b_0*h*x_e[np.sqrt(omega_M_0(1+z_r)**3+(1-omega_M_0))-1] #get matter power spec data mu_e = 1.44
plt.show() ''' def cumulative_SNR(SNR_2D_binned): sum_each_kperp=np.array([]) SNR_y,SNR_x=SNR_2D_binned.shape for i in range(SNR_x): sum_one_kperp=np.sum(SNR_2D_binned[:,i]) sum_each_kperp=np.append(sum_each_kperp,sum_one_kperp) return sum_each_kperp S_area=15000 SNR=Bispec_SNR kperp_arr,kpar_arr,SNR_arr=SNR_binned(z,delta_z,Noise,SNR,S_area,Dsep=7.) ell=kperp_arr*uf.chi(z) #print (np.cumsum(cum_SNR(SNR_arr))) pylab.pcolormesh(kperp_arr,kpar_arr,SNR_arr) ; cbar=plt.colorbar() cbar.ax.tick_params(labelsize=12) plt.tick_params(axis='both', which='major', labelsize=12) pylab.xlim([np.min(kperp_arr),np.max(kperp_arr)]) ; pylab.ylim([np.min(kpar_arr),np.max(kpar_arr)]) plt.xlabel(r'$k_\perp$',fontsize=12); plt.ylabel(r'$k_\parallel$',fontsize=12); plt.title('Pixel SN for bispectrum', x=1.13, y=1.05) pylab.show() plt.plot(kperp_arr,np.cumsum(cumulative_SNR(SNR_arr))) plt.ylabel('Cumulative S/N') plt.xlabel(r'$k_\perp$') plt.show()