def test_warning_raised_when_convert_run_log_with_unrecognised_units(self): import mantid.simpleapi as mantid target = mantid.CloneWorkspace(self.base_event_ws) with warnings.catch_warnings(record=True) as caught_warnings: mantidcompat.convert_EventWorkspace_to_data_array(target, False) assert len( caught_warnings ) > 0, "Expected warnings due to some run logs " \ "having unrecognised units strings" assert any("unrecognised units" in str(caught_warning.message) for caught_warning in caught_warnings)
def test_EventWorkspace_no_y_unit(self): import mantid.simpleapi as mantid tiny_event_ws = mantid.CreateSampleWorkspace(WorkspaceType='Event', NumBanks=1, NumEvents=1) d = mantidcompat.convert_EventWorkspace_to_data_array( tiny_event_ws, load_pulse_times=False) self.assertEqual(d.data.unit, sc.units.counts) tiny_event_ws.setYUnit('') d = mantidcompat.convert_EventWorkspace_to_data_array( tiny_event_ws, load_pulse_times=False) self.assertEqual(d.data.unit, sc.units.dimensionless)
def test_unit_conversion(self): import mantid.simpleapi as mantid eventWS = mantid.CloneWorkspace(self.base_event_ws) ws = mantid.Rebin(eventWS, 10000, PreserveEvents=False) tmp = mantidcompat.convert_Workspace2D_to_data_array(ws) target_tof = tmp.coords['tof'] ws = mantid.ConvertUnits(InputWorkspace=ws, Target="Wavelength", EMode="Elastic") converted_mantid = mantidcompat.convert_Workspace2D_to_data_array(ws) da = mantidcompat.convert_EventWorkspace_to_data_array( eventWS, load_pulse_times=False) da.realign({'tof': target_tof}) da = sc.histogram(da) d = sc.Dataset(da) converted = sc.neutron.convert(d, 'tof', 'wavelength') self.assertTrue( np.all(np.isclose(converted_mantid.values, converted[""].values))) self.assertTrue( np.all( np.isclose( converted_mantid.coords['wavelength'].values, converted.coords['wavelength'].values, )))
def test_EventWorkspace_realign_events(self): import mantid.simpleapi as mantid eventWS = mantid.CloneWorkspace(self.base_event_ws) realigned = mantidcompat.convert_EventWorkspace_to_data_array( eventWS, realign_events=True, load_pulse_times=False) d = mantidcompat.convert_EventWorkspace_to_data_array( eventWS, realign_events=False, load_pulse_times=False) d.realign({'tof': realigned.coords['tof']}) # Removing run and sample due to missing comparison operators del d.attrs['run'] del d.attrs['sample'] del realigned.attrs['run'] del realigned.attrs['sample'] assert realigned == d
def test_set_sample(self): import mantid.simpleapi as mantid target = mantid.CloneWorkspace(self.base_event_ws) d = mantidcompat.convert_EventWorkspace_to_data_array(target, False) d.attrs["sample"].value.setThickness(3) # before self.assertNotEqual(3, target.sample().getThickness()) target.setSample(d.attrs["sample"].value) # after self.assertEqual(3, target.sample().getThickness())
def test_set_run(self): import mantid.simpleapi as mantid target = mantid.CloneWorkspace(self.base_event_ws) d = mantidcompat.convert_EventWorkspace_to_data_array(target, False) d.attrs["run"].value.addProperty("test_property", 1, True) # before self.assertFalse(target.run().hasProperty("test_property")) target.setRun(d.attrs["run"].value) # after self.assertTrue(target.run().hasProperty("test_property"))
def test_no_warning_raised_explicitly_dimensionless_run_log(self): import mantid.simpleapi as mantid target = mantid.CloneWorkspace(self.base_event_ws) with warnings.catch_warnings(record=True) as caught_warnings: mantidcompat.convert_EventWorkspace_to_data_array(target, False) original_number_of_warnings = len(caught_warnings) # Add an explicitly dimensionless log mantid.AddSampleLog(Workspace=target, LogName='dimensionless_log', LogText='1', LogType='Number', LogUnit='dimensionless') with warnings.catch_warnings(record=True) as caught_warnings: mantidcompat.convert_EventWorkspace_to_data_array(target, False) assert len(caught_warnings) == original_number_of_warnings,\ "Expected no extra warning about unrecognised units " \ "from explicitly dimensionless log"
def test_EventWorkspace(self): import mantid.simpleapi as mantid eventWS = mantid.CloneWorkspace(self.base_event_ws) ws = mantid.Rebin(eventWS, 10000) binned_mantid = mantidcompat.convert_Workspace2D_to_data_array(ws) target_tof = binned_mantid.coords[sc.Dim.Tof] d = mantidcompat.convert_EventWorkspace_to_data_array(eventWS, False) binned = sc.histogram(d, target_tof) delta = sc.sum(binned_mantid - binned, sc.Dim.Spectrum) delta = sc.sum(delta, sc.Dim.Tof) self.assertLess(np.abs(delta.value), 1e-5)
def test_EventWorkspace(self): import mantid.simpleapi as mantid eventWS = mantid.CloneWorkspace(self.base_event_ws) ws = mantid.Rebin(eventWS, 10000) binned_mantid = mantidcompat.convert_Workspace2D_to_data_array(ws) target_tof = binned_mantid.coords['tof'] d = mantidcompat.convert_EventWorkspace_to_data_array( eventWS, load_pulse_times=False) binned = sc.histogram(d.bins, target_tof) delta = sc.sum(binned_mantid - binned, 'spectrum') delta = sc.sum(delta, 'tof') self.assertLess(np.abs(delta.value), 1e-5)
def test_convert_scalar_run_log_to_attrs(self): # Given a Mantid workspace with a run log import mantid.simpleapi as mantid target = mantid.CloneWorkspace(self.base_event_ws) log_name = "start_time" self.assertTrue( target.run().hasProperty(log_name), f"Expected input workspace to have a {log_name} run log") # When the workspace is converted to a scipp data array d = mantidcompat.convert_EventWorkspace_to_data_array(target, False) # Then the data array contains the run log as an unaligned coord self.assertEqual( target.run()[log_name].value, d.attrs[log_name].value, "Expected value of the unaligned coord to match " "the original run log from the Mantid workspace")
def test_convert_array_run_log_to_attrs(self): # Given a Mantid workspace with a run log import mantid.simpleapi as mantid target = mantid.CloneWorkspace(self.base_event_ws) log_name = "SampleTemp" self.assertTrue( target.run().hasProperty(log_name), f"Expected input workspace to have a {log_name} run log") # When the workspace is converted to a scipp data array d = mantidcompat.convert_EventWorkspace_to_data_array(target, False) # Then the data array contains the run log as an unaligned coord self.assertTrue( np.allclose(target.run()[log_name].value, d.attrs[log_name].values.data.values), "Expected values in the unaligned coord to match " "the original run log from the Mantid workspace") self.assertEqual(d.attrs[log_name].values.unit, sc.units.K) self.assertTrue( np.array_equal(target.run()[log_name].times.astype(np.int64), d.attrs[log_name].values.coords["time"].values), "Expected times in the unaligned coord to match " "the original run log from the Mantid workspace")
def test_comparison(self): a = mantidcompat.convert_EventWorkspace_to_data_array( self.base_event_ws, load_pulse_times=False) b = a.copy() assert a == b