Ejemplo n.º 1
0
    def test_manip_compress(self):
        # one chip 256x256
        # factor 16
        pattern = np.random.poisson(1000, (256, 256))
        dp = DataPattern(pattern_array=pattern)
        dp.manip_compress(factor=16, rm_central_pix=0, rm_edge_pix=0)

        # factor 22
        pattern = np.random.poisson(1000, (256, 256))
        dp = DataPattern(pattern_array=pattern)
        dp.manip_compress(factor=22, rm_central_pix=0, rm_edge_pix=0)

        # one chip 516x516
        # factor 22
        pattern = np.random.poisson(1000, (512, 512))
        dp = DataPattern(pattern_array=pattern)
        dp.manip_compress(factor=22, rm_central_pix=0, rm_edge_pix=0)

        # two chips
        # factor 16
        pattern = np.random.poisson(1000, (516, 516))
        dp = DataPattern(pattern_array=pattern,
                         nChipsX=2,
                         nChipsY=2,
                         real_size=3)
        dp.manip_compress(factor=16, rm_central_pix=0, rm_edge_pix=0)

        # factor 22
        pattern = np.random.poisson(1000, (516, 516))
        dp = DataPattern(pattern_array=pattern,
                         nChipsX=2,
                         nChipsY=2,
                         real_size=3)
        dp.manip_compress(factor=22, rm_central_pix=0, rm_edge_pix=0)
Ejemplo n.º 2
0
    def test_init_from_json(self):
        filepath = 'data_files/pad_dp_2M.json'
        dp_pad = DataPattern(file_path=filepath)
        self.assertTrue(dp_pad.pattern_matrix.size >= 0)

        filepath = 'data_files/tpx_quad_dp_2M.json'
        dp_timepix = DataPattern(file_path=filepath)
        self.assertTrue(dp_timepix.pattern_matrix.size >= 0)
Ejemplo n.º 3
0
 def test_init_from_array(self):
     pattern = np.random.poisson(1000, (22, 22))
     pattern[0, 0] = 0
     pattern[0, 1] = 0
     pattern[3, 0] = 0
     dp = DataPattern(pattern_array=pattern)
     self.assertTrue(dp.pattern_matrix.size >= 0)
Ejemplo n.º 4
0
 def test_init_from_txt(self):
     filepath = 'data_files/tpx_quad_array_2M.txt'
     dp_timepix = DataPattern(file_path=filepath,
                              nChipsX=2,
                              nChipsY=2,
                              real_size=3)
     self.assertTrue(dp_timepix.pattern_matrix.size >= 0)
Ejemplo n.º 5
0
    def test_manipulations(self):

        # Get a timepix array
        filepath = 'data_files/tpx_quad_array_2M.txt'
        dp_timepix = DataPattern(file_path=filepath,
                                 nChipsX=2,
                                 nChipsY=2,
                                 real_size=3)
        self.assertTrue(dp_timepix.pattern_matrix.size >= 0)

        # Manipulation methods
        # -Orient
        dp_timepix.manip_orient('cw, mh')  # TimepixQuad orientation

        # -Angular calibration
        dp_timepix.manip_create_mesh(pixel_size=0.055, distance=300)
        #mm2.manip_create_mesh(pixel_size=1.4, distance=300)

        # Zero central pix
        dp_timepix.zero_central_pix(0)

        # Add extra pixels to account for bigger central pixels
        dp_timepix.manip_correct_central_pix()

        # -Mask pixels
        dp_timepix.mask_std(4, 0)

        # -Sum pixels, zero central pixels and remove edge pixels all in one
        dp_timepix.manip_compress(factor=2, rm_central_pix=2, rm_edge_pix=4)

        # Save and Load previously set mask
        dp_timepix.save_mask('test_masksave.txt')
        dp_timepix.load_mask('test_masksave.txt')

        if os.path.exists("test_masksave.txt"):
            os.remove("test_masksave.txt")

        # Save
        dp_timepix.io_save_ascii('test_ascii_save.txt')

        if os.path.exists("test_ascii_save.txt"):
            os.remove("test_ascii_save.txt")

        # Set angular resolution
        dx = -0.1
        dy = 0.2
        phi = 3
        dp_timepix.set_pattern_angular_pos(center=(dx, dy), angle=phi)

        # mask array
        dp_timepix.set_fit_region(distance=2.5)
Ejemplo n.º 6
0
    def test_basics(self):
        lib = Lib2dl('data_files/sb600g05.2dl')
        dp_pad = DataPattern('data_files/pad_dp_2M.json')

        fm = FitManager(cost_function='chi2', n_sites=2, sub_pixels=8)
        fm.set_pattern(dp_pad, lib)
        fm.fit_parameters.change_fixed_values(
            sigma=0.05)  # pad=0.094, tpx=0.064
        fm.fit_parameters.change_bounds(phi=(-20, 20))
        fm.fit_parameters.change_initial_values(phi=0.5)
        fm.set_minimization_settings(profile='fine')

        p1 = 1
        p2 = 23
        fm.run_single_fit(p1, p2, verbose_graphics=False)

        self.assertAlmostEqual(fm.df_horizontal['x'][0], -0.1, places=2)
        self.assertAlmostEqual(fm.df_horizontal['y'][0], 0.2, places=2)
Ejemplo n.º 7
0
    def try__update_compress_factors_tpx_quad(self, factor, rm_central_pix,
                                              rm_edge_pix):

        # Get a timepix array
        filepath = 'data_files/tpx_quad_array_2M.txt'
        dp_timepix = DataPattern(file_path=filepath,
                                 nChipsX=2,
                                 nChipsY=2,
                                 real_size=3)
        dp_timepix.manip_correct_central_pix()

        rm_central_pix, rm_edge_pix = \
            dp_timepix._update_compress_factors_tpx_quad(factor, rm_central_pix, rm_edge_pix)

        # verify if the rest is zero
        nx, ny = dp_timepix.nx, dp_timepix.ny
        div_rest = (nx - 2 * rm_edge_pix) % factor
        self.assertEqual(div_rest, 0)
        div_rest = (ny - 2 * rm_edge_pix) % factor
        self.assertEqual(div_rest, 0)

        return rm_central_pix, rm_edge_pix
Ejemplo n.º 8
0
 def setUp(self) -> None:
     # Runs before each test
     dp_pad = DataPattern('data_files/pad_dp_2M.json')
     self.xmesh = dp_pad.xmesh
     self.ymesh = dp_pad.ymesh
     self.patt = dp_pad.pattern_matrix
Ejemplo n.º 9
0
    def test_manip_orient(self):

        # Square pattern
        # 0 1
        # 2 3
        pattern_sq = np.arange(4).reshape((2, 2))
        xmesh = np.array([[-1, 1], [-1, 1]])
        ymesh = np.array([[1, 1], [-1, -1]])

        # No rotation
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('')
        self.assertTrue(np.alltrue(dp.pattern_matrix == pattern_sq))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh))

        # Rotate clockwise
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('cw')
        result = np.array([[2, 0], [3, 1]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh))

        # Rotate counterclockwise
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('cc')
        result = np.array([[1, 3], [0, 2]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh))

        # Mirror horizontaly
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('mh')
        result = np.array([[1, 0], [3, 2]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh))

        # Mirror verticaly
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('mv')
        result = np.array([[2, 3], [0, 1]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh))

        # Rectangular pattern
        # 0 1
        # 2 3
        # 4 5
        pattern_sq = np.arange(6).reshape((3, 2))
        xmesh = np.array([[-1, 1], [-1, 1], [-1, 1]])
        ymesh = np.array([[1, 1], [0, 0], [-1, -1]])

        # Rotate clockwise
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('cw')
        result = np.array([[4, 2, 0], [5, 3, 1]])
        xmesh_res = np.array([[-1, 0, 1], [-1, 0, 1]])
        ymesh_res = np.array([[1, 1, 1], [-1, -1, -1]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh_res))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh_res))

        # Rotate counterclockwise
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('cc')
        result = np.array([[1, 3, 5], [0, 2, 4]])
        xmesh_res = np.array([[-1, 0, 1], [-1, 0, 1]])
        ymesh_res = np.array([[1, 1, 1], [-1, -1, -1]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh_res))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh_res))

        # Multiple rotations (same results as counterclockwise)
        dp = DataPattern(pattern_array=pattern_sq)
        dp.set_xymesh(xmesh, ymesh)
        dp.manip_orient('cw, cw, cw, cw, cc')
        result = np.array([[1, 3, 5], [0, 2, 4]])
        xmesh_res = np.array([[-1, 0, 1], [-1, 0, 1]])
        ymesh_res = np.array([[1, 1, 1], [-1, -1, -1]])
        self.assertTrue(np.alltrue(dp.pattern_matrix == result))
        self.assertTrue(np.alltrue(dp.xmesh == xmesh_res))
        self.assertTrue(np.alltrue(dp.ymesh == ymesh_res))
Ejemplo n.º 10
0
 def make_mock_pad(self):
     dp = DataPattern(file_path=self.pad_path)
     return dp
Ejemplo n.º 11
0
 def make_mock_tpx(self):
     dp = DataPattern(file_path=self.tpx_path)
     return dp