Skip to main content

openkspace_io/
lib.rs

1//! OpenKSpace-IO: Readers for raw MRI formats.
2//!
3//! Supported today:
4//!   * ISMRMRD (.h5)  -- vendor-agnostic HDF5 container used by mridata.org
5//!   * FastMRI (.h5)  -- NYU/Facebook multicoil knee/brain dataset format
6//!
7//! Planned:
8//!   * Siemens TWIX  (.dat)  -- MDH / Sync-link parser
9//!   * GE P-file     (.7)    -- Pfile header + data
10//!   * Philips raw   (.raw)  -- paired with .lab / .sin
11//!
12//! # Quick start
13//!
14//! ```rust,no_run
15//! use openkspace_io::{is_fastmri, FastmriFile};
16//! use openkspace_io::ismrmrd::IsmrmrdFile;
17//!
18//! let path = std::path::Path::new("scan.h5");
19//! if is_fastmri(path) {
20//!     let f = FastmriFile::open(path).unwrap();
21//!     let kspace = f.read_kspace().unwrap(); // [coils, slices, ky, kx]
22//! } else {
23//!     let f = IsmrmrdFile::open(path).unwrap();
24//!     // kspace built slice-by-slice via f.read_acquisitions()
25//! }
26//! ```
27
28pub mod error;
29pub mod fastmri;
30pub mod ismrmrd;
31
32pub use error::{IoError, IoResult};
33pub use fastmri::{FastmriFile, FastmriMeta};
34
35/// Lightweight format probe: returns `true` if the file has a `/kspace`
36/// dataset (FastMRI layout), `false` otherwise.
37///
38/// Opens the HDF5 file without parsing any headers or logging.
39pub fn is_fastmri<P: AsRef<std::path::Path>>(path: P) -> bool {
40    hdf5_metno::File::open(path)
41        .map(|f| f.dataset("kspace").is_ok())
42        .unwrap_or(false)
43}