Source code for nabu.stitching.stitcher.dumper.preprocessing
import h5py
import numpy
import logging
from .base import DumperBase
from nabu.stitching.config import PreProcessedSingleAxisStitchingConfiguration
from nabu import version as nabu_version
from nabu.io.writer import get_datetime
from silx.io.dictdump import dicttonx
from tomoscan.identifier import ScanIdentifier
_logger = logging.getLogger(__name__)
[docs]
class PreProcessingStitchingDumper(DumperBase):
"""
dumper to be used when save data durint pre-processing stitching (on projections). Output is expected to be an NXtomo
"""
def __init__(self, configuration) -> None:
if not isinstance(configuration, PreProcessedSingleAxisStitchingConfiguration):
raise TypeError(
f"configuration is expected to be an instance of {PreProcessedSingleAxisStitchingConfiguration}. Get {type(configuration)} instead"
)
super().__init__(configuration)
[docs]
def save_frame_to_disk(self, output_dataset: h5py.Dataset, index: int, stitched_frame: numpy.ndarray, **kwargs):
output_dataset[index] = stitched_frame
[docs]
def save_configuration(self):
"""dump configuration used for stitching at the NXtomo entry"""
process_name = "stitching_configuration"
config_dict = self.configuration.to_dict()
# adding nabu specific information
nabu_process_info = {
"@NX_class": "NXentry",
f"{process_name}@NX_class": "NXprocess",
f"{process_name}/program": "nabu-stitching",
f"{process_name}/version": nabu_version,
f"{process_name}/date": get_datetime(),
f"{process_name}/configuration": config_dict,
}
dicttonx(
nabu_process_info,
h5file=self.configuration.output_file_path,
h5path=self.configuration.output_data_path,
update_mode="replace",
mode="a",
)
@property
def output_identifier(self) -> ScanIdentifier:
return self.configuration.get_output_object().get_identifier()
[docs]
def create_output_dataset(self):
"""
function called at the beginning of the stitching to prepare output dataset
"""
raise NotImplementedError