From c6e48482362503e6dd960e5d7dd2bafdf9fc336a Mon Sep 17 00:00:00 2001
From: David Fairbrother <DavidFair@users.noreply.github.com>
Date: Mon, 8 May 2017 16:27:36 +0100
Subject: [PATCH] Re #19500 Updated run details caching method and made it ext
 aware

---
 scripts/Diffraction/isis_powder/gem.py     | 12 ++++++++----
 scripts/Diffraction/isis_powder/pearl.py   | 18 +++++++-----------
 scripts/Diffraction/isis_powder/polaris.py | 20 +++++++-------------
 3 files changed, 22 insertions(+), 28 deletions(-)

diff --git a/scripts/Diffraction/isis_powder/gem.py b/scripts/Diffraction/isis_powder/gem.py
index 98af04e1010..82a2e98f25c 100644
--- a/scripts/Diffraction/isis_powder/gem.py
+++ b/scripts/Diffraction/isis_powder/gem.py
@@ -17,8 +17,7 @@ class Gem(AbstractInst):
                                   calibration_dir=self._inst_settings.calibration_dir,
                                   output_dir=self._inst_settings.output_dir, inst_prefix="GEM")
 
-        self._cached_run_details = None
-        self._cached_run_number = None
+        self._cached_run_details = {}
 
     def focus(self, **kwargs):
         self._inst_settings.update_attributes(kwargs=kwargs)
@@ -32,8 +31,13 @@ class Gem(AbstractInst):
                                      do_absorb_corrections=self._inst_settings.do_absorb_corrections)
 
     def _get_run_details(self, run_number_string):
-        return gem_algs.get_run_details(run_number_string=run_number_string, inst_settings=self._inst_settings,
-                                        is_vanadium_run=self._is_vanadium)
+        run_number_string_key = run_number_string + str(self._inst_settings.file_extension)
+        if run_number_string_key in self._cached_run_details:
+            return self._cached_run_details[run_number_string_key]
+
+        self._cached_run_details[run_number_string_key] = gem_algs.get_run_details(
+            run_number_string=run_number_string, inst_settings=self._inst_settings, is_vanadium_run=self._is_vanadium)
+        return self._cached_run_details[run_number_string_key]
 
     def _generate_auto_vanadium_calibration(self, run_details):
         raise NotImplementedError()
diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py
index 1610c2a3bbb..c9736d80740 100644
--- a/scripts/Diffraction/isis_powder/pearl.py
+++ b/scripts/Diffraction/isis_powder/pearl.py
@@ -20,8 +20,7 @@ class Pearl(AbstractInst):
                                     calibration_dir=self._inst_settings.calibration_dir,
                                     output_dir=self._inst_settings.output_dir, inst_prefix="PEARL")
 
-        self._cached_run_details = None
-        self._cached_run_details_number = None
+        self._cached_run_details = {}
 
     def focus(self, **kwargs):
         self._switch_long_mode_inst_settings(kwargs.get("long_mode"))
@@ -47,16 +46,13 @@ class Pearl(AbstractInst):
                                      do_absorb_corrections=self._inst_settings.absorb_corrections)
 
     def _get_run_details(self, run_number_string):
-        if self._cached_run_details_number == run_number_string:
-            return self._cached_run_details
+        run_number_string_key = run_number_string + str(self._inst_settings.file_extension)
+        if run_number_string_key in self._cached_run_details:
+            return self._cached_run_details[run_number_string_key]
 
-        run_details = pearl_algs.get_run_details(run_number_string=run_number_string,
-                                                 inst_settings=self._inst_settings,
-                                                 is_vanadium_run=self._is_vanadium)
-
-        self._cached_run_details_number = run_number_string
-        self._cached_run_details = run_details
-        return run_details
+        self._cached_run_details[run_number_string_key] = pearl_algs.get_run_details(
+            run_number_string=run_number_string, inst_settings=self._inst_settings, is_vanadium_run=self._is_vanadium)
+        return self._cached_run_details[run_number_string_key]
 
     # Params #
 
diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py
index 510898ed047..8c4287ec2a5 100644
--- a/scripts/Diffraction/isis_powder/polaris.py
+++ b/scripts/Diffraction/isis_powder/polaris.py
@@ -19,10 +19,7 @@ class Polaris(AbstractInst):
                                       output_dir=self._inst_settings.output_dir, inst_prefix="POL")
 
         # Hold the last dictionary later to avoid us having to keep parsing the YAML
-        self._run_details_last_run_number = None
-        self._run_details_cached_obj = None
-
-        self._ads_workaround = 0
+        self._run_details_cached_obj = {}
 
     def focus(self, **kwargs):
         self._inst_settings.update_attributes(kwargs=kwargs)
@@ -90,17 +87,14 @@ class Polaris(AbstractInst):
         return self._inst_settings.input_mode
 
     def _get_run_details(self, run_number_string):
-        if self._run_details_last_run_number == run_number_string:
-            return self._run_details_cached_obj
-
-        run_details = polaris_algs.get_run_details(run_number_string=run_number_string,
-                                                   inst_settings=self._inst_settings, is_vanadium_run=self._is_vanadium)
+        run_number_string_key = run_number_string + str(self._inst_settings.file_extension)
+        if run_number_string_key in self._run_details_cached_obj:
+            return self._run_details_cached_obj[run_number_string_key]
 
-        # Hold obj in case same run range is requested
-        self._run_details_last_run_number = run_number_string
-        self._run_details_cached_obj = run_details
+        self._run_details_cached_obj[run_number_string_key] = polaris_algs.get_run_details(
+            run_number_string=run_number_string, inst_settings=self._inst_settings, is_vanadium_run=self._is_vanadium)
 
-        return run_details
+        return self._run_details_cached_obj[run_number_string_key]
 
     def _spline_vanadium_ws(self, focused_vanadium_spectra, instrument_version=''):
         masking_file_name = self._inst_settings.masking_file_name
-- 
GitLab