Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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))
Exemplo n.º 4
0
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))