Source code for ewoksscxrd.tasks.eiger2cbf

"""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 "."