Ejemplo n.º 1
0
Nmodes2D = Pk.Nmodes2D

# 1D Pk
k1D = Pk.k1D
Pk1D = Pk.Pk1D
Nmodes1D = Pk.Nmodes1D
#~ ####################################################################
#~ #### Addition for matter
#~ ####################################################################

d = np.loadtxt('/home/david/codes/class/output/test_pk.dat', skiprows = 4)
e = np.loadtxt('/home/david/codes/class/output/test_pk_nl.dat', skiprows = 4)
kclass = d[:,0]
kpk = d[:,1]
kpk_nl = e[:,1]
f = Class.scale_independent_growth_factor_f(self,z=2.)
f = 0.45
mono = (1 + 2/3.*(f) + 1/5.*(f)**2) 
quadru = (4/3.*(f) + 4/7.*(f)**2)


def jen(pk,var1, var2):
	if var1 == 'delta' and var2 == 'theta':
		alpha0 = -12288.7
		alpha1 = 1.43
		alpha2 = 1367.7
		alpha3 = 1.54
		
	elif var1 == 'theta' and var2 == 'theta':
		alpha0 = -12462.1
		alpha1 = 0.839
Ejemplo n.º 2
0
    'thetai_scf': 2.78,
    'attractor_ic_scf': 'no',
    'scf_parameters': '1, 1, 1, 1, 1, 0.0',
    'n_scf': 3,
    'CC_scf': 1,
    'scf_tuning_index': 3,
    'Omfid': 0.31,
    'SigmaFOG': 0.
})
t1 = time()
cosmo.compute()

h = cosmo.h()
Da = cosmo.angular_distance(z)
print("Da=", Da)
fz = cosmo.scale_independent_growth_factor_f(z)
print("fz=", fz)

# omb = cosmo.omega_b()
# Omm = cosmo.Omega_m()
# #        omm = cosmo.Omega_m()
# #        rat = omb/omm
# #        print("rat",rat)
# print("omega_b =",omb)
# print("Omega_m =",Omm)

#omcdm = Omm * h**2. - omb
# omcdm = cosmo.omegach2()
# print("omega_cdm =",omcdm)

#k1 = 0.7*1.028185622909e-5
Ejemplo n.º 3
0
kmsMpc = 3.33564095198145e-6
rd = cosmo.rs_drag()
print('rd=', rd)

for j in range(len(chunk)):
    z = zs[j]
    b1 = b1ar[j]
    b2 = b2ar[j]
    bG2 = bG2ar[j]
    css0 = css0ar[j]
    css2 = css2ar[j]
    Pshot = Pshotar[j]
    bGamma3 = bGamma3ar[j]
    b4 = b4ar[j]
    fz = cosmo.scale_independent_growth_factor_f(z)
    da = cosmo.angular_distance(z)
    # print('DA=',da)
    hz = cosmo.Hubble(z) / kmsMpc
    # print('Hz=',hz)
    DV = (z * (1 + z)**2 * da**2 / cosmo.Hubble(z))**(1. / 3.)
    # print('DV=',DV)
    fs8 = cosmo.scale_independent_growth_factor(
        z) * cosmo.scale_independent_growth_factor_f(z) * cosmo.sigma8()
    # print('fs8=',fs8)
    # print('sigma8=',cosmo.sigma8())
    print('rd/DV=', rd / DV)
    print('rdH=', rd * cosmo.Hubble(z))
    print('rd/DA=', rd / da)

    P2noW = np.zeros(k_size)
Ejemplo n.º 4
0
class ModelPk(object):
    """ """
    logger = logging.getLogger(__name__)

    def __init__(self, **param_dict):
        """ """
        self.params = params.copy()

        self.class_params = class_params.copy()
        self.set(**param_dict)  #other params for CLASS

        self._cosmo = None
        self._redshift_func = None
        self._logpk_func = None

        if self.params['mpk'] is not None:
            self.load_pk_from_file(self.params['mpk'])

    def load_pk_from_file(self, path):
        """ """
        self.logger.info(f"Loading matter power spectrum from file {path}")
        k, pk = np.loadtxt(path, unpack=True)
        self.logger.info(f"min k: {k.min()}, max k: {k.max()}, steps {len(k)}")
        pk *= self.params['bias']**2
        lk = np.log(k)
        lpk = np.log(pk)
        self._logpk_func = interpolate.interp1d(lk,
                                                lpk,
                                                bounds_error=False,
                                                fill_value=(0, 0))

    def set(self, **param_dict):
        """ """
        for key, value in param_dict.items():
            if key == 'non_linear':
                key = 'non linear'
            self.logger.debug("Set %s=%s", key, value)
            found = False
            if key in self.class_params:
                self.class_params[key] = value
                found = True
            if key in self.params:
                self.params[key] = value
                found = True
            if not found:
                continue

    @property
    def cosmo(self):
        """ """
        if not self._cosmo:
            self._cosmo = Class()
            self._cosmo.set(self.class_params)

            self.logger.info("Initializing Class")
            self._cosmo.compute()

            if self.params['fix_sigma8']:
                sig8 = self._cosmo.sigma8()
                A_s = self._cosmo.pars['A_s']
                self._cosmo.struct_cleanup()
                # renormalize to fix sig8
                self.A_s = A_s * (self.params['sigma8'] * 1. / sig8)**2
                self._cosmo.set(A_s=self.A_s)
                self._cosmo.compute()

            sig8 = self._cosmo.sigma8()

            self.params['sigma8'] = sig8
            self.params['A_s'] = self._cosmo.pars['A_s']
            self.params[
                'sigma8z'] = sig8 * self._cosmo.scale_independent_growth_factor(
                    self.class_params['z_pk'])
            self.params['f'] = self._cosmo.scale_independent_growth_factor_f(
                self.class_params['z_pk'])

            self.logger.info(f"          z: {self.class_params['z_pk']}")
            self.logger.info(f"    sigma_8: {self.params['sigma8']}")
            self.logger.info(f" sigma_8(z): {self.params['sigma8z']}")
            self.logger.info(f"       f(z): {self.params['f']}")
            self.logger.info(
                f"f sigma8(z): {self.params['f']*self.params['sigma8z']}")
        return self._cosmo

    def class_pk(self, k):
        """ """
        self.logger.info("Computing power spectrum with Class")

        z = np.array([self.class_params['z_pk']]).astype('d')

        shape = k.shape
        k = k.flatten()

        nk = len(k)
        k = np.reshape(k, (nk, 1, 1))

        pk = self.cosmo.get_pk(k * self.class_params['h'], z, nk, 1,
                               1).reshape((nk, ))
        k = k.reshape((nk, ))

        # set h units
        pk *= self.class_params['h']**3

        pk *= self.params['bias']**2

        pk = pk.reshape(shape)

        return pk

    def get_pk(self, k):
        ii = k > 0
        out = np.zeros(k.shape, dtype='d')
        out[ii] = np.exp(self.logpk_func(np.log(k[ii])))
        return out

    @property
    def logpk_func(self):
        if self._logpk_func is None:
            k = np.logspace(self.params['log_kmin'], self.params['log_kmax'],
                            self.params['log_ksteps'])
            pk = self.class_pk(k)
            lk = np.log(k)
            lpk = np.log(pk)
            print("logk min", lk.min())
            self._logpk_func = interpolate.interp1d(lk,
                                                    lpk,
                                                    bounds_error=False,
                                                    fill_value=(0, 0))
        return self._logpk_func

    def comoving_distance(self, z):
        """ """
        return (1 +
                z) * self.cosmo.angular_distance(z) * self.class_params['h']

    def redshift_at_comoving_distance(self, r):
        """ """
        try:
            z = 10**self.redshift_func(r) - 1
        except ValueError:
            self.logger.error(f"r min {r.min()} max {r.max()}",
                              file=sys.stderr)
            raise
        return z

    @property
    def redshift_func(self):
        """ """
        if self._redshift_func is None:
            zz = np.logspace(self.params['logzmin'], self.params['logzmax'],
                             self.params['logzsteps']) - 1
            r = np.zeros(len(zz))
            for i, z in enumerate(zz):
                r[i] = self.comoving_distance(z)
            self._redshift_func = interpolate.interp1d(r, np.log10(1 + zz))
        return self._redshift_func