def _get_state_gui_model(): user_file_path = create_user_file(sample_user_file) user_file_reader = UserFileReader(user_file_path) user_file_items = user_file_reader.read_user_file() if os.path.exists(user_file_path): os.remove(user_file_path) return StateGuiModel(user_file_items)
def test_state_can_be_created_from_valid_user_file_with_data_information(self): # Arrange file_information = SANSFileInformationMock(instrument=SANSInstrument.SANS2D, run_number=22024) data_builder = get_data_builder(SANSFacility.ISIS, file_information) data_builder.set_sample_scatter("SANS2D00022024") data_builder.set_sample_scatter_period(3) data_state = data_builder.build() user_file_path = create_user_file(sample_user_file) parser = UserFileReaderAdapter(user_file_name=user_file_path, data_info=data_state) state = parser.get_all_states() # Assert self._assert_data(state) self._assert_move(state) self._assert_mask(state) self._assert_reduction(state) self._assert_wavelength(state) self._assert_scale(state) self._assert_adjustment(state) self._assert_convert_to_q(state) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_that_will_load_user_file(self): # Setup self.presenter.and mock view user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, _ = create_mock_view(user_file_path) self.presenter.set_view(view) # Mock out methods which should be called self.presenter._beam_centre_presenter = mock.Mock() self.presenter._masking_table_presenter = mock.Mock() self.presenter.update_view_from_model = mock.Mock() self.presenter._workspace_diagnostic_presenter = mock.Mock() with mock.patch( "sans.gui_logic.presenter.run_tab_presenter.FileLoading" ) as mocked_loader: mocked_loader.load_user_file.return_value = AllStates() self.presenter.on_user_file_load() mocked_loader.load_user_file.assert_called_once_with( file_path=user_file_path, file_information=mock.ANY) self.presenter._beam_centre_presenter.update_centre_positions.assert_called( ) self.presenter._beam_centre_presenter.on_update_rows.assert_called() self.presenter._masking_table_presenter.on_update_rows.assert_called() self.presenter._workspace_diagnostic_presenter.on_user_file_loadassert_called( ) self.presenter.update_view_from_model.assert_called() # Assert # Note that the event slices are not set in the user file # clean up remove_file(user_file_path)
def test_state_can_be_created_from_valid_user_file_with_data_information(self): # Arrange file_information = SANSFileInformationMock(instrument=SANSInstrument.SANS2D, run_number=22024) data_builder = get_data_builder(SANSFacility.ISIS, file_information, user_file="USER_SANS2D_154E_2p4_4m_M3_Xpress_8mm_SampleChanger_FRONT.txt") data_builder.set_sample_scatter("SANS2D00022024") data_builder.set_sample_scatter_period(3) data_state = data_builder.build() director = StateDirectorISIS(data_state, file_information) user_file_path = create_user_file(sample_user_file) director.set_user_file(user_file_path) state = director.construct() # Assert self._assert_data(state) self._assert_move(state) self._assert_mask(state) self._assert_reduction(state) self._assert_wavelength(state) self._assert_scale(state) self._assert_adjustment(state) self._assert_convert_to_q(state) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_that_gets_pre_processing_options_are_valid_and_other_options_are_empty( self): # Arrange presenter = MainPresenter(SANSFacility.ISIS) content = "# MANTID_BATCH_FILE add more text here\n" \ "sample_sans,SANS2D00022024,sample_trans,SANS2D00022048," \ "sample_direct_beam,SANS2D00022048,output_as,test_file\n" \ "sample_sans,SANS2D00022024,output_as,test_file2\n" batch_file_path = save_to_csv(content) user_file_path = create_user_file(sample_user_file) view = create_mock_view2(user_file_path, batch_file_path) presenter.set_view(view) # Act pre_processing_options = presenter.getProcessingOptions() # Assert expected = {'UseOptimizations':'1','OutputMode':'PublishToADS','PlotResults':'1', \ 'OutputGraph':'SANS-Latest'} self.assertEqual(expected, pre_processing_options) self.assertFalse(presenter.getPreprocessingOptions()) self.assertFalse(presenter.getPostprocessingOptionsAsString()) # Clean up remove_file(sample_user_file) remove_file(user_file_path)
def test_state_can_be_created_from_valid_user_file_with_data_information(self): # Arrange data_builder = get_data_builder(SANSFacility.ISIS) data_builder.set_sample_scatter("SANS2D00022024") data_builder.set_sample_scatter_period(3) data_state = data_builder.build() director = StateDirectorISIS(data_state) user_file_path = create_user_file(sample_user_file) director.set_user_file(user_file_path) state = director.construct() # Assert self._assert_data(state) self._assert_move(state) self._assert_mask(state) self._assert_reduction(state) self._assert_wavelength(state) self._assert_scale(state) self._assert_adjustment(state) self._assert_convert_to_q(state) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_stat_can_be_crated_from_valid_user_file_and_later_on_reset(self): # Arrange data_builder = get_data_builder(SANSFacility.ISIS) data_builder.set_sample_scatter("SANS2D00022024") data_builder.set_sample_scatter_period(3) data_state = data_builder.build() director = StateDirectorISIS(data_state) user_file_path = create_user_file(sample_user_file) director.set_user_file(user_file_path) # Set additional items director.set_mask_builder_radius_min(0.001298) director.set_mask_builder_radius_max(0.003298) director.set_scale_builder_width(1.) director.set_scale_builder_height(1.5) director.set_scale_builder_thickness(12.) director.set_scale_builder_shape(SampleShape.Cuboid) # Act state = director.construct() # Assert self.assertTrue(state.mask.radius_min == 0.001298) self.assertTrue(state.mask.radius_max == 0.003298) self.assertTrue(state.scale.width == 1.) self.assertTrue(state.scale.height == 1.5) self.assertTrue(state.scale.thickness == 12.) self.assertTrue(state.scale.shape is SampleShape.Cuboid) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_stat_can_be_created_from_valid_user_file_and_later_on_reset(self): # Arrange file_information = SANSFileInformationMock(instrument=SANSInstrument.SANS2D, run_number=22024) data_builder = get_data_builder(SANSFacility.ISIS, file_information) data_builder.set_sample_scatter("SANS2D00022024") data_builder.set_sample_scatter_period(3) data_state = data_builder.build() director = StateDirectorISIS(data_state, file_information) user_file_path = create_user_file(sample_user_file) director.set_user_file(user_file_path) # Set additional items director.set_mask_builder_radius_min(0.001298) director.set_mask_builder_radius_max(0.003298) director.set_scale_builder_width(1.) director.set_scale_builder_height(1.5) director.set_scale_builder_thickness(12.) director.set_scale_builder_shape(SampleShape.FlatPlate) # Act state = director.construct() # Assert self.assertEqual(state.mask.radius_min, 0.001298) self.assertEqual(state.mask.radius_max, 0.003298) self.assertEqual(state.scale.width, 1.) self.assertEqual(state.scale.height, 1.5) self.assertEqual(state.scale.thickness, 12.) self.assertEqual(state.scale.shape, SampleShape.FlatPlate) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_state_can_be_created_from_valid_user_file_with_data_information( self): # Arrange data_builder = get_data_builder(SANSFacility.ISIS) data_builder.set_sample_scatter("SANS2D00022024") data_builder.set_sample_scatter_period(3) data_state = data_builder.build() director = StateDirectorISIS(data_state) user_file_path = create_user_file(sample_user_file) director.set_user_file(user_file_path) state = director.construct() # Assert self._assert_data(state) self._assert_move(state) self._assert_mask(state) self._assert_reduction(state) self._assert_wavelength(state) self._assert_scale(state) self._assert_adjustment(state) self._assert_convert_to_q(state) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_that_gets_pre_processing_options_are_valid_and_other_options_are_empty(self): # Arrange presenter = MainPresenter(SANSFacility.ISIS) content = "# MANTID_BATCH_FILE add more text here\n" \ "sample_sans,SANS2D00022024,sample_trans,SANS2D00022048," \ "sample_direct_beam,SANS2D00022048,output_as,test_file\n" \ "sample_sans,SANS2D00022024,output_as,test_file2\n" batch_file_path = save_to_csv(content) user_file_path = create_user_file(sample_user_file) view = create_mock_view2(user_file_path, batch_file_path) presenter.set_view(view) # Act pre_processing_options = presenter.getProcessingOptions() # Assert expected = {'UseOptimizations':'1','OutputMode':'PublishToADS','PlotResults':'1', \ 'OutputGraph':'SANS-Latest'} self.assertEqual(expected, pre_processing_options) self.assertFalse(presenter.getPreprocessingOptions()) self.assertFalse(presenter.getPostprocessingOptionsAsString()) # Clean up remove_file(sample_user_file) remove_file(user_file_path)
def _get_files_and_mock_presenter(content): batch_file_path = save_to_csv(content) user_file_path = create_user_file(sample_user_file) view, _, _ = create_mock_view(user_file_path, batch_file_path) # We just use the sample_user_file since it exists. view.get_mask_file = mock.MagicMock(return_value=user_file_path) presenter = RunTabPresenter(SANSFacility.ISIS) presenter.set_view(view) return batch_file_path, user_file_path, presenter, view
def test_that_create_state_creates_correct_state(self): user_file_path = create_user_file(sample_user_file) user_file_reader = UserFileReader(user_file_path) user_file_items = user_file_reader.read_user_file() state_from_view = StateGuiModel(user_file_items) state = create_state(state_from_view, "SANS2D00022024", '', SANSFacility.ISIS) self.assertEqual(state.data.sample_scatter, "SANS2D00022024")
def test_that_create_state_creates_correct_state(self): user_file_path = create_user_file(sample_user_file) user_file_reader = UserFileReaderAdapter(user_file_name=user_file_path, file_information=None) user_file_items = user_file_reader.get_all_states(file_information=None) state_from_view = StateGuiModel(user_file_items) state = create_state(state_from_view, "SANS2D00022024", '', SANSFacility.ISIS) self.assertEqual(state.data.sample_scatter, "SANS2D00022024")
def test_that_can_get_states_from_row_user_file(self): # Arrange row_user_file_path = create_user_file(sample_user_file_gravity_OFF) batch_file_path, user_file_path, presenter, _ = self._get_files_and_mock_presenter( BATCH_FILE_TEST_CONTENT_4, row_user_file_path=row_user_file_path) presenter.on_user_file_load() presenter.on_batch_file_load() # Act state = presenter.get_state_for_row(1) state0 = presenter.get_state_for_row(0) # Assert self.assertTrue(state.convert_to_q.use_gravity is False) self.assertTrue(state0.convert_to_q.use_gravity is True)
def _get_files_and_mock_presenter(self, content, is_multi_period=True, row_user_file_path = ""): batch_parser = mock.MagicMock() batch_parser.parse_batch_file = mock.MagicMock(return_value=content) self.BatchCsvParserMock.return_value = batch_parser batch_file_path = 'batch_file_path' user_file_path = create_user_file(sample_user_file) view, _, _ = create_mock_view(user_file_path, batch_file_path, row_user_file_path) # We just use the sample_user_file since it exists. view.get_mask_file = mock.MagicMock(return_value=user_file_path) view.is_multi_period_view = mock.MagicMock(return_value=is_multi_period) presenter = RunTabPresenter(SANSFacility.ISIS) presenter.set_view(view) return batch_file_path, user_file_path, presenter, view
def test_batch_file_dir_not_added_to_config_if_batch_file_load_fails(self): presenter = RunTabPresenter(SANSFacility.ISIS) user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, masking_table = create_mock_view( user_file_path, "A/Path/batch_file.csv") presenter.set_view(view) presenter.on_batch_file_load() config_dirs = config["datasearch.directories"] result = "A/Path/" in config_dirs self.assertFalse( result, "We do not expect A/Path/ to be added to config, " "datasearch.directories is now {}".format(config_dirs))
def test_fails_silently_when_batch_file_does_not_exist(self): presenter = RunTabPresenter(SANSFacility.ISIS) user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, masking_table = create_mock_view( user_file_path, "non_existent_batch_file") presenter.set_view(view) try: presenter.on_batch_file_load() has_raised = False except: # noqa has_raised = True self.assertFalse(has_raised) # Clean up self._remove_files(user_file_path=user_file_path)
def test_that_can_get_states_from_row_user_file(self): # Arrange row_user_file_path = create_user_file(sample_user_file_gravity_OFF) batch_file_path, user_file_path, presenter, _ = self._get_files_and_mock_presenter(BATCH_FILE_TEST_CONTENT_2, row_user_file_path = row_user_file_path) presenter.on_user_file_load() presenter.on_batch_file_load() # Act state = presenter.get_state_for_row(1) state0 = presenter.get_state_for_row(0) # Assert self.assertTrue(state.convert_to_q.use_gravity is False) self.assertTrue(state0.convert_to_q.use_gravity is True)
def test_move_with_hab_centre_uses_hab_centre_value(self): user_file_centre = """ set centre 160.2 -170.5 set centre/hab 160.5 -170.1 """ user_file_path = create_user_file(user_file_centre) mocked_sans = self.create_mock_inst_file_information(SANSInstrument.SANS2D) parser = UserFileReaderAdapter(user_file_name=user_file_path, file_information=mocked_sans) state = parser.get_all_states(file_information=mocked_sans) move = state.move lab = move.detectors[DetectorType.LAB.value] hab = move.detectors[DetectorType.HAB.value] self.assertEqual(lab.sample_centre_pos1, 160.2/1000.) self.assertEqual(lab.sample_centre_pos2, -170.5/1000.) self.assertEqual(hab.sample_centre_pos1, 160.5/1000. ) self.assertEqual(hab.sample_centre_pos2, -170.1/1000.)
def test_fails_silently_when_batch_file_does_not_exist(self): self.os_patcher.stop() presenter = RunTabPresenter(SANSFacility.ISIS) user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, masking_table = create_mock_view(user_file_path, "non_existent_batch_file") presenter.set_view(view) try: presenter.on_batch_file_load() has_raised = False except: # noqa has_raised = True self.assertFalse(has_raised) # Clean up self._remove_files(user_file_path=user_file_path) self.os_patcher.start()
def test_that_can_get_states_from_row_user_file(self): # Arrange row_user_file_path = create_user_file(sample_user_file_gravity_OFF) batch_file_path, user_file_path, presenter, _ = self._get_files_and_mock_presenter(BATCH_FILE_TEST_CONTENT_4, row_user_file_path = row_user_file_path) presenter.on_user_file_load() presenter.on_batch_file_load() presenter._table_model.update_thickness_from_file_information(1, self.get_file_information_mock()) presenter._table_model.update_thickness_from_file_information(2, self.get_file_information_mock()) # Act state = presenter.get_state_for_row(1) state0 = presenter.get_state_for_row(0) # Assert self.assertFalse(state.convert_to_q.use_gravity) self.assertTrue(state0.convert_to_q.use_gravity)
def test_that_returns_none_when_index_does_not_exist(self): # Arrange batch_file_path = save_to_csv(BATCH_FILE_TEST_CONTENT_2) user_file_path = create_user_file(sample_user_file) view, _, _ = create_mock_view(user_file_path, batch_file_path) presenter = RunTabPresenter(SANSFacility.ISIS) presenter.set_view(view) presenter.on_user_file_load() presenter.on_batch_file_load() # Act state = presenter.get_state_for_row(3) # Assert self.assertTrue(state is None) # Clean up remove_file(batch_file_path) remove_file(user_file_path)
def test_state_can_be_created_from_valid_user_file_with_data_information(self): user_file_path = create_user_file(sample_user_file) mocked_sans = self.create_mock_inst_file_information(SANSInstrument.SANS2D) parser = UserFileReaderAdapter(user_file_name=user_file_path, file_information=mocked_sans) state = parser.get_all_states(file_information=mocked_sans) # Assert self._assert_move(state) self._assert_mask(state) self._assert_reduction(state) self._assert_wavelength(state) self._assert_scale(state) self._assert_adjustment(state) self._assert_convert_to_q(state) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def _get_files_and_mock_presenter(self, content, is_multi_period=True, row_user_file_path=""): if row_user_file_path: content[1].user_file = row_user_file_path batch_parser = mock.MagicMock() batch_parser.parse_batch_file = mock.MagicMock(return_value=content) self._mock_csv_parser.return_value = batch_parser batch_file_path = 'batch_file_path' user_file_path = create_user_file(sample_user_file) view, _, _ = create_mock_view(user_file_path, batch_file_path, row_user_file_path) # We just use the sample_user_file since it exists. view.get_mask_file = mock.MagicMock(return_value=user_file_path) view.is_multi_period_view = mock.MagicMock( return_value=is_multi_period) self.presenter.set_view(view) return batch_file_path, user_file_path, view
def _get_state_gui_model(): user_file_path = create_user_file(sample_user_file) adapter = UserFileReaderAdapter(file_information=None, user_file_name=user_file_path) return StateGuiModel(adapter.get_all_states(file_information=None))
def test_that_can_read_user_file(self): # Arrange user_file_path = create_user_file(sample_user_file) reader = UserFileReader(user_file_path) # Act output = reader.read_user_file() # Assert expected_values = {LimitsId.wavelength: [simple_range(start=1.5, stop=12.5, step=0.125, step_type=RangeStepType.Lin)], LimitsId.q: [q_rebin_values(min=.001, max=.2, rebin_string="0.001,0.001,0.0126,-0.08,0.2")], LimitsId.qxy: [simple_range(0, 0.05, 0.001, RangeStepType.Lin)], BackId.single_monitors: [back_single_monitor_entry(1, 35000, 65000), back_single_monitor_entry(2, 85000, 98000)], DetectorId.reduction_mode: [ISISReductionMode.LAB], GravityId.on_off: [True], FitId.general: [fit_general(start=1.5, stop=12.5, fit_type=FitType.Logarithmic, data_type=None, polynomial_order=0)], MaskId.vertical_single_strip_mask: [single_entry_with_detector(191, DetectorType.LAB), single_entry_with_detector(191, DetectorType.HAB), single_entry_with_detector(0, DetectorType.LAB), single_entry_with_detector(0, DetectorType.HAB)], MaskId.horizontal_single_strip_mask: [single_entry_with_detector(0, DetectorType.LAB), single_entry_with_detector(0, DetectorType.HAB)], MaskId.horizontal_range_strip_mask: [range_entry_with_detector(190, 191, DetectorType.LAB), range_entry_with_detector(167, 172, DetectorType.LAB), range_entry_with_detector(190, 191, DetectorType.HAB), range_entry_with_detector(156, 159, DetectorType.HAB) ], MaskId.time: [range_entry_with_detector(17500, 22000, None)], MonId.direct: [monitor_file("DIRECTM1_15785_12m_31Oct12_v12.dat", DetectorType.LAB), monitor_file("DIRECTM1_15785_12m_31Oct12_v12.dat", DetectorType.HAB)], MonId.spectrum: [monitor_spectrum(1, True, True), monitor_spectrum(1, False, True)], SetId.centre: [position_entry(155.45, -169.6, DetectorType.LAB)], SetId.scales: [set_scales_entry(0.074, 1.0, 1.0, 1.0, 1.0)], SampleId.offset: [53.0], DetectorId.correction_x: [single_entry_with_detector(-16.0, DetectorType.LAB), single_entry_with_detector(-44.0, DetectorType.HAB)], DetectorId.correction_y: [single_entry_with_detector(-20.0, DetectorType.HAB)], DetectorId.correction_z: [single_entry_with_detector(47.0, DetectorType.LAB), single_entry_with_detector(47.0, DetectorType.HAB)], DetectorId.correction_rotation: [single_entry_with_detector(0.0, DetectorType.HAB)], LimitsId.events_binning: ["7000.0,500.0,60000.0"], MaskId.clear_detector_mask: [True], MaskId.clear_time_mask: [True], LimitsId.radius: [range_entry(12, 15)], TransId.spec_shift: [-70.], PrintId.print_line: ["for changer"], BackId.all_monitors: [range_entry(start=3500, stop=4500)], FitId.monitor_times: [range_entry(start=1000, stop=2000)], TransId.spec: [4], BackId.trans: [range_entry(start=123, stop=466)], TransId.radius: [7.0], TransId.roi: ["test.xml", "test2.xml"], TransId.mask: ["test3.xml", "test4.xml"], SampleId.path: [True], LimitsId.radius_cut: [200.0], LimitsId.wavelength_cut: [8.0], QResolutionId.on: [True], QResolutionId.delta_r: [11.], QResolutionId.collimation_length: [12.], QResolutionId.a1: [13.], QResolutionId.a2: [14.], QResolutionId.moderator: ["moderator_rkh_file.txt"], TubeCalibrationFileId.file: ["TUBE_SANS2D_BOTH_31681_25Sept15.nxs"]} self.assertEqual(len(expected_values), len(output)) for key, value in list(expected_values.items()): self.assertTrue(key in output) self.assertEqual(len(output[key]), len(value)) elements = output[key] # Make sure that the different entries are sorted UserFileReaderTest._sort_list(elements) UserFileReaderTest._sort_list(value) self.assertEqual(elements, value, "{} is not {}".format(elements, value)) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_that_will_load_user_file(self): # Setup presenter and mock view user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, _ = create_mock_view(user_file_path) presenter = RunTabPresenter(SANSFacility.ISIS) presenter.set_view(view) # Act presenter.on_user_file_load() # Assert # Note that the event slices are not set in the user file self.assertFalse(view.event_slices) self.assertTrue(view.reduction_dimensionality is ReductionDimensionality.OneDim) self.assertTrue(view.save_types[0] is SaveType.NXcanSAS) self.assertTrue(view.zero_error_free) self.assertTrue(view.use_optimizations) self.assertTrue(view.reduction_mode is ISISReductionMode.LAB) self.assertTrue(view.merge_scale == 1.) self.assertTrue(view.merge_shift == 0.) self.assertFalse(view.merge_scale_fit) self.assertFalse(view.merge_shift_fit) self.assertTrue(view.event_binning == "7000.0,500.0,60000.0") self.assertTrue(view.wavelength_step_type is RangeStepType.Lin) self.assertTrue(view.wavelength_min == 1.5) self.assertTrue(view.wavelength_max == 12.5) self.assertTrue(view.wavelength_step == 0.125) self.assertTrue(view.absolute_scale == 0.074) self.assertTrue(view.z_offset == 53.) self.assertTrue(view.normalization_incident_monitor == 1) self.assertTrue(view.normalization_interpolate) self.assertTrue(view.transmission_incident_monitor == 1) self.assertTrue(view.transmission_interpolate) self.assertTrue(view.transmission_roi_files == "test2.xml") self.assertTrue(view.transmission_mask_files == "test4.xml") self.assertTrue(view.transmission_radius == 7.) self.assertTrue(view.transmission_monitor == 4) self.assertTrue(view.transmission_mn_shift == -70) self.assertTrue(view.transmission_sample_use_fit) self.assertTrue(view.transmission_sample_fit_type is FitType.Logarithmic) self.assertTrue(view.transmission_sample_polynomial_order == 2) self.assertTrue(view.transmission_sample_wavelength_min == 1.5) self.assertTrue(view.transmission_sample_wavelength_max == 12.5) self.assertTrue(view.transmission_sample_use_wavelength) self.assertFalse(view.pixel_adjustment_det_1) self.assertFalse(view.pixel_adjustment_det_2) self.assertFalse(view.wavelength_adjustment_det_1) self.assertFalse(view.wavelength_adjustment_det_2) self.assertTrue(view.q_1d_min_or_rebin_string == "0.001,0.001,0.0126,-0.08,0.2") self.assertTrue(view.q_xy_max == 0.05) self.assertTrue(view.q_xy_step == 0.001) self.assertTrue(view.q_xy_step_type == RangeStepType.Lin) self.assertTrue(view.gravity_on_off) self.assertTrue(view.use_q_resolution) self.assertTrue(view.q_resolution_sample_a == 14.) self.assertTrue(view.q_resolution_source_a == 13.) self.assertTrue(view.q_resolution_delta_r == 11.) self.assertTrue(view.q_resolution_collimation_length == 12.) self.assertTrue(view.q_resolution_moderator_file == "moderator_rkh_file.txt") self.assertFalse(view.phi_limit_use_mirror) self.assertTrue(view.radius_limit_min == 12.) self.assertTrue(view.radius_limit_min == 12.) self.assertTrue(view.radius_limit_max == 15.) self.assertFalse(view.compatibility_mode) self.assertFalse(view.show_transmission) # Assert that Beam Centre View is updated correctly self.assertEqual(view.beam_centre.lab_pos_1, 155.45) self.assertEqual(view.beam_centre.lab_pos_2, -169.6) self.assertEqual(view.beam_centre.hab_pos_1, 155.45) self.assertEqual(view.beam_centre.hab_pos_2, -169.6) # Assert certain function calls self.assertTrue(view.get_user_file_path.call_count == 3) self.assertTrue(view.get_batch_file_path.call_count == 2) # called twice for the sub presenter updates (masking table and settings diagnostic tab) # noqa self.assertTrue(view.get_cell.call_count == 64) self.assertTrue(view.get_number_of_rows.call_count == 6) # clean up remove_file(user_file_path)
def test_that_can_read_user_file(self): # Arrange user_file_path = create_user_file(sample_user_file) reader = UserFileReader(user_file_path) # Act output = reader.read_user_file() # Assert expected_values = { LimitsId.WAVELENGTH: [ simple_range(start=1.5, stop=12.5, step=0.125, step_type=RangeStepType.LIN) ], LimitsId.Q: [ q_rebin_values(min=.001, max=.2, rebin_string="0.001,0.001,0.0126,-0.08,0.2") ], LimitsId.QXY: [simple_range(0, 0.05, 0.001, RangeStepType.LIN)], BackId.SINGLE_MONITORS: [ back_single_monitor_entry(1, 35000, 65000), back_single_monitor_entry(2, 85000, 98000) ], DetectorId.REDUCTION_MODE: [ReductionMode.LAB], GravityId.ON_OFF: [True], FitId.GENERAL: [ fit_general(start=1.5, stop=12.5, fit_type=FitType.LOGARITHMIC, data_type=None, polynomial_order=0) ], MaskId.VERTICAL_SINGLE_STRIP_MASK: [ single_entry_with_detector(191, DetectorType.LAB), single_entry_with_detector(191, DetectorType.HAB), single_entry_with_detector(0, DetectorType.LAB), single_entry_with_detector(0, DetectorType.HAB) ], MaskId.HORIZONTAL_SINGLE_STRIP_MASK: [ single_entry_with_detector(0, DetectorType.LAB), single_entry_with_detector(0, DetectorType.HAB) ], MaskId.HORIZONTAL_RANGE_STRIP_MASK: [ range_entry_with_detector(190, 191, DetectorType.LAB), range_entry_with_detector(167, 172, DetectorType.LAB), range_entry_with_detector(190, 191, DetectorType.HAB), range_entry_with_detector(156, 159, DetectorType.HAB) ], MaskId.TIME: [range_entry_with_detector(17500, 22000, None)], MonId.DIRECT: [ monitor_file("DIRECTM1_15785_12m_31Oct12_v12.dat", DetectorType.LAB), monitor_file("DIRECTM1_15785_12m_31Oct12_v12.dat", DetectorType.HAB) ], MonId.SPECTRUM: [ monitor_spectrum(1, True, True), monitor_spectrum(1, False, True) ], SetId.CENTRE: [position_entry(155.45, -169.6, DetectorType.LAB)], SetId.SCALES: [set_scales_entry(0.074, 1.0, 1.0, 1.0, 1.0)], SampleId.OFFSET: [53.0], DetectorId.CORRECTION_X: [ single_entry_with_detector(-16.0, DetectorType.LAB), single_entry_with_detector(-44.0, DetectorType.HAB) ], DetectorId.CORRECTION_Y: [single_entry_with_detector(-20.0, DetectorType.HAB)], DetectorId.CORRECTION_Z: [ single_entry_with_detector(47.0, DetectorType.LAB), single_entry_with_detector(47.0, DetectorType.HAB) ], DetectorId.CORRECTION_ROTATION: [single_entry_with_detector(0.0, DetectorType.HAB)], LimitsId.EVENTS_BINNING: ["7000.0,500.0,60000.0"], MaskId.CLEAR_DETECTOR_MASK: [True], MaskId.CLEAR_TIME_MASK: [True], LimitsId.RADIUS: [range_entry(12, 15)], TransId.SPEC_4_SHIFT: [-70.], PrintId.PRINT_LINE: ["for changer"], BackId.ALL_MONITORS: [range_entry(start=3500, stop=4500)], FitId.MONITOR_TIMES: [range_entry(start=1000, stop=2000)], TransId.SPEC: [4], BackId.TRANS: [range_entry(start=123, stop=466)], TransId.RADIUS: [7.0], TransId.ROI: ["test.xml", "test2.xml"], TransId.MASK: ["test3.xml", "test4.xml"], SampleId.PATH: [True], LimitsId.RADIUS_CUT: [200.0], LimitsId.WAVELENGTH_CUT: [8.0], QResolutionId.ON: [True], QResolutionId.DELTA_R: [11.], QResolutionId.COLLIMATION_LENGTH: [12.], QResolutionId.A1: [13.], QResolutionId.A2: [14.], QResolutionId.MODERATOR: ["moderator_rkh_file.txt"], TubeCalibrationFileId.FILE: ["TUBE_SANS2D_BOTH_31681_25Sept15.nxs"] } self.assertEqual(len(expected_values), len(output)) for key, value in list(expected_values.items()): self.assertTrue(key in output) self.assertEqual(len(output[key]), len(value)) elements = output[key] # Make sure that the different entries are sorted UserFileReaderTest._sort_list(elements) UserFileReaderTest._sort_list(value) self.assertEqual(elements, value, "{} is not {}".format(elements, value)) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_that_can_read_user_file(self): # Arrange user_file_path = create_user_file(sample_user_file) reader = UserFileReader(user_file_path) # Act output = reader.read_user_file() # Assert expected_values = { LimitsId.wavelength: [ simple_range(start=1.5, stop=12.5, step=0.125, step_type=RangeStepType.Lin) ], LimitsId.q: [ q_rebin_values(min=.001, max=.2, rebin_string="0.001,0.001,0.0126,-0.08,0.2") ], LimitsId.qxy: [simple_range(0, 0.05, 0.001, RangeStepType.Lin)], BackId.single_monitors: [ back_single_monitor_entry(1, 35000, 65000), back_single_monitor_entry(2, 85000, 98000) ], DetectorId.reduction_mode: [ISISReductionMode.LAB], GravityId.on_off: [True], FitId.general: [ fit_general(start=1.5, stop=12.5, fit_type=FitType.Logarithmic, data_type=None, polynomial_order=0) ], MaskId.vertical_single_strip_mask: [ single_entry_with_detector(191, DetectorType.LAB), single_entry_with_detector(191, DetectorType.HAB), single_entry_with_detector(0, DetectorType.LAB), single_entry_with_detector(0, DetectorType.HAB) ], MaskId.horizontal_single_strip_mask: [ single_entry_with_detector(0, DetectorType.LAB), single_entry_with_detector(0, DetectorType.HAB) ], MaskId.horizontal_range_strip_mask: [ range_entry_with_detector(190, 191, DetectorType.LAB), range_entry_with_detector(167, 172, DetectorType.LAB), range_entry_with_detector(190, 191, DetectorType.HAB), range_entry_with_detector(156, 159, DetectorType.HAB) ], MaskId.time: [range_entry_with_detector(17500, 22000, None)], MonId.direct: [ monitor_file("DIRECTM1_15785_12m_31Oct12_v12.dat", DetectorType.LAB), monitor_file("DIRECTM1_15785_12m_31Oct12_v12.dat", DetectorType.HAB) ], MonId.spectrum: [ monitor_spectrum(1, True, True), monitor_spectrum(1, False, True) ], SetId.centre: [position_entry(155.45, -169.6, DetectorType.LAB)], SetId.scales: [set_scales_entry(0.074, 1.0, 1.0, 1.0, 1.0)], SampleId.offset: [53.0], DetectorId.correction_x: [ single_entry_with_detector(-16.0, DetectorType.LAB), single_entry_with_detector(-44.0, DetectorType.HAB) ], DetectorId.correction_y: [single_entry_with_detector(-20.0, DetectorType.HAB)], DetectorId.correction_z: [ single_entry_with_detector(47.0, DetectorType.LAB), single_entry_with_detector(47.0, DetectorType.HAB) ], DetectorId.correction_rotation: [single_entry_with_detector(0.0, DetectorType.HAB)], LimitsId.events_binning: ["7000.0,500.0,60000.0"], MaskId.clear_detector_mask: [True], MaskId.clear_time_mask: [True], LimitsId.radius: [range_entry(12, 15)], TransId.spec_shift: [-70.], PrintId.print_line: ["for changer"], BackId.all_monitors: [range_entry(start=3500, stop=4500)], FitId.monitor_times: [range_entry(start=1000, stop=2000)], TransId.spec: [4], BackId.trans: [range_entry(start=123, stop=466)], TransId.radius: [7.0], TransId.roi: ["test.xml", "test2.xml"], TransId.mask: ["test3.xml", "test4.xml"], SampleId.path: [True], LimitsId.radius_cut: [200.0], LimitsId.wavelength_cut: [8.0], QResolutionId.on: [True], QResolutionId.delta_r: [11.], QResolutionId.collimation_length: [12.], QResolutionId.a1: [13.], QResolutionId.a2: [14.], QResolutionId.moderator: ["moderator_rkh_file.txt"], TubeCalibrationFileId.file: ["TUBE_SANS2D_BOTH_31681_25Sept15.nxs"] } self.assertTrue(len(expected_values) == len(output)) for key, value in list(expected_values.items()): self.assertTrue(key in output) self.assertTrue(len(output[key]) == len(value)) elements = output[key] # Make sure that the different entries are sorted UserFileReaderTest._sort_list(elements) UserFileReaderTest._sort_list(value) self.assertTrue(elements == value) # clean up if os.path.exists(user_file_path): os.remove(user_file_path)
def test_that_will_load_user_file(self): # Setup self.presenter.and mock view user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, _ = create_mock_view(user_file_path) self.presenter.set_view(view) # Act try: self.presenter.on_user_file_load() except RuntimeError: # Assert that RuntimeError from no instrument is caught self.fail( "on_user_file_load raises a RuntimeError which should be caught" ) # Assert # Note that the event slices are not set in the user file self.assertFalse(view.event_slices) self.assertEqual(view.reduction_dimensionality, ReductionDimensionality.ONE_DIM) self.assertEqual(view.save_types[0], SaveType.NX_CAN_SAS) self.assertTrue(view.zero_error_free) self.assertTrue(view.use_optimizations) self.assertEqual(view.reduction_mode, ReductionMode.LAB) self.assertEqual(view.merge_scale, 1.) self.assertEqual(view.merge_shift, 0.) self.assertFalse(view.merge_scale_fit) self.assertFalse(view.merge_shift_fit) self.assertEqual(view.event_binning, "7000.0,500.0,60000.0") self.assertEqual(view.wavelength_step_type, RangeStepType.LIN) self.assertEqual(view.wavelength_min, 1.5) self.assertEqual(view.wavelength_max, 12.5) self.assertEqual(view.wavelength_step, 0.125) self.assertEqual(view.absolute_scale, 0.074) self.assertEqual(view.z_offset, 53.) self.assertEqual(view.normalization_incident_monitor, 1) self.assertTrue(view.normalization_interpolate) self.assertEqual(view.transmission_incident_monitor, 1) self.assertTrue(view.transmission_interpolate) self.assertEqual(view.transmission_roi_files, "test2.xml") self.assertEqual(view.transmission_mask_files, "test4.xml") self.assertEqual(view.transmission_radius, 7.) self.assertEqual(view.transmission_monitor, 4) self.assertEqual(view.transmission_mn_4_shift, -70) self.assertTrue(view.transmission_sample_use_fit) self.assertEqual(view.transmission_sample_fit_type, FitType.LOGARITHMIC) self.assertEqual(view.transmission_sample_polynomial_order, 2) self.assertEqual(view.transmission_sample_wavelength_min, 1.5) self.assertEqual(view.transmission_sample_wavelength_max, 12.5) self.assertTrue(view.transmission_sample_use_wavelength) self.assertFalse(view.pixel_adjustment_det_1) self.assertFalse(view.pixel_adjustment_det_2) self.assertFalse(view.wavelength_adjustment_det_1) self.assertFalse(view.wavelength_adjustment_det_2) self.assertEqual(view.q_1d_min_or_rebin_string, "0.001,0.001,0.0126,-0.08,0.2") self.assertEqual(view.q_xy_max, 0.05) self.assertEqual(view.q_xy_step, 0.001) self.assertEqual(view.q_xy_step_type, RangeStepType.LIN) self.assertTrue(view.gravity_on_off) self.assertTrue(view.use_q_resolution) self.assertEqual(view.q_resolution_sample_a, 14.) self.assertEqual(view.q_resolution_source_a, 13.) self.assertEqual(view.q_resolution_delta_r, 11.) self.assertEqual(view.q_resolution_collimation_length, 12.) self.assertEqual(view.q_resolution_moderator_file, "moderator_rkh_file.txt") self.assertTrue(view.phi_limit_use_mirror) self.assertEqual(view.radius_limit_min, 12.) self.assertEqual(view.radius_limit_min, 12.) self.assertEqual(view.radius_limit_max, 15.) self.assertTrue(view.compatibility_mode) # clean up remove_file(user_file_path)
def test_that_will_load_user_file(self): # Setup presenter and mock view user_file_path = create_user_file(sample_user_file) view, settings_diagnostic_tab, _ = create_mock_view(user_file_path) presenter = RunTabPresenter(SANSFacility.ISIS) presenter.set_view(view) # Act presenter.on_user_file_load() # Assert # Note that the event slices are not set in the user file self.assertFalse(view.event_slices) self.assertTrue( view.reduction_dimensionality is ReductionDimensionality.OneDim) self.assertTrue(view.save_types[0] is SaveType.NXcanSAS) self.assertTrue(view.zero_error_free) self.assertTrue(view.use_optimizations) self.assertTrue(view.reduction_mode is ISISReductionMode.LAB) self.assertTrue(view.merge_scale == 1.) self.assertTrue(view.merge_shift == 0.) self.assertFalse(view.merge_scale_fit) self.assertFalse(view.merge_shift_fit) self.assertTrue(view.event_binning == "7000.0,500.0,60000.0") self.assertTrue(view.wavelength_step_type is RangeStepType.Lin) self.assertTrue(view.wavelength_min == 1.5) self.assertTrue(view.wavelength_max == 12.5) self.assertTrue(view.wavelength_step == 0.125) self.assertTrue(view.absolute_scale == 0.074) self.assertTrue(view.z_offset == 53.) self.assertTrue(view.normalization_incident_monitor == 1) self.assertTrue(view.normalization_interpolate) self.assertTrue(view.transmission_incident_monitor == 1) self.assertTrue(view.transmission_interpolate) self.assertTrue(view.transmission_roi_files == "test2.xml") self.assertTrue(view.transmission_mask_files == "test4.xml") self.assertTrue(view.transmission_radius == 7.) self.assertTrue(view.transmission_monitor == 4) self.assertTrue(view.transmission_mn_shift == -70) self.assertTrue(view.transmission_sample_use_fit) self.assertTrue( view.transmission_sample_fit_type is FitType.Logarithmic) self.assertTrue(view.transmission_sample_polynomial_order == 2) self.assertTrue(view.transmission_sample_wavelength_min == 1.5) self.assertTrue(view.transmission_sample_wavelength_max == 12.5) self.assertTrue(view.transmission_sample_use_wavelength) self.assertFalse(view.pixel_adjustment_det_1) self.assertFalse(view.pixel_adjustment_det_2) self.assertFalse(view.wavelength_adjustment_det_1) self.assertFalse(view.wavelength_adjustment_det_2) self.assertTrue( view.q_1d_min_or_rebin_string == "0.001,0.001,0.0126,-0.08,0.2") self.assertTrue(view.q_xy_max == 0.05) self.assertTrue(view.q_xy_step == 0.001) self.assertTrue(view.q_xy_step_type == RangeStepType.Lin) self.assertTrue(view.gravity_on_off) self.assertTrue(view.use_q_resolution) self.assertTrue(view.q_resolution_sample_a == 14.) self.assertTrue(view.q_resolution_source_a == 13.) self.assertTrue(view.q_resolution_delta_r == 11.) self.assertTrue(view.q_resolution_collimation_length == 12.) self.assertTrue( view.q_resolution_moderator_file == "moderator_rkh_file.txt") self.assertTrue(view.phi_limit_use_mirror) self.assertTrue(view.radius_limit_min == 12.) self.assertTrue(view.radius_limit_min == 12.) self.assertTrue(view.radius_limit_max == 15.) self.assertFalse(view.compatibility_mode) self.assertTrue(view.show_transmission) # Assert that Beam Centre View is updated correctly self.assertEqual(view.beam_centre.lab_pos_1, 155.45) self.assertEqual(view.beam_centre.lab_pos_2, -169.6) self.assertEqual(view.beam_centre.hab_pos_1, 155.45) self.assertEqual(view.beam_centre.hab_pos_2, -169.6) # clean up remove_file(user_file_path)