Source code for nabu.pipeline.fullfield.dataset_validator

import os
from ..dataset_validator import DatasetValidatorBase


[docs] class FullFieldDatasetValidator(DatasetValidatorBase): def _validate(self): self._check_not_empty() self._convert_negative_indices() self._get_output_filename() self._check_can_do_flatfield() self._check_can_do_phase() self._check_can_do_reconstruction() self._check_slice_indices() self._handle_processing_mode() self._handle_binning() self._check_output_file() def _check_can_do_flatfield(self): if self.nabu_config["preproc"]["flatfield"]: darks = self.dataset_info.darks assert len(darks) > 0, "Need at least one dark to perform flat-field correction" flats = self.dataset_info.flats assert len(flats) > 0, "Need at least one flat to perform flat-field correction" def _check_slice_indices(self): nx, nz = self.dataset_info.radio_dims rec_params = self.rec_params if self.is_halftomo: ny, nx = self._get_nx_ny() what = (("start_x", "end_x", nx), ("start_y", "end_y", nx), ("start_z", "end_z", nz)) for start_name, end_name, numels in what: self._check_start_end_idx( rec_params[start_name], rec_params[end_name], numels, start_name=start_name, end_name=end_name ) def _check_can_do_phase(self): if self.nabu_config["phase"]["method"] is None: return self.dataset_info.check_defined_attribute("distance") self.dataset_info.check_defined_attribute("pixel_size") def _check_can_do_reconstruction(self): rec_options = self.nabu_config["reconstruction"] if rec_options["method"] is None: return self.dataset_info.check_defined_attribute("pixel_size") if rec_options["method"] == "cone": if rec_options["source_sample_dist"] is None: err_msg = "In cone-beam reconstruction, you have to provide 'source_sample_dist' in [reconstruction]" self.logger.fatal(err_msg) raise ValueError(err_msg) if rec_options["sample_detector_dist"] is None: if self.dataset_info.distance is None: err_msg = "Cone-beam reconstruction: 'sample_detector_dist' was not provided but could not be found in the dataset metadata either. Please provide 'sample_detector_dist'" self.logger.fatal(err_msg) raise ValueError(err_msg) self.logger.warning( "Cone-beam reconstruction: 'sample_detector_dist' not provided, will use the one in dataset metadata" ) if self.is_halftomo: err_msg = "Cone-beam reconstruction with half-acquisition is not supported yet" self.logger.fatal(err_msg) raise NotImplementedError(err_msg)