From 307b02799ba59bb7dd8b5bd3b80f65600f67ff36 Mon Sep 17 00:00:00 2001 From: David Fairbrother <DavidFair@users.noreply.github.com> Date: Tue, 6 Dec 2016 11:26:07 +0000 Subject: [PATCH] Re #18108 Reworked outputs from vanadium calibration --- .../tests/analysis/ISIS_PowderPearlTest.py | 2 +- ...SIS_PowderPEARL95634-95647_Van_Cal.nxs.md5 | 2 +- .../Diffraction/isis_powder/abstract_inst.py | 8 +- scripts/Diffraction/isis_powder/pearl.py | 15 ++- .../isis_powder/pearl_routines/pearl_algs.py | 22 ---- .../pearl_routines/pearl_output.py | 18 +-- .../pearl_routines/pearl_spline.py | 106 +++++------------- scripts/Diffraction/isis_powder/polaris.py | 21 ++-- .../polaris_routines/polaris_algs.py | 8 +- .../isis_powder/routines/calibrate.py | 43 +++---- .../isis_powder/routines/common.py | 32 ++++-- .../Diffraction/isis_powder/routines/focus.py | 2 +- 12 files changed, 111 insertions(+), 168 deletions(-) diff --git a/Testing/SystemTests/tests/analysis/ISIS_PowderPearlTest.py b/Testing/SystemTests/tests/analysis/ISIS_PowderPearlTest.py index 6741ea52e66..e5fb7982302 100644 --- a/Testing/SystemTests/tests/analysis/ISIS_PowderPearlTest.py +++ b/Testing/SystemTests/tests/analysis/ISIS_PowderPearlTest.py @@ -10,8 +10,8 @@ from isis_powder.pearl import Pearl DIRS = config['datasearch.directories'].split(';') -class VanadiumCalibrationTest(stresstesting.MantidStressTest): +class VanadiumCalibrationTest(stresstesting.MantidStressTest): calibration_results = None existing_config = config['datasearch.directories'] diff --git a/Testing/SystemTests/tests/analysis/reference/ISIS_PowderPEARL95634-95647_Van_Cal.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/ISIS_PowderPEARL95634-95647_Van_Cal.nxs.md5 index d5eb27e8f3a..42890acecb3 100644 --- a/Testing/SystemTests/tests/analysis/reference/ISIS_PowderPEARL95634-95647_Van_Cal.nxs.md5 +++ b/Testing/SystemTests/tests/analysis/reference/ISIS_PowderPEARL95634-95647_Van_Cal.nxs.md5 @@ -1 +1 @@ -0fd97ee147b3f8f8ca461e7dbcb65020 +3bca903e6dc91cd658c01efc75e5881a diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index e5de6e83581..b9affec5cf8 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -65,10 +65,9 @@ class AbstractInst(object): # These are to be called from either concrete instruments or common not by users # Common steps to all instruments - def _create_calibration_vanadium(self, vanadium_runs, empty_runs, output_file_name=None, + def _create_calibration_vanadium(self, vanadium_runs, empty_runs, do_absorb_corrections=True, gen_absorb_correction=False): return calibrate.create_van(instrument=self, van=vanadium_runs, empty=empty_runs, - output_van_file_name=output_file_name, absorb=do_absorb_corrections, gen_absorb=gen_absorb_correction) def _focus(self, run_number, input_batching, do_attenuation, do_van_normalisation): @@ -159,9 +158,12 @@ class AbstractInst(object): def pearl_rebin_to_workspace(self, ws_to_rebin, ws_to_match): return ws_to_rebin - def spline_vanadium_ws(self, focused_vanadium_ws, instrument_version=''): + def spline_vanadium_ws(self, focused_vanadium_ws): return None + def extract_and_crop_spectra(self, focused_ws): + raise NotImplemented("Extract spectra and crop in tof not implemented") + # ----- Private Implementation ----- # # These should only be called by the abstract instrument class diff --git a/scripts/Diffraction/isis_powder/pearl.py b/scripts/Diffraction/isis_powder/pearl.py index 36c34a665c9..4a90c2b5f6a 100644 --- a/scripts/Diffraction/isis_powder/pearl.py +++ b/scripts/Diffraction/isis_powder/pearl.py @@ -47,7 +47,6 @@ class Pearl(AbstractInst): self._spline_coeff = num_of_splines return self._create_calibration_vanadium(vanadium_runs=vanadium_runs, empty_runs=empty_runs, - output_file_name=output_file_name, do_absorb_corrections=do_absorb_corrections, gen_absorb_correction=gen_absorb_correction) @@ -137,11 +136,10 @@ class Pearl(AbstractInst): def get_monitor_spectra_index(self, run_number): return get_monitor_spectra(run_number=run_number, focus_mode=self._focus_mode) - def spline_vanadium_ws(self, focused_vanadium_ws, instrument_version=''): + def spline_vanadium_ws(self, focused_vanadium_spectra): # TODO move spline number into the class - return pearl_spline.spline_vanadium_for_focusing(focused_vanadium_ws=focused_vanadium_ws, - spline_number=self._spline_coeff, - instrument_version=instrument_version) + return pearl_spline.spline_vanadium_for_focusing(focused_vanadium_spectra=focused_vanadium_spectra, + num_splines=self._spline_coeff) def pearl_focus_tof_rebinning(self, workspace): out_name = workspace.name() + "_rebinned" @@ -161,10 +159,15 @@ class Pearl(AbstractInst): perform_attenuation=attenuate) def vanadium_calibration_rebinning(self, vanadium_ws): - out_ws = pearl_algs.apply_tof_rebinning(ws_to_rebin=vanadium_ws, tof_params=self._create_van_tof_binning) + out_ws = common.crop_in_tof(ws_to_rebin=vanadium_ws, x_min=1500, x_max=19900, is_mixed_binning=True) return out_ws + def extract_and_crop_spectra(self, focused_ws): + ws_spectra = common.extract_ws_spectra(ws_to_split=focused_ws) + ws_spectra = common.crop_in_tof(ws_to_rebin=ws_spectra, x_min=1500, x_max=19900) + return ws_spectra + def crop_data_tail(self, ws_to_crop): # TODO move this param into advanced config out_ws = mantid.CropWorkspace(XMax="19900", InputWorkspace=ws_to_crop, OutputWorkspace=ws_to_crop) diff --git a/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py b/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py index c604a9c6d56..052f6608395 100644 --- a/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py +++ b/scripts/Diffraction/isis_powder/pearl_routines/pearl_algs.py @@ -18,14 +18,6 @@ def attenuate_workspace(attenuation_file_path, ws_to_correct): return pearl_attenuated_ws -def apply_tof_rebinning(ws_to_rebin, tof_params): - previous_units = ws_to_rebin.getAxis(0).getUnit().unitID() - ws_to_rebin = mantid.ConvertUnits(InputWorkspace=ws_to_rebin, Target="TOF", OutputWorkspace=ws_to_rebin) - rebinned_ws = mantid.Rebin(InputWorkspace=ws_to_rebin, Params=tof_params, OutputWorkspace=ws_to_rebin) - rebinned_ws = mantid.ConvertUnits(InputWorkspace=rebinned_ws, Target=previous_units, OutputWorkspace=rebinned_ws) - return rebinned_ws - - def generate_vanadium_absorb_corrections(van_ws): raise NotImplementedError("Generating absorption corrections needs to be implemented correctly") @@ -44,20 +36,6 @@ def generate_vanadium_absorb_corrections(van_ws): return absorb_ws -def get_instrument_ranges(instrument_version): - # TODO rename this to get number of banks/save range - if instrument_version == "new" or instrument_version == "old": # New and old have identical ranges - num_of_banks = 12 - save_range = 3 - elif instrument_version == "new2": - num_of_banks = 14 - save_range = 5 - else: - raise ValueError("Instrument version unknown") - - return num_of_banks, save_range - - def get_run_details(tt_mode, run_number_string, label, calibration_dir): calibration_file, grouping_file, van_absorb, van_file = \ pearl_calib_factory.get_calibration_filename(cycle=label, tt_mode=tt_mode) diff --git a/scripts/Diffraction/isis_powder/pearl_routines/pearl_output.py b/scripts/Diffraction/isis_powder/pearl_routines/pearl_output.py index 6566318d5eb..94aa9810b25 100644 --- a/scripts/Diffraction/isis_powder/pearl_routines/pearl_output.py +++ b/scripts/Diffraction/isis_powder/pearl_routines/pearl_output.py @@ -9,21 +9,16 @@ import isis_powder.routines.common as common def generate_and_save_focus_output(instrument, processed_spectra, run_details, perform_attenuation, focus_mode=None): output_file_paths = instrument._generate_out_file_paths(run_details=run_details) - save_range = instrument.get_save_range(run_details.instrument_version) if focus_mode == "all": processed_nexus_files = _focus_mode_all(output_file_paths, processed_spectra) - elif focus_mode == "groups": - processed_nexus_files = _focus_mode_groups(run_details.instrument_version, output_file_paths, save_range, + processed_nexus_files = _focus_mode_groups(run_details.instrument_version, output_file_paths, processed_spectra) - elif focus_mode == "trans": processed_nexus_files = _focus_mode_trans(output_file_paths, perform_attenuation, instrument, processed_spectra) - elif focus_mode == "mods": processed_nexus_files = _focus_mode_mods(output_file_paths, processed_spectra) - else: raise ValueError("Focus mode unknown") @@ -89,7 +84,7 @@ def _focus_mode_trans(output_file_paths, atten, instrument, calibrated_spectra): return output_list -def _focus_mode_groups(instrument_version, output_file_paths, save_range, calibrated_spectra): +def _focus_mode_groups(instrument_version, output_file_paths, calibrated_spectra): output_list = [] to_save = _sum_groups_of_three_ws(calibrated_spectra, output_file_paths) @@ -115,6 +110,7 @@ def _focus_mode_groups(instrument_version, output_file_paths, save_range, calibr append = True index += 1 + save_range = 5 for i in range(0, save_range): monitor_ws_name = output_file_paths["output_name"] + "_mod" + str(i + 10) @@ -134,10 +130,6 @@ def _focus_mode_all(output_file_paths, processed_spectra): summed_spectra_name = output_file_paths["output_name"] + "_mods1-9" summed_spectra = mantid.MergeRuns(InputWorkspaces=processed_spectra[:9], OutputWorkspace=summed_spectra_name) - #summed_spectra = mantid.CloneWorkspace(InputWorkspace=processed_spectra[0], OutputWorkspace=summed_spectra_name) - #for ws in processed_spectra[1:9]: - # summed_spectra = mantid.Plus(LHSWorkspace=summed_spectra, RHSWorkspace=ws, OutputWorkspace=summed_spectra_name) - summed_spectra = mantid.Scale(InputWorkspace=summed_spectra, Factor=0.111111111111111, OutputWorkspace=summed_spectra_name) summed_spectra = mantid.ConvertUnits(InputWorkspace=summed_spectra, Target="TOF", @@ -188,6 +180,6 @@ def _sum_groups_of_three_ws(calibrated_spectra, output_file_names): workspace_names = output_file_names["output_name"] + "_mod" + mod_first_number + '-' + mod_last_number output_list.append(mantid.Scale(InputWorkspace=workspace_list[outer_loop_count], OutputWorkspace=workspace_names, Factor=0.333333333333)) - for ws in workspace_list: - common.remove_intermediate_workspace(ws) + + common.remove_intermediate_workspace(workspace_list) return output_list diff --git a/scripts/Diffraction/isis_powder/pearl_routines/pearl_spline.py b/scripts/Diffraction/isis_powder/pearl_routines/pearl_spline.py index dd2ca712329..b8ecc0edb16 100644 --- a/scripts/Diffraction/isis_powder/pearl_routines/pearl_spline.py +++ b/scripts/Diffraction/isis_powder/pearl_routines/pearl_spline.py @@ -5,83 +5,39 @@ import isis_powder.routines.common as common from isis_powder.pearl_routines import pearl_algs -def spline_vanadium_for_focusing(focused_vanadium_ws, spline_number, instrument_version): - if instrument_version == "new2" or instrument_version == "new": - out_list = _van_spline_new_instruments(in_workspace=focused_vanadium_ws, num_splines=spline_number, - instrument_version=instrument_version) - elif instrument_version == "old": - out_list = _van_spline_old_instrument(in_workspace=focused_vanadium_ws) - else: - raise ValueError("Spline Background - PEARL: Instrument version unknown") - - return out_list - - -def _perform_spline_range(num_of_banks, num_splines, stripped_ws): - splined_ws_list = [] - for i in range(0, num_of_banks): - out_ws_name = "spline" + str(i + 1) - splined_ws_list.append(mantid.SplineBackground(InputWorkspace=stripped_ws, OutputWorkspace=out_ws_name, - WorkspaceIndex=i, NCoeff=num_splines)) - return splined_ws_list - - -def _strip_peaks_new_inst(input_ws, alg_range): - van_stripped_ws = mantid.StripPeaks(InputWorkspace=input_ws, FWHM=15, Tolerance=8, WorkspaceIndex=0) - for i in range(1, alg_range): - van_stripped_ws = mantid.StripPeaks(InputWorkspace=van_stripped_ws, FWHM=15, Tolerance=8, - WorkspaceIndex=i) - - return van_stripped_ws - - -def _van_spline_new_instruments(in_workspace, num_splines, instrument_version): +def spline_vanadium_for_focusing(focused_vanadium_spectra, num_splines): # remove bragg peaks before spline - alg_range, unused = pearl_algs.get_instrument_ranges(instrument_version) - van_stripped_ws = _strip_peaks_new_inst(in_workspace, alg_range) + stripped_peaks_list = [] + for ws in focused_vanadium_spectra: + out_name = ws.name() + "_stripped" + # We have to clone the workspace - if no peaks are found it trashes the list + # as it assigns to new name to the previous list + stripped_ws = mantid.CloneWorkspace(InputWorkspace=ws, OutputWorkspace=out_name) + stripped_peaks_list.append(mantid.StripPeaks(InputWorkspace=stripped_ws, FWHM=15, Tolerance=8, + OutputWorkspace=out_name)) + + # run twice on low angle as peaks are very broad + for i in range(0, 2): + mantid.StripPeaks(InputWorkspace=stripped_peaks_list[12], FWHM=100, Tolerance=10, + OutputWorkspace=stripped_peaks_list[12]) + + mantid.StripPeaks(InputWorkspace=stripped_peaks_list[13], FWHM=60, Tolerance=10, + OutputWorkspace=stripped_peaks_list[13]) + + tof_ws_list = [] + for ws in stripped_peaks_list: + out_name = ws.name() + "_TOF" + tof_ws_list.append(mantid.ConvertUnits(InputWorkspace=ws, Target="TOF", OutputWorkspace=out_name)) + common.remove_intermediate_workspace(ws) - if instrument_version == "new2": - # run twice on low angle as peaks are very broad - for i in range(0, 2): - van_stripped_ws = mantid.StripPeaks(InputWorkspace=van_stripped_ws, FWHM=100, Tolerance=10, - WorkspaceIndex=12) - van_stripped_ws = mantid.StripPeaks(InputWorkspace=van_stripped_ws, FWHM=60, Tolerance=10, - WorkspaceIndex=13) - - van_stripped_ws = mantid.ConvertUnits(InputWorkspace=van_stripped_ws, Target="TOF") + splined_ws_list = [] + bank_index = 0 + for ws in tof_ws_list: + bank_index += 1 + out_ws_name = "spline_bank_" + str(bank_index + 1) + splined_ws_list.append(mantid.SplineBackground(InputWorkspace=ws, OutputWorkspace=out_ws_name, + NCoeff=num_splines)) + common.remove_intermediate_workspace(ws) - splined_ws_list = _perform_spline_range(alg_range, num_splines, van_stripped_ws) - common.remove_intermediate_workspace(van_stripped_ws) return splined_ws_list - -def _van_spline_old_instrument(in_workspace): - van_stripped = mantid.ConvertUnits(InputWorkspace=in_workspace, Target="dSpacing") - - # remove bragg peaks before spline - van_stripped = mantid.StripPeaks(InputWorkspace=van_stripped, FWHM=15, Tolerance=6, WorkspaceIndex=0) - van_stripped = mantid.StripPeaks(InputWorkspace=van_stripped, FWHM=15, Tolerance=6, WorkspaceIndex=2) - van_stripped = mantid.StripPeaks(InputWorkspace=van_stripped, FWHM=15, Tolerance=6, WorkspaceIndex=3) - van_stripped = mantid.StripPeaks(InputWorkspace=van_stripped, FWHM=40, Tolerance=12, WorkspaceIndex=1) - van_stripped = mantid.StripPeaks(InputWorkspace=van_stripped, FWHM=60, Tolerance=12, WorkspaceIndex=1) - - # Mask low d region that is zero before spline - for reg in range(0, 4): - if reg == 1: - van_stripped = mantid.MaskBins(InputWorkspace=van_stripped, XMin=0, XMax=0.14, SpectraList=reg) - else: - van_stripped = mantid.MaskBins(InputWorkspace=van_stripped, XMin=0, XMax=0.06, SpectraList=reg) - - van_stripped = mantid.ConvertUnits(InputWorkspace=van_stripped, Target="TOF") - - splined_ws_list = [] - for i in range(0, 4): - out_ws_name = "spline" + str(i+1) - if i == 1: - coeff = 80 - else: - coeff = 100 - splined_ws_list.append(mantid.SplineBackground(InputWorkspace=van_stripped, OutputWorkspace=out_ws_name, - WorkspaceIndex=i, NCoeff=coeff)) - common.remove_intermediate_workspace(van_stripped) - return splined_ws_list diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index 3f4ad09d093..6281972c261 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -106,36 +106,41 @@ class Polaris(AbstractInst): return spectra_name - def spline_vanadium_ws(self, focused_vanadium_ws, instrument_version=''): - extracted_spectra = common.extract_bank_spectra(focused_vanadium_ws, self._number_of_banks) + def spline_vanadium_ws(self, focused_vanadium_spectra, instrument_version=''): mode = "spline" masking_file_path = os.path.join(self.calibration_dir, self._masking_file_name) - output = polaris_algs.process_vanadium_for_focusing(bank_spectra=extracted_spectra, + output = polaris_algs.process_vanadium_for_focusing(bank_spectra=focused_vanadium_spectra, spline_number=self._spline_coeff, mode=mode, mask_path=masking_file_path) - for ws in extracted_spectra: - common.remove_intermediate_workspace(ws) - return output def generate_vanadium_absorb_corrections(self, calibration_full_paths, ws_to_match): return polaris_algs.generate_absorb_corrections(ws_to_match=ws_to_match) + def vanadium_calibration_rebinning(self, vanadium_ws): + common.crop_in_tof(ws_to_rebin=vanadium_ws, x_max=19900, is_mixed_binning=True) + # TODO find out maximum TOF value for POLARIS + + def extract_and_crop_spectra(self, focused_ws): + ws_spectra = common.extract_ws_spectra(ws_to_split=focused_ws) + ws_spectra = common.crop_in_tof(ws_to_rebin=ws_spectra, x_min=800, x_max=20000) + return ws_spectra + def calculate_focus_binning_params(self, sample): calculated_binning_params = polaris_algs.calculate_focus_binning_params(sample_ws=sample, num_of_banks=self._number_of_banks) return calculated_binning_params - def output_focused_ws(self, processed_spectra, run_details, attenuate=False): + def output_focused_ws(self, processed_spectra, run_details, output_mode=None, attenuate=False): d_spacing_group, tof_group = polaris_algs.split_into_tof_d_spacing_groups(processed_spectra) output_paths = self._generate_out_file_paths(run_details=run_details) polaris_output.save_polaris_focused_data(d_spacing_group=d_spacing_group, tof_group=tof_group, output_paths=output_paths, run_number=run_details.run_number) - return d_spacing_group, tof_group + return d_spacing_group def _set_kwargs_from_basic_config_file(config_path, kwargs): diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py index 2fc5aea0f3f..a789dd5ab7c 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py @@ -103,6 +103,8 @@ def get_run_details(chopper_on, sac_on, run_number_string, calibration_dir, mapp def split_into_tof_d_spacing_groups(processed_spectra): + import pydevd + pydevd.settrace('localhost', port=51205, stdoutToServer=True, stderrToServer=True) name_index = 1 d_spacing_output = [] tof_output = [] @@ -110,9 +112,9 @@ def split_into_tof_d_spacing_groups(processed_spectra): d_spacing_out_name = "ResultD-" + str(name_index) tof_out_name = "ResultTOF-" + str(name_index) name_index += 1 - # Rename d-spacing workspaces - d_spacing_output.append(mantid.CloneWorkspace(InputWorkspace=ws, OutputWorkspace=d_spacing_out_name)) - # Convert to TOF + + d_spacing_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=d_spacing_out_name, + Target="dSpacing")) tof_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=tof_out_name, Target="TOF")) # Group the outputs diff --git a/scripts/Diffraction/isis_powder/routines/calibrate.py b/scripts/Diffraction/isis_powder/routines/calibrate.py index 162849662f0..13f27f962ad 100644 --- a/scripts/Diffraction/isis_powder/routines/calibrate.py +++ b/scripts/Diffraction/isis_powder/routines/calibrate.py @@ -1,14 +1,12 @@ from __future__ import (absolute_import, division, print_function) -import os - import mantid.simpleapi as mantid import isis_powder.routines.common as common from isis_powder.routines.common_enums import InputBatchingEnum -def create_van(instrument, van, empty, output_van_file_name, absorb, gen_absorb): +def create_van(instrument, van, empty, absorb, gen_absorb): run_details = instrument.get_run_details(run_number=van) # Always sum a range of inputs as its a vanadium run over multiple captures input_van_ws_list = common.load_current_normalised_ws_list(run_number_string=van, instrument=instrument, @@ -17,7 +15,7 @@ def create_van(instrument, van, empty, output_van_file_name, absorb, gen_absorb) corrected_van_ws = common.subtract_sample_empty(ws_to_correct=input_van_ws, empty_sample_ws_string=empty, instrument=instrument) - # TODO get POLARIS to crop the tail end of data here + # Crop the tail end of the data on PEARL if they are not capturing slow neutrons corrected_van_ws = instrument.crop_data_tail(ws_to_crop=corrected_van_ws) corrected_van_ws = mantid.AlignDetectors(InputWorkspace=corrected_van_ws, @@ -30,21 +28,23 @@ def create_van(instrument, van, empty, output_van_file_name, absorb, gen_absorb) run_details=run_details, corrected_van_ws=corrected_van_ws, gen_absorb=gen_absorb) - focused_van_file = mantid.DiffractionFocussing(InputWorkspace=corrected_van_ws, + focused_vanadium = mantid.DiffractionFocussing(InputWorkspace=corrected_van_ws, GroupingFileName=run_details.grouping) - # TODO get POLARIS to apply rebinning here too - focused_van_file = instrument. vanadium_calibration_rebinning(vanadium_ws=focused_van_file) - focused_output = _save_focused_vanadium(instrument=instrument, run_details=run_details, - focused_vanadium_ws=focused_van_file) + focused_cropped_spectra = instrument.extract_and_crop_spectra(focused_ws=focused_vanadium) + d_spacing_group = _save_focused_vanadium(instrument=instrument, run_details=run_details, + cropped_spectra=focused_cropped_spectra) + _create_vanadium_splines(focused_cropped_spectra, instrument, run_details) + common.remove_intermediate_workspace(corrected_van_ws) + common.remove_intermediate_workspace(focused_vanadium) + common.remove_intermediate_workspace(focused_cropped_spectra) - _create_vanadium_splines(focused_van_file, instrument, run_details) - return focused_output + return d_spacing_group -def _create_vanadium_splines(focused_van_file, instrument, run_details): - splined_ws_list = instrument.spline_vanadium_ws(focused_van_file, run_details.instrument_version) +def _create_vanadium_splines(focused_spectra, instrument, run_details): + splined_ws_list = instrument.spline_vanadium_ws(focused_spectra) out_spline_van_file_path = run_details.splined_vanadium append = False for ws in splined_ws_list: @@ -72,16 +72,7 @@ def _apply_absorb_corrections(instrument, run_details, corrected_van_ws, gen_abs return corrected_van_ws -def _save_focused_vanadium(instrument, run_details, focused_vanadium_ws): - number_of_spectra = focused_vanadium_ws.getNumberHistograms() - ws_spectra_list = [] - for i in range(0, number_of_spectra): - out_spectra_name = focused_vanadium_ws.name() + "_bank-" + str(i + 1) - ws_spectra_list.append(mantid.ExtractSingleSpectrum(InputWorkspace=focused_vanadium_ws, WorkspaceIndex=i, - OutputWorkspace=out_spectra_name)) - output_list = instrument.output_focused_ws(processed_spectra=ws_spectra_list, run_details=run_details, - output_mode="all") - common.remove_intermediate_workspace(ws_spectra_list) - - group_name = instrument.generate_inst_file_name(run_details.run_number) + "_focused" - return mantid.GroupWorkspaces(InputWorkspaces=output_list, OutputWorkspace=group_name) +def _save_focused_vanadium(instrument, run_details, cropped_spectra): + d_spacing_group = instrument.output_focused_ws(processed_spectra=cropped_spectra, + run_details=run_details, output_mode="all") + return d_spacing_group diff --git a/scripts/Diffraction/isis_powder/routines/common.py b/scripts/Diffraction/isis_powder/routines/common.py index ea18d0e3693..5cc77f59134 100644 --- a/scripts/Diffraction/isis_powder/routines/common.py +++ b/scripts/Diffraction/isis_powder/routines/common.py @@ -18,6 +18,25 @@ def create_calibration_by_names(calibration_runs, startup_objects, grouping_file out_grouping_file_name=grouping_file_name, instrument=startup_objects) +def crop_in_tof(ws_to_rebin, x_min=None, x_max=None): + if isinstance(ws_to_rebin, list): + cropped_ws = [] + for ws in ws_to_rebin: + cropped_ws.append(_crop_single_ws_in_tof(ws, x_max=x_max, x_min=x_min)) + else: + cropped_ws = _crop_single_ws_in_tof(ws_to_rebin, x_max=x_max, x_min=x_min) + return cropped_ws + + +def _crop_single_ws_in_tof(ws_to_rebin, x_max, x_min): + previous_units = ws_to_rebin.getAxis(0).getUnit().unitID() + ws_to_rebin = mantid.ConvertUnits(InputWorkspace=ws_to_rebin, Target="TOF", OutputWorkspace=ws_to_rebin) + cropped_ws = mantid.CropWorkspace(InputWorkspace=ws_to_rebin, OutputWorkspace=ws_to_rebin, + XMin=x_min, XMax=x_max) + cropped_ws = mantid.ConvertUnits(InputWorkspace=cropped_ws, Target=previous_units, OutputWorkspace=cropped_ws) + return cropped_ws + + def dictionary_key_helper(dictionary, key, throws=True, exception_msg=None): if key in dictionary: return dictionary[key] @@ -32,9 +51,10 @@ def dictionary_key_helper(dictionary, key, throws=True, exception_msg=None): return this_throws # Never gets this far just makes linters happy -def extract_bank_spectra(ws_to_split, num_banks): +def extract_ws_spectra(ws_to_split): + num_spectra = ws_to_split.getNumberHistograms() spectra_bank_list = [] - for i in range(0, num_banks): + for i in range(0, num_spectra): output_name = "bank-" + str(i + 1) # Have to use crop workspace as extract single spectrum struggles with the variable bin widths spectra_bank_list.append(mantid.CropWorkspace(InputWorkspace=ws_to_split, OutputWorkspace=output_name, @@ -153,13 +173,7 @@ def _load_list_of_files(run_numbers_list, instrument): def _sum_ws_range(ws_list): # Sum all workspaces out_ws_name = "summed_" + ws_list[0].name() + '_' + ws_list[-1].name() - - summed_ws = mantid.CloneWorkspace(InputWorkspace=ws_list[0], OutputWorkspace=out_ws_name) - - for ws in ws_list[1:]: - summed_ws = mantid.Plus(LHSWorkspace=summed_ws, RHSWorkspace=ws, OutputWorkspace=out_ws_name) - - # summed_ws = mantid.MergeRuns(InputWorkspaces=ws_list, OutputWorkspace=out_ws_name) + summed_ws = mantid.MergeRuns(InputWorkspaces=ws_list, OutputWorkspace=out_ws_name) return summed_ws diff --git a/scripts/Diffraction/isis_powder/routines/focus.py b/scripts/Diffraction/isis_powder/routines/focus.py index 210ee2d36a0..0a1984a96c1 100644 --- a/scripts/Diffraction/isis_powder/routines/focus.py +++ b/scripts/Diffraction/isis_powder/routines/focus.py @@ -30,7 +30,7 @@ def _divide_sample_by_vanadium(instrument, run_number, input_workspace, perform_ processed_spectra = [] run_details = instrument.get_run_details(run_number=run_number) num_of_banks = instrument.get_num_of_banks(run_details.instrument_version) - split_ws = common.extract_bank_spectra(ws_to_split=input_workspace, num_banks=num_of_banks) + split_ws = common.extract_ws_spectra(ws_to_split=input_workspace, num_banks=num_of_banks) if perform_vanadium_norm: vanadium_ws_list = mantid.LoadNexus(Filename=run_details.splined_vanadium) -- GitLab