示例#1
0
def test__masked_front_edge_from_layout():

    layout = ac.Layout1DLine(shape_1d=(5, ), region_list=[(1, 4)])

    mask = ac.Mask1DLine.masked_front_edge_from_layout(
        layout=layout,
        settings=ac.SettingsMask1DLine(front_edge_pixels=(0, 2)),
        pixel_scales=0.1,
    )

    assert type(mask) == ac.Mask1DLine

    assert (mask == np.array([False, True, True, False, False])).all()

    layout = ac.Layout1DLine(shape_1d=(9, ), region_list=[(1, 4), (6, 9)])

    mask = ac.Mask1DLine.masked_front_edge_from_layout(
        layout=layout,
        settings=ac.SettingsMask1DLine(front_edge_pixels=(1, 3)),
        pixel_scales=0.1,
    )

    assert type(mask) == ac.Mask1DLine

    assert (mask == np.array(
        [False, False, True, True, False, False, False, True, True])).all()
示例#2
0
def test__array_1d_of_trails_from():

    layout = ac.Layout1DLine(shape_1d=(4, ),
                             region_list=[(0, 2)],
                             prescan=(0, 1),
                             overscan=(0, 1))

    array = ac.Array1D.manual_native(array=[0.0, 1.0, 2.0, 3.0],
                                     pixel_scales=1.0)

    array_extracted = layout.array_1d_of_trails_from(array=array)

    assert (array_extracted == np.array([0.0, 0.0, 2.0, 3.0])).all()

    layout = ac.Layout1DLine(shape_1d=(5, ),
                             region_list=[(0, 2)],
                             prescan=(2, 3),
                             overscan=(3, 4))

    array_extracted = layout.array_1d_of_trails_from(array=array)

    assert (array_extracted == np.array([0.0, 0.0, 0.0, 0.0])).all()

    layout = ac.Layout1DLine(shape_1d=(4, ),
                             region_list=[(0, 1), (2, 3)],
                             prescan=(2, 3),
                             overscan=(2, 3))

    array_extracted = layout.array_1d_of_trails_from(array=array)

    assert (array_extracted.native == np.array([0.0, 1.0, 0.0, 3.0])).all()
示例#3
0
def test__trail_size_to_array_edge():

    layout = ac.Layout1DLine(shape_1d=(5, ),
                             region_list=[ac.Region1D(region=(0, 3))])

    assert layout.trail_size_to_array_edge == 2

    layout = ac.Layout1DLine(shape_1d=(7, ),
                             region_list=[ac.Region1D(region=(0, 3))])

    assert layout.trail_size_to_array_edge == 4

    layout = ac.Layout1DLine(
        shape_1d=(15, ),
        region_list=[
            ac.Region1D(region=(0, 2)),
            ac.Region1D(region=(5, 8)),
            ac.Region1D(region=(11, 14)),
        ],
    )

    assert layout.trail_size_to_array_edge == 1

    layout = ac.Layout1DLine(
        shape_1d=(20, ),
        region_list=[
            ac.Region1D(region=(0, 2)),
            ac.Region1D(region=(5, 8)),
            ac.Region1D(region=(11, 14)),
        ],
    )

    assert layout.trail_size_to_array_edge == 6
示例#4
0
    def test__from_post_cti_data(self, clocker_1d, traps_x2, ccd):

        layout = ac.Layout1DLine(shape_1d=(5,), region_list=[(0, 5)])
        simulator = ac.SimulatorDatasetLine(
            pixel_scales=1.0,
            normalization=10.0,
            read_noise=4.0,
            add_poisson_noise=False,
            noise_seed=1,
        )

        dataset_line = simulator.from_layout(
            layout=layout, clocker=clocker_1d, trap_list=traps_x2, ccd=ccd
        )

        pre_cti_data = simulator.pre_cti_data_from(
            layout=layout, pixel_scales=1.0
        ).native

        post_cti_data = clocker_1d.add_cti(
            data=pre_cti_data, trap_list=traps_x2, ccd=ccd
        )

        dataset_line_via_post_cti_data = simulator.from_post_cti_data(
            post_cti_data=post_cti_data, pre_cti_data=pre_cti_data.native, layout=layout
        )

        assert (dataset_line.data == dataset_line_via_post_cti_data.data).all()
        assert (
            dataset_line.noise_map == dataset_line_via_post_cti_data.noise_map
        ).all()
        assert (
            dataset_line.pre_cti_data == dataset_line_via_post_cti_data.pre_cti_data
        ).all()
示例#5
0
def test__array_1d_of_non_regions_from():

    layout = ac.Layout1DLine(shape_1d=(5, ), region_list=[(0, 3)])

    array = ac.Array1D.manual_native(array=[0.0, 1.0, 2.0, 3.0],
                                     pixel_scales=1.0)

    array_extracted = layout.array_1d_of_non_regions_from(array=array)

    assert (array_extracted == np.array([0.0, 0.0, 0.0, 3.0])).all()

    layout = ac.Layout1DLine(shape_1d=(5, ), region_list=[(0, 1), (3, 4)])

    array_extracted = layout.array_1d_of_non_regions_from(array=array)

    assert (array_extracted == np.array([0.0, 1.0, 2.0, 0.0])).all()
示例#6
0
def test__array_1d_of_edges_and_epers_from(array):

    layout = ac.Layout1DLine(shape_1d=(10, ), region_list=[(0, 4)])

    extracted_array = layout.array_1d_of_edges_and_epers_from(
        array=array, fpr_pixels=(0, 2), trails_pixels=(0, 2))

    assert (extracted_array == np.array(
        [0.0, 1.0, 0.0, 0.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0])).all()

    layout = ac.Layout1DLine(shape_1d=(10, ), region_list=[(0, 1), (3, 4)])

    extracted_array = layout.array_1d_of_edges_and_epers_from(
        array=array, fpr_pixels=(0, 1), trails_pixels=(0, 1))

    assert (extracted_array == np.array(
        [0.0, 1.0, 0.0, 3.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0])).all()
示例#7
0
    def test__pre_cti_data_from(self):

        simulator = ac.SimulatorDatasetLine(normalization=10.0, pixel_scales=1.0)

        layout = ac.Layout1DLine(shape_1d=(3,), region_list=[(0, 2)])

        pre_cti_data = simulator.pre_cti_data_from(layout=layout, pixel_scales=1.0)

        print(pre_cti_data)

        assert (pre_cti_data.native == np.array([10.0, 10.0, 0.0])).all()
示例#8
0
def test__masked_front_edges_and_epers_from_layout():

    unmasked = ac.Mask1DLine.unmasked(shape_slim=(5, ), pixel_scales=1.0)

    layout = ac.Layout1DLine(shape_1d=(5, ), region_list=[(1, 3)])

    mask = ac.Mask1DLine.masked_fprs_and_epers_from(
        mask=unmasked,
        layout=layout,
        settings=ac.SettingsMask1DLine(front_edge_pixels=(1, 2),
                                       trails_pixels=(0, 1)),
        pixel_scales=0.1,
    )

    assert (mask == np.array([False, False, True, True, False])).all()
示例#9
0
    def test__no_instrumental_effects_input__only_cti_simulated(
        self, clocker_1d, traps_x2, ccd
    ):

        layout = ac.Layout1DLine(shape_1d=(5,), region_list=[(0, 5)])

        simulator = ac.SimulatorDatasetLine(
            pixel_scales=1.0, normalization=10.0, add_poisson_noise=False
        )

        dataset_line = simulator.from_layout(
            layout=layout, clocker=clocker_1d, trap_list=traps_x2, ccd=ccd
        )

        assert dataset_line.data == pytest.approx(
            np.array([9.43, 9.43, 9.43, 9.43, 9.43]), 1e-1
        )
        assert dataset_line.layout == layout
示例#10
0
    def test__include_read_noise__is_added_after_cti(self, clocker_1d, traps_x2, ccd):

        layout = ac.Layout1DLine(shape_1d=(5,), region_list=[(0, 5)])

        simulator = ac.SimulatorDatasetLine(
            pixel_scales=1.0,
            normalization=10.0,
            read_noise=1.0,
            add_poisson_noise=False,
            noise_seed=1,
        )

        dataset_line = simulator.from_layout(
            layout=layout, clocker=clocker_1d, trap_list=traps_x2, ccd=ccd
        )

        # Use seed to give us a known read noises map we'll test_autocti for

        assert dataset_line.data == pytest.approx(
            np.array([11.05513, 9.36790, 9.47129, 8.92700, 10.8654]), 1e-2
        )
        assert dataset_line.layout == layout
示例#11
0
    def test__from_fits__load_pre_cti_data_data_from_the_layout_ci_and_data(self):

        create_fits(fits_path=fits_path)

        layout_ci = ac.Layout1DLine(shape_1d=(7,), region_list=[(0, 7)])

        imaging = ac.DatasetLine.from_fits(
            pixel_scales=1.0,
            layout=layout_ci,
            data_path=path.join(fits_path, "3_ones.fits"),
            data_hdu=0,
            noise_map_path=path.join(fits_path, "3_twos.fits"),
            noise_map_hdu=0,
            pre_cti_data_path=path.join(fits_path, "3_threes.fits"),
            pre_cti_data_hdu=0,
        )

        assert (imaging.data.native == np.ones((7,))).all()
        assert (imaging.noise_map.native == 2.0 * np.ones((7,))).all()
        assert (imaging.pre_cti_data.native == 3.0 * np.ones((7,))).all()

        assert imaging.layout == layout_ci

        clean_fits(fits_path=fits_path)
__Normalizations__

We require the normalization of the charge in every cti line dataset, as the names of the files are tagged with this.
"""
normalization_list = [100, 5000, 25000, 84700]
"""
__Layout__

We use the regions and normalization_list above to create the `Layout1DLine` of every cti-line we fit. This is used 
for visualizing the model-fit.
"""
layout_list = [
    ac.Layout1DLine(
        shape_1d=shape_native,
        region_list=region_1d_list,
        normalization=normalization,
        prescan=prescan,
        overscan=overscan,
    ) for normalization in normalization_list
]
"""
__Dataset__

We now load every cti-line dataset, including a noise-map and pre-CTI line containing the data before read-out and
therefore without CTI. This uses a`DatasetLine` object.
"""
dataset_line_list = [
    ac.DatasetLine.from_fits(
        data_path=path.join(dataset_path, f"data_{layout.normalization}.fits"),
        noise_map_path=path.join(dataset_path,
                                 f"noise_map_{layout.normalization}.fits"),
示例#13
0
# Test noise
noise = np.ones_like(post_cti) * 0.01

# Conversion value for HST ACS
pixel_scale = 0.05

# Convert to AutoCTI objects
post_cti = ac.Array1D.manual_native(array=post_cti, pixel_scales=pixel_scale)
noise = ac.Array1D.manual_native(array=noise, pixel_scales=pixel_scale)
pre_cti = ac.Array1D.manual_native(array=pre_cti, pixel_scales=pixel_scale)

shape_native = (length, 1)
region_1d_list = [(warm_index, warm_index + 1)]
normalization = np.sum(pre_cti)
layout = ac.Layout1DLine(shape_1d=shape_native,
                         region_list=region_1d_list,
                         normalization=normalization)

dataset_line = ac.DatasetLine(data=post_cti,
                              noise_map=noise,
                              pre_cti_data=pre_cti,
                              layout=layout)

# Set up fitting CTI model
clocker = ac.Clocker1D(express=express)

trap_0 = af.Model(ac.TrapInstantCapture)
trap_0.density = af.UniformPrior(lower_limit=0.0, upper_limit=20.0)
trap_0.release_timescale = af.UniformPrior(lower_limit=0.0, upper_limit=10.0)
trap_0.fractional_volume_none_exposed = 0.0
trap_0.fractional_volume_full_exposed = 0.0