Generic HDF5 NIRS Datasets¶
Status: Supported (scoped) · Vendor: Vendor-neutral · Extensions:
.h5,.hdf5· Feature flag:fmt-hdf5
HDF5 is a general-purpose hierarchical container used by many NIRS pipelines, spectrometers and research datasets to store spectra alongside a wavelength (or wavenumber) axis, targets and free-form attributes. This is a schema-aware reader for the common “spectra + axis” layouts; it is deliberately conservative and refuses HDF5 files it cannot map confidently.
Instruments & software¶
Vendor-neutral. The reader targets HDF5 files written by NIRS instruments, conversion tools and analysis pipelines that follow the usual dataset naming conventions. Committed fixtures are synthetic, exercising single- and multi-signal layouts, nested groups, common dataset aliases and a transposed matrix orientation.
File structure¶
Detected by the HDF5 magic (\x89HDF\r\n\x1a\n) combined with an .h5 / .hdf5
extension; the NIRS schema itself is validated only on read. Decoding uses the
pure-Rust hdf5-reader crate (gated behind the fmt-hdf5 feature), so it works
on the no-filesystem wasm32-unknown-unknown target as well. The reader also
routes through the sidecar resolver, so external-file and external-link
references inside the container are followed via the same companion-file path.
The reader searches the root group first, then nested groups up to four levels deep, looking for:
a 2-D spectral dataset shaped
samples x bands, orbands x sampleswhen the axis length identifies the band dimension unambiguously;a matching 1-D axis dataset (
wavelengths,wavenumbers,wn,lambda,x_axis, and related*_nm/*_cm-1aliases);optional 1-D numeric target datasets matching the sample dimension.
What nirs4all-formats extracts¶
Signals — one signal per recognised spectral dataset. Multiple compatible datasets in the same group (e.g.
absorbanceandreflectancesharing one/wavelengths) are emitted as separate signals on each record; duplicate names get stable numeric suffixes. Dataset names such asspectra,absorbance,reflectance,transmittance,intensity,raw,countsordataare recognised, and the signal type is inferred from the name or aunitsattribute.Axis — values from the axis dataset, with the unit taken from its
unitsattribute and the kind (Wavelength / Wavenumber / Index) inferred from the dataset name and unit.Targets — any 1-D numeric dataset that matches the sample count and is not the axis or a spectral dataset.
Metadata — root and group attributes, the source group path, the matrix orientation when non-default, and per-signal unit hints.
Provenance — source file + SHA-256, reader name and version.
The reader emits one SpectralRecord per sample row.
Variants & support status¶
Variant |
Status |
Notes |
|---|---|---|
|
Supported |
Canonical |
Multiple compatible datasets in one group |
Supported |
Emitted as separate signals sharing the axis. |
Common dataset aliases ( |
Supported |
Name- and unit-based signal/axis typing. |
Transposed |
Supported |
Accepted only when the axis length is unambiguous. |
Real metadata-rich vendor schemas |
Planned |
Synthetic fixtures only; real-world schemas still wanted. |
Limitations & known gaps¶
Dispatch is intentionally conservative: HDF5 files without a recognised 2-D spectral dataset and a matching 1-D axis are refused.
Ambiguous transposes (where rows and columns could both match the axis) are rejected rather than guessed.
FGI XML+HDF5 pairs are handled by the dedicated
fgi-hdf5-xmlreader; MATLAB v7.3.matfiles (matlab) and Allotrope ADF (allotrope-adf) use separate schema mappers even though their payloads are HDF5-backed.Real instrument schemas with rich metadata, complex axes, non-trivial targets and heterogeneous group conventions are still needed to harden the mapping.
Reference readers¶
h5py, the hdf5-reader crate and PyTables (tables) open the same containers;
nirs4all-formats adds axis detection, signal typing, target extraction and provenance
on top.
Samples & validation¶
Fixtures live under samples/hdf5/ (synthetic_nirs.h5 — 50 records, two
signals on a shared /wavelengths; generic_aliases_data_group.h5 — a
bands x samples /data/absorbance with a cm-1 axis) and samples/fgi/. They
are covered by golden summaries in crates/nirs4all-formats/tests/goldens/, and
non-spectral refusals are locked in. The probe reports hdf5-nirs-container at
Confidence::Likely.