Newer
Older
from __future__ import (absolute_import, division, print_function)
import mantid.simpleapi as mantid
import os
from isis_powder.routines import common, yaml_parser
from isis_powder.routines.RunDetails import RunDetails
from isis_powder.polaris_routines import polaris_advanced_config
def calculate_absorb_corrections(ws_to_correct):
mantid.MaskDetectors(ws_to_correct, SpectraList=list(range(0, 55)))
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.ConvertUnits(InputWorkspace=ws_to_correct, OutputWorkspace=ws_to_correct, Target="dSpacing")
return ws_to_correct
def get_run_details(run_number, inst_settings):
yaml_dict = yaml_parser.get_run_dictionary(run_number=run_number, file_path=inst_settings.cal_mapping_file)
if inst_settings.chopper_on:
chopper_config = yaml_dict["chopper_on"]
else:
chopper_config = yaml_dict["chopper_off"]
label = yaml_dict["label"]
empty_runs = chopper_config["empty_run_numbers"]
vanadium_runs = chopper_config["vanadium_run_numbers"]
splined_vanadium_name = _generate_splined_van_name(chopper_on=inst_settings.chopper_on,
vanadium_run_string=vanadium_runs)
grouping_full_path = os.path.join(inst_settings.calibration_dir, inst_settings.grouping_file_name)
in_calib_dir = os.path.join(inst_settings.calibration_dir, label)
calibration_full_path = os.path.join(in_calib_dir, yaml_dict["offset_file_name"])
splined_vanadium = os.path.join(in_calib_dir, splined_vanadium_name)
run_details = RunDetails(run_number=run_number)
run_details.empty_runs = empty_runs
run_details.vanadium_run_numbers = vanadium_runs
run_details.label = label
run_details.calibration_file_path = calibration_full_path
run_details.grouping_file_path = grouping_full_path
run_details.splined_vanadium_file_path = splined_vanadium
return run_details
def split_into_tof_d_spacing_groups(run_details, processed_spectra):
name_index = 1
d_spacing_output = []
tof_output = []
run_number = str(run_details.run_number)
for ws in processed_spectra:
d_spacing_out_name = run_number + "-ResultD-" + str(name_index)
tof_out_name = run_number + "-ResultTOF-" + str(name_index)
d_spacing_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=d_spacing_out_name,
Target="dSpacing"))
tof_output.append(mantid.ConvertUnits(InputWorkspace=ws, OutputWorkspace=tof_out_name, Target="TOF"))
# Group the outputs
d_spacing_group_name = run_number + "-Results-D-Grp"
d_spacing_group = mantid.GroupWorkspaces(InputWorkspaces=d_spacing_output, OutputWorkspace=d_spacing_group_name)
tof_group_name = run_number + "-Results-TOF-Grp"
tof_group = mantid.GroupWorkspaces(InputWorkspaces=tof_output, OutputWorkspace=tof_group_name)
return d_spacing_group, tof_group
def process_vanadium_for_focusing(bank_spectra, mask_path, spline_number):
bragg_masking_list = _read_masking_file(mask_path)
masked_workspace_list = _apply_bragg_peaks_masking(bank_spectra, mask_list=bragg_masking_list)
output = common.spline_vanadium_for_focusing(focused_vanadium_spectra=masked_workspace_list,
num_splines=spline_number)
common.remove_intermediate_workspace(masked_workspace_list)
return output
def _apply_bragg_peaks_masking(workspaces_to_mask, mask_list):
index = 0
output_workspaces = []
for bank_mask_list in mask_list:
if not bank_mask_list:
continue
output_name = "masked_vanadium-" + str(index + 1)
for mask_params in bank_mask_list:
out_workspace = mantid.MaskBins(InputWorkspace=workspaces_to_mask[index], OutputWorkspace=output_name,
XMin=mask_params[0], XMax=mask_params[1])
if out_workspace:
output_workspaces.append(out_workspace)
index += 1
return output_workspaces
def _generate_splined_van_name(chopper_on, vanadium_run_string):
output_string = "SVan_" + str(vanadium_run_string) + "_chopper"
if chopper_on:
output_string += "On"
else:
output_string += "Off"
return output_string
def _read_masking_file(masking_file_path):
all_banks_masking_list = []
bank_masking_list = []
ignore_line_prefixes = (' ', '\n', '\t', '#') # Matches whitespace or # symbol
with open(masking_file_path) as mask_file:
for line in mask_file:
if line.startswith(ignore_line_prefixes):
# Push back onto new bank
all_banks_masking_list.append(bank_masking_list)
bank_masking_list = []
else:
line.rstrip()
bank_masking_list.append(line.split())
if bank_masking_list:
all_banks_masking_list.append(bank_masking_list)
return all_banks_masking_list