From 5691246d79eaa166dace4e2bffde0b853de3470e Mon Sep 17 00:00:00 2001 From: David Fairbrother <DavidFair@users.noreply.github.com> Date: Tue, 10 Jan 2017 16:02:25 +0000 Subject: [PATCH] Re #18108 POLARIS replace cylinder abs with MayerSampleCorr --- .../pearl_routines/pearl_advanced_config.py | 2 +- scripts/Diffraction/isis_powder/polaris.py | 2 +- .../polaris_advanced_config.py | 2 ++ .../polaris_routines/polaris_algs.py | 33 +++++++++++-------- .../polaris_routines/polaris_param_mapping.py | 1 + .../isis_powder/routines/calibrate.py | 25 ++++---------- .../isis_powder/routines/common.py | 6 ++-- 7 files changed, 33 insertions(+), 38 deletions(-) diff --git a/scripts/Diffraction/isis_powder/pearl_routines/pearl_advanced_config.py b/scripts/Diffraction/isis_powder/pearl_routines/pearl_advanced_config.py index 80aac7b734b..1ca341e252c 100644 --- a/scripts/Diffraction/isis_powder/pearl_routines/pearl_advanced_config.py +++ b/scripts/Diffraction/isis_powder/pearl_routines/pearl_advanced_config.py @@ -40,7 +40,7 @@ long_mode_off_params = { long_mode_on_params = { "monitor_lambda_crop_range": (5.9, 12.0), "monitor_integration_range": (6, 10), - # raw_data_tof_cropping needs to be greater than the bank TOF cropping values or + # raw_data_tof_cropping needs to be have smaller/larger values than the bank TOF cropping values or # you will get data that divides to 0 or inf "raw_data_tof_cropping": (20280, 39995), "vanadium_tof_cropping": (20295, 39993), diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index ff0e333e636..bcfaf8d17a8 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -97,7 +97,7 @@ class Polaris(AbstractInst): 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) + return polaris_algs.generate_absorb_corrections(ws_to_correct=ws_to_match) def output_focused_ws(self, processed_spectra, run_details, output_mode=None): d_spacing_group, tof_group = polaris_algs.split_into_tof_d_spacing_groups(processed_spectra) diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py index 7fc0682e169..a61b999c064 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_advanced_config.py @@ -25,7 +25,9 @@ absorption_correction_params = { # http://docs.mantidproject.org/nightly/algorithms/CylinderAbsorption-v1.html "cylinder_sample_height": 4.0, "cylinder_sample_radius": 0.4, + "cylinder_position": [0., 0., 0.], + "chemical_formula": "V", "attenuation_cross_section": 4.88350, "scattering_cross_section": 5.15775, "sample_number_density": 0.0718956, diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py index 54231ddb695..c2e488da243 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py @@ -8,21 +8,26 @@ from isis_powder.routines.RunDetails import RunDetails from isis_powder.polaris_routines import polaris_advanced_config -def generate_absorb_corrections(ws_to_match): - absorb_ws = mantid.CloneWorkspace(InputWorkspace=ws_to_match) - absorb_dict = polaris_advanced_config.absorption_correction_params +def generate_absorb_corrections(ws_to_correct): + mantid.MaskDetectors(ws_to_correct, SpectraList=list(range(0, 55))) - absorb_ws = mantid.CylinderAbsorption(InputWorkspace=absorb_ws, - CylinderSampleHeight=absorb_dict["cylinder_sample_height"], - CylinderSampleRadius=absorb_dict["cylinder_sample_radius"], - AttenuationXSection=absorb_dict["attenuation_cross_section"], - ScatteringXSection=absorb_dict["scattering_cross_section"], - SampleNumberDensity=absorb_dict["sample_number_density"], - NumberOfSlices=absorb_dict["number_of_slices"], - NumberOfAnnuli=absorb_dict["number_of_annuli"], - NumberOfWavelengthPoints=absorb_dict["number_of_wavelength_points"], - ExpMethod=absorb_dict["exponential_method"]) - return absorb_ws + absorb_dict = polaris_advanced_config.absorption_correction_params + geometry_json = {'Shape': 'Cylinder', 'Height': absorb_dict["cylinder_sample_height"], + 'Radius': absorb_dict["cylinder_sample_radius"], 'Center': absorb_dict["cylinder_position"]} + material_json = {'AttenuationXSection': absorb_dict["attenuation_cross_section"], + 'ChemicalFormula': absorb_dict["chemical_formula"], + 'ScatteringXSection': absorb_dict["scattering_cross_section"], + 'SampleNumberDensity': absorb_dict["sample_number_density"]} + + mantid.SetSample(InputWorkspace=ws_to_correct, Geometry=geometry_json, Material=material_json) + + ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, OutputWorkspace=ws_to_correct, Target="TOF") + ws_to_correct = mantid.MayersSampleCorrection(InputWorkspace=ws_to_correct, OutputWorkspace=ws_to_correct) + ws_to_correct = mantid.ReplaceSpecialValues(InputWorkspace=ws_to_correct, OutputWorkspace=ws_to_correct, + NaNValue=0, NaNError=0) + ws_to_correct = mantid.ConvertUnits(InputWorkspace=ws_to_correct, OutputWorkspace=ws_to_correct, Target="dSpacing") + + return ws_to_correct def generate_solid_angle_corrections(run_details, instrument): diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py index ad4dc87e6dd..93114324423 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py @@ -10,6 +10,7 @@ attr_mapping = [("apply_solid_angle", "solid_angle_on"), ("do_absorb_corrections", "do_absorb_corrections"), ("generate_absorb_corrections", "gen_absorb_corrections"), ("masking_file_name", "masking_file_name"), + ("multiple_scattering", "multiple_scattering"), ("raw_data_cropping_values", "raw_data_crop_values"), ("spline_coefficient", "spline_coeff"), ("tof_cropping_ranges", "tof_cropping_values"), diff --git a/scripts/Diffraction/isis_powder/routines/calibrate.py b/scripts/Diffraction/isis_powder/routines/calibrate.py index b33f5b2d117..a96fa0fbe89 100644 --- a/scripts/Diffraction/isis_powder/routines/calibrate.py +++ b/scripts/Diffraction/isis_powder/routines/calibrate.py @@ -23,19 +23,20 @@ def create_van(instrument, van, empty, absorb, gen_absorb): corrected_van_ws = instrument.apply_solid_angle_efficiency_corr(ws_to_correct=corrected_van_ws, run_details=run_details) + if absorb: - corrected_van_ws = _apply_absorb_corrections(instrument=instrument, - run_details=run_details, + corrected_van_ws = _apply_absorb_corrections(instrument=instrument, run_details=run_details, corrected_van_ws=corrected_van_ws, gen_absorb=gen_absorb) focused_vanadium = mantid.DiffractionFocussing(InputWorkspace=corrected_van_ws, GroupingFileName=run_details.grouping_file_path) + focused_spectra = common.extract_ws_spectra(focused_vanadium) - # Crop back to sane TOF as for PEARL at least 20,000-40,000 microseconds is extrapolated - # to 0-60,000 microseconds focused_spectra = instrument.crop_van_to_expected_tof_range(focused_spectra) + d_spacing_group = _save_focused_vanadium(instrument=instrument, run_details=run_details, van_spectra=focused_spectra) + _create_vanadium_splines(focused_spectra, instrument, run_details) common.remove_intermediate_workspace(corrected_van_ws) @@ -56,20 +57,8 @@ def _create_vanadium_splines(focused_spectra, instrument, run_details): def _apply_absorb_corrections(instrument, run_details, corrected_van_ws, gen_absorb): - corrected_van_ws = mantid.ConvertUnits(InputWorkspace=corrected_van_ws, Target="Wavelength") - - if gen_absorb or not run_details.vanadium_absorption_path: - absorb_ws = instrument.generate_vanadium_absorb_corrections(run_details, corrected_van_ws) - else: - absorb_ws = mantid.LoadNexus(Filename=run_details.vanadium_absorption_path) - - if corrected_van_ws.getNumberBins() != absorb_ws.getNumberBins(): - corrected_van_ws = mantid.RebinToWorkspace(WorkspaceToRebin=corrected_van_ws, WorkspaceToMatch=absorb_ws) - corrected_van_ws = mantid.Divide(LHSWorkspace=corrected_van_ws, RHSWorkspace=absorb_ws) - corrected_van_ws = mantid.ConvertUnits(InputWorkspace=corrected_van_ws, Target="dSpacing") - - common.remove_intermediate_workspace(absorb_ws) - return corrected_van_ws + absorb_ws = instrument.generate_vanadium_absorb_corrections(run_details, corrected_van_ws) + return absorb_ws def _save_focused_vanadium(instrument, run_details, van_spectra): diff --git a/scripts/Diffraction/isis_powder/routines/common.py b/scripts/Diffraction/isis_powder/routines/common.py index a4e7f911fc0..9b63ba3a79c 100644 --- a/scripts/Diffraction/isis_powder/routines/common.py +++ b/scripts/Diffraction/isis_powder/routines/common.py @@ -4,9 +4,6 @@ import mantid.kernel as kernel import mantid.simpleapi as mantid from isis_powder.routines.common_enums import InputBatchingEnum -# A small workaround to ensure when reading workspaces in a loop -# the previous workspace does not got overridden - def create_calibration_by_names(calibration_runs, startup_objects, grouping_file_name, group_names): _create_blank_cal_file(calibration_runs=calibration_runs, group_names=group_names, @@ -125,7 +122,8 @@ def spline_vanadium_for_focusing(focused_vanadium_spectra, num_splines): for ws in focused_vanadium_spectra: out_name = "spline_bank_" + str(bank_index) bank_index += 1 - tof_ws_list.append(mantid.ConvertUnits(InputWorkspace=ws, Target="TOF", OutputWorkspace=out_name)) + tof_ws_list.append(mantid.CloneWorkspace(InputWorkspace=ws, OutputWorkspace=out_name)) + #tof_ws_list.append(mantid.ConvertUnits(InputWorkspace=ws, Target="TOF", OutputWorkspace=out_name)) splined_ws_list = [] for ws in tof_ws_list: -- GitLab