From 2efc9ab52e6c25085cd386113c201e7b58a2a3ef Mon Sep 17 00:00:00 2001
From: David Fairbrother <DavidFair@users.noreply.github.com>
Date: Mon, 20 Mar 2017 16:16:13 +0000
Subject: [PATCH] Re #19156 Fixed incorrect output name being used for a
 calibration

---
 .../Diffraction/isis_powder/abstract_inst.py  |  7 +++--
 scripts/Diffraction/isis_powder/gem.py        |  9 ++----
 .../isis_powder/gem_routines/gem_algs.py      |  5 ++--
 scripts/Diffraction/isis_powder/pearl.py      |  8 ++---
 .../isis_powder/pearl_routines/pearl_algs.py  |  4 +--
 scripts/Diffraction/isis_powder/polaris.py    |  7 ++---
 .../polaris_routines/polaris_algs.py          |  4 +--
 .../isis_powder/routines/RunDetails.py        | 30 ++++++++++++-------
 8 files changed, 40 insertions(+), 34 deletions(-)

diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py
index fdde4b4384d..296a0b7c413 100644
--- a/scripts/Diffraction/isis_powder/abstract_inst.py
+++ b/scripts/Diffraction/isis_powder/abstract_inst.py
@@ -22,6 +22,7 @@ class AbstractInst(object):
         self._calibration_dir = calibration_dir
         self._inst_prefix = inst_prefix
         self._output_dir = output_dir
+        self._is_vanadium = None
 
     @property
     def calibration_dir(self):
@@ -35,13 +36,14 @@ class AbstractInst(object):
     def user_name(self):
         return self._user_name
 
-    def _create_vanadium(self, run_details, do_absorb_corrections=True):
+    def _create_vanadium(self, run_number_string, do_absorb_corrections=True):
         """
         Creates a vanadium calibration - should be called by the concrete instrument
-        :param run_details: The run details for the run to process
         :param do_absorb_corrections: Set to true if absorption corrections should be applied
         :return: d_spacing focused vanadium group
         """
+        self._is_vanadium = True
+        run_details = self._get_run_details(run_number_string)
         return calibrate.create_van(instrument=self, run_details=run_details,
                                     absorb=do_absorb_corrections)
 
@@ -52,6 +54,7 @@ class AbstractInst(object):
         :param do_van_normalisation: True to divide by the vanadium run, false to not.
         :return:
         """
+        self._is_vanadium = False
         return focus.focus(run_number_string=run_number_string, perform_vanadium_norm=do_van_normalisation,
                            instrument=self)
 
diff --git a/scripts/Diffraction/isis_powder/gem.py b/scripts/Diffraction/isis_powder/gem.py
index 30b461217f7..6f43b33fd50 100644
--- a/scripts/Diffraction/isis_powder/gem.py
+++ b/scripts/Diffraction/isis_powder/gem.py
@@ -27,16 +27,13 @@ class Gem(AbstractInst):
 
     def create_vanadium(self, **kwargs):
         self._inst_settings.update_attributes(kwargs=kwargs)
-        # First get a run_details object to find out the vanadium number
-        run_details = self._get_run_details(run_number_string=self._inst_settings.run_in_range)
-        # Set the run and vanadium run equal
-        run_details.run_number = run_details.vanadium_run_numbers
 
-        return self._create_vanadium(run_details=run_details,
+        return self._create_vanadium(run_number_string=self._inst_settings.run_in_range,
                                      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)
+        return gem_algs.get_run_details(run_number_string=run_number_string, inst_settings=self._inst_settings,
+                                        is_vanadium_run=self._is_vanadium)
 
     def _generate_auto_vanadium_calibration(self, run_details):
         raise NotImplementedError()
diff --git a/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py b/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py
index b398c8df589..3605106787a 100644
--- a/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py
+++ b/scripts/Diffraction/isis_powder/gem_routines/gem_algs.py
@@ -23,7 +23,7 @@ def gem_get_chopper_config(forwarded_value, inst_settings):
     return common.cal_map_dictionary_key_helper(cal_mapping, inst_settings.mode)
 
 
-def get_run_details(run_number_string, inst_settings):
+def get_run_details(run_number_string, inst_settings, is_vanadium_run):
     cal_mapping_callable = RunDetailsFuncWrapper().add_to_func_chain(
         WrappedFunctionsRunDetails.get_cal_mapping_dict, run_number_string=run_number_string,
         inst_settings=inst_settings
@@ -41,4 +41,5 @@ def get_run_details(run_number_string, inst_settings):
         append_to_error_message=err_message)
 
     return create_run_details_object(run_number_string=run_number_string, inst_settings=inst_settings,
-                                     empty_run_call=empty_run_callable, vanadium_run_call=vanadium_run_callable)
+                                     is_vanadium_run=is_vanadium_run, empty_run_call=empty_run_callable,
+                                     vanadium_run_call=vanadium_run_callable)
diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py
index e27a6e3600a..eff45953c8d 100644
--- a/scripts/Diffraction/isis_powder/pearl.py
+++ b/scripts/Diffraction/isis_powder/pearl.py
@@ -43,16 +43,16 @@ class Pearl(AbstractInst):
 
     def _run_create_vanadium(self):
         # Provides a minimal wrapper so if we have tt_mode 'all' we can loop round
-        run_details = self._get_run_details(run_number_string=self._inst_settings.run_in_range)
-        run_details.run_number = run_details.vanadium_run_numbers
-        return self._create_vanadium(run_details=run_details,
+        return self._create_vanadium(run_number_string=self._inst_settings.run_in_range,
                                      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_details = pearl_algs.get_run_details(run_number_string=run_number_string, inst_settings=self._inst_settings)
+        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
diff --git a/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py b/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py
index 7f2adb19ce5..d4161f15327 100644
--- a/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py
+++ b/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py
@@ -68,7 +68,7 @@ def generate_vanadium_absorb_corrections(van_ws):
     return absorb_ws
 
 
-def get_run_details(run_number_string, inst_settings):
+def get_run_details(run_number_string, inst_settings, is_vanadium_run):
     splined_name_list = ["_tt-" + inst_settings.tt_mode]
     if inst_settings.absorb_corrections:
         splined_name_list.append("_abs")
@@ -79,8 +79,8 @@ def get_run_details(run_number_string, inst_settings):
                                                                             inst_settings=inst_settings)
 
     return create_run_details_object(run_number_string=run_number_string, inst_settings=inst_settings,
+                                     is_vanadium_run=is_vanadium_run, splined_name_list=splined_name_list,
                                      grouping_file_name_call=grouping_file_name_callable,
-                                     splined_name_list=splined_name_list,
                                      van_abs_file_name=inst_settings.van_absorb_file)
 
 
diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py
index eede4233c75..10c1fbe8638 100644
--- a/scripts/Diffraction/isis_powder/polaris.py
+++ b/scripts/Diffraction/isis_powder/polaris.py
@@ -31,10 +31,7 @@ class Polaris(AbstractInst):
 
     def create_vanadium(self, **kwargs):
         self._inst_settings.update_attributes(kwargs=kwargs)
-        run_details = self._get_run_details(run_number_string=int(self._inst_settings.run_in_range))
-        run_details.run_number = run_details.vanadium_run_numbers
-
-        return self._create_vanadium(run_details=run_details,
+        return self._create_vanadium(run_number_string=self._inst_settings.run_in_range,
                                      do_absorb_corrections=self._inst_settings.do_absorb_corrections)
 
     # Overrides
@@ -97,7 +94,7 @@ class Polaris(AbstractInst):
             return self._run_details_cached_obj
 
         run_details = polaris_algs.get_run_details(run_number_string=run_number_string,
-                                                   inst_settings=self._inst_settings)
+                                                   inst_settings=self._inst_settings, is_vanadium_run=self._is_vanadium)
 
         # Hold obj in case same run range is requested
         self._run_details_last_run_number = run_number_string
diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py
index 5d7329fd67e..57d79d14fed 100644
--- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py
+++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py
@@ -16,7 +16,7 @@ def calculate_absorb_corrections(ws_to_correct, multiple_scattering):
     return ws_to_correct
 
 
-def get_run_details(run_number_string, inst_settings):
+def get_run_details(run_number_string, inst_settings, is_vanadium_run):
     # Get the chopper mode as vanadium and empty run numbers depend on different modes
     chopper_config_callable = RunDetailsFuncWrapper().\
         add_to_func_chain(function=WrappedFunctionsRunDetails.get_cal_mapping_dict, run_number_string=run_number_string,
@@ -35,7 +35,7 @@ def get_run_details(run_number_string, inst_settings):
         append_to_error_message=err_message)
 
     run_details = create_run_details_object(run_number_string=run_number_string, inst_settings=inst_settings,
-                                            empty_run_call=empty_runs_callable,
+                                            empty_run_call=empty_runs_callable, is_vanadium_run=is_vanadium_run,
                                             vanadium_run_call=vanadium_runs_callable)
 
     return run_details
diff --git a/scripts/Diffraction/isis_powder/routines/RunDetails.py b/scripts/Diffraction/isis_powder/routines/RunDetails.py
index 56aa0bcb9d7..7a19cb8357d 100644
--- a/scripts/Diffraction/isis_powder/routines/RunDetails.py
+++ b/scripts/Diffraction/isis_powder/routines/RunDetails.py
@@ -4,15 +4,30 @@ from isis_powder.routines import common, yaml_parser
 import os
 
 
-def create_run_details_object(run_number_string, inst_settings, empty_run_call=None,
+def create_run_details_object(run_number_string, inst_settings, is_vanadium_run, empty_run_call=None,
                               grouping_file_name_call=None, vanadium_run_call=None,
                               splined_name_list=None, van_abs_file_name=None):
     cal_map_dict = WrappedFunctionsRunDetails.get_cal_mapping_dict(
         run_number_string=run_number_string, inst_settings=inst_settings)
     run_number = common.get_first_run_number(run_number_string=run_number_string)
-    calibration_dir = os.path.normpath(os.path.expanduser(inst_settings.calibration_dir))
+
+    # These can either be generic or custom so defer to another method
+    results_dict = _get_customisable_attributes(
+        cal_dict=cal_map_dict, inst_settings=inst_settings, empty_run_call=empty_run_call,
+        grouping_name_call=grouping_file_name_call, vanadium_run_call=vanadium_run_call,
+        splined_name_list=splined_name_list)
+
+    vanadium_run_string = results_dict["vanadium_runs"]
+
+    if is_vanadium_run:
+        # The run number should be the vanadium number in this case
+        run_number = vanadium_run_string
+        output_run_string = vanadium_run_string
+    else:
+        output_run_string = run_number_string
 
     # Get names of files we will be using
+    calibration_dir = os.path.normpath(os.path.expanduser(inst_settings.calibration_dir))
     label = common.cal_map_dictionary_key_helper(dictionary=cal_map_dict, key="label")
     offset_file_name = common.cal_map_dictionary_key_helper(dictionary=cal_map_dict, key="offset_file_name")
 
@@ -25,12 +40,6 @@ def create_run_details_object(run_number_string, inst_settings, empty_run_call=N
     else:
         splined_name_list = [offset_file_name]
 
-    # These can either be generic or custom so defer to another method
-    results_dict = _get_customisable_attributes(
-        cal_dict=cal_map_dict, inst_settings=inst_settings, empty_run_call=empty_run_call,
-        grouping_name_call=grouping_file_name_call, vanadium_run_call=vanadium_run_call,
-        splined_name_list=splined_name_list)
-
     # Generate the paths
     grouping_file_path = os.path.join(calibration_dir, results_dict["grouping_file_name"])
     # Offset  and splined vanadium is within the correct label folder
@@ -38,12 +47,10 @@ def create_run_details_object(run_number_string, inst_settings, empty_run_call=N
     splined_van_path = os.path.join(calibration_dir, label, results_dict["splined_van_name"])
     van_absorb_path = os.path.join(calibration_dir, van_abs_file_name) if van_abs_file_name else None
 
-    output_run_string = run_number_string
-
     return _RunDetails(empty_run_number=results_dict["empty_runs"], run_number=run_number,
                        output_run_string=output_run_string, label=label, offset_file_path=offset_file_path,
                        grouping_file_path=grouping_file_path, splined_vanadium_path=splined_van_path,
-                       vanadium_run_number=results_dict["vanadium_runs"], sample_empty=sample_empty,
+                       vanadium_run_number=vanadium_run_string, sample_empty=sample_empty,
                        vanadium_abs_path=van_absorb_path)
 
 
@@ -150,6 +157,7 @@ class _RunDetails(object):
     def __init__(self, empty_run_number, run_number, output_run_string, label,
                  offset_file_path, grouping_file_path, splined_vanadium_path, vanadium_run_number,
                  sample_empty, vanadium_abs_path):
+
         # Essential attribute
         self.empty_runs = empty_run_number
         self.run_number = run_number
-- 
GitLab