class CalibrationControllerTest(unittest.TestCase): def setUp(self): self.app = QtGui.QApplication(sys.argv) self.img_data = ImgData() self.mask_data = MaskData() self.calibration_data = CalibrationData(self.img_data) self.calibration_data._calibrants_working_dir = 'Data/Calibrants' self.calibration_view = CalibrationView() self.working_dir = {} self.calibration_controller = CalibrationController(working_dir=self.working_dir, img_data=self.img_data, mask_data=self.mask_data, view=self.calibration_view, calibration_data=self.calibration_data) def tearDown(self): del self.app def test_automatic_calibration1(self): self.calibration_controller.load_img('Data/LaB6_p49_40keV_006.tif') self.calibration_controller.search_peaks(1179.6, 1129.4) self.calibration_controller.search_peaks(1268.5, 1119.8) self.calibration_controller.view.sv_wavelength_txt.setText('0.31') self.calibration_controller.view.sv_distance_txt.setText('200') self.calibration_controller.view.sv_pixel_width_txt.setText('79') self.calibration_controller.view.sv_pixel_height_txt.setText('79') self.calibration_controller.view.calibrant_cb.setCurrentIndex(7) self.calibration_controller.calibrate() self.calibration_controller.view.cake_view.set_vertical_line_pos(1419.8, 653.4) def test_automatic_calibration2(self): self.calibration_controller.load_img('Data/LaB6_WOS_30keV_005.tif') self.calibration_controller.search_peaks(1245.2, 1919.3) self.calibration_controller.search_peaks(1334.0, 1823.7) self.calibration_controller.view.sv_wavelength_txt.setText('0.3344') self.calibration_controller.view.sv_distance_txt.setText('500') self.calibration_controller.view.sv_pixel_width_txt.setText('200') self.calibration_controller.view.sv_pixel_height_txt.setText('200') self.calibration_controller.view.calibrant_cb.setCurrentIndex(7) self.calibration_controller.calibrate() self.calibration_controller.view.cake_view.set_vertical_line_pos(206.5, 171.6) def test_automatic_calibration3(self): self.calibration_controller.load_img('Data/CeO2_Oct24_2014_001_0000.tif') QTest.mouseClick(self.calibration_view.automatic_peak_num_inc_cb, QtCore.Qt.LeftButton) self.assertFalse(self.calibration_view.automatic_peak_num_inc_cb.isChecked()) self.calibration_controller.search_peaks(517.664434674, 647.529865592) self.calibration_controller.search_peaks(667.380513299, 525.252854758) self.calibration_controller.search_peaks(671.110095329, 473.571503774) self.calibration_controller.search_peaks(592.788872703, 350.495296791) self.calibration_controller.search_peaks(387.395462348, 390.987901686) self.calibration_controller.search_peaks(367.94835605, 554.290314848) self.calibration_controller.view.sv_wavelength_txt.setText('0.406626') self.calibration_controller.view.sv_distance_txt.setText('200') self.calibration_controller.view.sv_pixel_width_txt.setText('172') self.calibration_controller.view.sv_pixel_height_txt.setText('172') self.calibration_controller.view.calibrant_cb.setCurrentIndex(4) start_values = self.calibration_view.get_start_values() self.assertAlmostEqual(start_values['wavelength'], 0.406626e-10) self.assertAlmostEqual(start_values['pixel_height'], 172e-6) self.assertAlmostEqual(start_values['pixel_width'], 172e-6) self.calibration_controller.load_calibrant() self.assertAlmostEqual(self.calibration_data.calibrant.wavelength, 0.406626e-10) QTest.mouseClick(self.calibration_view.integrate_btn, QtCore.Qt.LeftButton) calibration_parameter = self.calibration_data.get_calibration_parameter()[0] self.assertAlmostEqual(calibration_parameter['dist'], .2086, places=4) def test_automatic_calibration_with_supersampling(self): self.calibration_controller.load_img('Data/LaB6_p49_40keV_006.tif') self.calibration_controller.search_peaks(1179.6, 1129.4) self.calibration_controller.search_peaks(1268.5, 1119.8) self.calibration_controller.view.sv_wavelength_txt.setText('0.31') self.calibration_controller.view.sv_distance_txt.setText('200') self.calibration_controller.view.sv_pixel_width_txt.setText('79') self.calibration_controller.view.sv_pixel_height_txt.setText('79') self.calibration_controller.view.calibrant_cb.setCurrentIndex(7) self.img_data.set_supersampling(2) self.calibration_data.set_supersampling(2) self.calibration_controller.calibrate() def test_automatic_calibration_with_supersampling_and_mask(self): self.calibration_controller.load_img('Data/LaB6_p49_40keV_006.tif') self.calibration_controller.search_peaks(1179.6, 1129.4) self.calibration_controller.search_peaks(1268.5, 1119.8) self.calibration_controller.view.sv_wavelength_txt.setText('0.31') self.calibration_controller.view.sv_distance_txt.setText('200') self.calibration_controller.view.sv_pixel_width_txt.setText('79') self.calibration_controller.view.sv_pixel_height_txt.setText('79') self.calibration_controller.view.calibrant_cb.setCurrentIndex(7) self.img_data.set_supersampling(2) self.mask_data.mask_below_threshold(self.img_data._img_data, 1) self.mask_data.set_supersampling(2) self.calibration_data.set_supersampling(2) self.calibration_controller.view.use_mask_cb.setChecked(True) self.calibration_controller.calibrate() def test_calibrating_one_image_size_and_loading_different_image_size(self): self.calibration_controller.load_img('Data/LaB6_p49_40keV_006.tif') self.calibration_controller.search_peaks(1179.6, 1129.4) self.calibration_controller.search_peaks(1268.5, 1119.8) self.calibration_controller.view.sv_wavelength_txt.setText('0.31') self.calibration_controller.view.sv_distance_txt.setText('200') self.calibration_controller.view.sv_pixel_width_txt.setText('79') self.calibration_controller.view.sv_pixel_height_txt.setText('79') self.calibration_controller.view.calibrant_cb.setCurrentIndex(7) self.calibration_controller.view.options_automatic_refinement_cb.setChecked(False) self.calibration_controller.view.use_mask_cb.setChecked(True) self.calibration_controller.calibrate() self.calibration_data.integrate_1d() self.calibration_data.integrate_2d() self.calibration_controller.load_img('Data/CeO2_Pilatus1M.tif') self.calibration_data.integrate_1d() self.calibration_data.integrate_2d() def test_loading_and_saving_of_calibration_files(self): self.calibration_controller.load_calibration('Data/calibration.poni') self.calibration_controller.save_calibration('Data/calibration.poni')
class ImgDataUnitTest(unittest.TestCase): def setUp(self): self.img_data = ImgData() self.img_data.load('Data/Mg2SiO4_ambient_001.tif') def perform_transformations_tests(self): self.assertEqual(np.sum(np.absolute(self.img_data.get_img_data())), 0) self.img_data.rotate_img_m90() self.assertEqual(np.sum(np.absolute(self.img_data.get_img_data())), 0) self.img_data.flip_img_horizontally() self.assertEqual(np.sum(np.absolute(self.img_data.get_img_data())), 0) self.img_data.rotate_img_p90() self.assertEqual(np.sum(np.absolute(self.img_data.get_img_data())), 0) self.img_data.flip_img_vertically() self.assertEqual(np.sum(np.absolute(self.img_data.get_img_data())), 0) self.img_data.reset_img_transformations() self.assertEqual(np.sum(np.absolute(self.img_data.get_img_data())), 0) def test_flipping_images(self): original_image = np.copy(self.img_data._img_data) self.img_data.flip_img_vertically() self.assertTrue(np.array_equal(self.img_data._img_data, np.flipud(original_image))) def test_simple_background_subtraction(self): self.first_image = np.copy(self.img_data.get_img_data()) self.img_data.load_next_file() self.second_image = np.copy(self.img_data.get_img_data()) self.img_data.load('Data/Mg2SiO4_ambient_001.tif') self.img_data.load_background('Data/Mg2SiO4_ambient_002.tif') self.assertFalse(np.array_equal(self.first_image, self.img_data.get_img_data())) self.img_data.load_next_file() self.assertEqual(np.sum(self.img_data.get_img_data()), 0) def test_background_subtraction_with_supersampling(self): self.img_data.load_background('Data/Mg2SiO4_ambient_002.tif') self.img_data.set_supersampling(2) self.img_data.get_img_data() self.img_data.set_supersampling(3) self.img_data.get_img_data() self.img_data.load_next_file() self.img_data.get_img_data() def test_background_subtraction_with_transformation(self): self.img_data.load_background('Data/Mg2SiO4_ambient_002.tif') original_img = np.copy(self.img_data._img_data) original_background = np.copy(self.img_data._background_data) self.assertNotEqual(self.img_data._background_data, None) self.assertFalse(np.array_equal(self.img_data.img_data, self.img_data._img_data)) original_img_background_subtracted = np.copy(self.img_data.get_img_data()) self.assertTrue(np.array_equal(original_img_background_subtracted, original_img-original_background)) ### now comes the main process - flipping the image self.img_data.flip_img_vertically() flipped_img = np.copy(self.img_data._img_data) self.assertTrue(np.array_equal(np.flipud(original_img), flipped_img)) flipped_background = np.copy(self.img_data._background_data) self.assertTrue(np.array_equal(np.flipud(original_background), flipped_background)) flipped_img_background_subtracted = np.copy(self.img_data.get_img_data()) self.assertTrue(np.array_equal(flipped_img_background_subtracted, flipped_img-flipped_background)) self.assertTrue(np.array_equal(np.flipud(original_img_background_subtracted), flipped_img_background_subtracted)) self.assertEqual(np.sum(np.flipud(original_img_background_subtracted)-flipped_img_background_subtracted), 0) self.img_data.load('Data/Mg2SiO4_ambient_002.tif') self.perform_transformations_tests() def test_background_subtraction_with_supersampling_and_image_transformation(self): self.img_data.load_background('Data/Mg2SiO4_ambient_002.tif') self.img_data.load('Data/Mg2SiO4_ambient_002.tif') self.img_data.set_supersampling(2) self.assertEqual(self.img_data.get_img_data().shape, (4096, 4096)) self.perform_transformations_tests() self.img_data.set_supersampling(3) self.assertEqual(self.img_data.get_img_data().shape, (6144, 6144)) self.perform_transformations_tests() self.img_data.load('Data/Mg2SiO4_ambient_002.tif') self.assertEqual(self.img_data.get_img_data().shape, (6144, 6144)) self.perform_transformations_tests() def test_background_scaling_and_offset(self): self.img_data.load_background('Data/Mg2SiO4_ambient_002.tif') #assure that everything is correct before self.assertTrue(np.array_equal(self.img_data.get_img_data(), self.img_data._img_data-self.img_data._background_data)) #set scaling and see difference self.img_data.set_background_scaling(2.4) self.assertTrue(np.array_equal(self.img_data.get_img_data(), self.img_data._img_data-2.4*self.img_data._background_data)) #set offset and see the difference self.img_data.set_background_scaling(1.0) self.img_data.set_background_offset(100.0) self.assertTrue(np.array_equal(self.img_data.img_data, self.img_data._img_data-(self.img_data._background_data+100.0))) #use offset and scaling combined self.img_data.set_background_scaling(2.3) self.img_data.set_background_offset(100.0) self.assertTrue(np.array_equal(self.img_data.img_data, self.img_data._img_data-(2.3*self.img_data._background_data+100))) def test_background_with_different_shape(self): self.img_data.load_background('Data/CeO2_Pilatus1M.tif') self.assertEqual(self.img_data._background_data, None) self.img_data.load_background('Data/Mg2SiO4_ambient_002.tif') self.assertTrue(self.img_data._background_data is not None) self.img_data.load('Data/CeO2_Pilatus1M.tif') self.assertEqual(self.img_data._background_data, None) def test_absorption_correction_with_supersampling(self): original_image = np.copy(self.img_data.get_img_data()) dummy_correction = DummyCorrection(self.img_data.get_img_data().shape, 0.6) self.img_data.add_img_correction(dummy_correction, "Dummy 1") self.assertAlmostEqual(np.sum(original_image)/0.6, np.sum(self.img_data.get_img_data()), places=4) self.img_data.set_supersampling(2) self.img_data.get_img_data() def test_absorption_correction_with_different_image_sizes(self): dummy_correction = DummyCorrection(self.img_data.get_img_data().shape, 0.4) # self.img_data.set_absorption_correction(np.ones(self.img_data._img_data.shape)*0.4) self.img_data.add_img_correction(dummy_correction, "Dummy 1") self.assertTrue(self.img_data._img_corrections.has_items()) self.img_data.load('Data/CeO2_Pilatus1M.tif') self.assertFalse(self.img_data.has_corrections()) def test_adding_several_absorption_corrections(self): original_image = np.copy(self.img_data.get_img_data()) img_shape = original_image.shape self.img_data.add_img_correction(DummyCorrection(img_shape, 0.4)) self.img_data.add_img_correction(DummyCorrection(img_shape, 3)) self.img_data.add_img_correction(DummyCorrection(img_shape, 5)) self.assertTrue(np.sum(original_image)/(0.5*3*5), np.sum(self.img_data.get_img_data())) self.img_data.delete_img_correction(1) self.assertTrue(np.sum(original_image)/(0.5*5), np.sum(self.img_data.get_img_data())) def test_saving_data(self): self.img_data.load('Data/Mg2SiO4_ambient_001.tif') self.img_data.save('Data/TestSaving.tif') first_img_array = np.copy(self.img_data._img_data) self.img_data.load('Data/TestSaving.tif') self.assertTrue(np.array_equal(first_img_array, self.img_data._img_data))