From 1baa6893b090ace8306f9a608b4b52d1b865244d Mon Sep 17 00:00:00 2001 From: Joseph Ramsay <joseph.ramsay@stfc.ac.uk> Date: Thu, 10 Aug 2017 16:06:11 +0100 Subject: [PATCH] Re #20219 Use MayersSC for non-vanadium samples --- .../routines/absorb_corrections.py | 44 +++++++------------ .../Diffraction/isis_powder/routines/focus.py | 8 ++-- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/scripts/Diffraction/isis_powder/routines/absorb_corrections.py b/scripts/Diffraction/isis_powder/routines/absorb_corrections.py index 811196ed4e7..84d73e2ac09 100644 --- a/scripts/Diffraction/isis_powder/routines/absorb_corrections.py +++ b/scripts/Diffraction/isis_powder/routines/absorb_corrections.py @@ -78,7 +78,7 @@ def _calculate__cylinder_absorb_corrections(ws_to_correct, multiple_scattering, sample_details_obj=sample_details_obj) ws_to_correct = _do_cylinder_absorb_corrections(ws_to_correct=ws_to_correct, multiple_scattering=multiple_scattering, - is_vanadium=is_vanadium, sample_details=sample_details_obj) + is_vanadium=is_vanadium) return ws_to_correct @@ -99,36 +99,24 @@ def _setup_sample_for_cylinder_absorb_corrections(ws_to_correct, sample_details_ mantid.SetSample(InputWorkspace=ws_to_correct, Geometry=geometry_json, Material=material_json) -def _do_cylinder_absorb_corrections(ws_to_correct, multiple_scattering, is_vanadium, sample_details): +def _do_cylinder_absorb_corrections(ws_to_correct, multiple_scattering, is_vanadium): previous_units = ws_to_correct.getAxis(0).getUnit().unitID() ws_units = common_enums.WORKSPACE_UNITS + # Mayers Sample correction must be completed in TOF, convert if needed. Then back to original units afterwards + if previous_units != ws_units.tof: + ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, Target=ws_units.tof) + if is_vanadium: - # Mayers Sample correction must be completed in TOF, convert if needed. Then back to original units afterwards - if previous_units != ws_units.tof: - ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, Target=ws_units.tof) ws_to_correct = mantid.MayersSampleCorrection(InputWorkspace=ws_to_correct, MultipleScattering=multiple_scattering) - if previous_units != ws_units.tof: - ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, Target=previous_units) - return ws_to_correct - - else: # Sample is not vanadium - # Cylinder Absorption correction must be in units of wavelength, convert if needed, then back afterwards - if previous_units != ws_units.wavelength: - ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, Target=ws_units.wavelength, - OutputWorkspace=ws_to_correct) - - attenuation_factors_ws = mantid.CloneWorkspace(InputWorkspace=ws_to_correct) - attenuation_factors_ws = mantid.CylinderAbsorption(InputWorkspace=attenuation_factors_ws, - CylinderSampleHeight=sample_details.height, - CylinderSampleRadius=sample_details.radius) - ws_to_correct = mantid.Divide(LHSWorkspace=ws_to_correct, RHSWorkspace=attenuation_factors_ws, - OutputWorkspace=ws_to_correct) - common.remove_intermediate_workspace(attenuation_factors_ws) - - if previous_units != ws_units.wavelength: - ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, Target=previous_units, - OutputWorkspace=ws_to_correct) - - return ws_to_correct + else: + # Ensure we never do multiple scattering if the sample is not isotropic (e.g. not a Vanadium) + ws_to_correct = mantid.MayersSampleCorrection(InputWorkspace=ws_to_correct, + MultipleScattering=False) + if previous_units != ws_units.tof: + ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, Target=previous_units) + return ws_to_correct + + + diff --git a/scripts/Diffraction/isis_powder/routines/focus.py b/scripts/Diffraction/isis_powder/routines/focus.py index a9ed960326c..c131aff4e1d 100644 --- a/scripts/Diffraction/isis_powder/routines/focus.py +++ b/scripts/Diffraction/isis_powder/routines/focus.py @@ -36,14 +36,14 @@ def _focus_one_ws(ws, run_number, instrument, perform_vanadium_norm, absorb): # Crop to largest acceptable TOF range input_workspace = instrument._crop_raw_to_expected_tof_range(ws_to_crop=input_workspace) + # Correct for absorption / multiple scattering if required + if absorb: + input_workspace = instrument._apply_absorb_corrections(run_details=run_details, ws_to_correct=input_workspace) + # Align aligned_ws = mantid.AlignDetectors(InputWorkspace=input_workspace, CalibrationFile=run_details.offset_file_path) - # Correct for absorption / multiple scattering if required - if absorb: - aligned_ws = instrument._apply_absorb_corrections(run_details=run_details, ws_to_correct=aligned_ws) - # Focus the spectra into banks focused_ws = mantid.DiffractionFocussing(InputWorkspace=aligned_ws, GroupingFileName=run_details.grouping_file_path) -- GitLab