"""Convert Eiger or LImA HDF5 files to CBF frames using Fabio."""
import logging
import os
from contextlib import nullcontext, redirect_stdout
from io import StringIO
from types import SimpleNamespace
from ewokscore import Task
from fabio.app.eiger2cbf import convert_all
logger = logging.getLogger(__name__)
[docs]
class Eiger2CBF(
Task,
input_names=["images", "output"],
optional_input_names=[
"mask",
"offset",
"dummy",
"pilatus",
"dry_run",
"energy",
"wavelength",
"distance",
"beam",
"alpha",
"kappa",
"chi",
"phi",
"omega",
"rotation",
"transpose",
"flip_ud",
"flip_lr",
"verbose",
"debug",
],
output_names=["output_path"],
):
"""Wrap :mod:`fabio.app.eiger2cbf` as an Ewoks task."""
[docs]
def run(self):
output = self.get_input_value("output")
options = SimpleNamespace(
images=self.get_input_value("images"),
output=output,
mask=self.get_input_value("mask", None),
offset=self.get_input_value("offset", 0),
dummy=self.get_input_value("dummy", -1),
pilatus=self.get_input_value("pilatus", False),
dry_run=self.get_input_value("dry_run", False),
energy=self.get_input_value("energy", None),
wavelength=self.get_input_value("wavelength", None),
distance=self.get_input_value("distance", None),
beam=self.get_input_value("beam", None),
alpha=self.get_input_value("alpha", None),
kappa=self.get_input_value("kappa", None),
chi=self.get_input_value("chi", None),
phi=self.get_input_value("phi", None),
omega=self.get_input_value("omega", None),
rotation=self.get_input_value("rotation", 0),
transpose=self.get_input_value("transpose", False),
flip_ud=self.get_input_value("flip_ud", False),
flip_lr=self.get_input_value("flip_lr", False),
verbose=self.get_input_value("verbose", False),
debug=self.get_input_value("debug", False),
)
stdout_context = (
nullcontext()
if options.verbose or options.debug
else redirect_stdout(StringIO())
)
with stdout_context:
succeeded = convert_all(options)
if not succeeded:
raise RuntimeError("Fabio eiger2cbf conversion failed")
example_output = output.format(index=options.offset)
self.outputs.output_path = os.path.dirname(example_output) or "."