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