CLAPP / class-data /check_PPF_approx.py
Santiago Casas
add prompt and class data
bc65052
#!/usr/bin/env python
# coding: utf-8
# In[ ]:
get_ipython().run_line_magic('matplotlib', 'inline')
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from classy import Class
# In[ ]:
k_out = [5e-5, 5e-4, 5e-3]
models = ['PPF1','PPF2','FLD1','FLD1S']
w0 = {'PPF1':-0.7,'PPF2':-1.15,'FLD1':-0.7,'FLD1S':-0.7}
wa = {'PPF1':0.,'PPF2':0.5,'FLD1':0.,'FLD1S':0.}
omega_cdm = {'PPF1':0.104976,'PPF2':0.120376,'FLD1':0.104976,'FLD1S':0.104976}
omega_b = 0.022
##Omega_cdm = {'PPF1':0.26,'PPF2':0.21,'FLD1':0.26,'FLD1S':0.26}
##Omega_b = 0.05
h = {'PPF1':0.64,'PPF2':0.74,'FLD1':0.64,'FLD1S':0.64}
cosmo = {}
for M in models:
use_ppf = 'yes'
gauge = 'Newtonian'
if 'FLD' in M:
use_ppf = 'no'
if 'S' in M:
gauge = 'Synchronous'
cosmo[M] = Class()
cosmo[M].set({'output':'tCl mPk dTk vTk','k_output_values':str(k_out).strip('[]'),
'h':h[M],
'omega_b':omega_b,'omega_cdm':omega_cdm[M],
##'Omega_b':Omega_b,'omega_cdm':Omega_cdm[M],
'cs2_fld':1.,
'w0_fld':w0[M],'wa_fld':wa[M],'Omega_Lambda':0.,'gauge':gauge,
'use_ppf':use_ppf})
cosmo[M].compute()
# In[ ]:
colours = ['r','k','g','m']
for i,M in enumerate(models):
cl = cosmo[M].raw_cl()
l = cl['ell']
plt.loglog(l,cl['tt']*l*(l+1)/(2.*np.pi),label=M,color=colours[i])
plt.legend(loc='upper left')
plt.xlim([2,300])
plt.ylim([6e-11,1e-9])
plt.xlabel(r'$\ell$')
plt.ylabel(r'$[\ell(\ell+1)/2\pi] C_\ell^\mathrm{TT}$')
plt.savefig('check_PPF_clTT.pdf')
# In[ ]:
for M in ['PPF1','FLD1']:
csm = cosmo[M]
pt = csm.get_perturbations()
pts = pt['scalar']
for i,k in enumerate(k_out):
ptk = pts[i]
a = ptk['a']
phi = ptk['phi']
psi = ptk['psi']
if 'FLD' in M:
ls = ':'
lw=5
else:
ls = '-'
lw=1
plt.semilogx(a,0.5*(phi+psi),label=M+' '+'$k='+str(k)+'Mpc^{-1}$',ls=ls,lw=lw)
plt.legend(loc='lower left')
plt.xlim([1e-2,1])
plt.ylim([0.3,0.63])
plt.xlabel(r'$a/a_0$')
plt.ylabel(r'$\frac{1}{2} ~(\Phi+\Psi)$')
plt.savefig('check_PPF_metric.pdf')
# In[ ]:
#kminclosed = sqrt(-8*Omega_k)*(70/3e5) Mpc^(-1)
k_out = [1e-3] #[1e-4, 1e-3, 1e-2]
#models = ['PPF1','PPF2','FLD1']
models = ['PPF1','FLD1']
w0 = {'PPF1':-0.7,'PPF2':-1.15,'FLD1':-0.7,'FLD1S':-0.7}
wa = {'PPF1':0.,'PPF2':0.5,'FLD1':0.,'FLD1S':0.}
omega_cdm = {'PPF1':0.104976,'PPF2':0.120376,'FLD1':0.104976,'FLD1S':0.104976}
omega_b = 0.022
##Omega_cdm = {'PPF1':0.26,'PPF2':0.21,'FLD1':0.26,'FLD1S':0.26}
##Omega_b = 0.05
h = {'PPF1':0.64,'PPF2':0.74,'FLD1':0.64}
fig, axes = plt.subplots(1,2,figsize=(16,5))
for Omega_K in [-0.1, 0.0, 0.1]:
for gauge in ['Synchronous','Newtonian']:
cosmo = {}
for M in models:
use_ppf = 'yes'
if 'FLD' in M:
use_ppf = 'no'
cosmo[M] = Class()
cosmo[M].set({'output':'tCl mPk dTk vTk','k_output_values':str(k_out).strip('[]'),
'h':h[M],
'omega_b':omega_b,'omega_cdm':omega_cdm[M],'Omega_k':Omega_K,
##'Omega_b':Omega_b,'omega_cdm':Omega_cdm[M],
'cs2_fld':1.,
'w0_fld':w0[M],'wa_fld':wa[M],'Omega_Lambda':0.,'gauge':gauge,
'use_ppf':use_ppf,'hyper_sampling_curved_low_nu':10.0})
cosmo[M].compute()
label = r'$\Omega_k='+str(Omega_K)+'$, '+gauge[0]
clfld = cosmo['FLD1'].raw_cl()
clppf = cosmo['PPF1'].raw_cl()
axes[0].semilogx(clfld['ell'][2:],clppf['tt'][2:]/clfld['tt'][2:],label=label)
ptfld = cosmo['FLD1'].get_perturbations()['scalar']
ptppf = cosmo['PPF1'].get_perturbations()['scalar']
for i,k in enumerate(k_out):
ptkfld = ptfld[i]
a = ptkfld['a']
phi_plus_phi_fld = ptkfld['phi']+ptkfld['psi']
ptkppf = ptppf[i]
phi_plus_phi_ppf = ptkppf['phi']+ptkppf['psi']
axes[1].semilogx(ptkppf['a'],phi_plus_phi_ppf,label=label+'_ppf')
axes[1].semilogx(ptkfld['a'],phi_plus_phi_fld,label=label+'_fld')
print (len(ptkppf['a']),len(ptkfld['a']))
axes[0].legend(loc='lower left',ncol=2)
axes[0].set_xlim([2,300])
axes[0].set_ylim([0.98,1.02])
axes[0].set_xlabel(r'$\ell$')
axes[0].set_ylabel(r'$C_\ell^\mathrm{FLD1}/C_\ell^\mathrm{PPF1}$')
axes[1].legend(loc='lower left',ncol=2)
axes[1].set_xlim([1e-2,1])
axes[1].set_xlabel(r'$a/a_0$')
axes[1].set_ylabel(r'$(\Phi+\Psi)$')
fig.savefig('check_PPF_Omegak.pdf')
# In[ ]:
colours = ['r','k','g','m']
k_out = [1e-1] #[1e-4, 1e-3, 1e-2]
#models = ['PPF1','PPF2','FLD1']
models = ['PPF1','FLD1']
w0 = {'PPF1':-0.7,'PPF2':-1.15,'FLD1':-0.7,'FLD1S':-0.7}
wa = {'PPF1':0.,'PPF2':0.5,'FLD1':0.,'FLD1S':0.}
omega_cdm = {'PPF1':0.104976,'PPF2':0.120376,'FLD1':0.104976,'FLD1S':0.104976}
omega_b = 0.022
##Omega_cdm = {'PPF1':0.26,'PPF2':0.21,'FLD1':0.26,'FLD1S':0.26}
##Omega_b = 0.05
h = {'PPF1':0.64,'PPF2':0.74,'FLD1':0.64}
fig, axes = plt.subplots(1,2,figsize=(18,8))
for Omega_K in [-0.1, 0.0, 0.1]:
for ppfgauge in ['Synchronous','Newtonian']:
cosmo = {}
for M in models:
use_ppf = 'yes'
gauge = ppfgauge
if 'FLD' in M:
use_ppf = 'no'
cosmo[M] = Class()
cosmo[M].set({'output':'tCl mPk dTk vTk','k_output_values':str(k_out).strip('[]'),
'h':h[M],
'omega_b':omega_b,'omega_cdm':omega_cdm[M],'Omega_k':Omega_K,
##'Omega_b':Omega_b,'omega_cdm':Omega_cdm[M],
'cs2_fld':1.,
'w0_fld':w0[M],'wa_fld':wa[M],'Omega_Lambda':0.,'gauge':gauge,
'use_ppf':use_ppf,'hyper_sampling_curved_low_nu':6.1})
cosmo[M].compute()
#fig, axes = plt.subplots(1,2,figsize=(16,5))
for j,M in enumerate(models):
cl = cosmo[M].raw_cl()
l = cl['ell']
label = M+r'$\Omega_k='+str(Omega_K)+'$, '+gauge[0]
axes[0].loglog(l,cl['tt']*l*(l+1)/(2.*np.pi),label=label,color=colours[j])
csm = cosmo[M]
pt = csm.get_perturbations()
pts = pt['scalar']
for i,k in enumerate(k_out):
ptk = pts[i]
a = ptk['a']
phi = ptk['phi']
psi = ptk['psi']
if 'FLD' in M:
ls = ':'
lw=5
else:
ls = '-'
lw=1
axes[1].semilogx(a,0.5*abs(phi+psi),label=label+' '+'$k='+str(k)+'Mpc^{-1}$',ls=ls,lw=lw)
axes[0].legend(loc='upper left')
axes[0].set_xlim([2,300])
axes[0].set_ylim([6e-11,1e-9])
axes[0].set_xlabel(r'$\ell$')
axes[0].set_ylabel(r'$[\ell(\ell+1)/2\pi] C_\ell^\mathrm{TT}$')
axes[1].legend(loc='upper right')
#axes[1].set_xlim([1e-2,1])
#axes[1].set_ylim([0.3,0.63])
axes[1].set_xlabel(r'$a/a_0$')
axes[1].set_ylabel(r'$\frac{1}{2}~(\Phi+\Psi)$')
fig.savefig('check_PPF_Omegak2.pdf')