%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import sys, platform, os
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
#Assume installed from github using "git clone --recursive https://github.com/cmbant/CAMB.git"
#This file is then in the docs folders
isitgr_path = os.path.realpath(os.path.join(os.getcwd(),'..'))
sys.path.insert(0,isitgr_path)
import isitgr
from isitgr import model, initialpower
print('Using CAMB-ISiTGR %s installed at %s'%(isitgr.__version__,os.path.dirname(isitgr.__file__)))
(slight differences are present because cosmological parameter values are now a bit different)
# Defining array for different MG parameter values.
E11 = [1, -1, 0.5, 0]
E22 = [1, -1, 0.5, 1]
# Set up different set of parameters for CAMB (including MG)
pars_GR = isitgr.CAMBparams()
pars_MG1 = isitgr.CAMBparams()
pars_MG2 = isitgr.CAMBparams()
pars_MG3 = isitgr.CAMBparams()
pars_MG4 = isitgr.CAMBparams()
# This function sets up CosmoMC-like settings, with one massive neutrino and helium set using BBN consistency
# For GR
pars_GR.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09)
pars_GR.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_GR.set_for_lmax(2500, lens_potential_accuracy=0);
# For MG model 1. Here we set parameterization="mueta".
# No scale dependence is considered in any MG model since we do not call c1, c2 or Lambda parameters...
pars_MG1.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="mueta", E11=E11[0], E22=E22[0])
pars_MG1.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG1.set_for_lmax(2500, lens_potential_accuracy=0);
# For MG model 2. Here we set parameterization="mueta".
pars_MG2.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="mueta", E11=E11[1], E22=E22[1])
pars_MG2.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG2.set_for_lmax(2500, lens_potential_accuracy=0);
# For MG model 3. Here we set parameterization="mueta".
pars_MG3.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="mueta", E11=E11[2], E22=E22[2])
pars_MG3.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG3.set_for_lmax(2500, lens_potential_accuracy=0);
# For MG model 4. Here we set parameterization="mueta".
pars_MG4.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="mueta", E11=E11[3], E22=E22[3])
pars_MG4.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG4.set_for_lmax(2500, lens_potential_accuracy=0);
# Calculate results for different models.
results_GR = isitgr.get_results(pars_GR)
results_MG1 = isitgr.get_results(pars_MG1)
results_MG2 = isitgr.get_results(pars_MG2)
results_MG3 = isitgr.get_results(pars_MG3)
results_MG4 = isitgr.get_results(pars_MG4)
# (1) camb.get_results() compute results for specified parameters and return CAMBdata.
# (2) camb.results.CAMBdata is an object for storing calculational data, parameters and transfer functions.
# Get dictionary of CAMB power spectra for different models, including GR and MG models.
powers_GR =results_GR.get_cmb_power_spectra(pars_GR, CMB_unit='muK')
powers_MG1 =results_MG1.get_cmb_power_spectra(pars_MG1, CMB_unit='muK')
powers_MG2 =results_MG2.get_cmb_power_spectra(pars_MG2, CMB_unit='muK')
powers_MG3 =results_MG3.get_cmb_power_spectra(pars_MG3, CMB_unit='muK')
powers_MG4 =results_MG4.get_cmb_power_spectra(pars_MG4, CMB_unit='muK')
# For name in powers_GR: print(name)
# Here we obtain the total lensed CMB power spectra
totCL_GR=powers_GR['total']
totCL_MG1=powers_MG1['total']
totCL_MG2=powers_MG2['total']
totCL_MG3=powers_MG3['total']
totCL_MG4=powers_MG4['total']
print(totCL_GR.shape)
# Here we obtain the cl's for lensing potential.
# For GR
pars_GR.set_dark_energy(w=-1, wa=0, dark_energy_model='fluid')
cl_GR = results_GR.get_lens_potential_cls(lmax=2550)
# For MG1
pars_MG1.set_dark_energy(w=-1, wa=0, dark_energy_model='fluid')
cl_MG1 = results_MG1.get_lens_potential_cls(lmax=2550)
# For MG2
pars_MG2.set_dark_energy(w=-1, wa=0, dark_energy_model='fluid')
cl_MG2 = results_MG2.get_lens_potential_cls(lmax=2550)
# For MG3
pars_MG3.set_dark_energy(w=-1, wa=0, dark_energy_model='fluid')
cl_MG3 = results_MG3.get_lens_potential_cls(lmax=2550)
# For MG4
pars_MG4.set_dark_energy(w=-1, wa=0, dark_energy_model='fluid')
cl_MG4 = results_MG4.get_lens_potential_cls(lmax=2550)
Tspectra = [totCL_GR[:,0], totCL_MG1[:,0], totCL_MG2[:,0], totCL_MG3[:,0], totCL_MG4[:,0]]
Lspectra = [cl_GR[:,0], cl_MG1[:,0], cl_MG2[:,0], cl_MG3[:,0], cl_MG4[:,0]]
from matplotlib import gridspec
import matplotlib.ticker as mtick
# Desired overall figure size
SIZE = (10, 10)
# GridSpect(nrows,ncolumns,ratio)
gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1])
# The figure
fig = plt.figure(figsize = SIZE)
y_values = [Tspectra, Lspectra]
x_values = np.arange(2551)
# Creating the subplots
base = 0
ax = []
for y,h in zip(y_values[0],[1,2]):
ax.append(fig.add_subplot(gs[base:h+base,:]))
base += h
ax[-1].semilogx(x_values,y_values[-1+h][0], color='k', label='$\Lambda CDM$')
ax[-1].semilogx(x_values,y_values[-1+h][1], color='b', label='$E_{11}=1$, $E_{22}=1$')
ax[-1].semilogx(x_values,y_values[-1+h][2], color='cyan', linestyle='dashdot', label='$E_{11}=-1$, $E_{22}=-1$')
ax[-1].semilogx(x_values,y_values[-1+h][3], color='teal', linestyle='dotted', label='$E_{11}=0.5$, $E_{22}=0.5$')
ax[-1].semilogx(x_values,y_values[-1+h][4], color='darkblue', linestyle='dashed', label='$E_{11}=0$, $E_{22}=1$')
# Plot spacing (this is just to concatenate them)
fig.subplots_adjust(hspace=0.001)
# Some final settings
ax[0].set_title('obtained using ISiTGR-python wrapper')
ax[0].set_ylabel('$\ell(\ell+1)C_{\ell}^{TT}/2\pi$ [$\mu K^2$]', fontsize=16)
ax[1].set_ylabel('$[\ell(\ell+1)]^2C_{\ell}^{\phi\phi}/2\pi$ [$\mu K^2$]', fontsize=16)
plt.xlabel('$\ell$', fontsize=16)
ax[0].set_xlim([2, 2100])
ax[1].set_xlim([2, 2100])
ax[0].set_ylim([0, 8000])
ax[1].set_ylim([0, 4E-7])
ax[1].yaxis.set_major_formatter(mtick.FormatStrFormatter('%.e'))
ax[1].legend(loc='upper right', fontsize=16)
yticks = ax[0].yaxis.get_major_ticks()
yticks[0].label1.set_visible(False)
# Defining array for different MG parameter values.
mu0 = [0.5, 0]
Sigma0 = [0, -0.5]
# Set up different set of parameters for CAMB (including MG)
pars_GR = isitgr.CAMBparams()
pars_MG1 = isitgr.CAMBparams()
pars_MG2 = isitgr.CAMBparams()
# This function sets up CosmoMC-like settings, with one massive neutrino and helium set using BBN consistency
# For GR
pars_GR.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09)
pars_GR.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_GR.set_for_lmax(500, lens_potential_accuracy=0);
# For MG model 1. Here we set parameterization="mueta".
# No scale dependence is considered in any MG model since we do not call c1, c2 or Lambda parameters...
pars_MG1.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="muSigma", mu0=mu0[0], Sigma0=Sigma0[0])
pars_MG1.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG1.set_for_lmax(500, lens_potential_accuracy=0);
# For MG model 2. Here we set parameterization="mueta".
pars_MG2.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="muSigma", mu0=mu0[1], Sigma0=Sigma0[1])
pars_MG2.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG2.set_for_lmax(500, lens_potential_accuracy=0);
pars_MG1
# Calculate results for different models.
results_GR = isitgr.get_results(pars_GR)
results_MG1 = isitgr.get_results(pars_MG1)
results_MG2 = isitgr.get_results(pars_MG2)
# (1) camb.get_results() compute results for specified parameters and return CAMBdata.
# (2) camb.results.CAMBdata is an object for storing calculational data, parameters and transfer functions.
#get dictionary of CAMB power spectra for different models, including GR and MG models.
powers_GR =results_GR.get_cmb_power_spectra(pars_GR, CMB_unit='muK')
powers_MG1 =results_MG1.get_cmb_power_spectra(pars_MG1, CMB_unit='muK')
powers_MG2 =results_MG2.get_cmb_power_spectra(pars_MG2, CMB_unit='muK')
# Here we obtain the total lensed CMB power spectra
totCL_GR=powers_GR['total']
totCL_MG1=powers_MG1['total']
totCL_MG2=powers_MG2['total']
Tspectra = [totCL_GR[:,0], totCL_MG1[:,0], totCL_MG2[:,0]]
TEspectra = [totCL_GR[:,3], totCL_MG1[:,3], totCL_MG2[:,3]]
ell = x_values = np.arange(551)
TEspectra_divided_by_ell = TEspectra/ell #we divided first element by 0 so we get nan, but it's irrelevant
from matplotlib import gridspec
import matplotlib.ticker as mtick
# desired overall figure size
SIZE = (10, 15)
# GridSpect(nrows,ncolumns,ratio)
gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1])
# The figure
fig = plt.figure(figsize = SIZE)
y_values = [Tspectra, TEspectra_divided_by_ell]
# creating the subplots
base = 0
ax = []
#for y,h in zip(y_values[0],[1,2]):
ax.append(fig.add_subplot(gs[base:1+base,:]))
ax[-1].loglog(ell,y_values[0][0], color='k', label='$\Lambda CDM$')
ax[-1].loglog(ell,y_values[0][1], color='b', linestyle='dashed', label='$\mu_{0}=0.5$, $\Sigma_{0}=0$')
ax[-1].loglog(ell,y_values[0][2], color='pink', linestyle='dashdot', label='$\mu_{0}=0$, $\Sigma_{0}=-0.5$')
ax.append(fig.add_subplot(gs[(base+1):1+(base+1),:]))
ax[-1].semilogx(ell,y_values[1][0], color='k', label='$\Lambda CDM$')
ax[-1].semilogx(ell,y_values[1][1], color='b', linestyle='dashed', label='$\mu_{0}=0.5$, $\Sigma_{0}=0$')
ax[-1].semilogx(ell,y_values[1][2], color='pink', linestyle='dashdot', label='$\mu_{0}=0$, $\Sigma_{0}=-0.5$')
# plot spacing (this is just to concatenate them)
fig.subplots_adjust(hspace=0.001)
# some final settings
ax[0].set_title('obtained using ISiTGR-python wrapper')
ax[0].set_ylabel('$\ell(\ell+1)C_{\ell}^{TT}/2\pi$ [$\mu K^2$]', fontsize=16)
ax[1].set_ylabel('$(\ell+1)C_{\ell}^{TE}/2\pi$ [$\mu K^2$]', fontsize=16)
plt.xlabel('$\ell$', fontsize=16)
ax[0].set_xlim([2, 500])
ax[1].set_xlim([2, 500])
ax[0].set_ylim([100, 100000])
ax[1].set_ylim([-1.5, 3])
ax[0].legend(loc='upper left', fontsize=16)
yticks = ax[1].yaxis.get_major_ticks()
yticks[-1].label1.set_visible(False)
import math
# Defining array for different MG parameter values.
Q0 = [0.5, 1.5, 2]
# Set up different set of parameters for CAMB (including MG)
pars_GR = isitgr.CAMBparams()
pars_MG1 = isitgr.CAMBparams()
pars_MG2 = isitgr.CAMBparams()
pars_MG3 = isitgr.CAMBparams()
# This function sets up CosmoMC-like settings, with one massive neutrino and helium set using BBN consistency
# For GR
pars_GR.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09)
pars_GR.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_GR.set_for_lmax(1000, lens_potential_accuracy=0);
# For MG model 1. Here we set parameterization="mueta".
# No scale dependence is considered in any MG model since we do not call c1, c2 or Lambda parameters...
pars_MG1.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="QR", Q0=Q0[0], s=3, k_c=math.inf, Qinf=0, R0=1, Rinf=1)
pars_MG1.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG1.set_for_lmax(1000, lens_potential_accuracy=0);
# For MG model 2. Here we set parameterization="mueta".
pars_MG2.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="QR", Q0=Q0[1], s=3, k_c=math.inf, Qinf=0, R0=1, Rinf=1)
pars_MG2.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG2.set_for_lmax(1000, lens_potential_accuracy=0);
# For MG model 3. Here we set parameterization="mueta".
pars_MG3.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="QR", Q0=Q0[2], s=3, k_c=math.inf, Qinf=0, R0=1, Rinf=1)
pars_MG3.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
pars_MG3.set_for_lmax(1000, lens_potential_accuracy=0);
# Calculate results for different models.
results_GR = isitgr.get_results(pars_GR)
results_MG1 = isitgr.get_results(pars_MG1)
results_MG2 = isitgr.get_results(pars_MG2)
results_MG3 = isitgr.get_results(pars_MG3)
# (1) camb.get_results() compute results for specified parameters and return CAMBdata.
# (2) camb.results.CAMBdata is an object for storing calculational data, parameters and transfer functions.
#get dictionary of CAMB power spectra for different models, including GR and MG models.
powers_GR =results_GR.get_cmb_power_spectra(pars_GR, CMB_unit='muK')
powers_MG1 =results_MG1.get_cmb_power_spectra(pars_MG1, CMB_unit='muK')
powers_MG2 =results_MG2.get_cmb_power_spectra(pars_MG2, CMB_unit='muK')
powers_MG3 =results_MG3.get_cmb_power_spectra(pars_MG3, CMB_unit='muK')
# Here we obtain the total lensed CMB power spectra
totCL_GR=powers_GR['total']
totCL_MG1=powers_MG1['total']
totCL_MG2=powers_MG2['total']
totCL_MG3=powers_MG3['total']
# Plot settings. We plot the CMB temperature power spectra
ls = np.arange(totCL_GR.shape[0])
plt.figure(figsize=(10,10))
plt.semilogx(ls,totCL_GR[:,0], color='k', label='$\Lambda CDM$')
plt.semilogx(ls,totCL_MG1[:,0], color='red', linestyle='dotted', label='$Q_0=0.5$, $s=3$')
plt.semilogx(ls,totCL_MG2[:,0], color='green', linestyle='dashdot', label='$Q_0=1.5$, $s=3$')
plt.semilogx(ls,totCL_MG3[:,0], color='blue', linestyle='dashed', label='$Q_0=2$, $s=3$')
plt.xlim([2,1000])
plt.ylim([0,6500])
plt.legend(loc='upper left', fontsize=16)
plt.ylabel('$\ell(\ell+1)C_{\ell}^{TT}/2\pi$ [$\mu K^2$]', fontsize=16)
plt.xlabel('$\ell$', fontsize=16)
plt.title('obtained using ISiTGR-python wrapper')
plt.text(12, 300, "$Q_{\infty}=0$, $R_{0}=1$, $R_{\infty}=1$, $k_c=\infty$.", fontsize=16)
# Set up different set of parameters for CAMB (including MG)
pars_GR = isitgr.CAMBparams()
pars_binning_hybrid = isitgr.CAMBparams()
pars_binning_trad = isitgr.CAMBparams()
# This function sets up CosmoMC-like settings, with one massive neutrino and helium set using BBN consistency
# For GR
pars_GR.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09)
pars_GR.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
# For MG model 1. Here we set parameterization="mueta".
# No scale dependence is considered in any MG model since we do not call c1, c2 or Lambda parameters...
pars_binning_hybrid.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="QD", binning="hybrid", z_div=1, z_TGR=2, z_tw=0.05,
k_c=0.01, Q1=1.5, Q2=0.5, Q3=1.5, Q4=0.5,
D1=1, D2=1, D3=1, D4=1)
pars_binning_hybrid.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
# For MG model 2. Here we set parameterization="mueta".
pars_binning_trad.set_cosmology(H0=70, ombh2=0.0226, omch2=0.112, mnu=0, omk=0, tau=0.09,
parameterization="QD", binning="traditional", z_div=1, z_TGR=2, z_tw=0.05,
k_c=0.01, Q1=1.5, Q2=0.5, Q3=1.5, Q4=0.5,
D1=1, D2=1, D3=1, D4=1, k_tw=0.001)
pars_binning_trad.InitPower.set_params(As=2.1e-9, ns=0.96, r=0)
#Note non-linear corrections couples to smaller scales than you want
pars_GR.set_matter_power(redshifts=(0,1), kmax=2)
pars_binning_hybrid.set_matter_power(redshifts=(0,1), kmax=2)
pars_binning_trad.set_matter_power(redshifts=(0,1), kmax=2)
# Getting CAMB results
results_GR = isitgr.get_results(pars_GR)
results_hybrid = isitgr.get_results(pars_binning_hybrid)
results_trad = isitgr.get_results(pars_binning_trad)
# Non-Linear spectra (Halofit)
#pars_GR.NonLinear = model.NonLinear_both
#results_GR.calc_power_spectra(pars_GR)
#kh_nonlin, z_nonlin, pk_nonlin = results_GR.get_matter_power_spectrum(minkh=1e-4, maxkh=1, npoints = 200)
#Linear spectra
pars_GR.NonLinear = model.NonLinear_none
kh_GR, z_GR, pk_GR = results_GR.get_matter_power_spectrum(minkh=1e-4, maxkh=1, npoints = 200)
#Linear spectra for MG (hybrid binning)
pars_binning_hybrid.NonLinear = model.NonLinear_none
kh_hybrid, z_hybrid, pk_hybrid = results_hybrid.get_matter_power_spectrum(minkh=1e-4, maxkh=1, npoints = 200)
#Linear spectra for MG (traditional binning)
pars_binning_trad.NonLinear = model.NonLinear_none
kh_trad, z_trad, pk_trad = results_trad.get_matter_power_spectrum(minkh=1e-4, maxkh=1, npoints = 200)
print(results_GR.get_sigma8())
print(results_hybrid.get_sigma8())
print(results_trad.get_sigma8())
ISiTGR_pk_hybrid = pk_hybrid[0,:]#*0.7 #normalizing P(k)
ISiTGR_pk_trad = pk_trad[0,:]#*0.7 #normalizing P(k)
Cris_PK = pk_GR[0,:] * 1.35
plt.figure(figsize=(10,10))
plt.loglog(kh_GR, Cris_PK, color='k', label='$\Lambda CDM$')
plt.loglog(kh_hybrid, ISiTGR_pk_hybrid, color='r', linestyle = 'dashdot', label='Hybrid Binning')
plt.loglog(kh_trad, ISiTGR_pk_trad, color='b', linestyle = 'dashed',label='Traditional Binning')
plt.xlim([0.001,1])
plt.legend(loc='lower left', fontsize=16)
plt.ylabel('$P_\delta (k)$', fontsize=16)
plt.xlabel('$k$', fontsize=16)
plt.title('obtained using ISiTGR-python wrapper')