From 56dd291c7c33764b0150a9cf18148813f7303edd Mon Sep 17 00:00:00 2001 From: Sam Jenkins <s.jenkins@stfc.ac.uk> Date: Wed, 5 Dec 2018 12:34:50 +0000 Subject: [PATCH] Re #24073 updated to use generated vanadium --- .../analysis/ISIS_WISHPowderReductionTest.py | 12 +-- scripts/wish/reduce.py | 90 ++++++++++++++----- 2 files changed, 73 insertions(+), 29 deletions(-) diff --git a/Testing/SystemTests/tests/analysis/ISIS_WISHPowderReductionTest.py b/Testing/SystemTests/tests/analysis/ISIS_WISHPowderReductionTest.py index b51ccc1c221..f491fdd91a6 100644 --- a/Testing/SystemTests/tests/analysis/ISIS_WISHPowderReductionTest.py +++ b/Testing/SystemTests/tests/analysis/ISIS_WISHPowderReductionTest.py @@ -50,16 +50,16 @@ class WISHPowderReductionTest(MantidSystemTest): os.makedirs(output_dir) wish_test = Wish("__main__", calibration_dir+"/", output_dir + "/", True, input_dir) runs = [40503] - panels = [5, 6] + panels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] wish_test.reduce(runs, panels) self.clearWorkspaces() def validate(self): - #return "w40503-1_10foc", "WISH40503-1_10raw.nxs", \ - # "w40503-2_9foc", "WISH40503-2_9raw.nxs", \ - # "w40503-3_8foc", "WISH40503-3_8raw.nxs", \ - # "w40503-4_7foc", "WISH40503-4_7raw.nxs", \ - return "w40503-5_6foc", "WISH40503-5_6raw.nxs" + return "w40503-1_10foc", "WISH40503-1_10raw.nxs", \ + "w40503-2_9foc", "WISH40503-2_9raw.nxs", \ + "w40503-3_8foc", "WISH40503-3_8raw.nxs", \ + "w40503-4_7foc", "WISH40503-4_7raw.nxs", \ + "w40503-5_6foc", "WISH40503-5_6raw.nxs" def clearWorkspaces(self): deletews = ["w40503-" + str(i) + "foc" for i in range(5, 7)] diff --git a/scripts/wish/reduce.py b/scripts/wish/reduce.py index 8f34642b260..9020ec6834c 100644 --- a/scripts/wish/reduce.py +++ b/scripts/wish/reduce.py @@ -16,6 +16,7 @@ class Wish: self.use_folder = user_directory self.out_folder = output_folder self.deleteWorkspace = delete_workspace + self.is_vanadium = False self.username = None self.data_directory = None self.user_directory = None @@ -23,17 +24,29 @@ class Wish: self.userdatadir = None self.userdataprocessed = None self.return_panel = { + 1: (6, 19461), + 2: (19462, 38917), + 3: (38918, 58373), + 4: (58374, 77829), + 5: (77830, 97285), + 6: (97286, 116741), + 7: (116742, 136197), + 8: (136198, 155653), + 9: (155654, 175109), + 10: (175110, 194565), + 0: (6, 194565) + } + self.return_panel_van = { 1: (6, 19461), 2: (19462, 38917), 3: (38918, 58373), 4: (58374, 77829), 5: (77830, 97285), - 6: (97286, 116741), - 7: (116742, 136197), - 8: (136198, 155653), - 9: (155654, 175109), - 10: (175110, 194565), - 0: (6, 194565) + 6: (77830, 97285), + 7: (58374, 77829), + 8: (38918, 58373), + 9: (19462, 38917), + 10: (6, 19461) } def set_user_name(self, username): @@ -55,11 +68,11 @@ class Wish: # Returns the calibration filename def get_cal(self): - return self.cal_dir + "WISH_cycle_10_3_noends_10to10.cal" + return self.cal_dir + "WISH_cycle_15_4_noends_10to10_dodgytube_removed_feb2016.cal" # Returns the grouping filename def get_group_file(self): - return self.cal_dir + "WISH_cycle_10_3_noends_10to10.cal" + return self.cal_dir + "WISH_cycle_15_4_noends_10to10_dodgytube_removed_feb2016.cal" def get_vanadium(self, panel, cycle="09_4"): vanadium_string = { @@ -91,7 +104,9 @@ class Wish: if type(number) is int: filename = self.datafile print("will be reading filename...", filename) - spectra_min, spectra_max = self.return_panel.get(panel) + + spectra_min, spectra_max = self.return_panel_van.get(panel) if self.is_vanadium else \ + self.return_panel.get(panel) if panel != 0: output = "w{0}-{1}".format(number, panel) else: @@ -162,8 +177,11 @@ class Wish: # Focus dataset for a given panel and return the workspace def focus_onepanel(self, work, focus, panel): - mantid.AlignDetectors(InputWorkspace=work, OutputWorkspace=work, CalibrationFile=self.get_cal()) - mantid.DiffractionFocussing(InputWorkspace=work, OutputWorkspace=focus, GroupingFileName=self.get_group_file()) + cal = "WISH_diff{}"; + if cal.format("_cal") not in mantid.mtd: + mantid.LoadDiffCal(filename=self.get_cal(), InstrumentName="WISH", WorkspaceName=cal.format("")) + mantid.AlignDetectors(InputWorkspace=work, OutputWorkspace=work, CalibrationWorkspace=cal.format("_cal")) + mantid.DiffractionFocussing(InputWorkspace=work, OutputWorkspace=focus, GroupingWorkspace=cal.format("_group")) if self.deleteWorkspace: mantid.DeleteWorkspace(work) if panel == 5 or panel == 6: @@ -238,7 +256,7 @@ class Wish: # Create a corrected vanadium (normalise,corrected for attenuation and empty, strip peaks) and # save a a nexus processed file. # It looks like smoothing of 100 works quite well - def createvan(self, van, empty, panel, smoothing, vh, vr, cycle_van="09_3", cycle_empty="09_3"): + def process_vanadium(self, van, empty, panel, vh, vr, cycle_van="09_3", cycle_empty="09_3"): self.data_directory = "/archive/ndxwish/Instrument/data/cycle_" + cycle_van + "/" self.datafile = self.get_file_name(van, "raw") wvan = self.read(van, panel, "raw") @@ -246,21 +264,46 @@ class Wish: self.datafile = self.get_file_name(empty, "raw") wempty = self.read(empty, panel, "raw") mantid.Minus(LHSWorkspace=wvan, RHSWorkspace=wempty, OutputWorkspace=wvan) - mantid.ConvertUnits(InputWorkspace=wvan, OutputWorkspace=wvan, Target="Wavelength", EMode="Elastic") - mantid.CylinderAbsorption(InputWorkspace=wvan, OutputWorkspace="T", - CylinderSampleHeight=str(vh), CylinderSampleRadius=str(vr), - AttenuationXSection="4.8756", - ScatteringXSection="5.16", SampleNumberDensity="0.07118", - NumberOfSlices="10", NumberOfAnnuli="10", NumberOfWavelengthPoints="25", - ExpMethod="Normal") - mantid.Divide(LHSWorkspace=wvan, RHSWorkspace="T", OutputWorkspace=wvan) - mantid.DeleteWorkspace("T") - mantid.ConvertUnits(InputWorkspace=wvan, OutputWorkspace=wvan, Target="TOF", EMode="Elastic") + absorption_corrections(4.8756, vh, 0.07118, vr, 5.16, wvan) vanfoc = self.focus(wvan, panel) + + panel_crop = { + 1: (0.95, 53.3), + 2: (0.58, 13.1), + 3: (0.44, 7.77), + 4: (0.38, 5.86), + 5: (0.35, 4.99), + 6: (0.35, 4.99), + 7: (0.38, 5.86), + 8: (0.44, 7.77), + 9: (0.58, 13.1), + 10: (0.95, 53.3) + } + d_min, d_max = panel_crop.get(panel) + mantid.CropWorkspace(InputWorkspace=vanfoc, OutputWorkspace=vanfoc, XMin=d_min, XMax=d_max) # StripPeaks(vanfoc,vanfoc) - # SmoothData(vanfoc,vanfoc,str(smoothing)) + spline_coefficient = { + 1: 120, + 2: 120, + 3: 120, + 4: 130, + 5: 140, + 6: 140, + 7: 130, + 8: 120, + 9: 120, + 10: 120 + } + mantid.SplineBackground(InputWorkspace=vanfoc, OutputWorkspace=vanfoc, NCoeff=spline_coefficient.get(panel)) + smoothing_coefficient = "30" if panel == 3 else "40" + mantid.SmoothData(InputWorkspace=vanfoc, OutputWorkspace=vanfoc, NPoints=smoothing_coefficient) return + def create_vanadium_run(self, van_run_number, empty_run_number, panels): + self.is_vanadium = True + for panel in panels: + self.process_vanadium(van_run_number, empty_run_number, panel, 4, 0.14999999999999999, "11_4", "11_4") + def monitors(self, rb, ext): monitor_file = self.get_file_name(rb, ext) wout = "w{}".format(rb) @@ -315,6 +358,7 @@ class Wish: def reduce(self, run_numbers, panels): self.startup("18_1") + self.is_vanadium = False for run in run_numbers: self.datafile = self.get_file_name(run, "raw") for panel in panels: -- GitLab