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}