示例#1
0
    def test__fit_figure_of_merit__matches_correct_fit_given_galaxy_profiles(
            self, interferometer_7, mask_7x7, visibilities_mask_7x2):
        lens_galaxy = al.Galaxy(redshift=0.5,
                                light=al.lp.EllipticalSersic(intensity=0.1))

        phase_interferometer_7 = al.PhaseInterferometer(
            real_space_mask=mask_7x7,
            galaxies=[lens_galaxy],
            cosmology=cosmo.FLRW,
            sub_size=2,
            phase_name="test_phase",
        )

        analysis = phase_interferometer_7.make_analysis(
            dataset=interferometer_7,
            mask=visibilities_mask_7x2,
            results=mock_pipeline.MockResults(),
        )
        instance = phase_interferometer_7.model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.fit(instance=instance)

        real_space_mask = phase_interferometer_7.meta_dataset.mask_with_phase_sub_size_from_mask(
            mask=mask_7x7)
        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7x2,
            real_space_mask=real_space_mask,
        )
        tracer = analysis.tracer_for_instance(instance=instance)

        fit = al.FitInterferometer(masked_interferometer=masked_interferometer,
                                   tracer=tracer)

        assert fit.likelihood == fit_figure_of_merit
示例#2
0
    def test__masked_dataset_via_autoarray(
        self,
        interferometer_7,
        sub_mask_7x7,
        visibilities_mask_7x2,
        visibilities_7x2,
        noise_map_7x2,
    ):

        masked_interferometer_7 = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7x2,
            real_space_mask=sub_mask_7x7,
            settings=al.SettingsMaskedInterferometer(
                transformer_class=al.TransformerDFT),
        )

        assert (masked_interferometer_7.visibilities ==
                interferometer_7.visibilities).all()
        assert (masked_interferometer_7.visibilities == visibilities_7x2).all()

        assert (masked_interferometer_7.noise_map == noise_map_7x2).all()

        assert (masked_interferometer_7.visibilities_mask == np.full(
            fill_value=False, shape=(7, 2))).all()

        assert (masked_interferometer_7.interferometer.uv_wavelengths ==
                interferometer_7.uv_wavelengths).all()
        assert (masked_interferometer_7.interferometer.uv_wavelengths[0, 0] ==
                -55636.4609375)

        assert type(masked_interferometer_7.transformer) == al.TransformerDFT
示例#3
0
def make_masked_interferometer_7(interferometer_7, mask_7x7, visibilities_mask_7x2):
    return al.MaskedInterferometer(
        interferometer=interferometer_7,
        visibilities_mask=visibilities_mask_7x2,
        real_space_mask=mask_7x7,
        settings=al.SettingsMaskedInterferometer(transformer_class=aa.TransformerNUFFT),
    )
示例#4
0
def masked_interferometer_from_agg_obj(agg_obj,
                                       settings_masked_interferometer=None):
    """Compute a *MaskedInterferometer* object from an aggregator's *PhaseOutput* class, which we call an 'agg_obj' to 
    describe that it acts as the aggregator object for one result in the *Aggregator*. This uses the aggregator's 
    generator outputs such that the function can use the *Aggregator*'s map function to to create a 
    *MaskedInterferometer* generator.

    The *MaskedInterferometer* is created following the same method as the PyAutoLens *Phase* classes, including 
    using the *meta_dataset* instance output by the phase to load inputs of the *MaskedInterferometer* 
    (e.g. psf_shape_2d). 

    Parameters
    ----------
    agg_obj : af.PhaseOutput
        A PyAutoFit aggregator's PhaseOutput object containing the generators of the results of PyAutoLens model-fits.
    """

    if settings_masked_interferometer is None:
        settings_masked_interferometer = agg_obj.settings.settings_masked_interferometer

    return al.MaskedInterferometer(
        interferometer=agg_obj.dataset,
        visibilities_mask=agg_obj.mask,
        real_space_mask=agg_obj.phase_attributes.real_space_mask,
        settings=settings_masked_interferometer,
    )
示例#5
0
    def test__different_interferometer_without_mock_objects__customize_constructor_inputs(
            self):
        interferometer = al.Interferometer(
            visibilities=al.Visibilities.ones(shape_1d=(19, )),
            noise_map=al.Visibilities.full(fill_value=2.0, shape_1d=(19, )),
            uv_wavelengths=3.0 * np.ones((19, 2)),
        )

        visibilities_mask = np.full(fill_value=False, shape=(19, ))

        real_space_mask = al.Mask.unmasked(shape_2d=(19, 19),
                                           pixel_scales=1.0,
                                           invert=True,
                                           sub_size=8)
        real_space_mask[9, 9] = False

        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer,
            visibilities_mask=visibilities_mask,
            real_space_mask=real_space_mask,
        )

        assert (masked_interferometer.visibilities.in_1d == np.ones(
            (19, 2))).all()
        assert (masked_interferometer.noise_map.in_1d == 2.0 * np.ones(
            (19, 2))).all()
        assert (masked_interferometer.interferometer.uv_wavelengths == 3.0 *
                np.ones((19, 2))).all()
示例#6
0
def make_masked_interferometer_7():
    return al.MaskedInterferometer(
        interferometer=make_interferometer_7(),
        visibilities_mask=make_visibilities_mask_7(),
        real_space_mask=make_mask_7x7(),
        settings=al.SettingsMaskedInterferometer(
            sub_size=1, transformer_class=al.TransformerNUFFT),
    )
示例#7
0
def make_masked_interferometer_7(interferometer_7, mask_7x7,
                                 visibilities_mask_7x2, sub_grid_7x7,
                                 transformer_7x7_7):
    return al.MaskedInterferometer(
        interferometer=interferometer_7,
        visibilities_mask=visibilities_mask_7x2,
        real_space_mask=mask_7x7,
        transformer_class=aa.TransformerDFT,
    )
示例#8
0
def make_masked_interferometer_7_grid(
    interferometer_7, mask_7x7, visibilities_mask_7x2, sub_grid_7x7, transformer_7x7_7
):
    return al.MaskedInterferometer(
        interferometer=interferometer_7,
        visibilities_mask=visibilities_mask_7x2,
        real_space_mask=mask_7x7,
        settings=al.SettingsMaskedInterferometer(
            grid_class=aa.Grid, sub_size=1, transformer_class=aa.TransformerDFT
        ),
    )
示例#9
0
    def test__modified_noise_map(self, noise_map_7x2, interferometer_7,
                                 sub_mask_7x7, visibilities_mask_7x2):

        masked_interferometer_7 = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7x2,
            real_space_mask=sub_mask_7x7,
        )

        noise_map_7x2[0, 0] = 10.0

        masked_interferometer_7 = masked_interferometer_7.modify_noise_map(
            noise_map=noise_map_7x2)

        assert masked_interferometer_7.noise_map[0, 0] == 10.0
    def test__fit_figure_of_merit__includes_hyper_image_and_noise__matches_fit(
        self, interferometer_7, mask_7x7, visibilities_mask_7
    ):
        hyper_background_noise = al.hyper_data.HyperBackgroundNoise(noise_scale=1.0)

        lens_galaxy = al.Galaxy(
            redshift=0.5, light=al.lp.EllipticalSersic(intensity=0.1)
        )

        phase_interferometer_7 = al.PhaseInterferometer(
            galaxies=dict(lens=lens_galaxy),
            hyper_background_noise=hyper_background_noise,
            settings=al.SettingsPhaseInterferometer(
                settings_masked_interferometer=al.SettingsMaskedInterferometer(
                    sub_size=4
                )
            ),
            search=mock.MockSearch("test_phase"),
            real_space_mask=mask_7x7,
        )

        analysis = phase_interferometer_7.make_analysis(
            dataset=interferometer_7,
            mask=visibilities_mask_7,
            results=mock.MockResults(),
        )
        instance = phase_interferometer_7.model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.log_likelihood_function(instance=instance)

        assert analysis.masked_interferometer.real_space_mask.sub_size == 4

        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7,
            real_space_mask=mask_7x7,
            settings=al.SettingsMaskedInterferometer(sub_size=4),
        )
        tracer = analysis.tracer_for_instance(instance=instance)
        fit = FitInterferometer(
            masked_interferometer=masked_interferometer,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
        )

        assert fit.log_likelihood == fit_figure_of_merit
示例#11
0
    def test__fit_figure_of_merit__includes_hyper_image_and_noise__matches_fit(
            self, interferometer_7, mask_7x7, visibilities_mask_7x2):
        hyper_background_noise = al.hyper_data.HyperBackgroundNoise(
            noise_scale=1.0)

        lens_galaxy = al.Galaxy(redshift=0.5,
                                light=al.lp.EllipticalSersic(intensity=0.1))

        phase_interferometer_7 = al.PhaseInterferometer(
            real_space_mask=mask_7x7,
            galaxies=[lens_galaxy],
            hyper_background_noise=hyper_background_noise,
            cosmology=cosmo.FLRW,
            sub_size=4,
            phase_name="test_phase",
        )

        analysis = phase_interferometer_7.make_analysis(
            dataset=interferometer_7,
            mask=visibilities_mask_7x2,
            results=mock_pipeline.MockResults(),
        )
        instance = phase_interferometer_7.model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.fit(instance=instance)

        real_space_mask = phase_interferometer_7.meta_dataset.mask_with_phase_sub_size_from_mask(
            mask=mask_7x7)
        assert real_space_mask.sub_size == 4

        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7x2,
            real_space_mask=real_space_mask,
        )
        tracer = analysis.tracer_for_instance(instance=instance)
        fit = FitInterferometer(
            masked_interferometer=masked_interferometer,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
        )

        assert fit.likelihood == fit_figure_of_merit
示例#12
0
    def test__modified_noise_map(
        self,
        visibilities_noise_map_7,
        interferometer_7,
        sub_mask_7x7,
        visibilities_mask_7,
    ):

        masked_interferometer_7 = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7,
            real_space_mask=sub_mask_7x7,
        )

        visibilities_noise_map_7[0] = 10.0 + 0.0j

        masked_interferometer_7 = masked_interferometer_7.modify_noise_map(
            noise_map=visibilities_noise_map_7
        )

        assert masked_interferometer_7.noise_map[0] == 10.0 + 0.0j
示例#13
0
    def simulate_function(instance):
        """
        Set up the `Tracer` which is used to simulate the strong lens imaging, which may include the subhalo in
        addition to the lens and source galaxy.
        """
        tracer = al.Tracer.from_galaxies(galaxies=[
            instance.galaxies.lens,
            instance.perturbation,
            instance.galaxies.source,
        ])
        """
        Set up the grid, PSF and simulator settings used to simulate imaging of the strong lens. These should be tuned to
        match the S/N and noise properties of the observed data you are performing sensitivity mapping on.
        """
        grid = al.Grid2DIterate.uniform(
            shape_native=real_space_mask.shape_native,
            pixel_scales=real_space_mask.pixel_scales,
            fractional_accuracy=0.9999,
            sub_steps=[2, 4, 8, 16, 24],
        )

        simulator = al.SimulatorInterferometer(
            uv_wavelengths=uv_wavelengths,
            exposure_time=300.0,
            background_sky_level=0.1,
            noise_sigma=0.1,
            transformer_class=al.TransformerNUFFT,
        )

        simulated_interferometer = simulator.from_tracer_and_grid(
            tracer=tracer, grid=grid)
        """
        The data generated by the simulate function is that which is fitted, so we should apply the mask for the analysis 
        here before we return the simulated data.
        """
        return al.MaskedInterferometer(
            interferometer=simulated_interferometer,
            visibilities_mask=visibilities_mask,
            real_space_mask=real_space_mask,
        )
    def test__fit_figure_of_merit__matches_correct_fit_given_galaxy_profiles(
        self, interferometer_7, mask_7x7, visibilities_mask_7
    ):
        lens_galaxy = al.Galaxy(
            redshift=0.5, light=al.lp.EllipticalSersic(intensity=0.1)
        )

        phase_interferometer_7 = al.PhaseInterferometer(
            galaxies=dict(lens=lens_galaxy),
            cosmology=cosmo.FLRW,
            settings=al.SettingsPhaseInterferometer(
                settings_masked_interferometer=al.SettingsMaskedInterferometer(
                    sub_size=2
                )
            ),
            search=mock.MockSearch("test_phase"),
            real_space_mask=mask_7x7,
        )

        analysis = phase_interferometer_7.make_analysis(
            dataset=interferometer_7,
            mask=visibilities_mask_7,
            results=mock.MockResults(),
        )
        instance = phase_interferometer_7.model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.log_likelihood_function(instance=instance)

        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7,
            real_space_mask=mask_7x7,
            settings=al.SettingsMaskedInterferometer(sub_size=2),
        )
        tracer = analysis.tracer_for_instance(instance=instance)

        fit = al.FitInterferometer(
            masked_interferometer=masked_interferometer, tracer=tracer
        )

        assert fit.log_likelihood == fit_figure_of_merit
示例#15
0
    def test__inheritance_via_autoarray(
        self,
        interferometer_7,
        sub_mask_7x7,
        visibilities_mask_7x2,
        grid_7x7,
        sub_grid_7x7,
    ):

        masked_interferometer_7 = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7x2,
            real_space_mask=sub_mask_7x7,
            settings=al.SettingsMaskedInterferometer(grid_class=al.Grid),
        )

        assert (masked_interferometer_7.grid.in_1d_binned == grid_7x7).all()
        assert (masked_interferometer_7.grid == sub_grid_7x7).all()

        grid = al.Grid.from_mask(mask=sub_mask_7x7)

        assert (masked_interferometer_7.grid == grid).all()
示例#16
0
        visibilities=al.Visibilities.manual_1d(np.add(visibilities,
                                                      noise_map)),
        noise_map=al.Visibilities.manual_1d(noise_map),
        uv_wavelengths=al.Visibilities.manual_1d(uv_wavelengths))

    # plt.figure()
    # plt.plot(
    #     interferometer.visibilities[:, 0],
    #     interferometer.visibilities[:, 1],
    #     linestyle="None",
    #     marker="o",
    #     markersize=5,
    #     color="black"
    # )
    # plt.show()

    func_0(
        masked_interferometer=al.MaskedInterferometer(
            interferometer=interferometer,
            visibilities_mask=np.full(shape=interferometer.visibilities.shape,
                                      fill_value=False),
            real_space_mask=real_space_mask,
            transformer_class=al.TransformerNUFFT),
        tracer=al.Tracer.from_galaxies(galaxies=[
            len_galaxy,
            al.Galaxy(redshift=src_redshift,
                      pixelization=al.pix.VoronoiMagnification(shape=(20, 20)),
                      regularization=al.reg.Constant(coefficient=1.0))
        ]),
    )
示例#17
0
    intensity=0.1,
    effective_radius=0.2,
    sersic_index=3.0,
)

source_galaxy = al.Galaxy(redshift=1.0, light=sersic)

mask = al.Mask2D.circular(shape_native=(250, 250),
                          pixel_scales=0.05,
                          sub_size=2,
                          radius=5.0)

masked_interferometer = al.MaskedInterferometer(
    interferometer=interferometer,
    real_space_mask=mask,
    visibilities_mask=np.full(fill_value=False,
                              shape=interferometer.visibilities.shape),
    settings=al.SettingsMaskedInterferometer(
        transformer_class=al.TransformerNUFFT),
)

print("Number of points = " + str(masked_interferometer.grid.sub_shape_slim) +
      "\n")
print("Number of visibilities = " +
      str(masked_interferometer.visibilities.shape_slim) + "\n")

start_overall = time.time()

tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

start = time.time()
示例#18
0
# This loads the interferometer dataset,.
interferometer = al.Interferometer.from_fits(
    visibilities_path=dataset_path + "visibilities.fits",
    noise_map_path=dataset_path + "noise_map.fits",
    uv_wavelengths_path=dataset_path + "uv_wavelengths.fits",
)

real_space_mask = al.Mask.circular(
    shape_2d=(151, 151), pixel_scales=0.05, sub_size=4, radius=3.0
)

masked_interferometer = al.MaskedInterferometer(
    interferometer=interferometer,
    visibilities_mask=np.full(
        fill_value=False, shape=interferometer.visibilities.shape
    ),
    real_space_mask=real_space_mask,
)

# Setup the lens galaxy's light (elliptical Sersic), mass (SIE+Shear) and source galaxy light (elliptical Sersic) for
# this simulated lens.
lens_galaxy = al.Galaxy(
    redshift=0.5,
    mass=al.mp.EllipticalIsothermal(
        centre=(0.0, 0.0), einstein_radius=1.6, axis_ratio=0.7, phi=45.0
    ),
    shear=al.mp.ExternalShear(magnitude=0.05, phi=90.0),
)

source_galaxy = al.Galaxy(
示例#19
0
def test__simulate_interferometer_data_and_fit__chi_squared_is_0__noise_normalization_correct(
):

    grid = al.Grid.uniform(shape_2d=(51, 51), pixel_scales=0.1, sub_size=2)

    lens_galaxy = al.Galaxy(
        redshift=0.5,
        light=al.lp.EllipticalSersic(centre=(0.1, 0.1), intensity=0.1),
        mass=al.mp.EllipticalIsothermal(centre=(0.1, 0.1),
                                        einstein_radius=1.0),
    )

    source_galaxy = al.Galaxy(
        redshift=1.0,
        light=al.lp.EllipticalExponential(centre=(0.1, 0.1), intensity=0.5),
    )

    tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

    simulator = al.SimulatorInterferometer(
        uv_wavelengths=np.ones(shape=(7, 2)),
        transformer_class=al.TransformerDFT,
        exposure_time_map=al.Array.full(fill_value=300.0,
                                        shape_2d=grid.shape_2d),
        background_sky_map=al.Array.zeros(shape_2d=grid.shape_2d),
        noise_if_add_noise_false=1.0,
        noise_sigma=None,
    )

    interferometer = simulator.from_tracer_and_grid(tracer=tracer, grid=grid)

    path = "{}/data_temp/simulate_and_fit".format(
        os.path.dirname(os.path.realpath(
            __file__)))  # Setup path so we can output the simulated image.

    try:
        shutil.rmtree(path)
    except FileNotFoundError:
        pass

    if os.path.exists(path) is False:
        os.makedirs(path)

    interferometer.output_to_fits(
        visibilities_path=path + "/visibilities.fits",
        noise_map_path=f"{path}/noise_map.fits",
        uv_wavelengths_path=path + "/uv_wavelengths.fits",
    )

    interferometer = al.Interferometer.from_fits(
        visibilities_path=path + "/visibilities.fits",
        noise_map_path=f"{path}/noise_map.fits",
        uv_wavelengths_path=path + "/uv_wavelengths.fits",
    )

    visibilities_mask = np.full(fill_value=False, shape=(7, 2))

    real_space_mask = al.Mask.unmasked(shape_2d=(51, 51),
                                       pixel_scales=0.1,
                                       sub_size=2)

    masked_interferometer = al.MaskedInterferometer(
        interferometer=interferometer,
        visibilities_mask=visibilities_mask,
        real_space_mask=real_space_mask,
        settings=al.SettingsMaskedInterferometer(
            transformer_class=al.TransformerDFT),
    )

    tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

    fit = al.FitInterferometer(
        masked_interferometer=masked_interferometer,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(use_border=False),
    )

    assert fit.chi_squared == pytest.approx(0.0)

    pix = al.pix.Rectangular(shape=(7, 7))

    reg = al.reg.Constant(coefficient=0.0001)

    lens_galaxy = al.Galaxy(
        redshift=0.5,
        light=al.lp.EllipticalSersic(centre=(0.1, 0.1), intensity=0.1),
        mass=al.mp.EllipticalIsothermal(centre=(0.1, 0.1),
                                        einstein_radius=1.0),
    )

    source_galaxy = al.Galaxy(redshift=1.0,
                              pixelization=pix,
                              regularization=reg)

    tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

    fit = al.FitInterferometer(
        masked_interferometer=masked_interferometer,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(use_border=False),
    )
    assert abs(fit.chi_squared) < 1.0e-4

    path = "{}/data_temp".format(os.path.dirname(os.path.realpath(
        __file__)))  # Setup path so we can output the simulated image.

    if os.path.exists(path) == True:
        shutil.rmtree(path)