Esempio n. 1
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()
Esempio n. 2
0
    def test__1x2_image__1x2_visibilities__simple_fourier_transform(self):
        # The image plane image generated by the galaxy is [1.0, 1.0]

        # Thus the chi squared is 4.0**2.0 + 3.0**2.0 = 25.0

        uv_wavelengths = np.array([[0.0, 0.0]])

        real_space_mask = al.Mask2D.manual(
            mask=np.array([
                [True, True, True, True],
                [True, False, False, True],
                [True, True, True, True],
            ]),
            pixel_scales=1.0,
        )

        interferometer = al.Interferometer(
            visibilities=al.Visibilities.full(fill_value=5.0,
                                              shape_slim=(1, )),
            noise_map=al.Visibilities.ones(shape_slim=(1, )),
            uv_wavelengths=uv_wavelengths,
            real_space_mask=real_space_mask,
            settings=al.SettingsInterferometer(
                sub_size=1, transformer_class=al.TransformerDFT),
        )

        interferometer.visibilities[0] = 5.0 + 4.0j

        # Setup as a ray trace instance, using a light profile for the lens

        g0 = al.Galaxy(redshift=0.5,
                       light_profile=MockLightProfile(value=1.0, size=2))
        tracer = al.Tracer.from_galaxies(galaxies=[g0])

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

        assert (fit.visibilities.slim == np.array([5.0 + 4.0j])).all()
        assert (fit.noise_map.slim == np.array([1.0 + 1.0j])).all()
        assert (fit.model_visibilities.slim == np.array([2.0 + 0.0j])).all()
        assert (fit.residual_map.slim == np.array([3.0 + 4.0j])).all()
        assert (fit.normalized_residual_map.slim == np.array([3.0 + 4.0j
                                                              ])).all()
        assert (fit.chi_squared_map.slim == np.array([9.0 + 16.0j])).all()

        assert fit.chi_squared == 25.0
        assert fit.noise_normalization == (2.0 * np.log(2 * np.pi * 1.0**2.0))
        assert fit.log_likelihood == -0.5 * (
            25.0 + 2.0 * np.log(2 * np.pi * 1.0**2.0))
Esempio n. 3
0
def simulate_function(instance):

    """
    Set up the `Tracer` which is used to simulate the strong lens interferometer, 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, uv_wavelengths and simulator settings used to simulate interferometer dataset 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=interferometer.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.Interferometer(
        visibilities=simulated_interferometer.visibilities,
        noise_map=simulated_interferometer.noise_map,
        uv_wavelengths=simulated_interferometer.uv_wavelengths,
        real_space_mask=real_space_mask,
    )
Esempio n. 4
0
    def test__hyper_background_changes_background_sky__reflected_in_likelihood(
        self, ):

        uv_wavelengths = np.array([[1.0, 0.0], [1.0, 1.0], [2.0, 2.0]])

        real_space_mask = al.Mask2D.manual(
            mask=np.array([
                [True, True, True, True, True],
                [True, False, False, False, True],
                [True, True, True, True, True],
            ]),
            pixel_scales=1.0,
        )

        interferometer = al.Interferometer(
            visibilities=al.Visibilities.full(fill_value=5.0,
                                              shape_slim=(3, )),
            noise_map=al.Visibilities.full(fill_value=2.0, shape_slim=(3, )),
            uv_wavelengths=uv_wavelengths,
            real_space_mask=real_space_mask,
            settings=al.SettingsInterferometer(sub_size=1),
        )

        # Setup as a ray trace instance, using a light profile for the lens

        g0 = al.Galaxy(redshift=0.5,
                       light_profile=MockLightProfile(value=1.0, size=2))
        tracer = al.Tracer.from_galaxies(galaxies=[g0])

        hyper_background_noise = al.hyper_data.HyperBackgroundNoise(
            noise_scale=1.0)

        fit = al.FitInterferometer(
            interferometer=interferometer,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
        )

        assert (fit.visibilities.slim == (1.0 + 1.0j) *
                np.full(fill_value=5.0, shape=(3, ))).all()

        assert (fit.noise_map.slim == (1.0 + 1.0j) *
                np.full(fill_value=3.0, shape=(3, ))).all()
Esempio n. 5
0
    transformer = transformer_class(
        uv_wavelengths=uv_wavelengths,
        grid=aa.structures.grids.MaskedGrid.from_mask(
            mask=real_space_mask).in_radians)

    visibilities = tracer.profile_visibilities_from_grid_and_transformer(
        grid=grid, transformer=transformer)

    noise_map = np.random.normal(loc=0.0,
                                 scale=1.0 * 10**-2.0,
                                 size=visibilities.shape)

    interferometer = al.Interferometer(
        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(
Esempio n. 6
0
total_shape = shape_data + shape_preloads

print("Data Memory Use (GB) = " + str(shape_data * 8e-9))
print("PreLoad Memory Use (GB) = " + str(shape_preloads * 8e-9))
print("Total Memory Use (GB) = " + str(total_shape * 8e-9))
print()

# Only delete this if the memory use looks... Okay
# stop

visibilities = al.Visibilities.ones(shape_1d=(total_visibilities, ))
uv_wavelengths = np.ones(shape=(total_visibilities, 2))
noise_map = al.VisibilitiesNoiseMap.ones(shape_1d=(total_visibilities, ))

interferometer = al.Interferometer(visibilities=visibilities,
                                   noise_map=noise_map,
                                   uv_wavelengths=uv_wavelengths)

print("Real space sub grid size = " + str(real_space_sub_size))
print("Real space circular mask radius = " + str(real_space_radius) + "\n")

lens_galaxy = al.Galaxy(
    redshift=0.5,
    mass=al.mp.EllipticalIsothermal(centre=(0.0, 0.0),
                                    einstein_radius=1.6,
                                    elliptical_comps=(0.17647, 0.0)),
)

source_galaxy = al.Galaxy(redshift=1.0,
                          light=al.lp.EllipticalSersic(intensity=1.0))
Esempio n. 7
0
    def test__3x2_image__2x2_visibilities__use_transformer_for_likelihood(
            self):

        uv_wavelengths = np.array([[1.0, 0.0], [1.0, 1.0], [2.0, 2.0]])

        real_space_mask = al.Mask2D.unmasked(shape_native=(1, 3),
                                             pixel_scales=1.0)

        transformer = al.TransformerDFT(uv_wavelengths=uv_wavelengths,
                                        real_space_mask=real_space_mask)

        real_space_mask = al.Mask2D.manual(
            mask=np.array([
                [True, True, True, True, True],
                [True, False, False, False, True],
                [True, True, True, True, True],
            ]),
            pixel_scales=1.0,
        )

        interferometer = al.Interferometer(
            visibilities=al.Visibilities.full(fill_value=5.0,
                                              shape_slim=(3, )),
            noise_map=al.Visibilities.full(fill_value=2.0, shape_slim=(3, )),
            uv_wavelengths=uv_wavelengths,
            real_space_mask=real_space_mask,
            settings=al.SettingsInterferometer(
                sub_size=1, transformer_class=al.TransformerDFT),
        )

        # Setup as a ray trace instance, using a light profile for the lens

        g0 = al.Galaxy(redshift=0.5,
                       light_profile=al.lp.EllSersic(intensity=0.001))

        image = g0.image_2d_from_grid(grid=interferometer.grid)

        model_visibilities_manual = transformer.visibilities_from_image(
            image=image)

        tracer = al.Tracer.from_galaxies(galaxies=[g0])

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

        assert (fit.visibilities.slim == np.array(
            [5.0 + 5.0j, 5.0 + 5.0j, 5.0 + 5.0j])).all()
        assert (fit.noise_map.slim == np.array(
            [2.0 + 2.0j, 2.0 + 2.0j, 2.0 + 2.0j])).all()

        assert fit.model_visibilities.slim == pytest.approx(
            model_visibilities_manual, 1.0e-4)

        # moddel visibilities are all [1.94805, 0.0]

        assert fit.residual_map.slim == pytest.approx(
            np.array([3.0519 + 5.0j, 3.0519 + 5.0j, 3.0519 + 5.0j]), 1.0e-4)

        assert fit.normalized_residual_map.slim == pytest.approx(
            np.array([
                3.0519 / 2.0 + (5.0 / 2.0) * 1.0j,
                3.0519 / 2.0 + (5.0 / 2.0) * 1.0j,
                3.0519 / 2.0 + (5.0 / 2.0) * 1.0j,
            ]),
            1.0e-4,
        )

        assert fit.chi_squared_map.slim == pytest.approx(
            np.array([
                (3.0519 / 2.0)**2.0 + ((5.0 / 2.0)**2.0) * 1.0j,
                (3.0519 / 2.0)**2.0 + ((5.0 / 2.0)**2.0) * 1.0j,
                (3.0519 / 2.0)**2.0 + ((5.0 / 2.0)**2.0) * 1.0j,
            ]),
            1.0e-4,
        )

        assert fit.chi_squared == pytest.approx(25.73579, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(
            (6.0 * np.log(2 * np.pi * 2.0**2.0)), 1.0e-4)
        assert fit.log_likelihood == pytest.approx(
            -0.5 * (25.73579 + 6.0 * np.log(2 * np.pi * 2.0**2.0)), 1.0e-4)