class MaskModelTest(unittest.TestCase): def setUp(self): self.mask_model = MaskModel() self.img = np.zeros((10, 10)) self.mask_model.set_dimension(self.img.shape) def tearDown(self): del self.mask_model del self.img gc.collect() def test_growing_masks(self): self.mask_model._mask_data[4, 4] = 1 self.mask_model._mask_data[0, 0] = 1 self.mask_model._mask_data[0, 9] = 1 self.mask_model._mask_data[9, 9] = 1 self.mask_model._mask_data[9, 0] = 1 self.mask_model.grow() # test corners self.assertEqual(self.mask_model._mask_data[0, 1], 1) self.assertEqual(self.mask_model._mask_data[1, 1], 1) self.assertEqual(self.mask_model._mask_data[1, 0], 1) self.assertEqual(self.mask_model._mask_data[0, 8], 1) self.assertEqual(self.mask_model._mask_data[1, 8], 1) self.assertEqual(self.mask_model._mask_data[1, 9], 1) self.assertEqual(self.mask_model._mask_data[8, 0], 1) self.assertEqual(self.mask_model._mask_data[8, 1], 1) self.assertEqual(self.mask_model._mask_data[9, 1], 1) self.assertEqual(self.mask_model._mask_data[8, 8], 1) self.assertEqual(self.mask_model._mask_data[8, 9], 1) self.assertEqual(self.mask_model._mask_data[9, 8], 1) # test center self.assertEqual(self.mask_model._mask_data[3, 3], 1) self.assertEqual(self.mask_model._mask_data[4, 3], 1) self.assertEqual(self.mask_model._mask_data[5, 3], 1) self.assertEqual(self.mask_model._mask_data[3, 5], 1) self.assertEqual(self.mask_model._mask_data[4, 5], 1) self.assertEqual(self.mask_model._mask_data[5, 5], 1) self.assertEqual(self.mask_model._mask_data[3, 4], 1) self.assertEqual(self.mask_model._mask_data[5, 4], 1) def test_shrink_mask(self): self.mask_model._mask_data[4, 4] = 1 self.mask_model._mask_data[0, 0] = 1 self.mask_model._mask_data[0, 9] = 1 self.mask_model._mask_data[9, 9] = 1 self.mask_model._mask_data[9, 0] = 1 self.before_mask = np.copy(self.mask_model._mask_data) self.mask_model.grow() self.mask_model.shrink() self.assertTrue(np.array_equal(self.before_mask, self.mask_model._mask_data)) self.mask_model.clear_mask() self.mask_model._mask_data[4, 4] = 1 self.mask_model._mask_data[5, 4] = 1 self.mask_model._mask_data[5, 5] = 1 self.mask_model._mask_data[4, 5] = 1 self.mask_model.shrink() self.assertEqual(np.sum(self.mask_model._mask_data), 0) def test_saving_and_loading(self): self.mask_model.mask_ellipse(1024, 1024, 100, 100) self.mask_model.set_dimension((2048, 2048)) mask_array = np.copy(self.mask_model.get_img()) filename = os.path.join(data_path, "dummy.mask") self.mask_model.save_mask(filename) self.mask_model.load_mask(filename) self.assertTrue(np.array_equal(mask_array, self.mask_model.get_img())) os.remove(filename)
class CbnAbsorptionCorrectionOptimizationTest(unittest.TestCase): def setUp(self): # creating Data objects self.img_data = ImgModel() self.img_data.load("Data/CbnCorrectionOptimization/Mg2SiO4_091.tif") self.calibration_data = CalibrationModel(self.img_data) self.calibration_data.load("Data/CbnCorrectionOptimization/LaB6_40keV side.poni") self.mask_data = MaskModel() self.mask_data.load_mask("Data/CbnCorrectionOptimization/Mg2SiO4_91_combined.mask") # creating the ObliqueAngleDetectorAbsorptionCorrection _, fit2d_parameter = self.calibration_data.get_calibration_parameter() detector_tilt = fit2d_parameter['tilt'] detector_tilt_rotation = fit2d_parameter['tiltPlanRotation'] self.tth_array = self.calibration_data.spectrum_geometry.twoThetaArray((2048, 2048)) self.azi_array = self.calibration_data.spectrum_geometry.chiArray((2048, 2048)) self.oiadac_correction = ObliqueAngleDetectorAbsorptionCorrection( self.tth_array, self.azi_array, detector_thickness=40, absorption_length=465.5, tilt=detector_tilt, rotation=detector_tilt_rotation, ) self.img_data.add_img_correction(self.oiadac_correction, "oiadac") def tearDown(self): del self.calibration_data.cake_geometry del self.calibration_data.spectrum_geometry def test_the_world(self): params = Parameters() params.add("diamond_thickness", value=2, min=1.9, max=2.3) params.add("seat_thickness", value=5.3, min=4.0, max=6.6, vary=False) params.add("small_cbn_seat_radius", value=0.2, min=0.10, max=0.5, vary=True) params.add("large_cbn_seat_radius", value=1.95, min=1.85, max=2.05, vary=False) params.add("tilt", value=3.3, min=0, max=8) params.add("tilt_rotation", value=0, min=-15, max=+15) params.add("cbn_abs_length", value=14.05, min=12, max=16) region = [8, 26] self.tth_array = 180.0 / np.pi * self.tth_array self.azi_array = 180.0 / np.pi * self.azi_array def fcn2min(params): cbn_correction = CbnCorrection( tth_array=self.tth_array, azi_array=self.azi_array, diamond_thickness=params['diamond_thickness'].value, seat_thickness=params['seat_thickness'].value, small_cbn_seat_radius=params['small_cbn_seat_radius'].value, large_cbn_seat_radius=params['large_cbn_seat_radius'].value, tilt=params['tilt'].value, tilt_rotation=params['tilt_rotation'].value, cbn_abs_length=params["cbn_abs_length"].value ) self.img_data.add_img_correction(cbn_correction, "cbn") tth, int = self.calibration_data.integrate_1d(mask=self.mask_data.get_mask()) self.img_data.delete_img_correction("cbn") ind = np.where((tth > region[0]) & (tth < region[1])) int = gaussian_filter1d(int, 20) return (np.diff(int[ind])) ** 2 def output_values(param1, iteration, residual): report_fit(param1) result = minimize(fcn2min, params, iter_cb=output_values) report_fit(params) # plotting result: cbn_correction = CbnCorrection( tth_array=self.tth_array, azi_array=self.azi_array, diamond_thickness=params['diamond_thickness'].value, seat_thickness=params['seat_thickness'].value, small_cbn_seat_radius=params['small_cbn_seat_radius'].value, large_cbn_seat_radius=params['large_cbn_seat_radius'].value, tilt=params['tilt'].value, tilt_rotation=params['tilt_rotation'].value, cbn_abs_length=params['cbn_abs_length'].value ) self.img_data.add_img_correction(cbn_correction, "cbn") tth, int = self.calibration_data.integrate_1d(mask=self.mask_data.get_mask()) ind = np.where((tth > region[0]) & (tth < region[1])) tth = tth[ind] int = int[ind] int_smooth = gaussian_filter1d(int, 10) int_diff1 = np.diff(int) int_diff1_smooth = np.diff(int_smooth) int_diff2 = np.diff(int_diff1) int_diff2_smooth = np.diff(int_diff1_smooth) plt.figure() plt.subplot(3, 1, 1) plt.plot(tth, int) plt.plot(tth, int_smooth) plt.subplot(3, 1, 2) plt.plot(int_diff1) plt.plot(int_diff1_smooth) plt.subplot(3, 1, 3) plt.plot(int_diff2) plt.plot(int_diff2_smooth) plt.savefig("Results/optimize_cbn_absorption.png", dpi=300) os.system("open " + "Results/optimize_cbn_absorption.png")
class MaskModelTest(unittest.TestCase): def setUp(self): self.mask_model = MaskModel() self.img = np.zeros((10, 10)) self.mask_model.set_dimension(self.img.shape) def tearDown(self): del self.mask_model del self.img gc.collect() def test_growing_masks(self): self.mask_model._mask_data[4, 4] = 1 self.mask_model._mask_data[0, 0] = 1 self.mask_model._mask_data[0, 9] = 1 self.mask_model._mask_data[9, 9] = 1 self.mask_model._mask_data[9, 0] = 1 self.mask_model.grow() # tests corners self.assertEqual(self.mask_model._mask_data[0, 1], 1) self.assertEqual(self.mask_model._mask_data[1, 1], 1) self.assertEqual(self.mask_model._mask_data[1, 0], 1) self.assertEqual(self.mask_model._mask_data[0, 8], 1) self.assertEqual(self.mask_model._mask_data[1, 8], 1) self.assertEqual(self.mask_model._mask_data[1, 9], 1) self.assertEqual(self.mask_model._mask_data[8, 0], 1) self.assertEqual(self.mask_model._mask_data[8, 1], 1) self.assertEqual(self.mask_model._mask_data[9, 1], 1) self.assertEqual(self.mask_model._mask_data[8, 8], 1) self.assertEqual(self.mask_model._mask_data[8, 9], 1) self.assertEqual(self.mask_model._mask_data[9, 8], 1) # tests center self.assertEqual(self.mask_model._mask_data[3, 3], 1) self.assertEqual(self.mask_model._mask_data[4, 3], 1) self.assertEqual(self.mask_model._mask_data[5, 3], 1) self.assertEqual(self.mask_model._mask_data[3, 5], 1) self.assertEqual(self.mask_model._mask_data[4, 5], 1) self.assertEqual(self.mask_model._mask_data[5, 5], 1) self.assertEqual(self.mask_model._mask_data[3, 4], 1) self.assertEqual(self.mask_model._mask_data[5, 4], 1) def test_shrink_mask(self): self.mask_model._mask_data[4, 4] = 1 self.mask_model._mask_data[0, 0] = 1 self.mask_model._mask_data[0, 9] = 1 self.mask_model._mask_data[9, 9] = 1 self.mask_model._mask_data[9, 0] = 1 self.before_mask = np.copy(self.mask_model._mask_data) self.mask_model.grow() self.mask_model.shrink() self.assertTrue(np.array_equal(self.before_mask, self.mask_model._mask_data)) self.mask_model.clear_mask() self.mask_model._mask_data[4, 4] = 1 self.mask_model._mask_data[5, 4] = 1 self.mask_model._mask_data[5, 5] = 1 self.mask_model._mask_data[4, 5] = 1 self.mask_model.shrink() self.assertEqual(np.sum(self.mask_model._mask_data), 0) def test_saving_and_loading(self): self.mask_model.mask_ellipse(1024, 1024, 100, 100) self.mask_model.set_dimension((2048, 2048)) mask_array = np.copy(self.mask_model.get_img()) filename = os.path.join(data_path, 'dummy.mask') self.mask_model.save_mask(filename) self.mask_model.load_mask(filename) self.assertTrue(np.array_equal(mask_array, self.mask_model.get_img())) os.remove(filename)