Source code for hierarc.Sampling.ParamManager.kin_param
import numpy as np
[docs]
class KinParam(object):
"""Manager for the kinematics anisotropy parameters."""
def __init__(
self,
anisotropy_sampling=False,
anisotropy_model="OM",
distribution_function="NONE",
sigma_v_systematics=False,
log_scatter=False,
kwargs_fixed=None,
):
"""
:param anisotropy_sampling: bool, if True, makes use of this module, else ignores it's functionalities
:param anisotropy_model: string, name of anisotropy model to consider
:param distribution_function: string, 'NONE', 'GAUSSIAN', description of the distribution function of the
anisotropy model parameters
:param sigma_v_systematics: bool, if True samples parameters relative to systematics in the velocity dispersion
measurement
:param log_scatter: boolean, if True, samples the Gaussian scatter amplitude in log space (and thus flat prior in log)
:param kwargs_fixed: keyword arguments of the fixed parameters
"""
assert anisotropy_model in ["NONE", "GOM", "OM", "const"]
self._anisotropy_sampling = anisotropy_sampling
self._anisotropy_model = anisotropy_model
self._distribution_function = distribution_function
self._sigma_v_systematics = sigma_v_systematics
if kwargs_fixed is None:
kwargs_fixed = {}
self._kwargs_fixed = kwargs_fixed
self._log_scatter = log_scatter
[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
:param i: int, index of the parameter to start with
:return: list of the free parameters being sampled in the same order as the sampling
"""
list = []
if self._anisotropy_sampling is True:
if self._anisotropy_model in ["OM", "GOM", "const"]:
if "a_ani" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$\langle a_{\rm ani}\rangle$")
else:
list.append("a_ani")
if self._distribution_function in ["GAUSSIAN"]:
if "a_ani_sigma" not in self._kwargs_fixed:
if latex_style is True:
if self._log_scatter is True:
list.append(r"$\log_{10}\sigma(a_{\rm ani})$")
else:
list.append(r"$\sigma(a_{\rm ani})$")
else:
list.append("a_ani_sigma")
if self._anisotropy_model in ["GOM"]:
if "beta_inf" not in self._kwargs_fixed:
if latex_style is True:
list.append(r"$\beta_{\infty}$")
else:
list.append("beta_inf")
if self._distribution_function in ["GAUSSIAN"]:
if "beta_inf_sigma" not in self._kwargs_fixed:
if latex_style is True:
if self._log_scatter is True:
list.append(r"$\log_{10}\sigma(\beta_{\infty})$")
else:
list.append(r"$\sigma(\beta_{\infty})$")
else:
list.append("beta_inf_sigma")
if self._sigma_v_systematics is True:
if "sigma_v_sys_error" not in self._kwargs_fixed:
if latex_style is True:
if self._log_scatter is True:
list.append(r"$\log_{10}\sigma_{\rm sys}(\sigma_v)$")
else:
list.append(r"$\sigma_{\rm sys}(\sigma_v)$")
else:
list.append("sigma_v_sys_error")
return list
[docs]
def args2kwargs(self, args, i=0):
"""
:param args: sampling argument list
:param i: integer, index to start reading out the argument list
:return: keyword argument list with parameter names
"""
kwargs = {}
if self._anisotropy_sampling is True:
if self._anisotropy_model in ["OM", "GOM", "const"]:
if "a_ani" in self._kwargs_fixed:
kwargs["a_ani"] = self._kwargs_fixed["a_ani"]
else:
kwargs["a_ani"] = args[i]
i += 1
if self._distribution_function in ["GAUSSIAN"]:
if "a_ani_sigma" in self._kwargs_fixed:
kwargs["a_ani_sigma"] = self._kwargs_fixed["a_ani_sigma"]
else:
if self._log_scatter is True:
kwargs["a_ani_sigma"] = 10 ** (args[i])
else:
kwargs["a_ani_sigma"] = args[i]
i += 1
if self._anisotropy_model in ["GOM"]:
if "beta_inf" in self._kwargs_fixed:
kwargs["beta_inf"] = self._kwargs_fixed["beta_inf"]
else:
kwargs["beta_inf"] = args[i]
i += 1
if self._distribution_function in ["GAUSSIAN"]:
if "beta_inf_sigma" in self._kwargs_fixed:
kwargs["beta_inf_sigma"] = self._kwargs_fixed["beta_inf_sigma"]
else:
if self._log_scatter is True:
kwargs["beta_inf_sigma"] = 10 ** (args[i])
else:
kwargs["beta_inf_sigma"] = args[i]
i += 1
if self._sigma_v_systematics is True:
if "sigma_v_sys_error" in self._kwargs_fixed:
kwargs["sigma_v_sys_error"] = self._kwargs_fixed["sigma_v_sys_error"]
else:
if self._log_scatter is True:
kwargs["sigma_v_sys_error"] = 10 ** (args[i])
else:
kwargs["sigma_v_sys_error"] = 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._anisotropy_sampling is True:
if self._anisotropy_model in ["OM", "GOM", "const"]:
if "a_ani" not in self._kwargs_fixed:
args.append(kwargs["a_ani"])
if self._distribution_function in ["GAUSSIAN"]:
if "a_ani_sigma" not in self._kwargs_fixed:
if self._log_scatter is True:
args.append(np.log10(kwargs["a_ani_sigma"]))
else:
args.append(kwargs["a_ani_sigma"])
if self._anisotropy_model in ["GOM"]:
if "beta_inf" not in self._kwargs_fixed:
args.append(kwargs["beta_inf"])
if self._distribution_function in ["GAUSSIAN"]:
if "beta_inf_sigma" not in self._kwargs_fixed:
if self._log_scatter is True:
args.append(np.log10(kwargs["beta_inf_sigma"]))
else:
args.append(kwargs["beta_inf_sigma"])
if self._sigma_v_systematics is True:
if "sigma_v_sys_error" not in self._kwargs_fixed:
if self._log_scatter is True:
args.append(np.log10(kwargs["sigma_v_sys_error"]))
else:
args.append(kwargs["sigma_v_sys_error"])
return args