tomojax.io
Projection datasets on disk: load, save, validate and convert them.
Raw detector frames are read with tomojax.load_frames and corrected
with tomojax.corrections. Expert helpers (acquisition readers, NXtomo
containers, inspection, JSON) are in tomojax.io.api.
| Name | Summary |
|---|---|
ProjectionDataset | Standard public in-memory projection dataset. |
ValidationReport | Public dataset validation result. |
build_geometry_from_dataset_metadata | Build geometry objects from normalized dataset metadata. |
load_dataset | Load a standard TomoJAX projection dataset. |
load_tiff_stack | Load grayscale TIFF pages with explicit view angles, in degrees. |
save_dataset | Save a public projection dataset as NXtomo/HDF5 or NPZ. |
validate_dataset | Validate a user dataset path using the public IO boundary. |
ProjectionDataset
class ProjectionDataset(
projections: np.ndarray,
angles: np.ndarray,
volume: np.ndarray | jax.Array | None = None,
detector: Detector | None = None,
grid: Grid | None = None,
geometry_type: str = 'parallel',
geometry_metadata: dict[str, Any] = dict(),
angle_offset_deg: np.ndarray | None = None,
align_params: np.ndarray | None = None,
align_gauge: dict[str, JsonValue] | None = None,
misalign_spec: dict[str, JsonValue] | None = None,
source_path: str | None = None,
source_format: str | None = None,
sample_name: str | None = None,
_metadata: NXTomoMetadata | None = None,
)Standard public in-memory projection dataset.
This is the current IO boundary. It contains measured projection data,
normalized metadata needed by reconstruction/alignment code, and the
optional reconstructed volume when a processed container stores one.
angles holds each view's rotation angle, in degrees.
Parameters
projections(numpy.ndarray): Measured projections in (view, v, u) order.angles(numpy.ndarray): One rotation angle per view, in degrees.volume(numpy.ndarray, jax.Array or None, optional): Reconstructed volume in (x, y, z) order, when present.detector(Detector or None, optional): Detector pixel counts, pitches and physical centre.grid(Grid or None, optional): Reconstruction voxel grid.geometry_type(str, optional): Geometry family, such as parallel, lamino or cone.geometry_metadata(dict, optional): Additional geometry and acquisition metadata.angle_offset_deg(numpy.ndarray or None, optional): Per-view angular corrections in degrees.align_params(numpy.ndarray or None, optional): Saved per-view alignment parameters, with convention in align_gauge.align_gauge(dict or None, optional): Gauge and frame metadata for saved alignment parameters.misalign_spec(dict or None, optional): Simulation misalignment record; angles already include simulated offsets.source_path(str or None, optional): Original input path.source_format(str or None, optional): Original container format.sample_name(str or None, optional): Sample name retained on output._metadata(NXTomoMetadata or None, optional): Internal retained acquisition metadata; normally populated by from_nxtomo.
ProjectionDataset.from_nxtomo
@classmethod
from_nxtomo(
payload: LoadedNXTomo,
*,
source_path: PathLike | None = None,
) -> ProjectionDatasetBuild a public dataset from the lower-level NXtomo payload.
Parameters
payload(LoadedNXTomo): NXtomo projection payload and persistence metadata.source_path(str, pathlib.Path or None, optional): Input path retained as provenance.
Returns
- ProjectionDataset: Normalized in-memory dataset with arrays and typed grid/detector metadata.
Raises
- ValueError: If grid or detector metadata have invalid coordinate dimensions.
ProjectionDataset.to_nxtomo_metadata
to_nxtomo_metadata() -> NXTomoMetadataReturn NXtomo metadata for saving this public dataset.
Returns
- NXTomoMetadata: Persistence metadata reflecting the dataset's current fields.
ProjectionDataset.copy_metadata
copy_metadata() -> NXTomoMetadataReturn writable persistence metadata for save/update workflows.
Returns
- NXTomoMetadata: Writable metadata with copied arrays and retained acquisition information.
ProjectionDataset.geometry_inputs
geometry_inputs() -> dict[str, Any]Return normalized geometry metadata for reconstruction/alignment.
Returns
- dict: Normalized geometry, detector, angle and alignment metadata.
Raises
- ValueError: If detector metadata are missing.
ProjectionDataset.prepare_center_seed
prepare_center_seed() -> ProjectionDatasetPrepare axial centre inference from recorded pitches, without reading pixels.
The pending seed is not calibrated; loading must estimate its centre before returning frames. Inspection can check the remaining required metadata.
Returns
- ProjectionDataset: Original record or a copy with an internal pending detector seed.
ValidationReport
class ValidationReport()Public dataset validation result.
Attributes
issues(list of str): Validation problems; an empty list means none were found.
build_geometry_from_dataset_metadata
build_geometry_from_dataset_metadata(
meta: Mapping[str, Any],
*,
grid_override: Grid | tuple[int, int, int] | list[int] | None = None,
poses: bool = False,
volume_shape: Sequence[int] | None = None,
) -> tuple[Grid, Detector, ScanGeometry]Build geometry objects from normalized dataset metadata.
poses applies the per-view corrections and angle offsets saved with
the data. Keeping this wrapper in tomojax.io makes the command/data dependency
explicit and gives the ProjectionDataset solver contract one replacement
point.
Parameters
meta(mapping): Normalized geometry metadata, as returned by geometry_inputs.grid_override(Grid, tuple of int, list of int or None, optional): Replacement grid or (nx, ny, nz) dimensions.poses(bool, optional): Apply saved per-view alignment and angle corrections; defaults to False.volume_shape(sequence of int or None, optional): Fallback (nx, ny, nz) dimensions when no grid is recorded.
Returns
grid(Grid): Resolved reconstruction grid.detector(Detector): Resolved detector geometry.geometry(ScanGeometry): Per-view geometry, with saved corrections when requested.
Raises
- ValueError: If geometry metadata are incomplete or inconsistent.
load_dataset
load_dataset(path: PathLike) -> ProjectionDatasetLoad a standard TomoJAX projection dataset.
Supported direct inputs are NXtomo/HDF5 (.nx, .nxs, .h5, .hdf, .hdf5) and TomoJAX
.npz payloads. TIFF stacks need explicit angle metadata, so use
load_tiff_stack.
Parameters
path(str or pathlib.Path): NXtomo/HDF5 or TomoJAX NPZ dataset to read.
Returns
- ProjectionDataset: Measured projections, normalized metadata and any saved volume.
Raises
- ValueError: If the format is unsupported or TIFF angles must be supplied separately.
- KeyError: If required datasets are missing.
- OSError: If the input cannot be opened.
load_tiff_stack
load_tiff_stack(
path: PathLike,
*,
angles: Sequence[float] | np.ndarray,
detector: Detector | None = None,
grid: Grid | None = None,
geometry_type: str = 'parallel',
geometry_metadata: Mapping[str, Any] | None = None,
) -> ProjectionDatasetLoad grayscale TIFF pages with explicit view angles, in degrees.
Parameters
path(str or pathlib.Path): Multipage TIFF or folder of naturally sorted TIFF files.angles(array-like): Finite one-dimensional view angles in degrees, one per grayscale page.detector(Detector or None, optional): Detector geometry to attach to the dataset.grid(Grid or None, optional): Reconstruction grid to attach to the dataset.geometry_type(str, optional): Geometry family; defaults to parallel.geometry_metadata(mapping or None, optional): Additional geometry metadata.
Returns
- ProjectionDataset: Float32 TIFF samples and supplied metadata; no intensity correction is applied.
Raises
- ValueError: If pages are not consistent grayscale frames or angles do not match them.
- FileNotFoundError: If the input contains no TIFF frames.
save_dataset
save_dataset(path: PathLike, dataset: ProjectionDataset) -> NoneSave a public projection dataset as NXtomo/HDF5 or NPZ.
Parameters
path(str or pathlib.Path): NXtomo/HDF5 or NPZ output path; existing files are overwritten.dataset(ProjectionDataset): Projections, geometry and optional volume to persist.
Returns
- None: Write the dataset to disk without changing its metadata.
Raises
- ValueError: If the output suffix is not supported.
- OSError: If the output cannot be written.
validate_dataset
validate_dataset(path: PathLike) -> ValidationReportValidate a user dataset path using the public IO boundary.
Parameters
path(str or pathlib.Path): Dataset path to inspect for structural validity and missing raw calibration.
Returns
- ValidationReport: Issues found in the file or format; an empty issues list means none were found.