diff --git a/scripts/Diffraction/isis_powder/polaris.py b/scripts/Diffraction/isis_powder/polaris.py index f929a515afff17b168bdbd78ef9e7e0b3a5b2ea6..ca10058b37ac66b0ac2e93ef634a1251b3da113e 100644 --- a/scripts/Diffraction/isis_powder/polaris.py +++ b/scripts/Diffraction/isis_powder/polaris.py @@ -50,11 +50,7 @@ class Polaris(AbstractInst): return vanadium_d def create_total_scattering_pdf(self, **kwargs): - if 'q_lims' not in kwargs: - kwargs['q_lims'] = None - if 'output_binning' not in kwargs: - kwargs['output_binning'] = None - if 'pdf_type' not in kwargs or not kwargs['pdf_type'] in ['G(r)', 'g(r)', 'RDF(r)']: + if 'pdf_type' not in kwargs or kwargs['pdf_type'] not in ['G(r)', 'g(r)', 'RDF(r)']: kwargs['pdf_type'] = 'G(r)' logger.warning('PDF type not specified or is invalid, defaulting to G(r)') self._inst_settings.update_attributes(kwargs=kwargs) @@ -69,7 +65,8 @@ class Polaris(AbstractInst): cal_file_name=cal_file_name, sample_details=self._sample_details, output_binning=self._inst_settings.output_binning, - pdf_type=self._inst_settings.pdf_type) + pdf_type=self._inst_settings.pdf_type, + freq_params=self._inst_settings.freq_params) return pdf_output def set_sample_details(self, **kwargs): diff --git a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py index 2db927de0a138156de7144e2e8d584ffbcab2034..05b420d9e10d469c53f3af2c46cb8a2cbc10e35a 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_algs.py @@ -82,7 +82,7 @@ def save_unsplined_vanadium(vanadium_ws, output_path): def generate_ts_pdf(run_number, focus_file_path, merge_banks=False, q_lims=None, cal_file_name=None, - sample_details=None, output_binning=None, pdf_type="G(r)"): + sample_details=None, output_binning=None, pdf_type="G(r)", freq_params=None): focused_ws = _obtain_focused_run(run_number, focus_file_path) focused_ws = mantid.ConvertUnits(InputWorkspace=focused_ws, Target="MomentumTransfer", EMode='Elastic') @@ -107,12 +107,14 @@ def generate_ts_pdf(run_number, focus_file_path, merge_banks=False, q_lims=None, if merge_banks: q_min, q_max = _load_qlims(q_lims) - mantid.MatchAndMergeWorkspaces(InputWorkspaces=focused_ws, OutputWorkspace="merged_ws", XMin=q_min, XMax=q_max, - CalculateScale=False) - fast_fourier_filter("merged_ws", 5.0, 15.0) + merged_ws = mantid.MatchAndMergeWorkspaces(InputWorkspaces=focused_ws, XMin=q_min, XMax=q_max, + CalculateScale=False) + fast_fourier_filter(merged_ws, freq_params) pdf_output = mantid.PDFFourierTransform(Inputworkspace="merged_ws", InputSofQType="S(Q)-1", PDFType=pdf_type, Filter=True) else: + for ws in focused_ws: + fast_fourier_filter(ws, freq_params) pdf_output = mantid.PDFFourierTransform(Inputworkspace='focused_ws', InputSofQType="S(Q)-1", PDFType=pdf_type, Filter=True) pdf_output = mantid.RebinToWorkspace(WorkspaceToRebin=pdf_output, WorkspaceToMatch=pdf_output[4], @@ -189,15 +191,16 @@ def _determine_chopper_mode(ws): raise ValueError("Chopper frequency not in log data. Please specify a chopper mode") -def fast_fourier_filter(input_ws, lower_boundary=None, upper_boundary=None): +def fast_fourier_filter(input_ws, freq_params=None): + if not freq_params: + return # This is a simple fourier filter using the FFTSmooth to get a WS with only the low radius components, then # subtracting that from the merged WS - x_range = ADS.retrieve(input_ws).dataX(0) - if lower_boundary: - lower_index = round(2 * np.pi / (lower_boundary * 2 * (x_range[1] - x_range[0]))) - tmp = mantid.FFTSmooth(InputWorkspace=input_ws, Filter="Zeroing", Params=str(lower_index)) - mantid.Minus(LHSWorkspace=input_ws, RHSWorkspace=tmp, OutputWorkspace=input_ws) - if upper_boundary: - upper_index = round(2 * np.pi / (upper_boundary * 2 * (x_range[1] - x_range[0]))) - mantid.FFTSmooth(InputWorkspace=input_ws, OutputWorkspace=input_ws, Filter="Zeroing", Params=str(upper_index)) + x_range = input_ws.dataX(0) + lower_index = round(2 * np.pi / (freq_params[0] * 2 * (x_range[1] - x_range[0]))) + tmp = mantid.FFTSmooth(InputWorkspace=input_ws, Filter="Zeroing", Params=str(lower_index), StoreInADS=False, IgnoreXBins=True) + mantid.Minus(LHSWorkspace=input_ws, RHSWorkspace=tmp, OutputWorkspace=input_ws) + if len(freq_params) > 1: + upper_index = round(2 * np.pi / (freq_params[1] * 2 * (x_range[1] - x_range[0]))) + mantid.FFTSmooth(InputWorkspace=input_ws, OutputWorkspace=input_ws, Filter="Zeroing", Params=str(upper_index), IgnoreXBins=True) 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 5bb1eb51c5b2ded5bdeaca946c7b0e1bc4e73bb1..90440a21eec68c61451eb416d6d35acb238fa38d 100644 --- a/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py +++ b/scripts/Diffraction/isis_powder/polaris_routines/polaris_param_mapping.py @@ -22,21 +22,22 @@ attr_mapping = [ ParamMapEntry(ext_name="first_cycle_run_no", int_name="run_in_range"), ParamMapEntry(ext_name="focused_cropping_values", int_name="focused_cropping_values"), ParamMapEntry(ext_name="focused_bin_widths", int_name="focused_bin_widths"), + ParamMapEntry(ext_name="freq_params", int_name="freq_params", optional=True), ParamMapEntry(ext_name="grouping_file_name", int_name="grouping_file_name"), ParamMapEntry(ext_name="input_mode", int_name="input_mode", enum_class=INPUT_BATCHING), - ParamMapEntry(ext_name="merge_banks", int_name="merge_banks"), + ParamMapEntry(ext_name="merge_banks", int_name="merge_banks", optional=True), ParamMapEntry(ext_name="mode", int_name="mode", enum_class=POLARIS_CHOPPER_MODES, optional=True), ParamMapEntry(ext_name="multiple_scattering", int_name="multiple_scattering", optional=True), ParamMapEntry(ext_name="pdf_type", int_name="pdf_type"), - ParamMapEntry(ext_name="q_lims", int_name="q_lims"), + ParamMapEntry(ext_name="q_lims", int_name="q_lims", optional=True), ParamMapEntry(ext_name="raw_data_cropping_values", int_name="raw_data_crop_values"), ParamMapEntry(ext_name="run_number", int_name="run_number"), ParamMapEntry(ext_name="sample_empty", int_name="sample_empty", optional=True), ParamMapEntry(ext_name="sample_empty_scale", int_name="sample_empty_scale"), ParamMapEntry(ext_name="suffix", int_name="suffix", optional=True), ParamMapEntry(ext_name="spline_coefficient", int_name="spline_coeff"), - ParamMapEntry(ext_name="output_binning", int_name="output_binning"), + ParamMapEntry(ext_name="output_binning", int_name="output_binning", optional=True), ParamMapEntry(ext_name="output_directory", int_name="output_dir"), ParamMapEntry(ext_name="user_name", int_name="user_name"), ParamMapEntry(ext_name="vanadium_cropping_values", int_name="van_crop_values"),