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', kappa_ext_sampling=False, kappa_ext_distribution='NONE', lambda_ifu_sampling=False, lambda_ifu_distribution='NONE', alpha_lambda_sampling=False, beta_lambda_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 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 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 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 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._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._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._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') 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._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 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._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']) return args