Skip to content
Snippets Groups Projects
Commit fc9d895d authored by David Fairbrother's avatar David Fairbrother
Browse files

Re #19794 Added system test for POLARIS

parent df2c38fa
No related branches found
No related tags found
No related merge requests found
Showing
with 119 additions and 65 deletions
f01af83ae099c374e3fdd87b98069db5
84cf90b7704c016162deb5def8dec28a
7db7340850fda919a385ea698d582d2f
78bc44bd3272771196c78a1861498af0
6894e550f8f114666cf4c0a60046d18b
c2fa198cf2c4a1cdf86350cafba365fe
af21fb9fb11c2477808c073a501734d4
4e0273d28eb1bdd7fdc80e877b9f7f38
......@@ -2,16 +2,43 @@ from __future__ import (absolute_import, division, print_function)
import os
import stresstesting
import shutil
import mantid.simpleapi as mantid
from mantid import config
from isis_powder import polaris
from isis_powder import Polaris
DIRS = config['datasearch.directories'].split(';')
# Setup various path details
class VanadiumCalibrationTest(stresstesting.MantidStressTest):
inst_name = "POLARIS"
# Relative to system data folder
working_folder_name = "ISIS_Powder"
# Relative to working folder
input_folder_name = "input"
output_folder_name = "output"
# Relative to input folder
calibration_folder_name = os.path.join("calibration", inst_name.lower())
calibration_map_rel_path = os.path.join("yaml_files", "polaris_system_test_mapping.yaml")
spline_rel_path = os.path.join("17_1", "VanSplined_98532_cycle_16_3_silicon_all_spectra.cal.nxs")
# Generate paths for the tests
# This implies DIRS[0] is the system test data folder
working_dir = os.path.join(DIRS[0], working_folder_name)
input_dir = os.path.join(working_dir, input_folder_name)
output_dir = os.path.join(working_dir, output_folder_name)
calibration_map_path = os.path.join(input_dir, calibration_map_rel_path)
calibration_dir = os.path.join(input_dir, calibration_folder_name)
spline_path = os.path.join(calibration_dir, spline_rel_path)
class CreateVanadiumTest(stresstesting.MantidStressTest):
calibration_results = None
existing_config = config['datasearch.directories']
......@@ -20,15 +47,19 @@ class VanadiumCalibrationTest(stresstesting.MantidStressTest):
return _gen_required_files()
def runTest(self):
self.calibration_results = _run_vanadium_calibration()
setup_mantid_paths()
self.calibration_results = run_vanadium_calibration()
def validate(self):
return _calibration_validation(self, self.calibration_results)
return calibration_validator(self.calibration_results)
def cleanup(self):
# TODO clean up reference files properly
config['datasearch.directories'] = self.existing_config
# _clean_up()
try:
_try_delete(output_dir)
_try_delete(spline_path)
finally:
mantid.mtd.clear()
config['datasearch.directories'] = self.existing_config
class FocusTest(stresstesting.MantidStressTest):
......@@ -41,94 +72,107 @@ class FocusTest(stresstesting.MantidStressTest):
def runTest(self):
# Gen vanadium calibration first
_run_vanadium_calibration()
self.focus_results = _run_focus()
setup_mantid_paths()
self.focus_results = run_focus()
def validation(self):
return _focus_validation(self, self.focus_results)
def validate(self):
return focus_validation(self.focus_results)
def cleanup(self):
config['datasearch.directories'] = self.existing_config
# TODO
try:
_try_delete(spline_path)
_try_delete(output_dir)
finally:
config['datasearch.directories'] = self.existing_config
mantid.mtd.clear()
def _gen_required_files():
input_files = ["POLARIS/POL78338.raw",
"POLARIS/POL78339.raw",
"POLARIS/POL79514.raw"]
required_run_numbers = ["98531", "98532", # create_van : PDF mode
"98533"] # File to focus (Si)
# Generate file names of form "INSTxxxxx.nxs"
input_files = [os.path.join(input_dir, (inst_name + "000" + number + ".nxs")) for number in required_run_numbers]
input_files.append(calibration_map_path)
return input_files
def _run_vanadium_calibration():
vanadium_run = 95598
def run_vanadium_calibration():
vanadium_run = 98532 # Choose arbitrary run in the cycle 17_1
polaris_obj = setup_polaris_instrument()
# Try it without an output name
pdf_inst_obj = setup_inst_object(mode="PDF")
return polaris_obj.create_calibration_vanadium(run_in_range=vanadium_run, do_absorb_corrections=True,
generate_absorb_corrections=True)
# Run create vanadium twice to ensure we get two different output splines / files
pdf_inst_obj.create_vanadium(first_cycle_run_no=vanadium_run,
do_absorb_corrections=True, multiple_scattering=False)
# Check the spline looks good and was saved
if not os.path.exists(spline_path):
raise RuntimeError("Could not find output spline at the following path: " + spline_path)
splined_ws = mantid.Load(Filename=spline_path)
def _run_focus():
run_number = 95599
polaris_obj = setup_polaris_instrument()
return polaris_obj.focus(run_number=run_number, input_mode="Individual", do_van_normalisation=True)
return splined_ws
def _calibration_validation(cls, results):
_validation_setup(cls)
results_name = results[0].name()
reference_file_name = "ISIS_Powder-POLARIS78338_Van_Cal.nxs"
return results_name, reference_file_name
def run_focus():
run_number = 98533
sample_empty = 98532 # Use the vanadium empty again to make it obvious
sample_empty_scale = 0.5 # Set it to 50% scale
# Copy the required splined file into place first (instead of relying on generated one)
splined_file_name = "POLARIS00098532_splined.nxs"
def _focus_validation(cls, results):
_validation_setup(cls)
original_splined_path = os.path.join(input_dir, splined_file_name)
shutil.copy(original_splined_path, spline_path)
reference_file_name = "POLARIS_PowderFocus79514.nxs"
focus_output_name = "Focus_results"
mantid.GroupWorkspaces(InputWorkspaces=results, OutputWorkspace=focus_output_name)
inst_object = setup_inst_object(mode="PDF")
return inst_object.focus(run_number=run_number, input_mode="Individual", do_van_normalisation=True,
do_absorb_corrections=False, sample_empty=sample_empty,
sample_empty_scale=sample_empty_scale)
return focus_output_name, reference_file_name
def calibration_validator(results):
# Get the name of the grouped workspace list
reference_file_name = "ISIS_Powder-POLARIS00098533_splined.nxs"
return _compare_ws(reference_file_name=reference_file_name, results=results)
def _validation_setup(cls):
cls.disableChecking.append('Instrument')
cls.disableChecking.append('Sample')
cls.disableChecking.append('SpectraMap')
def focus_validation(results):
reference_file_name = "ISIS_Powder-POLARIS98533_FocusSempty.nxs"
return _compare_ws(reference_file_name=reference_file_name, results=results)
def _clean_up():
output_file_path = _get_calibration_dir() + _get_calibration_output_name()
try:
os.remove(output_file_path)
except OSError:
print ("Could not delete output file at: ", output_file_path)
def _compare_ws(reference_file_name, results):
ref_ws = mantid.Load(Filename=reference_file_name)
def setup_polaris_instrument():
user_name = "Test"
calibration_mapping_file_name = "polaris_calibration.yaml"
is_valid = True if len(results) > 0 else False
calibration_dir = _get_calibration_dir()
calibration_mapping_path = os.path.join(calibration_dir, calibration_mapping_file_name)
output_dir = _get_output_dir()
for ws, ref in zip(results, ref_ws):
if not (mantid.CompareWorkspaces(Workspace1=ws, Workspace2=ref)):
is_valid = False
print (ws.getName() + " was not equal to: " + ref.getName())
path_to_add = os.path.join(DIRS[0], "POLARIS")
config['datasearch.directories'] += ";" + path_to_add
polaris_obj = polaris.Polaris(user_name=user_name, chopper_on=True, apply_solid_angle=False,
calibration_directory=calibration_dir, output_directory=output_dir,
calibration_mapping_file=calibration_mapping_path)
return polaris_obj
return is_valid
def _get_calibration_output_name():
return "system_test_polaris_van_cal.nxs"
def setup_mantid_paths():
config['datasearch.directories'] += ";" + input_dir
def _get_output_dir():
return os.path.join(DIRS[0], "POLARIS/DataOut")
def setup_inst_object(mode):
user_name = "Test"
inst_obj = Polaris(user_name=user_name, calibration_mapping_file=calibration_map_path,
calibration_directory=calibration_dir, output_directory=output_dir, mode=mode)
return inst_obj
def _get_calibration_dir():
return os.path.join(DIRS[0], "POLARIS/Calibration")
def _try_delete(path):
try:
# Use this instead of os.remove as we could be passed a non-empty dir
if os.path.isdir(path):
shutil.rmtree(path)
else:
os.remove(path)
except OSError as err:
print ("Could not delete output file at: ", path)
7db7340850fda919a385ea698d582d2f
fce76485d46b2d6fc49c3b37f0a92a77
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