diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index 759fda4b9a13345010b2f12e7a472f093d8bc6d4..954b17fd9e0cfa11bf2fa946d7aec0fbc4e70df9 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -262,7 +262,7 @@ class AbstractInst(object): def _subtract_sample_empty(self, input_sample): return input_sample - def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, vanadium_path=None): + def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, calibration_dict=None): return ws_to_correct def _load_monitor(self, number, cycle): diff --git a/scripts/Diffraction/isis_powder/focus.py b/scripts/Diffraction/isis_powder/focus.py index a22598b898a13b322b938a6efb37837ee4605714..da980a745a0f0332df31adea334fb40428d5fca2 100644 --- a/scripts/Diffraction/isis_powder/focus.py +++ b/scripts/Diffraction/isis_powder/focus.py @@ -25,7 +25,7 @@ def _run_focus(instrument, run_number, perform_attenuation, perform_vanadium_nor # TODO fix this - maybe have it save solid angle corrections and just load/apply input_workspace = instrument._apply_solid_angle_efficiency_corr(ws_to_correct=input_workspace, - vanadium_path=calibration_file_paths["vanadium"]) + calibration_dict=calibration_file_paths) focused_ws = mantid.DiffractionFocussing(InputWorkspace=input_workspace, GroupingFileName=calibration_file_paths["grouping"]) diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index 1d450e47c2854e0d8ef33b3f7bebd2ac1588dee0..f7149f37e26d562922e70be213da4b609d475e13 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -120,24 +120,34 @@ class Polaris(AbstractInst): common.remove_intermediate_workspace(empty_sample) return input_sample - def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, vanadium_path=None): - assert(vanadium_number or vanadium_path) + def _apply_solid_angle_efficiency_corr(self, ws_to_correct, vanadium_number=None, calibration_dict=None): + assert(vanadium_number or calibration_dict) + if not calibration_dict or not os.path.isfile(calibration_dict["solid_angle_corr"]): + corrections = self.generate_solid_angle_corrections(calibration_dict, vanadium_number) + else: + corrections = mantid.Load(Filename=calibration_dict["solid_angle_corr"]) + + corrected_ws = mantid.Divide(LHSWorkspace=ws_to_correct, RHSWorkspace=corrections) + common.remove_intermediate_workspace(corrections) + common.remove_intermediate_workspace(ws_to_correct) + ws_to_correct = corrected_ws + return ws_to_correct + + def generate_solid_angle_corrections(self, calibration_dict, vanadium_number): if vanadium_number: solid_angle_vanadium_ws = common._load_raw_files(run_number=vanadium_number, instrument=self) else: - solid_angle_vanadium_ws = mantid.Load(Filename=vanadium_path) - + solid_angle_vanadium_ws = mantid.Load(Filename=calibration_dict["vanadium"]) normalised_vanadium_ws = self._normalise_ws(solid_angle_vanadium_ws) corrections = self._calculate_solid_angle_efficiency_corrections(normalised_vanadium_ws) - corrected_ws = mantid.Divide(LHSWorkspace=ws_to_correct, RHSWorkspace=corrections) + if calibration_dict: + mantid.SaveNexusProcessed(InputWorkspace=corrections, Filename=calibration_dict["solid_angle_corr"]) + common.remove_intermediate_workspace(solid_angle_vanadium_ws) common.remove_intermediate_workspace(normalised_vanadium_ws) - common.remove_intermediate_workspace(corrections) - common.remove_intermediate_workspace(ws_to_correct) - ws_to_correct = corrected_ws - return ws_to_correct + return corrections def correct_sample_vanadium(self, focused_ws, index, vanadium_ws=None): spectra_name = "sample_ws-" + str(index + 1)