def generate_solid_angle_corrections(self, run_details): solid_angle_vanadium_ws = common.load_current_normalised_ws(run_number_string=run_details.vanadium, instrument=self) corrections = _calculate_solid_angle_efficiency_corrections(solid_angle_vanadium_ws) mantid.SaveNexusProcessed(InputWorkspace=corrections, Filename=run_details.solid_angle_corr) common.remove_intermediate_workspace(solid_angle_vanadium_ws) return corrections
def create_van(instrument, van, empty, output_van_file_name, num_of_splines, absorb, gen_absorb): input_van_ws = common.load_current_normalised_ws(run_number_string=van, instrument=instrument) corrected_van_ws = common.subtract_sample_empty(ws_to_correct=input_van_ws, empty_sample_ws_string=empty, instrument=instrument) common.remove_intermediate_workspace(input_van_ws) run_details = instrument._get_run_details(run_number=van) corrected_van_ws = instrument. _apply_van_calibration_tof_rebinning(vanadium_ws=corrected_van_ws, tof_rebin_pass=1, return_units="TOF") corrected_van_ws = mantid.AlignDetectors(InputWorkspace=corrected_van_ws, CalibrationFile=run_details.calibration) 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=corrected_van_ws, gen_absorb=gen_absorb) focused_van_file = mantid.DiffractionFocussing(InputWorkspace=corrected_van_ws, GroupingFileName=run_details.grouping) # Optional focused_van_file = instrument. _apply_van_calibration_tof_rebinning(vanadium_ws=focused_van_file, tof_rebin_pass=2, return_units="dSpacing") common.remove_intermediate_workspace(corrected_van_ws) cycle_information = instrument._get_run_details(run_number=van) splined_ws_list = instrument._spline_background(focused_van_file, num_of_splines, cycle_information.instrument_version) # Figure out who will provide the path name if instrument._PEARL_filename_is_full_path(): out_van_file_path = output_van_file_name elif output_van_file_name: # The user has manually specified the output file out_van_file_path = os.path.join(instrument.calibration_dir, output_van_file_name) elif run_details.splined_vanadium: out_van_file_path = run_details.splined_vanadium else: raise ValueError("The output name must be manually specified for this instrument/run") append = False for ws in splined_ws_list: mantid.SaveNexus(Filename=out_van_file_path, InputWorkspace=ws, Append=append) common.remove_intermediate_workspace(ws) append = True output_ws = mantid.LoadNexus(Filename=out_van_file_path, OutputWorkspace="Van_data") return output_ws
def _run_focus(instrument, run_number, perform_attenuation, perform_vanadium_norm): # Read read_ws = common.load_current_normalised_ws(run_number_string=run_number, instrument=instrument) input_workspace = instrument._do_tof_rebinning_focus(read_ws) # Rebins for PEARL run_details = instrument._get_run_details(run_number=run_number) # Check the necessary splined vanadium file has been created if not os.path.isfile(run_details.splined_vanadium): raise ValueError("Processed vanadium runs not found at this path: " + str(run_details.splined_vanadium) + " \n\nHave you created a vanadium calibration with these settings yet?") # Compensate for empty sample if specified input_workspace = common.subtract_sample_empty(ws_to_correct=input_workspace, instrument=instrument, empty_sample_ws_string=run_details.sample_empty) # Align / Focus input_workspace = mantid.AlignDetectors(InputWorkspace=input_workspace, CalibrationFile=run_details.calibration) input_workspace = instrument.apply_solid_angle_efficiency_corr(ws_to_correct=input_workspace, run_details=run_details) focused_ws = mantid.DiffractionFocussing(InputWorkspace=input_workspace, GroupingFileName=run_details.grouping) # Process rebinning_params = instrument.calculate_focus_binning_params(sample=focused_ws) calibrated_spectra = _divide_sample_by_vanadium(instrument=instrument, run_number=run_number, input_workspace=focused_ws, perform_vanadium_norm=perform_vanadium_norm) _apply_binning_to_spectra(spectra_list=calibrated_spectra, binning_list=rebinning_params) # Output processed_nexus_files = instrument._process_focus_output(calibrated_spectra, run_details=run_details, attenuate=perform_attenuation) # Tidy common.remove_intermediate_workspace(read_ws) common.remove_intermediate_workspace(input_workspace) common.remove_intermediate_workspace(focused_ws) for ws in calibrated_spectra: common.remove_intermediate_workspace(ws) pass return processed_nexus_files
def _do_silicon_calibration(self, runs_to_process, cal_file_name, grouping_file_name): # TODO fix all of this as the script is too limited to be useful create_si_ws = common.load_current_normalised_ws(run_number_string=runs_to_process, instrument=self) cycle_details = self._get_label_information(runs_to_process) instrument_version = cycle_details["instrument_version"] if instrument_version == "new" or instrument_version == "new2": create_si_ws = mantid.Rebin(InputWorkspace=create_si_ws, Params="100,-0.0006,19950") create_si_d_spacing_ws = mantid.ConvertUnits(InputWorkspace=create_si_ws, Target="dSpacing") if instrument_version == "new2": create_si_d_spacing_rebin_ws = mantid.Rebin(InputWorkspace=create_si_d_spacing_ws, Params="1.71,0.002,2.1") create_si_cross_corr_ws = mantid.CrossCorrelate(InputWorkspace=create_si_d_spacing_rebin_ws, ReferenceSpectra=20, WorkspaceIndexMin=9, WorkspaceIndexMax=1063, XMin=1.71, XMax=2.1) elif instrument_version == "new": create_si_d_spacing_rebin_ws = mantid.Rebin(InputWorkspace=create_si_d_spacing_ws, Params="1.85,0.002,2.05") create_si_cross_corr_ws = mantid.CrossCorrelate(InputWorkspace=create_si_d_spacing_rebin_ws, ReferenceSpectra=20, WorkspaceIndexMin=9, WorkspaceIndexMax=943, XMin=1.85, XMax=2.05) elif instrument_version == "old": create_si_d_spacing_rebin_ws = mantid.Rebin(InputWorkspace=create_si_d_spacing_ws, Params="3,0.002,3.2") create_si_cross_corr_ws = mantid.CrossCorrelate(InputWorkspace=create_si_d_spacing_rebin_ws, ReferenceSpectra=500, WorkspaceIndexMin=1, WorkspaceIndexMax=1440, XMin=3, XMax=3.2) else: raise NotImplementedError("The instrument version is not supported for creating a silicon calibration") common.remove_intermediate_workspace(create_si_d_spacing_ws) common.remove_intermediate_workspace(create_si_d_spacing_rebin_ws) calibration_output_path = self.calibration_dir + cal_file_name create_si_offsets_ws = mantid.GetDetectorOffsets(InputWorkspace=create_si_cross_corr_ws, Step=0.002, DReference=1.920127251, XMin=-200, XMax=200, GroupingFileName=calibration_output_path) create_si_aligned_ws = mantid.AlignDetectors(InputWorkspace=create_si_ws, CalibrationFile=calibration_output_path) grouping_output_path = self.calibration_dir + grouping_file_name create_si_grouped_ws = mantid.DiffractionFocussing(InputWorkspace=create_si_aligned_ws, GroupingFileName=grouping_output_path) del create_si_offsets_ws, create_si_grouped_ws
def _create_calibration(self, calibration_runs, offset_file_name, grouping_file_name): input_ws = common.load_current_normalised_ws(run_number_string=calibration_runs, instrument=self) cycle_information = self._get_label_information(calibration_runs) if cycle_information["instrument_version"] == "new" or cycle_information["instrument_version"] == "new2": input_ws = mantid.Rebin(InputWorkspace=input_ws, Params="100,-0.0006,19950") d_spacing_cal = mantid.ConvertUnits(InputWorkspace=input_ws, Target="dSpacing") d_spacing_cal = mantid.Rebin(InputWorkspace=d_spacing_cal, Params="1.8,0.002,2.1") if cycle_information["instrument_version"] == "new2": cross_cor_ws = mantid.CrossCorrelate(InputWorkspace=d_spacing_cal, ReferenceSpectra=20, WorkspaceIndexMin=9, WorkspaceIndexMax=1063, XMin=1.8, XMax=2.1) elif cycle_information["instrument_version"] == "new": cross_cor_ws = mantid.CrossCorrelate(InputWorkspace=d_spacing_cal, ReferenceSpectra=20, WorkspaceIndexMin=9, WorkspaceIndexMax=943, XMin=1.8, XMax=2.1) else: cross_cor_ws = mantid.CrossCorrelate(InputWorkspace=d_spacing_cal, ReferenceSpectra=500, WorkspaceIndexMin=1, WorkspaceIndexMax=1440, XMin=1.8, XMax=2.1) if self._old_api_uses_full_paths: # Workaround for old API setting full paths grouping_file_path = grouping_file_name offset_file_path = offset_file_name else: offset_file_path = os.path.join(self.calibration_dir, offset_file_name) grouping_file_path = os.path.join(self.calibration_dir, grouping_file_name) # Ceo Cell refined to 5.4102(3) so 220 is 1.912795 offset_output_path = mantid.GetDetectorOffsets(InputWorkspace=cross_cor_ws, Step=0.002, DReference=1.912795, XMin=-200, XMax=200, GroupingFileName=offset_file_path) del offset_output_path # This isn't used so delete it to keep linters happy aligned_ws = mantid.AlignDetectors(InputWorkspace=input_ws, CalibrationFile=offset_file_path) cal_grouped_ws = mantid.DiffractionFocussing(InputWorkspace=aligned_ws, GroupingFileName=grouping_file_path) common.remove_intermediate_workspace(d_spacing_cal) common.remove_intermediate_workspace(cross_cor_ws) common.remove_intermediate_workspace(aligned_ws) common.remove_intermediate_workspace(cal_grouped_ws)