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)
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)
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)
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
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)
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
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)
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))
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)
def make_mock_pad(self): dp = DataPattern(file_path=self.pad_path) return dp
def make_mock_tpx(self): dp = DataPattern(file_path=self.tpx_path) return dp