Source code for hierarc.Sampling.ParamManager.cosmo_param
from astropy.cosmology import FlatLambdaCDM, FlatwCDM, LambdaCDM, w0waCDM
[docs]
class CosmoParam(object):
"""Manages the cosmological parameters in the sampling."""
def __init__(self, cosmology, ppn_sampling=False, kwargs_fixed=None):
"""
:param cosmology: string describing cosmological model
:param ppn_sampling: post-newtonian parameter sampling
:param kwargs_fixed: keyword arguments of fixed parameters during sampling
"""
self._cosmology = cosmology
if kwargs_fixed is None:
kwargs_fixed = {}
self._kwargs_fixed = kwargs_fixed
self._ppn_sampling = ppn_sampling
self._supported_cosmologies = ["FLCDM", "FwCDM", "w0waCDM", "oLCDM", "NONE"]
if cosmology not in self._supported_cosmologies:
raise ValueError(
"cosmology %s not supported!. Please chose among %s "
% (cosmology, self._supported_cosmologies)
)
[docs]
def param_list(self, latex_style=False):
"""
:param latex_style: bool, if True returns strings in latex symbols, else in the convention of the sampler
:return: list of the free parameters being sampled in the same order as the sampling
"""
list = []
if self._cosmology not in ["NONE"]:
if "h0" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$H_0$")
else:
list.append("h0")
if self._cosmology in ["FLCDM", "FwCDM", "w0waCDM", "oLCDM"]:
if "om" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$\Omega_{\rm m}$")
else:
list.append("om")
if self._cosmology in ["FwCDM"]:
if "w" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$w$")
else:
list.append("w")
if self._cosmology in ["w0waCDM"]:
if "w0" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$w_0$")
else:
list.append("w0")
if "wa" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$w_{\rm a}$")
else:
list.append("wa")
if self._cosmology in ["oLCDM"]:
if "ok" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$\Omega_{\rm k}$")
else:
list.append("ok")
if self._ppn_sampling is True:
if "gamma_ppn" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$\gamma_{\rm ppn}$")
else:
list.append("gamma_ppn")
return list
[docs]
def args2kwargs(self, args, i=0):
"""
:param args: sampling argument list
:return: keyword argument list with parameter names
"""
kwargs = {}
if self._cosmology not in ["NONE"]:
if "h0" in self._kwargs_fixed:
kwargs["h0"] = self._kwargs_fixed["h0"]
else:
kwargs["h0"] = args[i]
i += 1
if self._cosmology in ["FLCDM", "FwCDM", "w0waCDM", "oLCDM"]:
if "om" in self._kwargs_fixed:
kwargs["om"] = self._kwargs_fixed["om"]
else:
kwargs["om"] = args[i]
i += 1
if self._cosmology in ["FwCDM"]:
if "w" in self._kwargs_fixed:
kwargs["w"] = self._kwargs_fixed["w"]
else:
kwargs["w"] = args[i]
i += 1
if self._cosmology in ["w0waCDM"]:
if "w0" in self._kwargs_fixed:
kwargs["w0"] = self._kwargs_fixed["w0"]
else:
kwargs["w0"] = args[i]
i += 1
if "wa" in self._kwargs_fixed:
kwargs["wa"] = self._kwargs_fixed["wa"]
else:
kwargs["wa"] = args[i]
i += 1
if self._cosmology in ["oLCDM"]:
if "ok" in self._kwargs_fixed:
kwargs["ok"] = self._kwargs_fixed["ok"]
else:
kwargs["ok"] = args[i]
i += 1
if self._ppn_sampling is True:
if "gamma_ppn" in self._kwargs_fixed:
kwargs["gamma_ppn"] = self._kwargs_fixed["gamma_ppn"]
else:
kwargs["gamma_ppn"] = args[i]
i += 1
return kwargs, i
[docs]
def kwargs2args(self, kwargs):
"""
:param kwargs: keyword argument list of parameters
:return: sampling argument list in specified order
"""
args = []
if self._cosmology not in ["NONE"]:
if "h0" not in self._kwargs_fixed:
args.append(kwargs["h0"])
if self._cosmology in ["FLCDM", "FwCDM", "w0waCDM", "oLCDM"]:
if "om" not in self._kwargs_fixed:
args.append(kwargs["om"])
if self._cosmology in ["FwCDM"]:
if "w" not in self._kwargs_fixed:
args.append(kwargs["w"])
if self._cosmology in ["w0waCDM"]:
if "w0" not in self._kwargs_fixed:
args.append(kwargs["w0"])
if "wa" not in self._kwargs_fixed:
args.append(kwargs["wa"])
if self._cosmology in ["oLCDM"]:
if "ok" not in self._kwargs_fixed:
args.append(kwargs["ok"])
if self._ppn_sampling is True:
if "gamma_ppn" not in self._kwargs_fixed:
args.append(kwargs["gamma_ppn"])
return args
[docs]
def cosmo(self, kwargs):
"""
:param kwargs: keyword arguments of parameters (can include others not used for the cosmology)
:return: astropy.cosmology instance
"""
if self._cosmology == "FLCDM":
cosmo = FlatLambdaCDM(H0=kwargs["h0"], Om0=kwargs["om"])
elif self._cosmology == "FwCDM":
cosmo = FlatwCDM(H0=kwargs["h0"], Om0=kwargs["om"], w0=kwargs["w"])
elif self._cosmology == "w0waCDM":
cosmo = w0waCDM(
H0=kwargs["h0"],
Om0=kwargs["om"],
Ode0=1.0 - kwargs["om"],
w0=kwargs["w0"],
wa=kwargs["wa"],
)
elif self._cosmology == "oLCDM":
cosmo = LambdaCDM(
H0=kwargs["h0"],
Om0=kwargs["om"],
Ode0=1.0 - kwargs["om"] - kwargs["ok"],
)
elif self._cosmology == "NONE":
cosmo = None
else:
raise ValueError("Cosmology %s is not supported" % self._cosmology)
return cosmo