diff options
Diffstat (limited to 'fg21sim')
| -rw-r--r-- | fg21sim/utils/cosmology.py | 49 | 
1 files changed, 38 insertions, 11 deletions
diff --git a/fg21sim/utils/cosmology.py b/fg21sim/utils/cosmology.py index c5a5119..3a4d5fd 100644 --- a/fg21sim/utils/cosmology.py +++ b/fg21sim/utils/cosmology.py @@ -5,6 +5,8 @@  Flat ΛCDM cosmological model.  """ +import logging +  import numpy as np  from scipy import integrate  from astropy.cosmology import FlatLambdaCDM @@ -13,6 +15,9 @@ from ..configs import configs  from .units import (UnitConversions as AUC, Constants as AC) +logger = logging.getLogger(__name__) + +  class Cosmology:      """      Flat ΛCDM cosmological model. @@ -21,6 +26,7 @@ class Cosmology:      ----------      H0 : float          Hubble parameter at present day (z=0) +        Unit: [km/s/Mpc]      Om0 : float          Density parameter of (dark and baryon) matter at present day      Ob0 : float @@ -30,6 +36,13 @@ class Cosmology:      sigma8 : float          Present-day rms density fluctuation on a scale of 8 h^-1 Mpc. +    Internal attributes +    ------------------- +    _cosmo : `~astropy.cosmology.Cosmology` +        Astropy cosmology instance to help calculations. +    _growth_factor0 : float +        Present day (z=0) growth factor +      References      ----------      [1] https://astro.uni-bonn.de/~pavel/WIKIPEDIA/Lambda-CDM_model.html @@ -38,16 +51,30 @@ class Cosmology:          http://adsabs.harvard.edu/abs/2002ApJ...577..579R          Sec.(2)      """ -    def __init__(self, H0=configs.getn("cosmology/H0"), -                 Om0=configs.getn("cosmology/OmegaM0"), -                 Ob0=configs.getn("cosmology/Omegab0"), -                 sigma8=configs.getn("cosmology/sigma8")): -        self.H0 = H0  # [km/s/Mpc] -        self.Om0 = Om0 -        self.Ob0 = Ob0 -        self.Ode0 = 1.0 - Om0 -        self.sigma8 = sigma8 -        self._cosmo = FlatLambdaCDM(H0=H0, Om0=Om0, Ob0=Ob0) +    # Present day (z=0) growth factor +    _growth_factor0 = None + +    def __init__(self, +                 H0=configs.cosmology["H0"], +                 Om0=configs.cosmology["OmegaM0"], +                 Ob0=configs.cosmology["Omegab0"], +                 sigma8=configs.cosmology["sigma8"]): +        self.setup(H0=H0, Om0=Om0, Ob0=Ob0, sigma8=sigma8) + +    def setup(self, **kwargs): +        """ +        Setup/update the parameters of the cosmology model. +        """ +        for key, value in kwargs: +            if key in ["H0", "Om0", "Ob0", "sigma8"]: +                setattr(self, key, value) +            else: +                raise ValueError("unknown parameter: %s" % key) + +        self.Ode0 = 1.0 - self.Om0 +        self._cosmo = FlatLambdaCDM(H0=self.H0, Om0=self.Om0, Ob0=self.Ob0) +        self._growth_factor0 = None +        logger.info("Setup cosmology with: {0}".format(kwargs))      @property      def h(self): @@ -228,6 +255,6 @@ class Cosmology:          """          Present-day (z=0) growth factor.          """ -        if not hasattr(self, "_growth_factor0"): +        if self._growth_factor0 is None:              self._growth_factor0 = self.growth_factor(0)          return self._growth_factor0  | 
