def __init__(
            self,
            dataset,
            hyper_result=None,
            cosmology=cosmo.Planck15,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
            preloads=pload.Preloads(),
    ):

        super().__init__(hyper_result=hyper_result, cosmology=cosmology)

        self.dataset = dataset

        if self.hyper_result is not None:

            if hyper_result.search is not None:
                hyper_result.search.paths = None

            self.set_hyper_dataset(result=self.hyper_result)

        else:

            self.hyper_galaxy_image_path_dict = None
            self.hyper_model_image = None

        self.settings_pixelization = settings_pixelization
        self.settings_inversion = settings_inversion
        self.preloads = preloads
Beispiel #2
0
    def inversion_imaging_from_grid_and_data(
            self,
            grid,
            image,
            noise_map,
            convolver,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
            preloads=pload.Preloads(),
    ):

        if preloads.mapper is None:

            mappers_of_planes = self.mappers_of_planes_from_grid(
                grid=grid,
                settings_pixelization=settings_pixelization,
                preloads=preloads,
            )

        else:

            mappers_of_planes = [preloads.mapper]

        return inv.InversionImagingMatrix.from_data_mapper_and_regularization(
            image=image,
            noise_map=noise_map,
            convolver=convolver,
            mapper=mappers_of_planes[-1],
            regularization=self.regularizations_of_planes[-1],
            settings=settings_inversion,
            preloads=preloads,
        )
Beispiel #3
0
    def traced_sparse_grids_of_planes_from_grid(
            self,
            grid,
            settings_pixelization=pix.SettingsPixelization(),
            preloads=pload.Preloads(),
    ):

        if (preloads.sparse_grids_of_planes is None
                or settings_pixelization.is_stochastic):

            sparse_image_plane_grids_of_planes = self.sparse_image_plane_grids_of_planes_from_grid(
                grid=grid, pixelization_setting=settings_pixelization)

        else:

            sparse_image_plane_grids_of_planes = preloads.sparse_grids_of_planes

        traced_sparse_grids_of_planes = []

        for (plane_index, plane) in enumerate(self.planes):

            if sparse_image_plane_grids_of_planes[plane_index] is None:
                traced_sparse_grids_of_planes.append(None)
            else:
                traced_sparse_grids = self.traced_grids_of_planes_from_grid(
                    grid=sparse_image_plane_grids_of_planes[plane_index])
                traced_sparse_grids_of_planes.append(
                    traced_sparse_grids[plane_index])

        if len(sparse_image_plane_grids_of_planes) > 1:
            return traced_sparse_grids_of_planes, sparse_image_plane_grids_of_planes[
                1]
        else:
            return traced_sparse_grids_of_planes, sparse_image_plane_grids_of_planes[
                0]
    def inversion_interferometer_from_grid_and_data(
            self,
            grid,
            visibilities,
            noise_map,
            transformer,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
    ):

        sparse_grid = self.sparse_image_plane_grid_from_grid(grid=grid)

        mapper = self.mapper_from_grid_and_sparse_grid(
            grid=grid,
            sparse_grid=sparse_grid,
            settings_pixelization=settings_pixelization,
        )

        return inv.AbstractInversionInterferometer.from_data_mapper_and_regularization(
            visibilities=visibilities,
            noise_map=noise_map,
            transformer=transformer,
            mapper=mapper,
            regularization=self.regularization,
            settings=settings_inversion,
        )
Beispiel #5
0
    def mappers_of_planes_from_grid(
            self,
            grid,
            settings_pixelization=pix.SettingsPixelization(),
            preloads=pload.Preloads(),
    ):

        mappers_of_planes = []

        traced_grids_of_planes = self.traced_grids_of_planes_from_grid(
            grid=grid)

        traced_sparse_grids_of_planes, sparse_image_plane_grid = self.traced_sparse_grids_of_planes_from_grid(
            grid=grid,
            settings_pixelization=settings_pixelization,
            preloads=preloads)

        for (plane_index, plane) in enumerate(self.planes):

            if not plane.has_pixelization:
                mappers_of_planes.append(None)
            else:
                mapper = plane.mapper_from_grid_and_sparse_grid(
                    grid=traced_grids_of_planes[plane_index],
                    sparse_grid=traced_sparse_grids_of_planes[plane_index],
                    sparse_image_plane_grid=sparse_image_plane_grid,
                    settings_pixelization=settings_pixelization,
                )
                mappers_of_planes.append(mapper)

        return mappers_of_planes
    def inversion_imaging_from_grid_and_data(
            self,
            grid,
            image,
            noise_map,
            convolver,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
    ):

        sparse_grid = self.sparse_image_plane_grid_from_grid(grid=grid)

        mapper = self.mapper_from_grid_and_sparse_grid(
            grid=grid,
            sparse_grid=sparse_grid,
            settings_pixelization=settings_pixelization,
        )

        return inv.InversionImagingMatrix.from_data_mapper_and_regularization(
            image=image,
            noise_map=noise_map,
            convolver=convolver,
            mapper=mapper,
            regularization=self.regularization,
            settings=settings_inversion,
        )
    def mapper_from_grid_and_sparse_grid(
            self,
            grid,
            sparse_grid,
            sparse_image_plane_grid=None,
            settings_pixelization=pix.SettingsPixelization(),
    ):

        galaxies_with_pixelization = list(
            filter(lambda galaxy: galaxy.pixelization is not None,
                   self.galaxies))

        if len(galaxies_with_pixelization) == 0:
            return None
        if len(galaxies_with_pixelization) == 1:

            pixelization = galaxies_with_pixelization[0].pixelization

            return pixelization.mapper_from_grid_and_sparse_grid(
                grid=grid,
                sparse_grid=sparse_grid,
                sparse_image_plane_grid=sparse_image_plane_grid,
                hyper_image=galaxies_with_pixelization[0].hyper_galaxy_image,
                settings=settings_pixelization,
            )

        elif len(galaxies_with_pixelization) > 1:
            raise exc.PixelizationException(
                "The number of galaxies with pixelizations in one plane is above 1"
            )
Beispiel #8
0
    def traced_sparse_grids_of_planes_from_grid(
        self, grid, settings_pixelization=pix.SettingsPixelization()
    ):

        if (
            settings_pixelization.preload_sparse_grids_of_planes is None
            or settings_pixelization.is_stochastic
        ):

            sparse_image_plane_grids_of_planes = self.sparse_image_plane_grids_of_planes_from_grid(
                grid=grid, pixelization_setting=settings_pixelization
            )

        else:

            sparse_image_plane_grids_of_planes = (
                settings_pixelization.preload_sparse_grids_of_planes
            )

        traced_sparse_grids_of_planes = []

        for (plane_index, plane) in enumerate(self.planes):

            if sparse_image_plane_grids_of_planes[plane_index] is None:
                traced_sparse_grids_of_planes.append(None)
            else:
                traced_sparse_grids = self.traced_grids_of_planes_from_grid(
                    grid=sparse_image_plane_grids_of_planes[plane_index]
                )
                traced_sparse_grids_of_planes.append(traced_sparse_grids[plane_index])

        return traced_sparse_grids_of_planes
    def __init__(
            self,
            dataset,
            hyper_result=None,
            cosmology=cosmo.Planck15,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
            preloads=pload.Preloads(),
    ):

        super().__init__(
            dataset=dataset,
            hyper_result=hyper_result,
            cosmology=cosmology,
            settings_pixelization=settings_pixelization,
            settings_inversion=settings_inversion,
            preloads=preloads,
        )

        if self.hyper_result is not None:

            self.set_hyper_dataset(result=self.hyper_result)

        else:

            self.hyper_galaxy_visibilities_path_dict = None
            self.hyper_model_visibilities = None
Beispiel #10
0
    def sparse_image_plane_grids_of_planes_from_grid(
        self, grid, pixelization_setting=pix.SettingsPixelization()):

        sparse_image_plane_grids_of_planes = []

        for plane in self.planes:
            sparse_image_plane_grid = plane.sparse_image_plane_grid_from_grid(
                grid=grid, settings_pixelization=pixelization_setting)
            sparse_image_plane_grids_of_planes.append(sparse_image_plane_grid)

        return sparse_image_plane_grids_of_planes
    def sparse_image_plane_grid_from_grid(
        self, grid, settings_pixelization=pix.SettingsPixelization()):

        if not self.has_pixelization:
            return None

        hyper_galaxy_image = self.hyper_galaxy_image_of_galaxy_with_pixelization

        return self.pixelization.sparse_grid_from_grid(
            grid=grid,
            hyper_image=hyper_galaxy_image,
            settings=settings_pixelization)
Beispiel #12
0
    def __init__(
        self,
        settings_masked_imaging=imaging.SettingsMaskedImaging(),
        settings_pixelization=pix.SettingsPixelization(use_border=True),
        settings_inversion=inv.SettingsInversion(),
        settings_lens=SettingsLens(),
        log_likelihood_cap=None,
    ):

        super().__init__(
            settings_masked_imaging=settings_masked_imaging,
            settings_pixelization=settings_pixelization,
            settings_inversion=settings_inversion,
            log_likelihood_cap=log_likelihood_cap,
        )

        self.settings_lens = settings_lens
Beispiel #13
0
    def __init__(
        self,
        masked_interferometer=interferometer.SettingsMaskedInterferometer(),
        settings_pixelization=pix.SettingsPixelization(use_border=True),
        settings_inversion=inv.SettingsInversion(),
        settings_lens=SettingsLens(),
        log_likelihood_cap=None,
    ):

        super().__init__(
            masked_interferometer=masked_interferometer,
            settings_pixelization=settings_pixelization,
            settings_inversion=settings_inversion,
            log_likelihood_cap=log_likelihood_cap,
        )

        self.settings_lens = settings_lens
Beispiel #14
0
    def __init__(
            self,
            dataset,
            positions: grid_2d_irregular.Grid2DIrregular = None,
            hyper_result=None,
            cosmology=cosmo.Planck15,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
            settings_lens=settings.SettingsLens(),
            preloads=pload.Preloads(),
    ):
        """

        Parameters
        ----------
        dataset
        positions : grid_2d_irregular.Grid2DIrregular
            Image-pixel coordinates in arc-seconds of bright regions of the lensed source that will map close to one
            another in the source-plane(s) for an accurate mass model, which can be used to discard unphysical mass
            models during model-fitting.
        cosmology
        settings_pixelization
        settings_inversion
        settings_lens
        preloads
        """

        super().__init__(
            dataset=dataset,
            hyper_result=hyper_result,
            cosmology=cosmology,
            settings_pixelization=settings_pixelization,
            settings_inversion=settings_inversion,
            preloads=preloads,
        )

        AnalysisLensing.__init__(self=self,
                                 settings_lens=settings_lens,
                                 cosmology=cosmology)

        self.positions = positions

        self.settings_lens = settings_lens
    def __init__(
            self,
            dataset,
            hyper_result=None,
            cosmology=cosmo.Planck15,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
            preloads=pload.Preloads(),
    ):

        super().__init__(
            dataset=dataset,
            hyper_result=hyper_result,
            cosmology=cosmology,
            settings_pixelization=settings_pixelization,
            settings_inversion=settings_inversion,
            preloads=preloads,
        )

        self.dataset = dataset
Beispiel #16
0
    def inversion_imaging_from_grid_and_data(
            self,
            grid,
            image,
            noise_map,
            convolver,
            settings_pixelization=pix.SettingsPixelization(),
            settings_inversion=inv.SettingsInversion(),
    ):

        mappers_of_planes = self.mappers_of_planes_from_grid(
            grid=grid, settings_pixelization=settings_pixelization)

        return inv.InversionImagingMatrix.from_data_mapper_and_regularization(
            image=image,
            noise_map=noise_map,
            convolver=convolver,
            mapper=mappers_of_planes[-1],
            regularization=self.regularizations_of_planes[-1],
            settings=settings_inversion,
        )
Beispiel #17
0
    def inversion_interferometer_from_grid_and_data(
        self,
        grid,
        visibilities,
        noise_map,
        transformer,
        settings_pixelization=pix.SettingsPixelization(),
        settings_inversion=inv.SettingsInversion(),
        preloads=pload.Preloads(),
    ):
        mappers_of_planes = self.mappers_of_planes_from_grid(
            grid=grid, settings_pixelization=settings_pixelization, preloads=preloads
        )

        return inv.AbstractInversionInterferometer.from_data_mapper_and_regularization(
            visibilities=visibilities,
            noise_map=noise_map,
            transformer=transformer,
            mapper=mappers_of_planes[-1],
            regularization=self.regularizations_of_planes[-1],
            settings=settings_inversion,
        )
Beispiel #18
0
    def __init__(
        self,
        masked_interferometer,
        tracer,
        hyper_background_noise=None,
        use_hyper_scaling=True,
        settings_pixelization=pix.SettingsPixelization(),
        settings_inversion=inv.SettingsInversion(),
    ):
        """ An  lens fitter, which contains the tracer's used to perform the fit and functions to manipulate \
        the lens dataset's hyper_galaxies.

        Parameters
        -----------
        tracer : ray_tracing.Tracer
            The tracer, which describes the ray-tracing and strong lens configuration.
        scaled_array_2d_from_array_1d : func
            A function which maps the 1D lens hyper_galaxies to its unmasked 2D arrays.
        """

        if use_hyper_scaling:

            if hyper_background_noise is not None:
                noise_map = hyper_background_noise.hyper_noise_map_from_complex_noise_map(
                    noise_map=masked_interferometer.noise_map
                )
            else:
                noise_map = masked_interferometer.noise_map

            if hyper_background_noise is not None:

                masked_interferometer = masked_interferometer.modify_noise_map(
                    noise_map=noise_map
                )

        else:

            noise_map = masked_interferometer.noise_map

        self.tracer = tracer

        self.profile_visibilities = tracer.profile_visibilities_from_grid_and_transformer(
            grid=masked_interferometer.grid,
            transformer=masked_interferometer.transformer,
        )

        self.profile_subtracted_visibilities = (
            masked_interferometer.visibilities - self.profile_visibilities
        )

        if not tracer.has_pixelization:

            inversion = None
            model_visibilities = self.profile_visibilities

        else:

            inversion = tracer.inversion_interferometer_from_grid_and_data(
                grid=masked_interferometer.grid_inversion,
                visibilities=self.profile_subtracted_visibilities,
                noise_map=noise_map,
                transformer=masked_interferometer.transformer,
                settings_pixelization=settings_pixelization,
                settings_inversion=settings_inversion,
            )

            model_visibilities = (
                self.profile_visibilities + inversion.mapped_reconstructed_visibilities
            )

        super().__init__(
            masked_interferometer=masked_interferometer,
            model_visibilities=model_visibilities,
            inversion=inversion,
            use_mask_in_fit=False,
        )
Beispiel #19
0
    def __init__(
        self,
        masked_imaging,
        tracer,
        hyper_image_sky=None,
        hyper_background_noise=None,
        use_hyper_scaling=True,
        settings_pixelization=pix.SettingsPixelization(),
        settings_inversion=inv.SettingsInversion(),
    ):
        """ An  lens fitter, which contains the tracer's used to perform the fit and functions to manipulate \
        the lens dataset's hyper_galaxies.

        Parameters
        -----------
        tracer : ray_tracing.Tracer
            The tracer, which describes the ray-tracing and strong lens configuration.
        scaled_array_2d_from_array_1d : func
            A function which maps the 1D lens hyper_galaxies to its unmasked 2D arrays.
        """

        self.tracer = tracer

        if use_hyper_scaling:

            image = hyper_image_from_image_and_hyper_image_sky(
                image=masked_imaging.image, hyper_image_sky=hyper_image_sky
            )

            noise_map = hyper_noise_map_from_noise_map_tracer_and_hyper_background_noise(
                noise_map=masked_imaging.noise_map,
                tracer=tracer,
                hyper_background_noise=hyper_background_noise,
            )

            if (
                tracer.has_hyper_galaxy
                or hyper_image_sky is not None
                or hyper_background_noise is not None
            ):

                masked_imaging = masked_imaging.modify_image_and_noise_map(
                    image=image, noise_map=noise_map
                )

        else:

            image = masked_imaging.image
            noise_map = masked_imaging.noise_map

        self.blurred_image = tracer.blurred_image_from_grid_and_convolver(
            grid=masked_imaging.grid,
            convolver=masked_imaging.convolver,
            blurring_grid=masked_imaging.blurring_grid,
        )

        self.profile_subtracted_image = image - self.blurred_image

        if not tracer.has_pixelization:

            inversion = None
            model_image = self.blurred_image

        else:

            inversion = tracer.inversion_imaging_from_grid_and_data(
                grid=masked_imaging.grid_inversion,
                image=self.profile_subtracted_image,
                noise_map=noise_map,
                convolver=masked_imaging.convolver,
                settings_pixelization=settings_pixelization,
                settings_inversion=settings_inversion,
            )

            model_image = self.blurred_image + inversion.mapped_reconstructed_image

        super().__init__(
            masked_imaging=masked_imaging,
            model_image=model_image,
            inversion=inversion,
            use_mask_in_fit=False,
        )