diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index 0edcefd62a9e6a4a4662dc41b1604a55ec275e40..d7efcb8f929f66277637fab95b0cd8beb5b2197c 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -248,7 +248,8 @@ class AbstractInst(object): return _empty_hook_return_none() def _skip_appending_cycle_to_raw_dir(self): - return False + return True + # TODO set this to False if they just dump their raw files in one folder def _mask_noisy_detectors(self, vanadium_run): pass diff --git a/scripts/Diffraction/isis_powder/focus.py b/scripts/Diffraction/isis_powder/focus.py index a950fd8ea114af291ec4eeb420b6f1d7c76e21e1..e9f8365183bb14bf5342292ee30879e5d4341b4d 100644 --- a/scripts/Diffraction/isis_powder/focus.py +++ b/scripts/Diffraction/isis_powder/focus.py @@ -58,7 +58,7 @@ def _divide_sample_by_vanadium(instrument, run_number, input_workspace, perform_ for index in range(0, alg_range): if perform_vanadium_norm: - vanadium_ws = mantid.LoadNexus(Filename=input_file_paths["vanadium"], EntryNumber=index + 1) + vanadium_ws = mantid.LoadNexus(Filename=input_file_paths["calibrated_vanadium"], EntryNumber=index + 1) processed_spectra.append( instrument.correct_sample_vanadium(focused_ws=input_workspace, index=index, vanadium_ws=vanadium_ws)) @@ -66,6 +66,6 @@ def _divide_sample_by_vanadium(instrument, run_number, input_workspace, perform_ common.remove_intermediate_workspace(vanadium_ws) else: processed_spectra.append( - instrument.calc_calibration_without_vanadium(focused_ws=input_workspace, index=index)) + instrument.correct_sample_vanadium(focused_ws=input_workspace, index=index)) - return processed_spectra \ No newline at end of file + return processed_spectra diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py index 64350f84a79ff5f13d7849e95b929da232cbfb8a..ce0d146be8d42bcd37715eef8085b0ecd5b1c04c 100644 --- a/scripts/Diffraction/isis_powder/pearl.py +++ b/scripts/Diffraction/isis_powder/pearl.py @@ -78,10 +78,12 @@ class Pearl(AbstractInst): van_absorb_full_path = calibration_dir + van_absorb van_file_full_path = calibration_dir + van_file + # TODO when we move PEARL to save out splined vanadium files support them below calibration_details = {"calibration": calibration_full_path, "grouping": grouping_full_path, "vanadium_absorption": van_absorb_full_path, - "vanadium": van_file_full_path} + "vanadium": van_file_full_path, + "calibrated_vanadium": van_file_full_path} return calibration_details diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index be0d90af90cf2632afc7ae84b29661d9c0e226f9..695ed4d108d8ae067e7089bd09683dbc056247e2 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -4,6 +4,7 @@ import mantid.simpleapi as mantid from isis_powder.abstract_inst import AbstractInst from isis_powder.polaris_routines import polaris_calib_factory +from isis_powder.polaris_routines import polaris_calib_parser import isis_powder.common as common @@ -43,19 +44,25 @@ class Polaris(AbstractInst): def _get_calibration_full_paths(self, cycle): # TODO implement this properly - offset_file_name, grouping_file_name, vanadium_file_name = polaris_calib_factory.get_calibration_file(cycle) + # offset_file_name, grouping_file_name, vanadium_file_name = polaris_calib_factory.get_calibration_file(cycle) + configuration = polaris_calib_parser.get_calibration_dict(cycle) calibration_dir = self.calibration_dir - calibration_full_path = calibration_dir + offset_file_name - grouping_full_path = calibration_dir + grouping_file_name - vanadium_absorb_full_path = None - vanadium_full_path = self.raw_data_dir + vanadium_file_name + # Assume the raw vanadium is with other raw files + vanadium_full_path = self.raw_data_dir + configuration["vanadium_file_name"] + + calibration_full_path = calibration_dir + configuration["offset_file_name"] + grouping_full_path = calibration_dir + configuration["grouping_file_name"] + + calibrated_full_path = calibration_dir + configuration["calibrated_vanadium_file_name"] + solid_angle_file_path = calibration_dir + configuration["solid_angle_file_name"] calibration_details = {"calibration": calibration_full_path, "grouping": grouping_full_path, - "vanadium_absorption": vanadium_absorb_full_path, - "vanadium": vanadium_full_path} + "vanadium": vanadium_full_path, + "calibrated_vanadium": calibrated_full_path, + "solid_angle_corr": solid_angle_file_path} return calibration_details @@ -71,7 +78,7 @@ class Polaris(AbstractInst): @staticmethod def _get_cycle_information(run_number): - return {"cycle": "", # TODO implement properly + return {"cycle": "test", # TODO implement properly "instrument_version": ""} def _normalise_ws(self, ws_to_correct, monitor_ws=None, spline_terms=20): @@ -133,10 +140,16 @@ class Polaris(AbstractInst): ws_to_correct = corrected_ws return ws_to_correct - def _focus_processing(self, run_number, input_workspace, perform_vanadium_norm): - self._get_cycle_information(run_number=run_number) - + def correct_sample_vanadium(self, focused_ws, index, vanadium_ws=None): + spectra_name = "sample_ws-" + str(index + 1) + mantid.CropWorkspace(InputWorkspace=focused_ws, OutputWorkspace=spectra_name, + StartWorkspaceIndex=index, EndWorkspaceIndex=index) + if vanadium_ws: + van_rebinned = mantid.RebinToWorkspace(WorkspaceToRebin=vanadium_ws, WorkspaceToMatch=spectra_name) + mantid.Divide(LHSWorkspace=spectra_name, RHSWorkspace=van_rebinned, OutputWorkspace=spectra_name) + common.remove_intermediate_workspace(van_rebinned) + return spectra_name def _spline_background(self, focused_vanadium_ws, spline_number, instrument_version=''): @@ -144,7 +157,7 @@ class Polaris(AbstractInst): spline_number = 100 mode = "spline" # TODO support spline modes for all instruments - extracted_spectra = _extract_vanadium_spectra(focused_vanadium_ws, self._number_of_banks) + extracted_spectra = _extract_bank_spectra(focused_vanadium_ws, self._number_of_banks) if mode == "spline": output = self._mask_spline_vanadium_ws(vanadium_spectra_list=extracted_spectra, @@ -221,14 +234,14 @@ class Polaris(AbstractInst): # Class private implementation -def _extract_vanadium_spectra(vanadium_ws, num_banks): - vanadium_spectra_list = [] +def _extract_bank_spectra(ws_to_split, num_banks): + spectra_bank_list = [] for i in range(0, num_banks): - output_name = "vanadium-" + str(i + 1) + output_name = "bank-" + str(i + 1) # Have to use crop workspace as extract single spectrum struggles with the variable bin widths - vanadium_spectra_list.append(mantid.CropWorkspace(InputWorkspace=vanadium_ws, OutputWorkspace=output_name, - StartWorkspaceIndex=i, EndWorkspaceIndex=i)) - return vanadium_spectra_list + spectra_bank_list.append(mantid.CropWorkspace(InputWorkspace=ws_to_split, OutputWorkspace=output_name, + StartWorkspaceIndex=i, EndWorkspaceIndex=i)) + return spectra_bank_list def _apply_masking(workspaces_to_mask, mask_list): @@ -253,5 +266,3 @@ def _apply_masking(workspaces_to_mask, mask_list): return output_workspaces - -def _divide_sample_vanadium_splines(sample_ws, vanadium_splines_ws) \ No newline at end of file diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_calib_parser.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_calib_parser.py new file mode 100644 index 0000000000000000000000000000000000000000..86589d2223c50c832f81ca5e030ab85e2699f511 --- /dev/null +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_calib_parser.py @@ -0,0 +1,29 @@ +from __future__ import (absolute_import, division, print_function) + +import os +import yaml + + +def get_calibration_dict(cycle): + config_file = _open_yaml_file() + try: + output = config_file[str(cycle)] + except KeyError: + raise RuntimeError("Cycle " + str(cycle) + " not defined in calibration file") + return output + + +def _open_yaml_file(): + config_file_name = "polaris_calibration.yaml" + config_file_path = os.path.join(os.path.dirname(__file__), config_file_name) + + read_config = None + + with open(config_file_path, 'r') as input_stream: + try: + read_config = yaml.load(input_stream) + except yaml.YAMLError as exception: + print(exception) + raise RuntimeError("Failed to parse POLARIS calibration YAML file") + + return read_config diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_calibration.yaml b/scripts/Diffraction/isis_powder/polaris_routines/polaris_calibration.yaml new file mode 100644 index 0000000000000000000000000000000000000000..125f1d312986e5d3d8bb7a3496204e0a86708c5c --- /dev/null +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_calibration.yaml @@ -0,0 +1,15 @@ +# The format is as follows: + +#cycle: +# offset_file_name : "name.cal" +# grouping_file_name : "grouping.cal" +# vanadium_file_name : "raw_vanadium_run.raw" +# calibrated_vanadium_file_name : "calibrated_vanadium_name.nxs" +# solid_angle_file_name : "solid_angle_corrections.nxs" + +test: + offset_file_name : "offsets_2011_cycle111b.cal" + grouping_file_name : "offsets_2011_cycle111b.cal" + vanadium_file_name : "POL78338.raw" + calibrated_vanadium_file_name : "calibrated_vanadium_name.nxs" + solid_angle_file_name : "solid_angle_corrections.nxs"