Skip to content
Snippets Groups Projects
Commit 17114538 authored by Conor Finn's avatar Conor Finn
Browse files

RE #27012 Create a basic focusing model

Initial version of the model. Currently missing the plotting, file creation, and file system interaction.
parent 81a91fae
No related branches found
No related tags found
No related merge requests found
......@@ -33,6 +33,7 @@ class EngineeringDiffractionGui(QtWidgets.QMainWindow, Ui_main_window):
self.calibration_presenter = None
self.set_on_help_clicked(self.open_help_window)
# Setup Tabs
self.setup_calibration()
def setup_calibration(self):
......
......@@ -7,7 +7,46 @@
from __future__ import (absolute_import, division, print_function)
from Engineering.gui.engineering_diffraction.tabs.common import vanadium_corrections
from mantid.simpleapi import EnggFocus, Load, logger
SAMPLE_RUN_WORKSPACE_NAME = "engggui_focusing_input_ws"
FOCUSED_OUTPUT_WORKSPACE_NAME = "engggui_focusing_output_ws_bank_"
class FocusModel(object):
def focus_run(self, run_number, banks, plot_output, instrument, rb_number):
pass
def focus_run(self, sample_path, banks, plot_output, instrument, rb_number, current_calib):
vanadium_path = current_calib["vanadium_path"]
if vanadium_path is None:
return
integration_workspace, curves_workspace = vanadium_corrections.fetch_correction_workspaces(
vanadium_path, instrument)
sample_workspace = self._load_focus_sample_run(sample_path)
for name in banks:
output_workspace_name = FOCUSED_OUTPUT_WORKSPACE_NAME + str(name)
self._run_focus(sample_workspace, output_workspace_name, integration_workspace, curves_workspace, name)
@staticmethod
def _run_focus(input_workspace, output_workspace, vanadium_integration_ws,
vanadium_curves_ws, bank):
try:
return EnggFocus(InputWorkspace=input_workspace,
OutputWorkspace=output_workspace,
VanIntegrationWorkspace=vanadium_integration_ws,
VanCurvesWorkspace=vanadium_curves_ws,
Bank=bank)
except RuntimeError as e:
logger.error(
"Error in focusing, Could not run the EnggFocus algorithm successfully for bank " +
str(bank) + ". Error Description: " + str(e))
raise RuntimeError()
@staticmethod
def _load_focus_sample_run(sample_path):
try:
return Load(Filename=sample_path, OutputWorkspace=SAMPLE_RUN_WORKSPACE_NAME)
except RuntimeError as e:
logger.error(
"Error while loading sample data for focusing. Could not load the sample with filename: "
+ sample_path + ". Error Description: " + str(e))
raise RuntimeError
# Mantid Repository : https://github.com/mantidproject/mantid
#
# Copyright © 2019 ISIS Rutherford Appleton Laboratory UKRI,
# NScD Oak Ridge National Laboratory, European Spallation Source
# & Institut Laue - Langevin
# SPDX - License - Identifier: GPL - 3.0 +
from __future__ import (absolute_import, division, print_function)
import unittest
from mantid.py3compat.mock import patch
from Engineering.gui.engineering_diffraction.tabs.focus import model
file_path = "Engineering.gui.engineering_diffraction.tabs.focus.model"
class FocusModelTest(unittest.TestCase):
def setUp(self):
self.model = model.FocusModel()
self.current_calibration = {
"vanadium_path": "/mocked/out/anyway",
"ceria_path": "this_is_mocked_out_too"
}
@patch(file_path + ".vanadium_corrections.fetch_correction_workspaces")
def test_fails_on_invalid_sample_number(self, fetch_van):
fetch_van.return_value = ("mocked_integ", "mocked_curves")
self.assertRaises(ValueError, self.model.focus_run, "FAIL", ["1", "2"], False, "ENGINX",
"0", self.current_calibration)
fetch_van.assert_called_with("/mocked/out/anyway", "ENGINX")
@patch(file_path + ".vanadium_corrections.fetch_correction_workspaces")
def test_focus_cancelled_when_calibration_is_not_set(self, fetch_van):
fetch_van.return_value = ("mocked_integ", "mocked_curves")
blank_calibration = {"vanadium_path": None, "ceria_path": None}
self.model.focus_run("305761", ["1", "2"], False, "ENGINX", "0", blank_calibration)
self.assertEqual(fetch_van.call_count, 0)
@patch(file_path + ".FocusModel._run_focus")
@patch(file_path + ".FocusModel._load_focus_sample_run")
@patch(file_path + ".vanadium_corrections.fetch_correction_workspaces")
def test_focus_run_for_each_bank(self, fetch_van, load_focus, run_focus):
fetch_van.return_value = ("mocked_integ", "mocked_curves")
banks = ["1", "2"]
load_focus.return_value = "mocked_sample"
self.model.focus_run("305761", banks, False, "ENGINX", "0", self.current_calibration)
self.assertEqual(len(banks), run_focus.call_count)
run_focus.assert_called_with("mocked_sample",
model.FOCUSED_OUTPUT_WORKSPACE_NAME + banks[-1],
"mocked_integ", "mocked_curves", banks[-1])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment