Skip to content
Snippets Groups Projects
Commit 0f746d31 authored by Sam Jenkins's avatar Sam Jenkins
Browse files

Re #23241 added adjust cal file

parent 496af83f
No related branches found
No related tags found
No related merge requests found
......@@ -44,6 +44,7 @@ class Gem(AbstractInst):
do_absorb_corrections=self._inst_settings.do_absorb_corrections)
def create_cal(self, **kwargs):
print(hasattr(self._inst_settings, "calibration_to_adjust"))
self._switch_texture_mode_specific_inst_settings(kwargs.get("texture_mode"))
self._inst_settings.update_attributes(kwargs=kwargs)
self._inst_settings.update_attributes(advanced_config=gem_advanced_config.get_calibration_variables())
......@@ -58,8 +59,17 @@ class Gem(AbstractInst):
"Step": self._inst_settings.get_det_offsets_step,
"XMin": self._inst_settings.get_det_offsets_x_min,
"XMax": self._inst_settings.get_det_offsets_x_max}
return gem_calibration_algs.create_calibration(calibration_runs=self._inst_settings.run_number,
if hasattr(self._inst_settings, "calibration_to_adjust"):
return gem_calibration_algs.create_calibration(calibration_runs=self._inst_settings.run_number,
instrument=self,
offset_file_name=run_details.offset_file_path,
grouping_file_name=run_details.grouping_file_path,
calibration_dir=self._inst_settings.calibration_dir,
rebin_1_params=self._inst_settings.cal_rebin_1,
rebin_2_params=self._inst_settings.cal_rebin_2,
cross_correlate_params=cross_correlate_params,
get_det_offset_params=get_detector_offsets_params)
return gem_calibration_algs.adjust_calibration(calibration_runs=self._inst_settings.run_number,
instrument=self,
offset_file_name=run_details.offset_file_path,
grouping_file_name=run_details.grouping_file_path,
......@@ -67,7 +77,8 @@ class Gem(AbstractInst):
rebin_1_params=self._inst_settings.cal_rebin_1,
rebin_2_params=self._inst_settings.cal_rebin_2,
cross_correlate_params=cross_correlate_params,
get_det_offset_params=get_detector_offsets_params)
get_det_offset_params=get_detector_offsets_params,
original_cal =self._inst_settings.cal_adjust)
def set_sample_details(self, **kwargs):
kwarg_name = "sample"
......
......@@ -111,7 +111,7 @@ texture_mode_off ={"focused_cropping_values": focused_cropping_values,
calibration_params = {
"create_cal_rebin_1_params": "100,-0.0006,19950",
"create_cal_rebin_2_params": "1,0.002,1.3",
"create_cal_rebin_2_params": "1.05,0.002,1.3",
"create_cal_cross_correlate_params": {
"cross_corr_reference_spectra": 5000,
"cross_corr_ws_index_min": 11,
......
from __future__ import (absolute_import, division, print_function)
import csv
import os
import mantid.simpleapi as mantid
import isis_powder.routines.common as common
......@@ -24,9 +25,44 @@ def create_calibration(calibration_runs, instrument, offset_file_name, grouping_
input_batching=INPUT_BATCHING.Summed)
input_ws = input_ws_list[0]
calibration_ws = mantid.Rebin(InputWorkspace=input_ws, Params=rebin_1_params)
focused = _calibration_processing(calibration_dir, calibration_runs, cross_correlate_params, get_det_offset_params,
grouping_file_name, input_ws, instrument, offset_file_name, rebin_1_params,
rebin_2_params)
return focused
def adjust_calibration(calibration_runs, instrument, offset_file_name, grouping_file_name, calibration_dir,
rebin_1_params, rebin_2_params, cross_correlate_params, get_det_offset_params, original_cal):
"""
Create a calibration file from (usually) a ceria run
:param calibration_runs: Run number(s) for this run
:param instrument: The GEM instrument object
:param offset_file_name: Name of the file to write detector offset information to
:param grouping_file_name: Name of grouping calibration file
:param calibration_dir: Path to directory containing calibration information
:param rebin_1_params: Parameters for the first rebin step (as a string in the usual format)
:param rebin_2_params: Parameters for the second rebin step (as a string in the usual format)
:param cross_correlate_params: Parameters for CrossCorrelate (as a dictionary PropertyName: PropertyValue)
:param get_det_offset_params: Parameters for GetDetectorOffsets (as a dictionary PropertyName: PropertyValue)
"""
input_ws_list = common.load_current_normalised_ws_list(run_number_string=calibration_runs, instrument=instrument,
input_batching=INPUT_BATCHING.Summed)
input_ws = input_ws_list[0]
input_ws = mantid.AlignDetectors(InputWorkspace=input_ws, CalibrationFile=original_cal)
offset_file = os.path.join(calibration_dir, offset_file_name)
focused = _calibration_processing(calibration_dir, calibration_runs, cross_correlate_params, get_det_offset_params,
grouping_file_name, input_ws, instrument, offset_file, rebin_1_params,
rebin_2_params)
_adjust_cal_file(original_cal, offset_file)
return focused
def _calibration_processing(calibration_dir, calibration_runs, cross_correlate_params, get_det_offset_params,
grouping_file_name, input_ws, instrument, offset_file, rebin_1_params, rebin_2_params):
calibration_ws = input_ws
if calibration_ws.getAxis(0).getUnit().unitID() != WORKSPACE_UNITS.d_spacing:
calibration_ws = mantid.Rebin(InputWorkspace=input_ws, Params=rebin_1_params)
calibration_ws = mantid.ConvertUnits(InputWorkspace=calibration_ws, Target="dSpacing")
spectrum_list = []
for i in range(0, calibration_ws.getNumberHistograms()):
......@@ -39,23 +75,36 @@ def create_calibration(calibration_runs, instrument, offset_file_name, grouping_
spectrum_list.append(i)
calibration_ws = mantid.ExtractSpectra(InputWorkspace=calibration_ws, WorkspaceIndexList=spectrum_list)
rebinned = mantid.Rebin(InputWorkspace=calibration_ws, Params=rebin_2_params)
cross_correlated = mantid.CrossCorrelate(InputWorkspace=rebinned, **cross_correlate_params)
offset_file = os.path.join(calibration_dir, offset_file_name)
# Offsets workspace must be referenced as string so it can be deleted, as simpleapi doesn't recognise it as a ws
offsets_ws_name = "offsets"
mantid.GetDetectorOffsets(InputWorkspace=cross_correlated, GroupingFileName=offset_file,
OutputWorkspace=offsets_ws_name, **get_det_offset_params)
rebinned_tof = mantid.ConvertUnits(InputWorkspace=rebinned, Target="TOF")
aligned = mantid.AlignDetectors(InputWorkspace=rebinned_tof, CalibrationFile=offset_file)
grouping_file = os.path.join(calibration_dir, grouping_file_name)
focused = mantid.DiffractionFocussing(InputWorkspace=aligned, GroupingFileName=grouping_file,
OutputWorkspace=instrument._generate_output_file_name(calibration_runs)
+ "_grouped")
+ "_grouped")
print("Saved cal file to " + offset_file)
common.remove_intermediate_workspace([calibration_ws, rebinned, cross_correlated, rebinned_tof, aligned,
common.remove_intermediate_workspace([calibration_ws, rebinned, cross_correlated, rebinned_tof,
offsets_ws_name])
return focused
def _adjust_cal_file(original_cal, generated_cal):
origin_ws = "origin{}"
gen_ws = "newCal{}"
out_ws = "adjusted_cal"
mantid.LoadCalFile(InstrumentName="Gem", MakeGroupingWorkspace=False, MakeMaskWorkspace=False,
MakeOffsetsWorkspace=True, WorkspaceName=origin_ws.format(''), CalFilename=original_cal)
mantid.LoadCalFile(InstrumentName="Gem", MakeGroupingWorkspace=False, MakeMaskWorkspace=False,
MakeOffsetsWorkspace=True, WorkspaceName=gen_ws.format(''), CalFilename=generated_cal)
mantid.Plus(LHSWorkspace=origin_ws.format("_offsets"), RHSWorkspace=gen_ws.format("_offsets"),
OutputWorkspace=out_ws)
mantid.SaveCalFile(OffsetsWorkspace=out_ws, Filename=generated_cal)
common.remove_intermediate_workspace([origin_ws.format("_offsets"), gen_ws.format("_offsets"),
origin_ws.format("_cal"), gen_ws.format("_cal")])
......@@ -13,6 +13,7 @@ from isis_powder.routines.common_enums import INPUT_BATCHING, WORKSPACE_UNITS
# Maps friendly user name (ext_name) -> script name (int_name)
attr_mapping = \
[
ParamMapEntry(ext_name="calibration_to_adjust", int_name="cal_adjust", optional=True),
ParamMapEntry(ext_name="calibration_directory", int_name="calibration_dir"),
ParamMapEntry(ext_name="calibration_mapping_file", int_name="cal_mapping_path"),
ParamMapEntry(ext_name="config_file", int_name="config_file"),
......
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