From a221d192a258f6654837e6008c294a9029492d30 Mon Sep 17 00:00:00 2001 From: David Fairbrother <DavidFair@users.noreply.github.com> Date: Fri, 17 Feb 2017 17:48:13 +0000 Subject: [PATCH] Re #18643 Implement output for GEM Calibration --- .../Diffraction/isis_powder/abstract_inst.py | 11 +++- scripts/Diffraction/isis_powder/gem.py | 2 +- .../isis_powder/gem_routines/gem_algs.py | 5 ++ .../isis_powder/pearl_routines/pearl_algs.py | 16 ++---- scripts/Diffraction/isis_powder/polaris.py | 19 +------ .../polaris_routines/polaris_algs.py | 36 ++----------- .../polaris_routines/polaris_output.py | 30 ----------- .../isis_powder/routines/calibrate.py | 1 + .../isis_powder/routines/common.py | 17 +++++++ .../isis_powder/routines/common_output.py | 51 +++++++++++++++++++ 10 files changed, 95 insertions(+), 93 deletions(-) delete mode 100644 scripts/Diffraction/isis_powder/polaris_routines/polaris_output.py create mode 100644 scripts/Diffraction/isis_powder/routines/common_output.py diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index daa33153ab7..0d3718a2a04 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -1,7 +1,7 @@ from __future__ import (absolute_import, division, print_function) import os -from isis_powder.routines import calibrate, focus, common, common_enums +from isis_powder.routines import calibrate, focus, common, common_enums, common_output # This class provides common hooks for instruments to override @@ -193,7 +193,14 @@ class AbstractInst(object): :param output_mode: Optional - Sets additional saving/grouping behaviour depending on the instrument :return: d-spacing group of the processed output workspaces """ - return None + d_spacing_group, tof_group = common_output.split_into_tof_d_spacing_groups(run_details=run_details, + processed_spectra=processed_spectra) + output_paths = self._generate_out_file_paths(run_details=run_details) + + common_output.save_focused_data(d_spacing_group=d_spacing_group, tof_group=tof_group, + output_paths=output_paths, inst_prefix="POL", + run_number_string=run_details.user_input_run_number) + return d_spacing_group # Steps applicable to all instruments diff --git a/scripts/Diffraction/isis_powder/gem.py b/scripts/Diffraction/isis_powder/gem.py index 773c575c9fc..c7cba00a89e 100644 --- a/scripts/Diffraction/isis_powder/gem.py +++ b/scripts/Diffraction/isis_powder/gem.py @@ -42,7 +42,7 @@ class Gem(AbstractInst): raise NotImplementedError() def _generate_output_file_name(self, run_number_string): - raise NotImplementedError() + return self._generate_input_file_name(run_number_string) @staticmethod def _generate_input_file_name(run_number): diff --git a/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py b/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py index b6935fc26bc..f5001cca8c7 100644 --- a/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py +++ b/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py @@ -21,7 +21,10 @@ def get_run_details(run_number_string, inst_settings): calibration_folder = os.path.normpath(os.path.expanduser(inst_settings.calibration_dir)) label_calibration_folder = os.path.join(calibration_folder, label) + splined_vanadium_name = common.generate_splined_name(vanadium_runs, offset_file_name) + offset_file_path = os.path.join(label_calibration_folder, offset_file_name) + splined_file_path = os.path.join(label_calibration_folder, splined_vanadium_name) # TODO generate splined vanadium name from common @@ -34,4 +37,6 @@ def get_run_details(run_number_string, inst_settings): run_details.grouping_file_path = offset_file_path run_details.offset_file_path = offset_file_path + run_details.splined_vanadium_file_path = splined_file_path + return run_details diff --git a/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py b/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py index 021f8861574..770159e86d2 100644 --- a/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py +++ b/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py @@ -79,10 +79,11 @@ def get_run_details(run_number_string, inst_settings): label = common.cal_map_dictionary_key_helper(mapping_dict, "label") vanadium_run_numbers = common.cal_map_dictionary_key_helper(mapping_dict, "vanadium_run_numbers") - splined_vanadium_name = _generate_splined_van_name(absorb_on=inst_settings.absorb_corrections, - vanadium_run_string=vanadium_run_numbers, - long_mode_on=inst_settings.long_mode, - tt_mode=inst_settings.tt_mode) + # Use generate out name to provide the unique fingerprint for this file + splined_vanadium_name = common.generate_splined_name( + generate_out_name(run_number_string=vanadium_run_numbers, + absorb_on=inst_settings.absorb_corrections, + long_mode_on=inst_settings.long_mode, tt_mode=inst_settings.tt_mode)) calibration_dir = inst_settings.calibration_dir cycle_calibration_dir = os.path.join(calibration_dir, label) @@ -158,10 +159,3 @@ def strip_bragg_peaks(ws_list_to_correct): OutputWorkspace=ws_list_to_correct[13], FWHM=60, Tolerance=10) return ws_list_to_correct - - -def _generate_splined_van_name(vanadium_run_string, absorb_on, long_mode_on, tt_mode): - generated_out_name = generate_out_name(run_number_string=vanadium_run_string, absorb_on=absorb_on, - long_mode_on=long_mode_on, tt_mode=tt_mode) - output_string = "SplinedVan_" + generated_out_name + ".nxs" - return output_string diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index 833cfccc071..32352f86eba 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -2,12 +2,9 @@ from __future__ import (absolute_import, division, print_function) import os -import mantid.simpleapi as mantid - -import isis_powder.routines.common as common -from isis_powder.routines import yaml_parser, InstrumentSettings +from isis_powder.routines import common, common_output, InstrumentSettings, yaml_parser from isis_powder.abstract_inst import AbstractInst -from isis_powder.polaris_routines import polaris_advanced_config, polaris_algs, polaris_output, polaris_param_mapping +from isis_powder.polaris_routines import polaris_advanced_config, polaris_algs, polaris_param_mapping class Polaris(AbstractInst): @@ -41,7 +38,6 @@ class Polaris(AbstractInst): do_absorb_corrections=self._inst_settings.do_absorb_corrections) # Overrides - def _apply_absorb_corrections(self, run_details, van_ws): return polaris_algs.calculate_absorb_corrections(ws_to_correct=van_ws, multiple_scattering=self._inst_settings.multiple_scattering) @@ -117,14 +113,3 @@ class Polaris(AbstractInst): spline_number=spline_coeff, mask_path=masking_file_path) return output - - def _output_focused_ws(self, processed_spectra, run_details, output_mode=None): - d_spacing_group, tof_group = polaris_algs.split_into_tof_d_spacing_groups(run_details=run_details, - processed_spectra=processed_spectra) - output_paths = self._generate_out_file_paths(run_details=run_details) - - polaris_output.save_polaris_focused_data(d_spacing_group=d_spacing_group, tof_group=tof_group, - output_paths=output_paths, - run_number_string=run_details.user_input_run_number) - return d_spacing_group - diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py index e410ec51f07..77824e200ba 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py @@ -47,10 +47,11 @@ def get_run_details(run_number_string, inst_settings): in_calib_dir = os.path.join(inst_settings.calibration_dir, label) offsets_file_full_path = os.path.join(in_calib_dir, offset_file_name) + # Generate the name of the splined file we will either be loading or saving - splined_vanadium_name = _generate_splined_van_filename(chopper_on=inst_settings.chopper_on, - vanadium_run_string=vanadium_runs, - offset_file_name=offset_file_name) + chopper_status = "On" if inst_settings.chopper_on else "Off" + splined_vanadium_name = common.generate_splined_name(vanadium_runs, chopper_status, offset_file_name) + splined_vanadium = os.path.join(in_calib_dir, splined_vanadium_name) run_details = RunDetails(run_number=run_number) @@ -66,27 +67,6 @@ def get_run_details(run_number_string, inst_settings): return run_details -def split_into_tof_d_spacing_groups(run_details, processed_spectra): - d_spacing_output = [] - tof_output = [] - run_number = str(run_details.user_input_run_number) - for name_index, ws in enumerate(processed_spectra): - d_spacing_out_name = run_number + "-ResultD-" + str(name_index + 1) - tof_out_name = run_number + "-ResultTOF-" + str(name_index + 1) - - d_spacing_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=d_spacing_out_name, - Target="dSpacing")) - tof_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=tof_out_name, Target="TOF")) - - # Group the outputs - d_spacing_group_name = run_number + "-Results-D-Grp" - d_spacing_group = mantid.GroupWorkspaces(InputWorkspaces=d_spacing_output, OutputWorkspace=d_spacing_group_name) - tof_group_name = run_number + "-Results-TOF-Grp" - tof_group = mantid.GroupWorkspaces(InputWorkspaces=tof_output, OutputWorkspace=tof_group_name) - - return d_spacing_group, tof_group - - def process_vanadium_for_focusing(bank_spectra, mask_path, spline_number): bragg_masking_list = _read_masking_file(mask_path) masked_workspace_list = _apply_bragg_peaks_masking(bank_spectra, mask_list=bragg_masking_list) @@ -108,14 +88,6 @@ def _apply_bragg_peaks_masking(workspaces_to_mask, mask_list): return output_workspaces -def _generate_splined_van_filename(chopper_on, vanadium_run_string, offset_file_name): - output_string = "SplinedVan_" + str(vanadium_run_string) + "_chopper" - output_string += "On" if chopper_on else "Off" - output_string += '_' + offset_file_name - output_string += ".nxs" - return output_string - - def _read_masking_file(masking_file_path): all_banks_masking_list = [] bank_masking_list = [] diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_output.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_output.py deleted file mode 100644 index bb9997c1757..00000000000 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_output.py +++ /dev/null @@ -1,30 +0,0 @@ -from __future__ import (absolute_import, division, print_function) - -import mantid.simpleapi as mantid -import os - - -def save_polaris_focused_data(d_spacing_group, tof_group, output_paths, run_number_string): - mantid.SaveGSS(InputWorkspace=tof_group, Filename=output_paths["gss_filename"], SplitFiles=False, Append=False) - mantid.SaveNexusProcessed(InputWorkspace=tof_group, Filename=output_paths["nxs_filename"], Append=False) - - dat_folder_name = "dat_files" - dat_file_destination = os.path.join(output_paths["output_folder"], dat_folder_name) - if not os.path.exists(dat_file_destination): - os.makedirs(dat_file_destination) - - _save_xye(ws_group=d_spacing_group, ws_units="d", run_number=run_number_string, - output_folder=dat_file_destination) - _save_xye(ws_group=tof_group, ws_units="TOF", run_number=run_number_string, - output_folder=dat_file_destination) - - -def _save_xye(ws_group, ws_units, run_number, output_folder): - bank_index = 1 - prefix_filename = "POL" + str(run_number) - for ws in ws_group: - outfile_name = prefix_filename + "-b_" + str(bank_index) + "-" + ws_units + ".dat" - bank_index += 1 - full_file_path = os.path.join(output_folder, outfile_name) - - mantid.SaveFocusedXYE(InputWorkspace=ws, Filename=full_file_path, SplitFiles=False, IncludeHeader=False) diff --git a/scripts/Diffraction/isis_powder/routines/calibrate.py b/scripts/Diffraction/isis_powder/routines/calibrate.py index e0e00e2bb66..58e5d913b93 100644 --- a/scripts/Diffraction/isis_powder/routines/calibrate.py +++ b/scripts/Diffraction/isis_powder/routines/calibrate.py @@ -52,6 +52,7 @@ def _create_vanadium_splines(focused_spectra, instrument, run_details): for ws in splined_ws_list: mantid.SaveNexus(Filename=out_spline_van_file_path, InputWorkspace=ws, Append=append) append = True + # Group for user convenience mantid.GroupWorkspaces(InputWorkspaces=splined_ws_list, OutputWorkspace="Van_spline_data") diff --git a/scripts/Diffraction/isis_powder/routines/common.py b/scripts/Diffraction/isis_powder/routines/common.py index 939b5dba995..7d951e2c1fd 100644 --- a/scripts/Diffraction/isis_powder/routines/common.py +++ b/scripts/Diffraction/isis_powder/routines/common.py @@ -134,6 +134,23 @@ def generate_run_numbers(run_number_string): return run_list +def generate_splined_name(vanadium_string, *args): + """ + Generates a unique splined vanadium name which encapsulates + any properties passed into this method so that the vanadium + can be later loaded. + :param vanadium_string: The name of this vanadium run + :param args: Any identifying properties to append to the name + :return: The splined vanadium name + """ + out_name = "VanSplined" + '_' + str(vanadium_string) + for value in args: + out_name += '_' + str(value) + + out_name += ".nxs" + return out_name + + def get_first_run_number(run_number_string): """ Takes a run number string and returns the first user specified run from that string diff --git a/scripts/Diffraction/isis_powder/routines/common_output.py b/scripts/Diffraction/isis_powder/routines/common_output.py new file mode 100644 index 00000000000..e1870604f7a --- /dev/null +++ b/scripts/Diffraction/isis_powder/routines/common_output.py @@ -0,0 +1,51 @@ +from __future__ import (absolute_import, division, print_function) + +import mantid.simpleapi as mantid +import os + + +def split_into_tof_d_spacing_groups(run_details, processed_spectra): + d_spacing_output = [] + tof_output = [] + run_number = str(run_details.user_input_run_number) + for name_index, ws in enumerate(processed_spectra): + d_spacing_out_name = run_number + "-ResultD-" + str(name_index + 1) + tof_out_name = run_number + "-ResultTOF-" + str(name_index + 1) + + d_spacing_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=d_spacing_out_name, + Target="dSpacing")) + tof_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=tof_out_name, Target="TOF")) + + # Group the outputs + d_spacing_group_name = run_number + "-Results-D-Grp" + d_spacing_group = mantid.GroupWorkspaces(InputWorkspaces=d_spacing_output, OutputWorkspace=d_spacing_group_name) + tof_group_name = run_number + "-Results-TOF-Grp" + tof_group = mantid.GroupWorkspaces(InputWorkspaces=tof_output, OutputWorkspace=tof_group_name) + + return d_spacing_group, tof_group + + +def save_focused_data(d_spacing_group, tof_group, output_paths, run_number_string, inst_prefix): + mantid.SaveGSS(InputWorkspace=tof_group, Filename=output_paths["gss_filename"], SplitFiles=False, Append=False) + mantid.SaveNexusProcessed(InputWorkspace=tof_group, Filename=output_paths["nxs_filename"], Append=False) + + dat_folder_name = "dat_files" + dat_file_destination = os.path.join(output_paths["output_folder"], dat_folder_name) + if not os.path.exists(dat_file_destination): + os.makedirs(dat_file_destination) + + _save_xye(ws_group=d_spacing_group, ws_units="d", run_number=run_number_string, + output_folder=dat_file_destination, inst_prefix=inst_prefix) + _save_xye(ws_group=tof_group, ws_units="TOF", run_number=run_number_string, + output_folder=dat_file_destination, inst_prefix=inst_prefix) + + +def _save_xye(ws_group, ws_units, run_number, output_folder, inst_prefix): + bank_index = 1 + prefix_filename = str(inst_prefix) + str(run_number) + for ws in ws_group: + outfile_name = prefix_filename + "-b_" + str(bank_index) + "-" + ws_units + ".dat" + bank_index += 1 + full_file_path = os.path.join(output_folder, outfile_name) + + mantid.SaveFocusedXYE(InputWorkspace=ws, Filename=full_file_path, SplitFiles=False, IncludeHeader=False) -- GitLab