Пример #1
0
    def test__express_matrix_from_pixels(self):

        roe = ac.ROE(empty_traps_at_start=False)
        express_multiplier, _ = roe.express_matrix_from_pixels_and_express(
            pixels=12, express=1, dtype=int)

        assert express_multiplier == pytest.approx(np.array([np.arange(1,
                                                                       13)]))

        express_multiplier, _ = roe.express_matrix_from_pixels_and_express(
            pixels=12, express=4, dtype=int)

        assert express_multiplier == pytest.approx(
            np.array([
                [1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
                [0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3],
                [0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3],
            ]))

        express_multiplier, _ = roe.express_matrix_from_pixels_and_express(
            pixels=12, express=12)

        assert express_multiplier == pytest.approx(np.triu(np.ones((12, 12))))

        roe = ac.ROE(empty_traps_at_start=True)
        express_multiplier, _ = roe.express_matrix_from_pixels_and_express(
            pixels=12, express=12)
Пример #2
0
    def test__readout_sequence_three_phase_single_phase_high(self):

        n_phases = 3

        roe = ac.ROE([1] * n_phases, force_downstream_release=False)
        assert roe.pixels_accessed_during_clocking == [-1, 0, 1]
        # assert min(roe.pixels_accessed_during_clocking) == -1
        # assert max(roe.pixels_accessed_during_clocking) == +1
        assert roe.n_phases == n_phases
        assert roe.n_steps == n_phases

        for step in range(n_phases):
            phase = step
            assert roe.clock_sequence[step][phase]["high"], "Highness"
            assert (roe.clock_sequence[step][phase]["capture_from_which_pixel"]
                    == 0), "Step {}, phase {}, capture".format(step, phase)
            assert (roe.clock_sequence[step][phase]["release_to_which_pixel"]
                    == 0), "Step {}, phase {}, release".format(step, phase)

        # Check other phases
        assert roe.clock_sequence[0][1]["release_to_which_pixel"] == 0
        assert roe.clock_sequence[0][2]["release_to_which_pixel"] == -1
        assert roe.clock_sequence[1][0]["release_to_which_pixel"] == 0
        assert roe.clock_sequence[1][2]["release_to_which_pixel"] == 0
        assert roe.clock_sequence[2][0]["release_to_which_pixel"] == 1
        assert roe.clock_sequence[2][1]["release_to_which_pixel"] == 0

        # Never move electrons ahead of the trap
        roe = ac.ROE([1] * n_phases, force_downstream_release=True)
        assert roe.pixels_accessed_during_clocking == [0, 1]
        # assert min(roe.pixels_accessed_during_clocking) == 0
        # assert max(roe.pixels_accessed_during_clocking) == +1
        assert roe.n_phases == n_phases
        assert roe.n_steps == n_phases

        # Check all high phases
        for step in range(n_phases):
            phase = step
            assert roe.clock_sequence[step][phase]["high"], "Highness"
            assert (roe.clock_sequence[step][phase]["capture_from_which_pixel"]
                    == 0), "Step {}, phase {}, capture".format(step, phase)
            assert (roe.clock_sequence[step][phase]["release_to_which_pixel"]
                    == 0), "Step {}, phase {}, release".format(step, phase)

        # Check other phases
        assert roe.clock_sequence[0][1]["release_to_which_pixel"] == 1
        assert roe.clock_sequence[0][2]["release_to_which_pixel"] == 0
        assert roe.clock_sequence[1][0]["release_to_which_pixel"] == 0
        assert roe.clock_sequence[1][2]["release_to_which_pixel"] == 1
        assert roe.clock_sequence[2][0]["release_to_which_pixel"] == 1
        assert roe.clock_sequence[2][1]["release_to_which_pixel"] == 0
Пример #3
0
    def test__readout_sequence_two_phase_single_phase_high(self):

        n_phases = 2

        roe = ac.ROE([1] * n_phases, force_downstream_release=False)
        assert roe.pixels_accessed_during_clocking == [-1, 0, 1]
        # assert min(roe.pixels_accessed_during_clocking) == -1
        # assert max(roe.pixels_accessed_during_clocking) == +1
        assert roe.n_phases == n_phases
        assert roe.n_steps == n_phases

        for step in range(n_phases):
            phase = step
            assert roe.clock_sequence[step][phase]["high"], "Highness"
            assert (roe.clock_sequence[step][phase]["capture_from_which_pixel"]
                    == 0), "Step {}, phase {}, capture".format(step, phase)
            assert (roe.clock_sequence[step][phase]["release_to_which_pixel"]
                    == 0), "Step {}, phase {}, release".format(step, phase)

        # Check other phases
        assert (roe.clock_sequence[0][1]["release_to_which_pixel"] == np.array(
            [-1, 0])).all
        assert (roe.clock_sequence[1][0]["release_to_which_pixel"] == np.array(
            [0, 1])).all

        roe = ac.ROE([1] * n_phases, force_downstream_release=True)
        assert roe.pixels_accessed_during_clocking == [0, 1]
        # assert min(roe.pixels_accessed_during_clocking) == 0
        # assert max(roe.pixels_accessed_during_clocking) == +1
        assert roe.n_phases == n_phases
        assert roe.n_steps == n_phases

        for step in range(n_phases):
            phase = step
            assert roe.clock_sequence[step][phase]["high"], "Highness"
            assert (roe.clock_sequence[step][phase]["capture_from_which_pixel"]
                    == 0), "Step {}, phase {}, capture".format(step, phase)
            assert (roe.clock_sequence[step][phase]["release_to_which_pixel"]
                    == 0), "Step {}, phase {}, release".format(step, phase)

        # Check other phases
        assert (roe.clock_sequence[0][1]["release_to_which_pixel"] == np.array(
            [0, 1])).all
        assert (roe.clock_sequence[1][0]["release_to_which_pixel"] == np.array(
            [0, 1])).all
Пример #4
0
    def test__readout_sequence_single_phase_single_phase_high(self):

        for force_downstream_release in [True, False]:
            roe = ac.ROE([1],
                         force_downstream_release=force_downstream_release)
            assert roe.pixels_accessed_during_clocking == [0]
            # assert min(roe.pixels_accessed_during_clocking) == 0
            # assert max(roe.pixels_accessed_during_clocking) == 0
            assert roe.n_phases == 1
            assert roe.n_steps == 1
            assert roe.clock_sequence[0][0]["high"], "Highness"
            assert roe.clock_sequence[0][0]["capture_from_which_pixel"] == 0
            assert roe.clock_sequence[0][0]["release_to_which_pixel"] == 0
Пример #5
0
 def test__express_matrix_always_sums_to_n_transfers(self):
     for pixels in [5, 7, 17]:
         for express in [0, 1, 2, 7]:
             for offset in [0, 1, 13]:
                 for dtype in [int, float]:
                     for first_pixel_different in [True, False]:
                         roe = ac.ROE(
                             empty_traps_at_start=first_pixel_different)
                         (
                             express_multiplier,
                             _,
                         ) = roe.express_matrix_from_pixels_and_express(
                             pixels=pixels,
                             express=express,
                             offset=offset,
                             dtype=dtype,
                         )
                         assert np.sum(
                             express_multiplier, axis=0) == pytest.approx(
                                 np.arange(1, pixels + 1) + offset)