From 5e472783ea1d45ed7b9fc1683c5fb8ab0314831a Mon Sep 17 00:00:00 2001 From: Sam Jenkins <s.jenkins@stfc.ac.uk> Date: Tue, 11 Sep 2018 09:30:29 +0100 Subject: [PATCH] Re #23214 Added check for gem, and function to crop focused workspace function cropsworkspace at values less than 1% of the max value. --- .../Diffraction/isis_powder/abstract_inst.py | 3 + .../Diffraction/isis_powder/routines/focus.py | 56 ++++++++++++++++--- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/scripts/Diffraction/isis_powder/abstract_inst.py b/scripts/Diffraction/isis_powder/abstract_inst.py index 93235a291a2..72b6efd7c26 100644 --- a/scripts/Diffraction/isis_powder/abstract_inst.py +++ b/scripts/Diffraction/isis_powder/abstract_inst.py @@ -183,6 +183,9 @@ class AbstractInst(object): """ return None + def get_instrument_prefix(self): + return self._inst_prefix + def _get_input_batching_mode(self): """ Returns the user specified input batching (e.g. summed or individual processing). This is set to summed diff --git a/scripts/Diffraction/isis_powder/routines/focus.py b/scripts/Diffraction/isis_powder/routines/focus.py index 3c60a251e00..f2c0c6b4fbc 100644 --- a/scripts/Diffraction/isis_powder/routines/focus.py +++ b/scripts/Diffraction/isis_powder/routines/focus.py @@ -55,7 +55,8 @@ def _focus_one_ws(input_workspace, run_number, instrument, perform_vanadium_norm focused_ws = mantid.DiffractionFocussing(InputWorkspace=aligned_ws, GroupingFileName=run_details.grouping_file_path) - calibrated_spectra = _apply_vanadium_corrections(input_workspace=focused_ws, + calibrated_spectra = _apply_vanadium_corrections(instrument=instrument, + input_workspace=focused_ws, perform_vanadium_norm=perform_vanadium_norm, vanadium_splines=vanadium_path) @@ -82,13 +83,14 @@ def _focus_one_ws(input_workspace, run_number, instrument, perform_vanadium_norm return d_spacing_group -def _apply_vanadium_corrections(input_workspace, perform_vanadium_norm, vanadium_splines): +def _apply_vanadium_corrections(instrument, input_workspace, perform_vanadium_norm, vanadium_splines): input_workspace = mantid.ConvertUnits(InputWorkspace=input_workspace, OutputWorkspace=input_workspace, Target="TOF") split_data_spectra = common.extract_ws_spectra(input_workspace) if perform_vanadium_norm: processed_spectra = _divide_by_vanadium_splines(spectra_list=split_data_spectra, - vanadium_splines=vanadium_splines) + vanadium_splines=vanadium_splines, + instrument=instrument) else: processed_spectra = split_data_spectra @@ -111,16 +113,21 @@ def _batched_run_focusing(instrument, perform_vanadium_norm, run_number_string, return output -def _divide_one_spectrum_by_spline(spectrum, spline): +def _divide_one_spectrum_by_spline(spectrum, spline,instrument): rebinned_spline = mantid.RebinToWorkspace(WorkspaceToRebin=spline, WorkspaceToMatch=spectrum, StoreInADS=False) + print(instrument.get_instrument_prefix()) + if instrument.get_instrument_prefix() == "GEM": + divided = mantid.Divide(LHSWorkspace=spectrum, RHSWorkspace=rebinned_spline, OutputWorkspace=spectrum, + StoreInADS=False) + output = _crop_spline_to_percent_of_max(rebinned_spline, divided) + mantid.mtd['output'] = output + return output divided = mantid.Divide(LHSWorkspace=spectrum, RHSWorkspace=rebinned_spline, OutputWorkspace=spectrum) - divided = mantid.ReplaceSpecialValues(rebinned_spline, InfinityValue=0, OutputWorkspace=spectrum) return divided -def _divide_by_vanadium_splines(spectra_list, vanadium_splines): - +def _divide_by_vanadium_splines(spectra_list, vanadium_splines, instrument): if hasattr(vanadium_splines, "OutputWorkspace"): # vanadium_splines is a group vanadium_splines = vanadium_splines.OutputWorkspace @@ -131,7 +138,7 @@ def _divide_by_vanadium_splines(spectra_list, vanadium_splines): raise RuntimeError("Mismatch between number of banks in vanadium and number of banks in workspace to focus" "\nThere are {} banks for vanadium but {} for the run".format(num_splines, num_spectra)) - output_list = [_divide_one_spectrum_by_spline(data_ws, van_ws) + output_list = [_divide_one_spectrum_by_spline(data_ws, van_ws, instrument) for data_ws, van_ws in zip(spectra_list, vanadium_splines)] return output_list @@ -162,3 +169,36 @@ def _test_splined_vanadium_exists(instrument, run_details): raise ValueError("Processed vanadium runs not found at this path: " + str(run_details.splined_vanadium_file_path) + " \nHave you run the method to create a Vanadium spline with these settings yet?\n") + + +def _crop_spline_to_percent_of_max(spline, input_ws): + print("Cropping") + y_val = 0 + spline_spectrum = spline.readY(0) + + for i in range(spline.blocksize()): + temp = spline_spectrum[i] + if float(y_val) < float(temp): + y_val = temp + print("y_max = "+str(y_val)) + y_val = y_val/100 + x_min = 0 + before_min = True + x_list = input_ws.readX(0) + x_max = x_list[-1] + for i in range(spline.blocksize()): + if before_min: + + if float(y_val) > float(spline_spectrum[i]): + x_min = x_list[i] + else: + print("y_val: " + str(y_val) + "< x_val: "+str(spline_spectrum[i])) + before_min = False + else: + if float(y_val) < float(spline_spectrum[i]): + x_max = x_list[i] + print("block_size = "+str(input_ws.blocksize())) + print("x_min = "+str(x_min)) + print("x_max = "+str(x_max)) + output = mantid.CropWorkspace(inputWorkspace=input_ws, XMin=x_min, XMax=x_max, StoreInADS=False) + return output -- GitLab