Source code for ewoksbm29.tasks.integrate
import os
import shutil
from ..models.dahu import IntegrateParameters
from .base.dahu_ispyb import DahuJobWithIspybUpload
[docs]
class DahuIntegrate(
DahuJobWithIspybUpload,
input_names=["scan_data_slice"],
optional_input_names=["integrate_parameters"],
):
"""Azimuthal integration of BM29 SAXS data.
In addition to the inputs from `DahuJobWithIspybUpload`:
Required inputs:
- scan_data_slice (dict): Subset of parameters related to the scan data (see `IntegrateParameters`).
Optional inputs:
- integrate_parameters (dict): Extra integrate parameters (see `IntegrateParameters`).
"""
DAHU_PLUGIN = "bm29.integratemultiframe"
DAHU_INPUTS_MODEL = IntegrateParameters
PROCESS_NAME = "integrate"
CONFIG_NAME = "integrate"
[docs]
def dahu_parameters_initialize(self) -> dict:
dahu_parameters = super().dahu_parameters_initialize()
dahu_parameters.update(self.inputs.scan_data_slice)
return dahu_parameters
[docs]
def dahu_parameters_finalize(self, dahu_parameters: dict) -> None:
input_file = dahu_parameters.get("input_file")
if input_file:
for key in ["poni_file", "mask_file"]:
file_path = dahu_parameters.get(key)
if not file_path:
continue
dahu_parameters[key] = self._copy_config_file(file_path, input_file)
output_file = dahu_parameters.get("output_file")
if input_file and not output_file:
output_file = self.output_filename_from_lima_filename(input_file, ".h5")
dahu_parameters["output_file"] = output_file
integrate_parameters = self.get_input_value("integrate_parameters")
if integrate_parameters:
dahu_parameters.update(integrate_parameters)
super().dahu_parameters_finalize(dahu_parameters)
[docs]
def dahu_parameters_save_path(self, dahu_parameters: IntegrateParameters) -> str:
if dahu_parameters.output_file:
return os.path.splitext(dahu_parameters.output_file)[0] + ".json"
return self.output_filename_from_lima_filename(
dahu_parameters.input_file, ".json"
)
def _copy_config_file(self, file_path: str, lima_file_path: str) -> str:
"""
Copy configuration files used by the processing (poni and mask file).
"""
lima_dirname, _ = os.path.split(lima_file_path)
raw_sample_dirname = os.path.normpath(os.path.join(lima_dirname, "..", ".."))
processed_sample_dirname = raw_sample_dirname.replace(
"RAW_DATA", self.processed_data_subdir
)
os.makedirs(processed_sample_dirname, exist_ok=True)
basename = os.path.basename(file_path)
file_path_copy = os.path.join(processed_sample_dirname, basename)
if not os.path.isabs(file_path):
config_directory = self.get_input_value("config_directory")
if not config_directory:
raise ValueError("Parameter 'config_directory' is required")
file_path = os.path.join(config_directory, basename)
if not os.path.exists(file_path_copy):
shutil.copy(file_path, processed_sample_dirname)
return file_path_copy