From 06d19b05b4b53b13bedd349d5d5d5a264c476259 Mon Sep 17 00:00:00 2001 From: David Fairbrother <DavidFair@users.noreply.github.com> Date: Thu, 8 Dec 2016 15:52:19 +0000 Subject: [PATCH] Re #18108 Update run details parsing caching method --- .../Diffraction/isis_powder/abstract_inst.py | 2 +- .../isis_powder/mock_instrument.py | 2 +- scripts/Diffraction/isis_powder/pearl.py | 27 ++++++++++--------- scripts/Diffraction/isis_powder/polaris.py | 13 +++++---- .../polaris_routines/polaris_algs.py | 7 +++-- .../isis_powder/routines/calibrate.py | 2 +- .../isis_powder/routines/common.py | 2 +- .../Diffraction/isis_powder/routines/focus.py | 4 +-- 8 files changed, 31 insertions(+), 28 deletions(-) diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index 9cc058413c7..081dd24e50a 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -98,7 +98,7 @@ class AbstractInst(object): # Instrument specific properties @abstractmethod - def get_run_details(self, run_number): + def get_run_details(self, run_number_string): pass @staticmethod diff --git a/scripts/Diffraction/isis_powder/mock_instrument.py b/scripts/Diffraction/isis_powder/mock_instrument.py index 6c328cd3146..e319866b32e 100644 --- a/scripts/Diffraction/isis_powder/mock_instrument.py +++ b/scripts/Diffraction/isis_powder/mock_instrument.py @@ -20,7 +20,7 @@ class MockInstrument(AbstractInst): def get_default_group_names(self): return None - def get_run_details(self, run_number): + def get_run_details(self, run_number_string): # This is here to help remind people of the dict that is expected calibration_details = {"calibration": "cal", "grouping": "group", diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py index 705773aa230..939dce9925e 100644 --- a/scripts/Diffraction/isis_powder/pearl.py +++ b/scripts/Diffraction/isis_powder/pearl.py @@ -11,14 +11,6 @@ from isis_powder.pearl_routines import pearl_algs, pearl_output, pearl_spline, P class Pearl(AbstractInst): - # Instrument default settings - _default_input_ext = '.raw' - _default_group_names = "bank1,bank2,bank3,bank4" - - _focus_tof_binning = "1500,-0.0006,19900" - - _create_van_tof_binning = "1500,-0.0006,19900" - def __init__(self, user_name, config_file=None, **kwargs): expected_keys = ["calibration_directory", "output_directory", "attenuation_file_name", @@ -35,6 +27,8 @@ class Pearl(AbstractInst): self._run_settings = None self._ads_workaround = 0 + self._cached_run_details = None + self._cached_run_details_number = None def focus(self, run_number, **kwargs): self._run_settings = _get_settings_focus_kwargs(config_file_path=self._basic_config_file_path, kwargs=kwargs) @@ -45,7 +39,8 @@ class Pearl(AbstractInst): self._run_settings = _get_settings_van_calib_kwargs(config_file_path=self._basic_config_file_path, kwargs=kwargs) self._run_settings.number_of_splines = kwargs.get("num_of_splines", 60) - run_details = self.get_run_details(run_number=int(run_in_range)) + run_details = self.get_run_details(run_number_string=int(run_in_range)) + run_details.run_number = run_details.vanadium_run_numbers return self._create_calibration_vanadium(vanadium_runs=run_details.vanadium_run_numbers, empty_runs=run_details.empty_runs, @@ -58,17 +53,23 @@ class Pearl(AbstractInst): def _get_lambda_range(self): return self._lambda_lower, self._lambda_upper - def get_run_details(self, run_number): - # TODO once we migrate this to another format (i.e. not the if/elif/else) implement cached val + def get_run_details(self, run_number_string): + input_run_number_list = common.generate_run_numbers(run_number_string=run_number_string) + first_run = input_run_number_list[0] + if self._cached_run_details_number == first_run: + return self._cached_run_details + run_settings = self._run_settings run_details = pearl_algs.get_run_details(absorb_on=run_settings.absorption_corrections, long_mode_on=run_settings.divide_by_vanadium, - run_number_string=run_number, + run_number_string=run_number_string, calibration_dir=self._calibration_dir, mapping_file=self._calibration_mapping_path) run_details = pearl_algs.set_advanced_run_details(run_details=run_details, tt_mode=self._run_settings.tt_mode, calibration_dir=self._calibration_dir) + self._cached_run_details_number = first_run + self._cached_run_details = run_details return run_details @staticmethod @@ -108,7 +109,7 @@ class Pearl(AbstractInst): pearl_output.generate_and_save_focus_output(self, processed_spectra=processed_spectra, run_details=run_details, focus_mode=output_mode, perform_attenuation=self._run_settings.perform_attenuation) - group_name = "PEARL" + run_details.run_number + "-Results-D-Grp" + group_name = "PEARL" + str(run_details.run_number) + "-Results-D-Grp" grouped_d_spacing = mantid.GroupWorkspaces(InputWorkspaces=output_spectra, OutputWorkspace=group_name) return grouped_d_spacing diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index 37dca70f7c1..3800464bc67 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -38,7 +38,8 @@ class Polaris(AbstractInst): return self._focus(run_number=run_number, input_batching=input_mode, do_van_normalisation=do_van_normalisation) def create_calibration_vanadium(self, run_in_range, do_absorb_corrections=True, gen_absorb_correction=False): - run_details = self.get_run_details(run_number=int(run_in_range)) + run_details = self.get_run_details(run_number_string=int(run_in_range)) + run_details.run_number = run_details.vanadium_run_numbers return self._create_calibration_vanadium(vanadium_runs=run_details.vanadium_run_numbers, empty_runs=run_details.empty_runs, do_absorb_corrections=do_absorb_corrections, @@ -49,16 +50,18 @@ class Polaris(AbstractInst): # Abstract implementation - def get_run_details(self, run_number): - if self._run_details_last_run_number == run_number: + def get_run_details(self, run_number_string): + input_run_number_list = common.generate_run_numbers(run_number_string=run_number_string) + first_run = input_run_number_list[0] + if self._run_details_last_run_number == first_run: return self._run_details_cached_obj run_details = polaris_algs.get_run_details(chopper_on=self._chopper_on, sac_on=self._apply_solid_angle, - run_number_string=run_number, calibration_dir=self._calibration_dir, + run_number=first_run, calibration_dir=self._calibration_dir, mapping_path=self._calibration_mapping_path) # Hold obj in case same run range is requested - self._run_details_last_run_number = run_number + self._run_details_last_run_number = first_run self._run_details_cached_obj = run_details return run_details diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py index bdee806ac53..00b0d1dba5c 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py @@ -68,9 +68,8 @@ def generate_solid_angle_corrections(run_details, instrument): return corrections -def get_run_details(chopper_on, sac_on, run_number_string, calibration_dir, mapping_path): - input_run_number_list = common.generate_run_numbers(run_number_string=run_number_string) - yaml_dict = yaml_parser.get_run_dictionary(run_number=input_run_number_list[0], file_path=mapping_path) +def get_run_details(chopper_on, sac_on, run_number, calibration_dir, mapping_path): + yaml_dict = yaml_parser.get_run_dictionary(run_number=run_number, file_path=mapping_path) if chopper_on: chopper_config = yaml_dict["chopper_on"] @@ -92,7 +91,7 @@ def get_run_details(chopper_on, sac_on, run_number_string, calibration_dir, mapp solid_angle_file_path = os.path.join(in_calib_dir, solid_angle_file_name) splined_vanadium = os.path.join(in_calib_dir, splined_vanadium_name) - run_details = RunDetails(run_number=run_number_string) + run_details = RunDetails(run_number=run_number) run_details.empty_runs = empty_runs run_details.vanadium_run_numbers = vanadium_runs run_details.label = label diff --git a/scripts/Diffraction/isis_powder/routines/calibrate.py b/scripts/Diffraction/isis_powder/routines/calibrate.py index 317cf52d19e..f4ffd1f0bfc 100644 --- a/scripts/Diffraction/isis_powder/routines/calibrate.py +++ b/scripts/Diffraction/isis_powder/routines/calibrate.py @@ -7,7 +7,7 @@ from isis_powder.routines.common_enums import InputBatchingEnum def create_van(instrument, van, empty, absorb, gen_absorb): - run_details = instrument.get_run_details(run_number=van) + run_details = instrument.get_run_details(run_number_string=van) # Always sum a range of inputs as its a vanadium run over multiple captures input_van_ws_list = common.load_current_normalised_ws_list(run_number_string=van, instrument=instrument, input_batching=InputBatchingEnum.Summed) diff --git a/scripts/Diffraction/isis_powder/routines/common.py b/scripts/Diffraction/isis_powder/routines/common.py index 856b971a695..ec086f64e19 100644 --- a/scripts/Diffraction/isis_powder/routines/common.py +++ b/scripts/Diffraction/isis_powder/routines/common.py @@ -91,7 +91,7 @@ def get_monitor_ws(ws_to_process, run_number_string, instrument): def load_current_normalised_ws_list(run_number_string, instrument, input_batching): - run_information = instrument.get_run_details(run_number=run_number_string) + run_information = instrument.get_run_details(run_number_string=run_number_string) raw_ws_list = _load_raw_files(run_number_string=run_number_string, instrument=instrument) if input_batching.lower() == InputBatchingEnum.Summed.lower() and len(raw_ws_list) > 1: diff --git a/scripts/Diffraction/isis_powder/routines/focus.py b/scripts/Diffraction/isis_powder/routines/focus.py index b06e86a15ad..88000b96a38 100644 --- a/scripts/Diffraction/isis_powder/routines/focus.py +++ b/scripts/Diffraction/isis_powder/routines/focus.py @@ -16,7 +16,7 @@ def focus(run_number, instrument, input_batching, perform_vanadium_norm=True): def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm): - run_details = instrument.get_run_details(run_number=run_number) + run_details = instrument.get_run_details(run_number_string=run_number) # Check the necessary splined vanadium file has been created if not os.path.isfile(run_details.splined_vanadium_file_path): @@ -67,7 +67,7 @@ def _batched_run_focusing(input_batching, instrument, perform_vanadium_norm, run def _divide_sample_by_vanadium(instrument, run_number, input_workspace, perform_vanadium_norm): processed_spectra = [] - run_details = instrument.get_run_details(run_number=run_number) + run_details = instrument.get_run_details(run_number_string=run_number) split_ws = common.extract_and_crop_spectra(input_workspace, instrument=instrument) if perform_vanadium_norm: -- GitLab