class WeirdCDMCosmology(LCDMCosmology): def __init__(self, varymu=True, varyAmp=True, varysig=True, varyCos=True): ## two parameters: Om and h ## we start with false here... varyOk=False ## this is my "original cosmology" -- outside gaussian not much will change. self.varyOk=varyOk self.varymu=varymu self.varyAmp=varyAmp self.varysig=varysig self.varyCos=varyCos self.Ok=Ok_par.value self.mu=mu_par.value self.Amp=Amp_par.value self.sig=sig_par.value ## auxiliary self cosmology self.oC=LCDMCosmology() LCDMCosmology.__init__(self) ## my free parameters. We add Ok on top of LCDM ones (we inherit LCDM) def freeParameters(self): l=[] if (self.varyCos): l+=LCDMCosmology.freeParameters(self) if (self.varyOk): l.append(Ok_par) if (self.varymu): l.append(mu_par) if (self.varyAmp): l.append(Amp_par) if (self.varysig): l.append(sig_par) return l def updateParams(self,pars): LCDMCosmology.updateParams(self,pars) self.oC.updateParams(pars) for p in pars: if p.name=="Ok": self.Ok=p.value self.setCurvature(self.Ok) if (abs(self.Ok)>1.0): return False elif p.name=="mu": self.mu=p.value elif p.name=="Amp": self.Amp=p.value elif p.name=="sig": self.sig=p.value return True def Weird(self,a): #return W(z) and dW(z)/dz z=1.0/a-1 lmu=log(self.mu+1) lz=log(z+1) W=self.Amp*N.exp(-(lz-lmu)**2/(2*self.sig**2)) WP=W*(-(lz-lmu)/self.sig**2)*a ## a=1/(1+z) = dlog(1+z)/dz return W,WP ## this is relative hsquared as a function of a ## i.e. H(z)^2/H(z=0)^2 def RHSquared_a(self,a): W,WP=self.Weird(a) H2=LCDMCosmology.RHSquared_a(self,a) HI=1/sqrt(H2) HI=HI*(1+W) + self.oC.Da_z(1/a-1)*WP return 1/HI**2 def Da_z(self,z): W,WP=self.Weird(1/(1.0+z)) return self.oC.Da_z(z)*(1+W)
class WeirdCDMCosmology(LCDMCosmology): def __init__(self, varymu=True, varyAmp=True, varysig=True, varyCos=True): ## two parameters: Om and h ## we start with false here... varyOk = False ## this is my "original cosmology" -- outside gaussian not much will change. self.varyOk = varyOk self.varymu = varymu self.varyAmp = varyAmp self.varysig = varysig self.varyCos = varyCos self.Ok = Ok_par.value self.mu = mu_par.value self.Amp = Amp_par.value self.sig = sig_par.value ## auxiliary self cosmology self.oC = LCDMCosmology() LCDMCosmology.__init__(self) ## my free parameters. We add Ok on top of LCDM ones (we inherit LCDM) def freeParameters(self): l = [] if (self.varyCos): l += LCDMCosmology.freeParameters(self) if (self.varyOk): l.append(Ok_par) if (self.varymu): l.append(mu_par) if (self.varyAmp): l.append(Amp_par) if (self.varysig): l.append(sig_par) return l def updateParams(self, pars): LCDMCosmology.updateParams(self, pars) self.oC.updateParams(pars) for p in pars: if p.name == "Ok": self.Ok = p.value self.setCurvature(self.Ok) if (abs(self.Ok) > 1.0): return False elif p.name == "mu": self.mu = p.value elif p.name == "Amp": self.Amp = p.value elif p.name == "sig": self.sig = p.value return True def Weird(self, a): #return W(z) and dW(z)/dz z = 1.0 / a - 1 lmu = log(self.mu + 1) lz = log(z + 1) W = self.Amp * N.exp(-(lz - lmu)**2 / (2 * self.sig**2)) WP = W * (-(lz - lmu) / self.sig**2) * a ## a=1/(1+z) = dlog(1+z)/dz return W, WP ## this is relative hsquared as a function of a ## i.e. H(z)^2/H(z=0)^2 def RHSquared_a(self, a): W, WP = self.Weird(a) H2 = LCDMCosmology.RHSquared_a(self, a) HI = 1 / sqrt(H2) HI = HI * (1 + W) + self.oC.Da_z(1 / a - 1) * WP return 1 / HI**2 def Da_z(self, z): W, WP = self.Weird(1 / (1.0 + z)) return self.oC.Da_z(z) * (1 + W)
class EarlyDECosmology(LCDMCosmology): def __init__(self, varyw=True, varyOde=True, userd_DE=True): ## two parameters: Om and h self.userd_DE = userd_DE print 'userd', userd_DE self.varyw= varyw self.varyOde=varyOde self.w0= w_par.value self.Ode=Ode_par.value self.oC=LCDMCosmology() LCDMCosmology.__init__(self) ## my free parameters. We add Ok on top of LCDM ones (we inherit LCDM) def freeParameters(self): l=LCDMCosmology.freeParameters(self) if (self.varyw): l.append(w_par) if (self.varyOde): l.append(Ode_par) return l def updateParams(self,pars): ok=LCDMCosmology.updateParams(self,pars) self.oC.updateParams(pars) if not ok: return False for p in pars: if p.name=="w": self.w0=p.value if p.name=="Ode": self.Ode=p.value return True ## this is relative hsquared as a function of a ## i.e. H(z)^2/H(z=0)^2 def RHSquared_a(self,a): NuContrib=self.NuDensity.rho(a)/self.h**2 Omega_d0 = 1.0-self.Ocb-self.Omrad-self.NuDensity.rho(1.0)/self.h**2 factor= self.Ocb/a**3+self.Omrad/a**4+NuContrib Omega_d =(Omega_d0-self.Ode*(1.0-a**(-3*self.w0)))/(Omega_d0+factor*a**(3*(1.0+self.w0)))+ self.Ode*(1.0-a**(-3*self.w0)) return factor/(1.0-Omega_d) def prefactor(self): if self.userd_DE: self.rd = self.oC.rd*((1.-self.Ode)**(0.5)) else: self.rd = self.oC.rd return self.c_/(self.rd*self.h*100) #for printing purposes only def Omega_de(self, a): NuContrib=self.NuDensity.rho(a)/self.h**2 Omega_d0 = 1.0-self.Ocb-self.Omrad-self.NuDensity.rho(1.0)/self.h**2 factor= self.Ocb/a**3+self.Omrad/a**4+NuContrib return (Omega_d0-self.Ode*(1.0-a**(-3*self.w0)))/(Omega_d0+factor*a**(3*(1.0+self.w0)))+ self.Ode*(1.0-a**(-3*self.w0))
class Early_DE_DMCosmology(LCDMCosmology): def __init__(self, varyw=True, varyOde=True, userd_DE=True, varywMO=True): ## two parameters: Om and h self.userd_DE = userd_DE print 'userd', userd_DE self.varyw = varyw self.varyOde = varyOde self.varywMO = varywMO self.w0 = w_par.value self.Ode = Ode_par.value self.wMO = wMO_par.value self.oC = LCDMCosmology() LCDMCosmology.__init__(self) ## my free parameters. We add Ok on top of LCDM ones (we inherit LCDM) def freeParameters(self): l = LCDMCosmology.freeParameters(self) if (self.varyw): l.append(w_par) if (self.varyOde): l.append(Ode_par) if (self.varywMO): l.append(wMO_par) return l def updateParams(self, pars): ok = LCDMCosmology.updateParams(self, pars) self.oC.updateParams(pars) if not ok: return False for p in pars: if p.name == "w": self.w0 = p.value if p.name == "Ode": self.Ode = p.value elif p.name == "wMO": self.wMO = p.value return True ## this is relative hsquared as a function of a ## i.e. H(z)^2/H(z=0)^2 def RHSquared_a(self, a): NuContrib = self.NuDensity.rho(a) / self.h**2 self.Odm = self.Ocb - self.Obh2 / (self.h**2) #Se agrega por DM self.Ob = self.Ocb - self.Odm #Se agrega por DM Omega_d0 = 1.0 - self.Ocb - self.Omrad - self.NuDensity.rho( 1.0) / self.h**2 factor = self.Ob / a**3 + self.Odm * a**( -3 * (1.0 + self.wMO)) + self.Omrad / a**4 + NuContrib Omega_d = (Omega_d0 - self.Ode * (1.0 - a**(-3 * self.w0))) / ( Omega_d0 + factor * a** (3 * (1.0 + self.w0))) + self.Ode * (1.0 - a**(-3 * self.w0)) return factor / (1.0 - Omega_d) def prefactor(self): if self.userd_DE: self.rd = self.oC.rd * ((1. - self.Ode)**(0.5)) else: self.rd = self.oC.rd return self.c_ / (self.rd * self.h * 100) #for printing purposes only def Omega_de(self, a): NuContrib = self.NuDensity.rho(a) / self.h**2 Omega_d0 = 1.0 - self.Ocb - self.Omrad - self.NuDensity.rho( 1.0) / self.h**2 factor = self.Ob / a**3 + self.Odm * a**( -3 * (1.0 + self.wMO)) + self.Omrad / a**4 + NuContrib return (Omega_d0 - self.Ode * (1.0 - a**(-3 * self.w0))) / ( Omega_d0 + factor * a** (3 * (1.0 + self.w0))) + self.Ode * (1.0 - a**(-3 * self.w0))