Source code for hierarc.Sampling.ParamManager.param_manager

from hierarc.Sampling.ParamManager.kin_param import KinParam
from hierarc.Sampling.ParamManager.cosmo_param import CosmoParam
from hierarc.Sampling.ParamManager.lens_param import LensParam
from hierarc.Sampling.ParamManager.source_param import SourceParam


[docs] class ParamManager(object): """Class for managing the parameters involved.""" def __init__( self, cosmology, ppn_sampling=False, lambda_mst_sampling=False, lambda_mst_distribution="NONE", anisotropy_sampling=False, anisotropy_model="OM", anisotropy_distribution="NONE", gamma_in_sampling=False, gamma_in_distribution="NONE", log_m2l_sampling=False, log_m2l_distribution="NONE", kappa_ext_sampling=False, kappa_ext_distribution="NONE", lambda_ifu_sampling=False, lambda_ifu_distribution="NONE", alpha_lambda_sampling=False, beta_lambda_sampling=False, alpha_gamma_in_sampling=False, alpha_log_m2l_sampling=False, sigma_v_systematics=False, sne_apparent_m_sampling=False, sne_distribution="GAUSSIAN", z_apparent_m_anchor=0.1, log_scatter=False, kwargs_lower_cosmo=None, kwargs_upper_cosmo=None, kwargs_fixed_cosmo=None, kwargs_lower_lens=None, kwargs_upper_lens=None, kwargs_fixed_lens=None, kwargs_lower_kin=None, kwargs_upper_kin=None, kwargs_fixed_kin=None, kwargs_lower_source=None, kwargs_upper_source=None, kwargs_fixed_source=None, ): """ :param cosmology: string describing cosmological model :param ppn_sampling: post-newtonian parameter sampling :param lambda_mst_sampling: bool, if True adds a global mass-sheet transform parameter in the sampling :param lambda_mst_distribution: string, distribution function of the MST transform :param lambda_ifu_sampling: bool, if True samples a separate lambda_mst for a second (e.g. IFU) data set independently :param alpha_lambda_sampling: bool, if True samples a parameter alpha_lambda, which scales lambda_mst linearly according to a predefined quantity of the lens :param beta_lambda_sampling: bool, if True samples a parameter beta_lambda, which scales lambda_mst linearly according to a predefined quantity of the lens :param lambda_ifu_distribution: string, distribution function of the lambda_ifu parameter :param anisotropy_sampling: bool, if True adds a global stellar anisotropy parameter that alters the single lens kinematic prediction :param anisotropy_distribution: string, indicating the distribution function of the anisotropy model :param gamma_in_sampling: bool, if True samples gNFW inner slope parameter :param gamma_in_distribution: string, distribution function of the gamma_in parameter :param log_m2l_sampling: bool, if True samples the mass-to-light ratio of the stars in logarithmic scale :param log_m2l_distribution: string, distribution function of the log_m2l parameter :param alpha_gamma_in_sampling: bool, if True samples a parameter alpha_gamma_in, which scales gamma_in linearly according to a predefined quantity of the lens :param alpha_log_m2l_sampling: bool, if True samples a parameter alpha_log_m2l, which scales log_m2l linearly according to a predefined quantity of the lens :param sne_apparent_m_sampling: boolean, if True, samples/queries SNe unlensed magnitude distribution (not intrinsic magnitudes but apparent!) :param sne_distribution: string, apparent non-lensed brightness distribution (in linear space). Currently supports: 'GAUSSIAN': Gaussian distribution :param sigma_v_systematics: bool, if True samples paramaters 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) """ self._kin_param = KinParam( anisotropy_sampling=anisotropy_sampling, anisotropy_model=anisotropy_model, distribution_function=anisotropy_distribution, log_scatter=log_scatter, sigma_v_systematics=sigma_v_systematics, kwargs_fixed=kwargs_fixed_kin, ) self._cosmo_param = CosmoParam( cosmology=cosmology, ppn_sampling=ppn_sampling, kwargs_fixed=kwargs_fixed_cosmo, ) self._lens_param = LensParam( lambda_mst_sampling=lambda_mst_sampling, lambda_mst_distribution=lambda_mst_distribution, lambda_ifu_sampling=lambda_ifu_sampling, lambda_ifu_distribution=lambda_ifu_distribution, gamma_in_sampling=gamma_in_sampling, gamma_in_distribution=gamma_in_distribution, log_m2l_sampling=log_m2l_sampling, log_m2l_distribution=log_m2l_distribution, kappa_ext_sampling=kappa_ext_sampling, kappa_ext_distribution=kappa_ext_distribution, alpha_lambda_sampling=alpha_lambda_sampling, beta_lambda_sampling=beta_lambda_sampling, alpha_gamma_in_sampling=alpha_gamma_in_sampling, alpha_log_m2l_sampling=alpha_log_m2l_sampling, log_scatter=log_scatter, kwargs_fixed=kwargs_fixed_lens, ) self._source_param = SourceParam( sne_apparent_m_sampling=sne_apparent_m_sampling, sne_distribution=sne_distribution, z_apparent_m_anchor=z_apparent_m_anchor, kwargs_fixed=kwargs_fixed_source, ) self._kwargs_upper_cosmo, self._kwargs_lower_cosmo = ( kwargs_upper_cosmo, kwargs_lower_cosmo, ) self._kwargs_upper_lens, self._kwargs_lower_lens = ( kwargs_upper_lens, kwargs_lower_lens, ) self._kwargs_upper_kin, self._kwargs_lower_kin = ( kwargs_upper_kin, kwargs_lower_kin, ) self._kwargs_upper_source, self._kwargs_lower_source = ( kwargs_upper_source, kwargs_lower_source, ) @property def num_param(self): """Number of parameters being sampled. :return: integer """ return len(self.param_list())
[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_param = [] list_param += self._cosmo_param.param_list(latex_style=latex_style) list_param += self._lens_param.param_list(latex_style=latex_style) list_param += self._kin_param.param_list(latex_style=latex_style) list_param += self._source_param.param_list(latex_style=latex_style) return list_param
[docs] def args2kwargs(self, args): """ :param args: sampling argument list :return: keyword argument list with parameter names """ i = 0 kwargs_cosmo, i = self._cosmo_param.args2kwargs(args, i=i) kwargs_lens, i = self._lens_param.args2kwargs(args, i=i) kwargs_kin, i = self._kin_param.args2kwargs(args, i=i) kwargs_source, i = self._source_param.args2kwargs(args, i=i) return kwargs_cosmo, kwargs_lens, kwargs_kin, kwargs_source
[docs] def kwargs2args( self, kwargs_cosmo=None, kwargs_lens=None, kwargs_kin=None, kwargs_source=None ): """ :param kwargs_cosmo: keyword argument list of parameters for cosmology sampling :param kwargs_lens: keyword argument list of parameters for lens model sampling :param kwargs_kin: keyword argument list of parameters for kinematic sampling :param kwargs_source: keyword arguments of parameters of source brightness :return: sampling argument list in specified order """ args = [] args += self._cosmo_param.kwargs2args(kwargs_cosmo) args += self._lens_param.kwargs2args(kwargs_lens) args += self._kin_param.kwargs2args(kwargs_kin) args += self._source_param.kwargs2args(kwargs_source) return args
[docs] def cosmo(self, kwargs_cosmo): """ :param kwargs_cosmo: keyword arguments of parameters (can include others not used for the cosmology) :return: astropy.cosmology instance """ return self._cosmo_param.cosmo(kwargs_cosmo)
@property def param_bounds(self): """ :return: argument list of the hard bounds in the order of the sampling """ lower_limit = self.kwargs2args( kwargs_cosmo=self._kwargs_lower_cosmo, kwargs_lens=self._kwargs_lower_lens, kwargs_kin=self._kwargs_lower_kin, kwargs_source=self._kwargs_lower_source, ) upper_limit = self.kwargs2args( kwargs_cosmo=self._kwargs_upper_cosmo, kwargs_lens=self._kwargs_upper_lens, kwargs_kin=self._kwargs_upper_kin, kwargs_source=self._kwargs_upper_source, ) return lower_limit, upper_limit