Source code for lenstronomy.Workflow.multi_band_manager

__author__ = "sibirrer"

from lenstronomy.Workflow.update_manager import UpdateManager
import copy

__all__ = ["MultiBandUpdateManager"]


[docs] class MultiBandUpdateManager(UpdateManager): """Specific Manager to deal with multiple images with disjoint lens model parameterization. The class inherits the UpdateManager() class and adds functionalities to hold and relieve fixed all lens model parameters of a specific frame/image for more convenient use of the FittingSequence. """
[docs] def __init__( self, kwargs_model, kwargs_constraints, kwargs_likelihood, kwargs_params, num_bands=0, ): """ :param kwargs_model: keyword arguments to describe all model components used in class_creator.create_class_instances() :param kwargs_constraints: keyword arguments of the Param() class to handle parameter constraints during the sampling (except upper and lower limits and sampling input mean and width) :param kwargs_likelihood: keyword arguments of the Likelihood() class to handle parameters and settings of the likelihood :param kwargs_params: setting of the sampling bounds and initial guess mean and spread. The argument is organized as: 'lens_model': [kwargs_init, kwargs_sigma, kwargs_fixed, kwargs_lower, kwargs_upper] 'source_model': [kwargs_init, kwargs_sigma, kwargs_fixed, kwargs_lower, kwargs_upper] 'lens_light_model': [kwargs_init, kwargs_sigma, kwargs_fixed, kwargs_lower, kwargs_upper] 'point_source_model': [kwargs_init, kwargs_sigma, kwargs_fixed, kwargs_lower, kwargs_upper] 'extinction_model': [kwargs_init, kwargs_sigma, kwargs_fixed, kwargs_lower, kwargs_upper] 'special': [kwargs_init, kwargs_sigma, kwargs_fixed, kwargs_lower, kwargs_upper] :param num_bands: integer, number of image bands """ super(MultiBandUpdateManager, self).__init__( kwargs_model, kwargs_constraints, kwargs_likelihood, kwargs_params ) kwargs_lens_fixed_init, _, _, _, _, _, _ = self.fixed_kwargs self._kwargs_lens_fixed_init = copy.deepcopy(kwargs_lens_fixed_init) self._index_lens_model_list = kwargs_model.get( "index_lens_model_list", [None for i in range(num_bands)] ) self._index_source_list = kwargs_model.get( "index_source_light_model_list", [None for i in range(num_bands)] ) self._index_lens_light_list = kwargs_model.get( "index_lens_light_model_list", [None for i in range(num_bands)] ) self._num_bands = num_bands
[docs] def keep_frame_fixed(self, frame_list_fixed): """ :param frame_list_fixed: list of indexes of frames whose lens models to be fixed :return: updated fixed lens model parameter in the FittingSequence() """ for j in frame_list_fixed: if self._index_lens_model_list[j] is not None: for i in self._index_lens_model_list[j]: self._lens_fixed[i] = self._kwargs_temp["kwargs_lens"][i]
[docs] def undo_frame_fixed(self, frame_list): """ :param frame_list: list of frame indexes to be set back to the parameters being fixed in the initial fix parameters in the class creation :return: updated fixed lens model parameter in the FittingSequence() """ for j in frame_list: if self._index_lens_model_list[j] is not None: for i in self._index_lens_model_list[j]: self._lens_fixed[i] = copy.deepcopy(self._kwargs_lens_fixed_init[i])
[docs] def fix_not_computed(self, free_bands): """Fix all the lens models that are part of a imaging band that is not set to be computed. Free those that are modeled. #TODO check for overlapping models for more automated fixing of parameters. :param free_bands: boolean list of length of the imaging bands, True indicates that the lens model is being fitted for :return: None """ undo_frame_list = [] fix_frame_list = [] for i in range(len(free_bands)): if free_bands[i] is True: undo_frame_list.append(i) else: fix_frame_list.append(i) self.undo_frame_fixed(undo_frame_list) self.keep_frame_fixed(fix_frame_list)