From 9c3206e0451b7922bcbcf977d9b38d544c3e4803 Mon Sep 17 00:00:00 2001 From: Elliot Oram <elliot.oram@stfc.ac.uk> Date: Mon, 20 Nov 2017 17:19:40 +0000 Subject: [PATCH] propagate material through workflow to mantid layer Refs #21214 --- .../Diffraction/isis_powder/abstract_inst.py | 4 +-- scripts/Diffraction/isis_powder/polaris.py | 3 ++- .../routines/absorb_corrections.py | 15 ++--------- .../isis_powder/routines/calibrate.py | 3 +++ .../Diffraction/isis_powder/routines/focus.py | 25 ++++++++++++------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index b854c139a1f..3429aafcc7f 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -49,7 +49,7 @@ class AbstractInst(object): return calibrate.create_van(instrument=self, run_details=run_details, 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 :param run_number_string: The run number(s) to be processed @@ -58,7 +58,7 @@ class AbstractInst(object): """ self._is_vanadium = False 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 diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index c720dfcd86c..8232bd6c7b4 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -28,7 +28,8 @@ class Polaris(AbstractInst): self._inst_settings.update_attributes(kwargs=kwargs) return self._focus(run_number_string=self._inst_settings.run_number, 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): self._switch_mode_specific_inst_settings(kwargs.get("mode")) diff --git a/scripts/Diffraction/isis_powder/routines/absorb_corrections.py b/scripts/Diffraction/isis_powder/routines/absorb_corrections.py index 47407321d6c..caf8c9241ef 100644 --- a/scripts/Diffraction/isis_powder/routines/absorb_corrections.py +++ b/scripts/Diffraction/isis_powder/routines/absorb_corrections.py @@ -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): - geometry_json = {'Shape': 'Cylinder', - 'Height': sample_details_obj.height(), 'Radius': sample_details_obj.radius(), - '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 - + geometry_json = common.generate_sample_geometry(sample_details_obj) + material_json = common.generate_sample_material(sample_details_obj) mantid.SetSample(InputWorkspace=ws_to_correct, Geometry=geometry_json, Material=material_json) diff --git a/scripts/Diffraction/isis_powder/routines/calibrate.py b/scripts/Diffraction/isis_powder/routines/calibrate.py index ecf345e7504..9d3a33ca214 100644 --- a/scripts/Diffraction/isis_powder/routines/calibrate.py +++ b/scripts/Diffraction/isis_powder/routines/calibrate.py @@ -31,6 +31,9 @@ def create_van(instrument, run_details, absorb): if absorb: corrected_van_ws = instrument._apply_absorb_corrections(run_details=run_details, 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, CalibrationFile=run_details.offset_file_path) diff --git a/scripts/Diffraction/isis_powder/routines/focus.py b/scripts/Diffraction/isis_powder/routines/focus.py index 7392910f2ad..cd69aef8ed2 100644 --- a/scripts/Diffraction/isis_powder/routines/focus.py +++ b/scripts/Diffraction/isis_powder/routines/focus.py @@ -7,18 +7,19 @@ from isis_powder.routines.common_enums import INPUT_BATCHING 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() if input_batching == INPUT_BATCHING.Individual: 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: - 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: 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) if perform_vanadium_norm: _test_splined_vanadium_exists(instrument, run_details) @@ -38,7 +39,12 @@ def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm, absorb): # Correct for absorption / multiple scattering if required if absorb: 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 aligned_ws = mantid.AlignDetectors(InputWorkspace=input_workspace, CalibrationFile=run_details.offset_file_path) @@ -88,13 +94,14 @@ def _apply_vanadium_corrections(instrument, run_number, input_workspace, perform 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, instrument=instrument) output = None for ws in read_ws_list: 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 @@ -109,14 +116,14 @@ def _divide_by_vanadium_splines(spectra_list, spline_file_path): 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 run_numbers = common.generate_run_numbers(run_number_string=run_number) output = None for run in run_numbers: 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, - perform_vanadium_norm=perform_vanadium_norm) + perform_vanadium_norm=perform_vanadium_norm, sample_details=sample_details) return output -- GitLab