예제 #1
0
    def __init__(self,
                 multi_band_list,
                 kwargs_model,
                 kwargs_params,
                 arrow_size=0.02,
                 cmap_string="gist_heat",
                 likelihood_mask_list=None,
                 bands_compute=None,
                 multi_band_type='multi-linear',
                 source_marg=False,
                 linear_prior=None):
        """

        :param multi_band_list:
        :param kwargs_model:
        :param kwargs_params:
        :param arrow_size:
        :param cmap_string:
        :param likelihood_mask_list:
        :param bands_compute:
        :param multi_band_type:
        :param source_marg:
        :param linear_prior:
        """
        if bands_compute is None:
            bands_compute = [True] * len(multi_band_list)
        if multi_band_type == 'single-band':
            multi_band_type = 'multi-linear'  # this makes sure that the linear inversion outputs are coming in a list
        self._imageModel = class_creator.create_im_sim(
            multi_band_list,
            multi_band_type,
            kwargs_model,
            bands_compute=bands_compute,
            likelihood_mask_list=likelihood_mask_list)

        model, error_map, cov_param, param = self._imageModel.image_linear_solve(
            inv_bool=True, **kwargs_params)
        check_solver_error(param)
        logL = self._imageModel.likelihood_data_given_model(
            source_marg=source_marg,
            linear_prior=linear_prior,
            **kwargs_params)

        n_data = self._imageModel.num_data_evaluate
        if n_data > 0:
            print(logL * 2 / n_data,
                  'reduced X^2 of all evaluated imaging data combined.')

        self._band_plot_list = []
        self._index_list = []
        index = 0
        for i in range(len(multi_band_list)):
            if bands_compute[i] is True:
                if multi_band_type == 'joint-linear':
                    param_i = param
                    cov_param_i = cov_param
                else:
                    param_i = param[index]
                    cov_param_i = cov_param[index]

                bandplot = ModelBandPlot(
                    multi_band_list,
                    kwargs_model,
                    model[index],
                    error_map[index],
                    cov_param_i,
                    param_i,
                    copy.deepcopy(kwargs_params),
                    likelihood_mask_list=likelihood_mask_list,
                    band_index=i,
                    arrow_size=arrow_size,
                    cmap_string=cmap_string)
                self._band_plot_list.append(bandplot)
                self._index_list.append(index)
            else:
                self._index_list.append(-1)
            index += 1
예제 #2
0
    def __init__(self, multi_band_list, kwargs_model, kwargs_params, image_likelihood_mask_list=None,
                 bands_compute=None, multi_band_type='multi-linear', source_marg=False, linear_prior=None,
                 arrow_size=0.02, cmap_string="gist_heat", fast_caustic=True):
        """

        :param multi_band_list: list of [[kwargs_data, kwargs_psf, kwargs_numerics], [], ..]
        :param multi_band_type: string, option when having multiple imaging data sets modelled simultaneously.
         Options are:
         - 'multi-linear': linear amplitudes are inferred on single data set
         - 'linear-joint': linear amplitudes ae jointly inferred
         - 'single-band': single band
        :param kwargs_model: model keyword arguments
        :param bands_compute: (optional), bool list to indicate which band to be included in the modeling
        :param image_likelihood_mask_list: list of image likelihood mask
         (same size as image_data with 1 indicating being evaluated and 0 being left out)
        :param kwargs_params: keyword arguments of 'kwargs_lens', 'kwargs_source' etc as coming as kwargs_result from
         FittingSequence class
        :param source_marg:
        :param linear_prior:
        :param arrow_size:
        :param cmap_string:
        :param fast_caustic: boolean; if True, uses fast (but less accurate) caustic calculation method
        """
        if bands_compute is None:
            bands_compute = [True] * len(multi_band_list)
        if multi_band_type == 'single-band':
            multi_band_type = 'multi-linear'  # this makes sure that the linear inversion outputs are coming in a list
        self._imageModel = class_creator.create_im_sim(multi_band_list, multi_band_type, kwargs_model,
                                                       bands_compute=bands_compute,
                                                       image_likelihood_mask_list=image_likelihood_mask_list)

        model, error_map, cov_param, param = self._imageModel.image_linear_solve(inv_bool=True, **kwargs_params)

        check_solver_error(param)
        log_l = self._imageModel.likelihood_data_given_model(source_marg=source_marg, linear_prior=linear_prior,
                                                             **kwargs_params)

        n_data = self._imageModel.num_data_evaluate
        if n_data > 0:
            print(log_l * 2 / n_data, 'reduced X^2 of all evaluated imaging data combined.')

        self._band_plot_list = []
        self._index_list = []
        index = 0
        for i in range(len(multi_band_list)):
            if bands_compute[i] is True:
                if multi_band_type == 'joint-linear':
                    param_i = param
                    cov_param_i = cov_param
                else:
                    param_i = param[index]
                    cov_param_i = cov_param[index]

                bandplot = ModelBandPlot(multi_band_list, kwargs_model, model[index], error_map[index], cov_param_i,
                                         param_i, copy.deepcopy(kwargs_params),
                                         likelihood_mask_list=image_likelihood_mask_list, band_index=i,
                                         arrow_size=arrow_size, cmap_string=cmap_string, fast_caustic=fast_caustic)

                self._band_plot_list.append(bandplot)
                self._index_list.append(index)
            else:
                self._index_list.append(-1)
            index += 1