예제 #1
0
	def __init__(self, params): #omr=0.0, omb=0.05, omc=0.25, oml=0.7, H0=70. ):
        
		assert (1 - np.abs(params['omegab'] + params['omegac'] + params['omegav']) <= 0.05)


		self.omegar = 0. # TODO: add radiation density
		self.omegab = params['omegab']
		self.omegac = params['omegac']
		self.omegav = params['omegav']
		self.H0     = params['H0']
		self.h      = self.H0 / 100.

		self.omegam = params['omegab']+params['omegac']

		self.zvec = np.concatenate( [np.linspace(0., 20., 500., endpoint=False),
		                     np.linspace( 20., 200., 200., endpoint=False),
		                     np.linspace(200., 1500., 100)] )
		# self.xvec = np.array( [ integrate.quad( lambda z : (const.c.value * 1.e-3) / self.H_z(z), 0., zmax )[0] for zmax in self.zvec ] )
		self.xvec = np.array( [ integrate.quad( lambda z : (const.c.to('km/s').value) / self.H_z(z), 0., zmax )[0] for zmax in self.zvec ] )

		self.zmin = np.min(self.zvec)
		self.zmax = np.max(self.zvec)
		self.xmin = np.min(self.xvec)
		self.xmax = np.max(self.xvec)

		self.spl_x_z = interpolate.UnivariateSpline( self.zvec, self.xvec, k=1, s=0 )
		self.spl_z_x = interpolate.UnivariateSpline( self.xvec, self.zvec, k=1, s=0 )

		self.chi_rec = self.spl_x_z(1090.)

		# Evaluating Matter PS
		max_kappa = 80.
		kappa = np.logspace(-3,np.log10(max_kappa),50)
		z = np.logspace(-3,1,num=50)
		z = np.insert(z,0,0.)
		redshifts = z[::-1]

		mps = pycamb.matter_power(redshifts, k=kappa, **params)
		mps = np.asarray(mps)

		@np.vectorize
		def pk_hi(k, z):
			return mps[1,-1,z]*(k/mps[0,-1,z])**-3

		k_hi = np.linspace(mps[0,-1,0],2000,1000)[1:]
		mps_hi = np.zeros((2, k_hi.size, redshifts.size))

		for i in xrange(0, redshifts.size):
			mps_hi[1,:,i] = pk_hi(k_hi,i)
			mps_hi[0,:,i] = k_hi

		mps_ext_hi = np.hstack((mps, mps_hi))
		self.pkz   = interpolate.RectBivariateSpline(mps_ext_hi[0,:,0], z, mps_ext_hi[1,:,::-1], kx=3, ky=2, s=0)    # (Mpc/h)^3
예제 #2
0
파일: pyxi.py 프로젝트: jchamilton75/MySoft
 def __init__(self,cosmo,z,kmax=10,nk=32768):
     self.cosmo=cosmo.copy()
     kvals = np.linspace(0,kmax,nk)
     self.k = kvals.copy()
     pk=pycamb.matter_power(redshifts=[z], k=kvals, **cosmo)[1]
     pk[0]=0
     self.pk=pk
     r=2*pi/kmax*np.arange(nk)
     pkk=self.k*self.pk
     cric=-np.imag(fft(pkk)/nk)/r/2/pi**2*kmax
     cric[0]=0
     h=cosmo['H0']/100
     self.xi=interpolate.interp1d(r,cric)
예제 #3
0
파일: camb.py 프로젝트: rbiswas4/cambio
def PK ( koverh , redshiftlist = [0] ,
	maxk = 1.0 ,
	logk_spacing =0.02 ,
	**params ) :
	"""returns the interpolated matter power spectrum 

	"""


	kh, PK , sigma8 = pyc.matter_power (redshifts = redshiftlist, 
		maxk = maxk , 
		logk_spacing = logk_spacing ,  
		get_sigma8 = True, 
		**params )
	return  np.interp( koverh, kh, PK )
예제 #4
0
파일: cambpy.py 프로젝트: aurelienbl/pylib
    def __init__(self, cosmomo, NonLinear=0):

        self.omegab=cosmomo.omegab
        self.omegam=cosmomo.omegam
        self.omegal=cosmomo.omegal
        self.omegac= self.omegam-self.omegab
        self.H0=cosmomo.H0
        self.h=self.H0/100.
        self.camb_params={"omegab":self.omegab, "omegac":self.omegac, 'omegav':self.omegal, "H0":self.H0, "scalar_amp":2.1e-9, "reion__optical_depth":0.09, "reion__reionization":True, "reion__use_optical_depth":True, "reion__redshift":11, "scalar_index":0.9692, "reion__delta_redshift":1.5, "TCMB":2.726, "Num_Nu_massless":3.046, "yhe":0.24, "NonLinear":NonLinear}

        self.z_tab=[0, 0.1, 0.2, 0.3, 0.5, 0.7,1., 1.5,2,2.5,3.,3.5,4,5,7,9.,10.,15,20, 50, 70, 100, 200, 400, 600, 1000,1100,  2000]


        self.AA=pc.matter_power(redshifts=self.z_tab[::-1], maxk=1000, **self.camb_params)
        self.Pdek=scipy.interpolate.RectBivariateSpline( nm.log10(self.AA[0][:,0]*self.h),self.z_tab,(self.AA[1][:,::-1]/self.h**3), kx=3, ky=3, s=0)
예제 #5
0
def powerspectrum(A):
    assert A.WhichSpectrum == 2
    import pycamb
    a = dict(H0=A.h * 100., 
          omegac=A.OmegaM- A.OmegaB, 
          omegab=A.OmegaB, 
          omegav=A.OmegaL, 
          omegak=0.0, omegan=0,
          scalar_index=A.PrimordialIndex
          )
    print a
    fakesigma8 = pycamb.transfers(scalar_amp=1, **a)[2]
    scalar_amp = fakesigma8 ** -2 * A.Sigma8 ** 2
    k, p = pycamb.matter_power(scalar_amp=scalar_amp, maxk=500, **a)
    p[numpy.isnan(p)] = 0
    numpy.savetxt(A.PowerSpectrumFile, zip(k, p), fmt='%g')
예제 #6
0
파일: cambpy.py 프로젝트: aurelienbl/pylib
    def __init__(self, cosmomo, NonLinear=0):

        self.omegab=cosmomo.omegab
        self.omegam=cosmomo.omegam
        self.omegal=cosmomo.omegal
        self.omegac= self.omegam-self.omegab
        self.H0=cosmomo.H0
        self.h=self.H0/100.
        self.camb_params={"omegab":self.omegab, "omegac":self.omegac, 'omegav':self.omegal, 'omegan':0.0, "H0":self.H0, "scalar_amp":2.215e-9, "reion__optical_depth":0.0925, "reion__reionization":True, "reion__use_optical_depth":True, "reion__redshift":11.37, "scalar_index":0.9619, "reion__delta_redshift":1.5, "TCMB":2.725, "Num_Nu_massless":3.046, "yhe":0.248, "NonLinear":NonLinear, "lSampleBoost":1, "AccuracyBoost":1, "lAccuracyBoost":1}

        self.z_tab=[0.001, 0.1, 0.2, 0.3,0.4, 0.5,0.6, 0.7,0.8,0.9,1., 1.1, 1.2, 1.3, 1.4, 1.5,1.7, 2,2.3, 2.5,2.7, 3.,3.5,4,5,7,9.,10.,15,20, 50, 70, 100, 200, 400, 600, 1000,1100, 2000]
        #self.z_tab=[0, 0.1, 0.2, 0.3, 0.5, 0.7, 70, 100, 200, 400, 600, 1000,1100, 2000]


        self.AA=pc.matter_power(redshifts=self.z_tab[::-1], maxk=100, logk_spacing=0.1, **self.camb_params)
        self.Pdek=scipy.interpolate.RectBivariateSpline( (self.AA[0][:,0]*self.h),self.z_tab,(self.AA[1][:,::-1]/self.h**3), kx=3, ky=3, s=0)
예제 #7
0
def powerspectrum(A):
    assert A.WhichSpectrum == 2
    import pycamb
    a = dict(H0=A.h * 100.,
             omegac=A.OmegaM - A.OmegaB,
             omegab=A.OmegaB,
             omegav=A.OmegaL,
             omegak=0.0,
             omegan=0,
             scalar_index=A.PrimordialIndex)
    print a
    fakesigma8 = pycamb.transfers(scalar_amp=1, **a)[2]
    scalar_amp = fakesigma8**-2 * A.Sigma8**2
    k, p = pycamb.matter_power(scalar_amp=scalar_amp, maxk=500, **a)
    p[numpy.isnan(p)] = 0
    numpy.savetxt(A.PowerSpectrumFile, zip(k, p), fmt='%g')
예제 #8
0
파일: camb.py 프로젝트: rbiswas4/cambio
def sigma8(redshiftlist = [0] , 
	maxk = 1.0 , 
	logk_spacing = 0.02, 
	**params ):

	"""
	returns the value of sigma8 at the redshift specified 
	for the set of parameters passed in. 

	args:
		redshiftlist: list of floats, optional, defaults to [0]
		maxk : float, optional, defaults to 1.0 
			max value of k to which the matter power spectrum
			is calculated
		logk_spacing: float, optional , defaults to 0.02
			spacing in log(k *Mpc/h) 
		**params: dictionary/keyword argument for CAMB parameters

	returns:
		float, sigma8 for the parameters passed 
	
	example usage:
		>>> import camb as cp
		>>> params = {"scalar_amp":2.3e-9}
		>>> cp.sigma8(**params)
		>>> 0.8339590551185299
		>>> #This value may change if the defaults of pycamb change
		

	status:
		Tested to work correctly for single redshifts. 
		See testlinearityofsigma8withAs() in tests.

		R. Biswas, Mon Aug 26 10:31:00 CDT 2013

	"""
	sigma8  = pyc.matter_power(redshifts = redshiftlist, 
		maxk = maxk , 
		logk_spacing = logk_spacing ,  
		get_sigma8 = True, 
		**params )[-1]

	return float(sigma8)
예제 #9
0
 def Pk(self):
   import pycamb
   a = dict(H0=self.h * 100., 
         omegac=self.M- self.B, 
         omegab=self.B, 
         omegav=self.L, 
         omegak=1 - self.M - self.L, omegan=0)
   DH = 299792.468 / 100.
   fakesigma8 = pycamb.transfers(scalar_amp=1, **a)[2]
   scalar_amp = fakesigma8 ** -2 * self.sigma8 ** 2
   k, p = pycamb.matter_power(scalar_amp=scalar_amp, maxk=500, **a)
   k *= DH
   p /= DH ** 3
   p[numpy.isnan(p)] = 0
   func = interp1d(k, p, kind=5, bounds_error=False, fill_value=0)
   func.__doc__ = \
   """power spectrum P(k) normalized to sigma8.
      k is in 1/DH and p is in DH**3
   """
   return func
예제 #10
0
 def Pk(self):
     import pycamb
     a = dict(H0=self.h * 100.,
              omegac=self.M - self.B,
              omegab=self.B,
              omegav=self.L,
              omegak=1 - self.M - self.L,
              omegan=0)
     DH = 299792.468 / 100.
     fakesigma8 = pycamb.transfers(scalar_amp=1, **a)[2]
     scalar_amp = fakesigma8**-2 * self.sigma8**2
     k, p = pycamb.matter_power(scalar_amp=scalar_amp, maxk=500, **a)
     k *= DH
     p /= DH**3
     p[numpy.isnan(p)] = 0
     func = interp1d(k, p, kind=5, bounds_error=False, fill_value=0)
     func.__doc__ = \
     """power spectrum P(k) normalized to sigma8.
    k is in 1/DH and p is in DH**3
 """
     return func
예제 #11
0
파일: __init__.py 프로젝트: Jravis/gaepsi
 def power(self, OmegaB, sigma8):
   """ returns matter power spectrum. need pycamb 
       the power spectrum will be in GADGET normalization,
       normalized to (2 * numpy.pi) ** -3 * P_phys(k)
       This takes a long time to calculate; and no caching
       is implemented.
       returns a function P_k(k).
   """
   import pycamb
   from scipy.interpolation import interp1d
   assert self.M + self.L + self.K == 1.0
   args = dict(H0=self.h * 100, 
         omegac=self.M - OmegaB, 
         omegab=OmegaB, 
         omegav=self.L, 
         omegak=0,
         omegan=0)
   fakesigma8 = pycamb.transfers(scalar_amp=1, **args)[2]
   scalar_amp = fakesigma8 ** -2 * sigma8 ** 2
   k, p = pycamb.matter_power(scalar_amp=scalar_amp, maxk=10, **args)
   k /= self.U.MPC_h
   p *= (self.U.MPC_h) ** 3 * (2 * numpy.pi) ** -3 # xiao to GADGET
   return interp1d(k, p, kind='linear', copy=True, 
             bounds_error=False, fill_value=0)
예제 #12
0
def get_pk(cosmo,z, kmax=10, nk=32768):
	h = cosmo['H0']/100
	kvals = np.linspace(0,kmax/h,nk)
	pk=pycamb.matter_power(redshifts=[z], k=kvals, **cosmo)[1]
	pk[0]=0
	return kvals*h, pk / h**3
예제 #13
0
def get_pk(cosmo,z, kmax=10, nk=32768):
	kvals = np.linspace(0,kmax,nk)
	pk=pycamb.matter_power(redshifts=[z], k=kvals, **cosmo)[1]
	pk[0]=0
	return kvals, pk