From fc6501239f9a0756acad23c2894fde703626cfd8 Mon Sep 17 00:00:00 2001
From: Elliot Oram <elliot.oram@stfc.ac.uk>
Date: Thu, 7 Mar 2019 08:56:15 +0000
Subject: [PATCH] WIP automatically determine Chopper mode on POLARIS

Refs #24150
---
 .../polaris_advanced_config.py                |  7 ++-----
 .../polaris_routines/polaris_algs.py          | 20 +++++++++++++++++++
 .../polaris_routines/polaris_param_mapping.py |  2 +-
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py
index c8fb286fe01..3a5d0c56329 100644
--- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py
+++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py
@@ -100,10 +100,7 @@ variables = {
 
 def get_mode_specific_dict(mode):
     if mode is None:
-        raise RuntimeError("The parameter with name: 'mode' is required but "
-                           "was not set or passed.\n"
-                           "Acceptable values for this parameter are: PDF, Rietveld.")
-
+        return {"focused_cropping_values": 'auto'}
     mode = mode.lower()
     if mode == "pdf":
         return {"focused_cropping_values": pdf_focused_cropping_values}
@@ -112,7 +109,7 @@ def get_mode_specific_dict(mode):
     raise ValueError("Invalid chopper mode: \"{}\"".format(mode))
 
 
-def get_all_adv_variables(mode="PDF"):
+def get_all_adv_variables(mode=None):
     advanced_config_dict = {}
     advanced_config_dict.update(variables)
     advanced_config_dict.update(get_mode_specific_dict(mode))
diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py
index 144d0e441ea..c55182a29dc 100644
--- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py
+++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py
@@ -34,6 +34,12 @@ def _get_run_numbers_for_key(current_mode_run_numbers, key):
 
 def _get_current_mode_dictionary(run_number_string, inst_settings):
     mapping_dict = get_cal_mapping_dict(run_number_string, inst_settings.cal_mapping_path)
+    if inst_settings.mode is None:
+        ws = mantid.Load('POLARIS'+run_number_string+'.nxs')
+        mode, cropping_vals = _determine_chopper_mode(ws)
+        inst_settings.mode = mode
+        inst_settings.focused_cropping_values = cropping_vals
+        mantid.DeleteWorkspace(ws)
     # Get the current mode "Rietveld" or "PDF" run numbers
     return common.cal_map_dictionary_key_helper(mapping_dict, inst_settings.mode)
 
@@ -161,3 +167,17 @@ def _read_masking_file(masking_file_path):
     if bank_masking_list:
         all_banks_masking_list.append(bank_masking_list)
     return all_banks_masking_list
+
+
+def _determine_chopper_mode(ws):
+    if ws.getRun().hasProperty('Frequency'):
+        frequency = ws.getRun()['Frequency'].lastValue()
+        print("No chopper mode provided")
+        if frequency == 50:
+            print("automatically chose Rietveld")
+            return 'Rietveld', polaris_advanced_config.rietveld_focused_cropping_values
+        if frequency == 0:
+            print("automatically chose PDF")
+            return 'PDF', polaris_advanced_config.pdf_focused_cropping_values
+    else:
+        raise ValueError("Chopper frequency not in log data. Please specify a chopper mode")
diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py
index 30423875773..0f9b0bb316a 100644
--- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py
+++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py
@@ -25,7 +25,7 @@ attr_mapping = \
      ParamMapEntry(ext_name="grouping_file_name",          int_name="grouping_file_name"),
      ParamMapEntry(ext_name="input_mode",                  int_name="input_mode", enum_class=INPUT_BATCHING),
      ParamMapEntry(ext_name="merge_banks",                 int_name="merge_banks"),
-     ParamMapEntry(ext_name="mode",                        int_name="mode", enum_class=POLARIS_CHOPPER_MODES),
+     ParamMapEntry(ext_name="mode",                        int_name="mode", enum_class=POLARIS_CHOPPER_MODES, optional=True),
      ParamMapEntry(ext_name="multiple_scattering",         int_name="multiple_scattering", optional=True),
      ParamMapEntry(ext_name="raw_data_cropping_values",    int_name="raw_data_crop_values"),
      ParamMapEntry(ext_name="run_number",                  int_name="run_number"),
-- 
GitLab