Skip to content
Snippets Groups Projects
Commit 9c3206e0 authored by Elliot Oram's avatar Elliot Oram
Browse files

propagate material through workflow to mantid layer

Refs #21214
parent 6cc5588a
No related branches found
No related tags found
No related merge requests found
...@@ -49,7 +49,7 @@ class AbstractInst(object): ...@@ -49,7 +49,7 @@ class AbstractInst(object):
return calibrate.create_van(instrument=self, run_details=run_details, return calibrate.create_van(instrument=self, run_details=run_details,
absorb=do_absorb_corrections) absorb=do_absorb_corrections)
def _focus(self, run_number_string, do_van_normalisation, do_absorb_corrections): def _focus(self, run_number_string, do_van_normalisation, do_absorb_corrections, sample_details=None):
""" """
Focuses the user specified run - should be called by the concrete instrument Focuses the user specified run - should be called by the concrete instrument
:param run_number_string: The run number(s) to be processed :param run_number_string: The run number(s) to be processed
...@@ -58,7 +58,7 @@ class AbstractInst(object): ...@@ -58,7 +58,7 @@ class AbstractInst(object):
""" """
self._is_vanadium = False self._is_vanadium = False
return focus.focus(run_number_string=run_number_string, perform_vanadium_norm=do_van_normalisation, return focus.focus(run_number_string=run_number_string, perform_vanadium_norm=do_van_normalisation,
instrument=self, absorb=do_absorb_corrections) instrument=self, absorb=do_absorb_corrections, sample_details=sample_details)
# Mandatory overrides # Mandatory overrides
......
...@@ -28,7 +28,8 @@ class Polaris(AbstractInst): ...@@ -28,7 +28,8 @@ class Polaris(AbstractInst):
self._inst_settings.update_attributes(kwargs=kwargs) self._inst_settings.update_attributes(kwargs=kwargs)
return self._focus(run_number_string=self._inst_settings.run_number, return self._focus(run_number_string=self._inst_settings.run_number,
do_van_normalisation=self._inst_settings.do_van_normalisation, do_van_normalisation=self._inst_settings.do_van_normalisation,
do_absorb_corrections=self._inst_settings.do_absorb_corrections) do_absorb_corrections=self._inst_settings.do_absorb_corrections,
sample_details=self._sample_details)
def create_vanadium(self, **kwargs): def create_vanadium(self, **kwargs):
self._switch_mode_specific_inst_settings(kwargs.get("mode")) self._switch_mode_specific_inst_settings(kwargs.get("mode"))
......
...@@ -85,19 +85,8 @@ def _calculate__cylinder_absorb_corrections(ws_to_correct, multiple_scattering, ...@@ -85,19 +85,8 @@ def _calculate__cylinder_absorb_corrections(ws_to_correct, multiple_scattering,
def _setup_sample_for_cylinder_absorb_corrections(ws_to_correct, sample_details_obj): def _setup_sample_for_cylinder_absorb_corrections(ws_to_correct, sample_details_obj):
geometry_json = {'Shape': 'Cylinder', geometry_json = common.generate_sample_geometry(sample_details_obj)
'Height': sample_details_obj.height(), 'Radius': sample_details_obj.radius(), material_json = common.generate_sample_material(sample_details_obj)
'Center': sample_details_obj.center()}
material = sample_details_obj.material_object
# See SetSampleMaterial for documentation on this dictionary
material_json = {'ChemicalFormula': material.chemical_formula}
if material.number_density:
material_json["SampleNumberDensity"] = material.number_density
if material.absorption_cross_section:
material_json["AttenuationXSection"] = material.absorption_cross_section
if material.scattering_cross_section:
material_json["ScatteringXSection"] = material.scattering_cross_section
mantid.SetSample(InputWorkspace=ws_to_correct, Geometry=geometry_json, Material=material_json) mantid.SetSample(InputWorkspace=ws_to_correct, Geometry=geometry_json, Material=material_json)
......
...@@ -31,6 +31,9 @@ def create_van(instrument, run_details, absorb): ...@@ -31,6 +31,9 @@ def create_van(instrument, run_details, absorb):
if absorb: if absorb:
corrected_van_ws = instrument._apply_absorb_corrections(run_details=run_details, corrected_van_ws = instrument._apply_absorb_corrections(run_details=run_details,
ws_to_correct=corrected_van_ws) ws_to_correct=corrected_van_ws)
else:
# Assume that create_van only uses Vanadium runs
mantid.SetSampleMaterial(InputWorkspace=corrected_van_ws, ChemicalFormula='V')
aligned_ws = mantid.AlignDetectors(InputWorkspace=corrected_van_ws, aligned_ws = mantid.AlignDetectors(InputWorkspace=corrected_van_ws,
CalibrationFile=run_details.offset_file_path) CalibrationFile=run_details.offset_file_path)
......
...@@ -7,18 +7,19 @@ from isis_powder.routines.common_enums import INPUT_BATCHING ...@@ -7,18 +7,19 @@ from isis_powder.routines.common_enums import INPUT_BATCHING
import os import os
def focus(run_number_string, instrument, perform_vanadium_norm, absorb): def focus(run_number_string, instrument, perform_vanadium_norm, absorb, sample_details=None):
input_batching = instrument._get_input_batching_mode() input_batching = instrument._get_input_batching_mode()
if input_batching == INPUT_BATCHING.Individual: if input_batching == INPUT_BATCHING.Individual:
return _individual_run_focusing(instrument=instrument, perform_vanadium_norm=perform_vanadium_norm, return _individual_run_focusing(instrument=instrument, perform_vanadium_norm=perform_vanadium_norm,
run_number=run_number_string, absorb=absorb) run_number=run_number_string, absorb=absorb, sample_details=sample_details)
elif input_batching == INPUT_BATCHING.Summed: elif input_batching == INPUT_BATCHING.Summed:
return _batched_run_focusing(instrument, perform_vanadium_norm, run_number_string, absorb=absorb) return _batched_run_focusing(instrument, perform_vanadium_norm, run_number_string, absorb=absorb,
sample_details=sample_details)
else: else:
raise ValueError("Input batching not passed through. Please contact development team.") raise ValueError("Input batching not passed through. Please contact development team.")
def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm, absorb): def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm, absorb, sample_details):
run_details = instrument._get_run_details(run_number_string=run_number) run_details = instrument._get_run_details(run_number_string=run_number)
if perform_vanadium_norm: if perform_vanadium_norm:
_test_splined_vanadium_exists(instrument, run_details) _test_splined_vanadium_exists(instrument, run_details)
...@@ -38,7 +39,12 @@ def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm, absorb): ...@@ -38,7 +39,12 @@ def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm, absorb):
# Correct for absorption / multiple scattering if required # Correct for absorption / multiple scattering if required
if absorb: if absorb:
input_workspace = instrument._apply_absorb_corrections(run_details=run_details, ws_to_correct=input_workspace) input_workspace = instrument._apply_absorb_corrections(run_details=run_details, ws_to_correct=input_workspace)
else:
# Set sample material if specified by the user
if sample_details is not None:
mantid.SetSample(InputWorkspace=input_workspace,
Geometry=common.generate_sample_geometry(sample_details),
Material=common.generate_sample_material(sample_details))
# Align # Align
aligned_ws = mantid.AlignDetectors(InputWorkspace=input_workspace, aligned_ws = mantid.AlignDetectors(InputWorkspace=input_workspace,
CalibrationFile=run_details.offset_file_path) CalibrationFile=run_details.offset_file_path)
...@@ -88,13 +94,14 @@ def _apply_vanadium_corrections(instrument, run_number, input_workspace, perform ...@@ -88,13 +94,14 @@ def _apply_vanadium_corrections(instrument, run_number, input_workspace, perform
return processed_spectra return processed_spectra
def _batched_run_focusing(instrument, perform_vanadium_norm, run_number_string, absorb): def _batched_run_focusing(instrument, perform_vanadium_norm, run_number_string, absorb, sample_details):
read_ws_list = common.load_current_normalised_ws_list(run_number_string=run_number_string, read_ws_list = common.load_current_normalised_ws_list(run_number_string=run_number_string,
instrument=instrument) instrument=instrument)
output = None output = None
for ws in read_ws_list: for ws in read_ws_list:
output = _focus_one_ws(ws=ws, run_number=run_number_string, instrument=instrument, output = _focus_one_ws(ws=ws, run_number=run_number_string, instrument=instrument,
perform_vanadium_norm=perform_vanadium_norm, absorb=absorb) perform_vanadium_norm=perform_vanadium_norm, absorb=absorb,
sample_details=sample_details)
return output return output
...@@ -109,14 +116,14 @@ def _divide_by_vanadium_splines(spectra_list, spline_file_path): ...@@ -109,14 +116,14 @@ def _divide_by_vanadium_splines(spectra_list, spline_file_path):
return output_list return output_list
def _individual_run_focusing(instrument, perform_vanadium_norm, run_number, absorb): def _individual_run_focusing(instrument, perform_vanadium_norm, run_number, absorb, sample_details):
# Load and process one by one # Load and process one by one
run_numbers = common.generate_run_numbers(run_number_string=run_number) run_numbers = common.generate_run_numbers(run_number_string=run_number)
output = None output = None
for run in run_numbers: for run in run_numbers:
ws = common.load_current_normalised_ws_list(run_number_string=run, instrument=instrument) ws = common.load_current_normalised_ws_list(run_number_string=run, instrument=instrument)
output = _focus_one_ws(ws=ws[0], run_number=run, instrument=instrument, absorb=absorb, output = _focus_one_ws(ws=ws[0], run_number=run, instrument=instrument, absorb=absorb,
perform_vanadium_norm=perform_vanadium_norm) perform_vanadium_norm=perform_vanadium_norm, sample_details=sample_details)
return output return output
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment