Source code for hierarc.Sampling.ParamManager.lens_param

import numpy as np


[docs] class LensParam(object): """Manages the lens model covariant parameters.""" def __init__( self, lambda_mst_sampling=False, lambda_mst_distribution="NONE", lambda_ifu_sampling=False, lambda_ifu_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", alpha_lambda_sampling=False, beta_lambda_sampling=False, alpha_gamma_in_sampling=False, alpha_log_m2l_sampling=False, kwargs_fixed=None, log_scatter=False, ): """ :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 lambda_ifu_distribution: string, distribution function of the lambda_ifu parameter :param gamma_in_sampling: bool, if True samples the inner slope of the GNFW profile :param gamma_in_distribution: string, distribution function of the inner slope of the GNFW profile :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 logarithm of mass to light ratio of the lens :param kappa_ext_sampling: bool, if True samples a global external convergence parameter :param kappa_ext_distribution: string, distribution function of the kappa_ext parameter :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 alpha_gamma_in_sampling: bool, if True samples a parameter alpha_gamma_in, which scales gamma_in linearly :param alpha_log_m2l_sampling: bool, if True samples a parameter alpha_log_m2l, which scales log_m2l linearly :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 that are held fixed through the sampling """ self._lambda_mst_sampling = lambda_mst_sampling self._lambda_mst_distribution = lambda_mst_distribution self._lambda_ifu_sampling = lambda_ifu_sampling self._lambda_ifu_distribution = lambda_ifu_distribution self._gamma_in_sampling = gamma_in_sampling self._gamma_in_distribution = gamma_in_distribution self._log_m2l_sampling = log_m2l_sampling self._log_m2l_distribution = log_m2l_distribution self._kappa_ext_sampling = kappa_ext_sampling self._kappa_ext_distribution = kappa_ext_distribution self._alpha_lambda_sampling = alpha_lambda_sampling self._beta_lambda_sampling = beta_lambda_sampling self._alpha_gamma_in_sampling = alpha_gamma_in_sampling self._alpha_log_m2l_sampling = alpha_log_m2l_sampling self._log_scatter = log_scatter if kwargs_fixed is None: kwargs_fixed = {} self._kwargs_fixed = kwargs_fixed
[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._lambda_mst_sampling is True: if "lambda_mst" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\overline{\lambda}_{\rm int}$") else: list.append("lambda_mst") if self._lambda_mst_distribution == "GAUSSIAN": if "lambda_mst_sigma" not in self._kwargs_fixed: if latex_style is True: if self._log_scatter is True: list.append(r"$\log_{10}\sigma(\lambda_{\rm int})$") else: list.append(r"$\sigma(\lambda_{\rm int})$") else: list.append("lambda_mst_sigma") if self._lambda_ifu_sampling is True: if "lambda_ifu" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\lambda_{\rm ifu}$") else: list.append("lambda_ifu") if self._lambda_ifu_distribution == "GAUSSIAN": if "lambda_ifu_sigma" not in self._kwargs_fixed: if latex_style is True: if self._log_scatter is True: list.append(r"$\log_{10}\sigma(\lambda_{\rm ifu})$") else: list.append(r"$\sigma(\lambda_{\rm ifu})$") else: list.append("lambda_ifu_sigma") if self._gamma_in_sampling: if "gamma_in" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\gamma_{\rm in}$") else: list.append("gamma_in") if self._gamma_in_distribution == "GAUSSIAN": if "gamma_in_sigma" not in self._kwargs_fixed: if latex_style is True: if self._log_scatter is True: list.append(r"$\log_{10}\sigma(\gamma_{\rm in})$") else: list.append(r"$\sigma(\gamma_{\rm in})$") else: list.append("gamma_in_sigma") if self._log_m2l_sampling is True: if "log_m2l" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\Upsilon_{\rm stars}$") else: list.append("log_m2l") if self._log_m2l_distribution == "GAUSSIAN": if "log_m2l_sigma" not in self._kwargs_fixed: if latex_style is True: if self._log_scatter is True: list.append(r"$\log_{10}\sigma(\Upsilon_{\rm stars})$") else: list.append(r"$\sigma(\Upsilon_{\rm stars})$") else: list.append("log_m2l_sigma") if self._kappa_ext_sampling is True: if "kappa_ext" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\overline{\kappa}_{\rm ext}$") else: list.append("kappa_ext") if self._kappa_ext_distribution == "GAUSSIAN": if "kappa_ext_sigma" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\sigma(\kappa_{\rm ext})$") else: list.append("kappa_ext_sigma") if self._alpha_lambda_sampling is True: if "alpha_lambda" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\alpha_{\lambda}$") else: list.append("alpha_lambda") if self._beta_lambda_sampling is True: if "beta_lambda" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\beta_{\lambda}$") else: list.append("beta_lambda") if self._alpha_gamma_in_sampling is True: if "alpha_gamma_in" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\alpha_{\gamma_{\rm in}}$") else: list.append("alpha_gamma_in") if self._alpha_log_m2l_sampling is True: if "alpha_log_m2l" not in self._kwargs_fixed: if latex_style is True: list.append(r"$\alpha_{\Upsilon_{\rm stars}}$") else: list.append("alpha_log_m2l") return list
[docs] def args2kwargs(self, args, i=0): """ :param args: sampling argument list :return: keyword argument list with parameter names """ kwargs = {} if self._lambda_mst_sampling is True: if "lambda_mst" in self._kwargs_fixed: kwargs["lambda_mst"] = self._kwargs_fixed["lambda_mst"] else: kwargs["lambda_mst"] = args[i] i += 1 if self._lambda_mst_distribution == "GAUSSIAN": if "lambda_mst_sigma" in self._kwargs_fixed: kwargs["lambda_mst_sigma"] = self._kwargs_fixed["lambda_mst_sigma"] else: if self._log_scatter is True: kwargs["lambda_mst_sigma"] = 10 ** (args[i]) else: kwargs["lambda_mst_sigma"] = args[i] i += 1 if self._lambda_ifu_sampling is True: if "lambda_ifu" in self._kwargs_fixed: kwargs["lambda_ifu"] = self._kwargs_fixed["lambda_ifu"] else: kwargs["lambda_ifu"] = args[i] i += 1 if self._lambda_ifu_distribution == "GAUSSIAN": if "lambda_ifu_sigma" in self._kwargs_fixed: kwargs["lambda_ifu_sigma"] = self._kwargs_fixed["lambda_ifu_sigma"] else: if self._log_scatter is True: kwargs["lambda_ifu_sigma"] = 10 ** (args[i]) else: kwargs["lambda_ifu_sigma"] = args[i] i += 1 if self._gamma_in_sampling is True: if "gamma_in" in self._kwargs_fixed: kwargs["gamma_in"] = self._kwargs_fixed["gamma_in"] else: kwargs["gamma_in"] = args[i] i += 1 if self._gamma_in_distribution == "GAUSSIAN": if "gamma_in_sigma" in self._kwargs_fixed: kwargs["gamma_in_sigma"] = self._kwargs_fixed["gamma_in_sigma"] else: if self._log_scatter is True: kwargs["gamma_in_sigma"] = 10 ** (args[i]) else: kwargs["gamma_in_sigma"] = args[i] i += 1 if self._log_m2l_sampling is True: if "log_m2l" in self._kwargs_fixed: kwargs["log_m2l"] = self._kwargs_fixed["log_m2l"] else: kwargs["log_m2l"] = args[i] i += 1 if self._log_m2l_distribution == "GAUSSIAN": if "log_m2l_sigma" in self._kwargs_fixed: kwargs["log_m2l_sigma"] = self._kwargs_fixed["log_m2l_sigma"] else: if self._log_scatter is True: kwargs["log_m2l_sigma"] = 10 ** (args[i]) else: kwargs["log_m2l_sigma"] = args[i] i += 1 if self._kappa_ext_sampling is True: if "kappa_ext" in self._kwargs_fixed: kwargs["kappa_ext"] = self._kwargs_fixed["kappa_ext"] else: kwargs["kappa_ext"] = args[i] i += 1 if self._kappa_ext_distribution == "GAUSSIAN": if "kappa_ext_sigma" in self._kwargs_fixed: kwargs["kappa_ext_sigma"] = self._kwargs_fixed["kappa_ext_sigma"] else: kwargs["kappa_ext_sigma"] = args[i] i += 1 if self._alpha_lambda_sampling is True: if "alpha_lambda" in self._kwargs_fixed: kwargs["alpha_lambda"] = self._kwargs_fixed["alpha_lambda"] else: kwargs["alpha_lambda"] = args[i] i += 1 if self._beta_lambda_sampling is True: if "beta_lambda" in self._kwargs_fixed: kwargs["beta_lambda"] = self._kwargs_fixed["beta_lambda"] else: kwargs["beta_lambda"] = args[i] i += 1 if self._alpha_gamma_in_sampling is True: if "alpha_gamma_in" in self._kwargs_fixed: kwargs["alpha_gamma_in"] = self._kwargs_fixed["alpha_gamma_in"] else: kwargs["alpha_gamma_in"] = args[i] i += 1 if self._alpha_log_m2l_sampling is True: if "alpha_log_m2l" in self._kwargs_fixed: kwargs["alpha_log_m2l"] = self._kwargs_fixed["alpha_log_m2l"] else: kwargs["alpha_log_m2l"] = 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._lambda_mst_sampling is True: if "lambda_mst" not in self._kwargs_fixed: args.append(kwargs["lambda_mst"]) if self._lambda_mst_distribution == "GAUSSIAN": if "lambda_mst_sigma" not in self._kwargs_fixed: if self._log_scatter is True: args.append(np.log10(kwargs["lambda_mst_sigma"])) else: args.append(kwargs["lambda_mst_sigma"]) if self._lambda_ifu_sampling is True: if "lambda_ifu" not in self._kwargs_fixed: args.append(kwargs["lambda_ifu"]) if self._lambda_ifu_distribution == "GAUSSIAN": if "lambda_ifu_sigma" not in self._kwargs_fixed: if self._log_scatter is True: args.append(np.log10(kwargs["lambda_ifu_sigma"])) else: args.append(kwargs["lambda_ifu_sigma"]) if self._gamma_in_sampling is True: if "gamma_in" not in self._kwargs_fixed: args.append(kwargs["gamma_in"]) if self._gamma_in_distribution == "GAUSSIAN": if "gamma_in_sigma" not in self._kwargs_fixed: if self._log_scatter is True: args.append(np.log10(kwargs["gamma_in_sigma"])) else: args.append(kwargs["gamma_in_sigma"]) if self._log_m2l_sampling is True: if "log_m2l" not in self._kwargs_fixed: args.append(kwargs["log_m2l"]) if self._log_m2l_distribution == "GAUSSIAN": if "log_m2l_sigma" not in self._kwargs_fixed: if self._log_scatter is True: args.append(np.log10(kwargs["log_m2l_sigma"])) else: args.append(kwargs["log_m2l_sigma"]) if self._kappa_ext_sampling is True: if "kappa_ext" not in self._kwargs_fixed: args.append(kwargs["kappa_ext"]) if self._kappa_ext_distribution == "GAUSSIAN": if "kappa_ext_sigma" not in self._kwargs_fixed: args.append(kwargs["kappa_ext_sigma"]) if self._alpha_lambda_sampling is True: if "alpha_lambda" not in self._kwargs_fixed: args.append(kwargs["alpha_lambda"]) if self._beta_lambda_sampling is True: if "beta_lambda" not in self._kwargs_fixed: args.append(kwargs["beta_lambda"]) if self._alpha_gamma_in_sampling is True: if "alpha_gamma_in" not in self._kwargs_fixed: args.append(kwargs["alpha_gamma_in"]) if self._alpha_log_m2l_sampling is True: if "alpha_log_m2l" not in self._kwargs_fixed: args.append(kwargs["alpha_log_m2l"]) return args