def test_create_image_model(self):
        imageModel = class_creator.create_image_model(self.kwargs_data, self.kwargs_psf, kwargs_numerics={}, kwargs_model=self.kwargs_model)
        assert imageModel.LensModel.lens_model_list[0] == 'SIS'

        imageModel = class_creator.create_image_model(self.kwargs_data, self.kwargs_psf, kwargs_numerics={},
                                                      kwargs_model={})
        assert imageModel.LensModel.lens_model_list == []
 def psf_iteration(self, fitting_kwargs, lens_input, source_input,
                   lens_light_input, ps_input, cosmo_input):
     #lens_temp = copy.deepcopy(lens_input)
     lens_updated = self._param.update_lens_scaling(cosmo_input, lens_input)
     source_updated = self._param.image2source_plane(
         source_input, lens_updated)
     psf_iter_factor = fitting_kwargs['psf_iter_factor']
     psf_iter_num = fitting_kwargs['psf_iter_num']
     compute_bool = fitting_kwargs.get('compute_bands',
                                       [True] * len(self.multi_band_list))
     kwargs_psf_iter = fitting_kwargs.get('kwargs_psf_iter', {})
     for i in range(len(self.multi_band_list)):
         if compute_bool[i] is True:
             kwargs_data = self.multi_band_list[i][0]
             kwargs_psf = self.multi_band_list[i][1]
             kwargs_numerics = self.multi_band_list[i][2]
             image_model = class_creator.create_image_model(
                 kwargs_data=kwargs_data,
                 kwargs_psf=kwargs_psf,
                 kwargs_numerics=kwargs_numerics,
                 kwargs_model=self.kwargs_model)
             psf_iter = PsfFitting(image_model_class=image_model,
                                   kwargs_psf_iter=kwargs_psf_iter)
             kwargs_psf = psf_iter.update_iterative(kwargs_psf,
                                                    lens_updated,
                                                    source_updated,
                                                    lens_light_input,
                                                    ps_input,
                                                    factor=psf_iter_factor,
                                                    num_iter=psf_iter_num,
                                                    verbose=self._verbose,
                                                    no_break=True)
             self.multi_band_list[i][1] = kwargs_psf
             self.fitting.multi_band_list[i][1] = kwargs_psf
     return 0
示例#3
0
    def __init__(self, kwargs_data, kwargs_psf, kwargs_numerics, kwargs_model, kwargs_lens, kwargs_source,
                 kwargs_lens_light, kwargs_ps, arrow_size=0.02, cmap_string="gist_heat"):
        """

        :param kwargs_options:
        :param kwargs_data:
        :param arrow_size:
        :param cmap_string:
        """
        self._kwargs_data = kwargs_data
        if isinstance(cmap_string, str) or isinstance(cmap_string, unicode):
            cmap = plt.get_cmap(cmap_string)
        else:
            cmap = cmap_string
        cmap.set_bad(color='k', alpha=1.)
        cmap.set_under('k')
        self._cmap = cmap
        self._arrow_size = arrow_size
        data = Data(kwargs_data)
        self._coords = data._coords
        nx, ny = np.shape(kwargs_data['image_data'])
        Mpix2coord = kwargs_data['transform_pix2angle']
        self._Mpix2coord = Mpix2coord

        self._deltaPix = self._coords.pixel_size
        self._frame_size = self._deltaPix * nx

        x_grid, y_grid = data.coordinates
        self._x_grid = util.image2array(x_grid)
        self._y_grid = util.image2array(y_grid)

        self._imageModel = class_creator.create_image_model(kwargs_data, kwargs_psf, kwargs_numerics, kwargs_model)
        self._analysis = LensAnalysis(kwargs_model)
        self._lensModel = LensModel(lens_model_list=kwargs_model.get('lens_model_list', []),
                                 z_source=kwargs_model.get('z_source', None),
                                 redshift_list=kwargs_model.get('redshift_list', None),
                                 multi_plane=kwargs_model.get('multi_plane', False))
        self._lensModelExt = LensModelExtensions(self._lensModel)
        model, error_map, cov_param, param = self._imageModel.image_linear_solve(kwargs_lens, kwargs_source,
                                                                                 kwargs_lens_light, kwargs_ps, inv_bool=True)
        self._kwargs_lens = kwargs_lens
        self._kwargs_source = kwargs_source
        self._kwargs_lens_light = kwargs_lens_light
        self._kwargs_else = kwargs_ps
        self._model = model
        self._data = kwargs_data['image_data']
        self._cov_param = cov_param
        self._norm_residuals = self._imageModel.reduced_residuals(model, error_map=error_map)
        self._reduced_x2 = self._imageModel.reduced_chi2(model, error_map=error_map)
        log_model = np.log10(model)
        log_model[np.isnan(log_model)] = -5
        self._v_min_default = max(np.min(log_model), -5)
        self._v_max_default = min(np.max(log_model), 10)
        print("reduced chi^2 = ", self._reduced_x2)
示例#4
0
def savedeconvolvefits(lensRESI,lensRESR,lensRESG):
    lens_light_resultI=np.load(lensRESI)

    imageModelI = class_creator.create_image_model(kwargs_data, kwargs_psfI, kwargs_numerics, **kwargs_model)
    modelI = imageModelI.image([],[],lens_light_resultI,
                                   [], unconvolved=True, source_add=False,
                                   lens_light_add=True, point_source_add=False)
    pyfits.writeto('E:\\lenslightinfos\\deconvolvesersic\\'+lensRESI[18:-4]+'.fits',modelI,overwrite=True)

    lens_light_resultR = np.load(lensRESR)
    imageModelR = class_creator.create_image_model(kwargs_data, kwargs_psfR, kwargs_numerics, **kwargs_model)
    modelR = imageModelR.image([], [], lens_light_resultR,
                               [], unconvolved=True, source_add=False,
                               lens_light_add=True, point_source_add=False)
    pyfits.writeto('E:\\lenslightinfos\\deconvolvesersic\\'+lensRESR[18:-4]+'.fits', modelR,overwrite=True)

    lens_light_resultG = np.load(lensRESG)
    imageModelG = class_creator.create_image_model(kwargs_data, kwargs_psfG, kwargs_numerics, **kwargs_model)
    modelG = imageModelG.image([], [], lens_light_resultG,
                               [], unconvolved=True, source_add=False,
                               lens_light_add=True, point_source_add=False)
    pyfits.writeto('E:\\lenslightinfos\\deconvolvesersic\\'+lensRESG[18:-4]+'.fits', modelG,overwrite=True)
示例#5
0
 def _likelihood(self, args):
     """
     routine to compute X2 given variable parameters for a MCMC/PSO chainF
     """
     #generate image and computes likelihood
     kwargs_data = self.update_data(args)
     imageModel = class_creator.create_image_model(kwargs_data,
                                                   self._kwargs_psf,
                                                   self._kwargs_numerics,
                                                   **self._kwargs_model)
     logL = imageModel.likelihood_data_given_model(
         self._kwargs_lens,
         self._kwargs_source,
         self._kwargs_lens_light,
         self._kwargs_else,
         source_marg=self._source_marg)
     return logL, None
示例#6
0
    def psf_iteration(self,
                      num_iter=10,
                      no_break=True,
                      stacking_method='median',
                      block_center_neighbour=0,
                      keep_psf_error_map=True,
                      psf_symmetry=1,
                      psf_iter_factor=1,
                      verbose=True,
                      compute_bands=None):
        """
        iterative PSF reconstruction

        :param num_iter: number of iterations in the process
        :param no_break: bool, if False will break the process as soon as one step lead to a wors reconstruction then the previous step
        :param stacking_method: string, 'median' and 'mean' supported
        :param block_center_neighbour: radius of neighbouring point source to be blocked in the reconstruction
        :param keep_psf_error_map: bool, whether or not to keep the previous psf_error_map
        :param psf_symmetry: int, number of invariant rotations in the reconstructed PSF
        :param psf_iter_factor: factor of new estimated PSF relative to the old one PSF_updated = (1-psf_iter_factor) * PSF_old + psf_iter_factor*PSF_new
        :param verbose: bool, print statements
        :param compute_bands: bool list, if multiple bands, this process can be limited to a subset of bands
        :return: 0, updated PSF is stored in self.mult_iband_list
        """
        #lens_temp = copy.deepcopy(lens_input)
        kwargs_model = self._updateManager.kwargs_model
        param_class = self._param_class
        lens_updated = param_class.update_lens_scaling(self._cosmo_temp,
                                                       self._lens_temp)
        source_updated = param_class.image2source_plane(
            self._source_temp, lens_updated)
        if compute_bands is None:
            compute_bands = [True] * len(self.multi_band_list)

        for i in range(len(self.multi_band_list)):
            if compute_bands[i] is True:
                kwargs_data = self.multi_band_list[i][0]
                kwargs_psf = self.multi_band_list[i][1]
                kwargs_numerics = self.multi_band_list[i][2]
                image_model = class_creator.create_image_model(
                    kwargs_data=kwargs_data,
                    kwargs_psf=kwargs_psf,
                    kwargs_numerics=kwargs_numerics,
                    **kwargs_model)
                psf_iter = PsfFitting(image_model_class=image_model)
                kwargs_psf = psf_iter.update_iterative(
                    kwargs_psf,
                    lens_updated,
                    source_updated,
                    self._lens_light_temp,
                    self._ps_temp,
                    num_iter=num_iter,
                    no_break=no_break,
                    stacking_method=stacking_method,
                    block_center_neighbour=block_center_neighbour,
                    keep_psf_error_map=keep_psf_error_map,
                    psf_symmetry=psf_symmetry,
                    psf_iter_factor=psf_iter_factor,
                    verbose=verbose)
                self.multi_band_list[i][1] = kwargs_psf
        return 0