v2.0.0
Loading...
Searching...
No Matches
MRILIB::MriVolData Class Reference

Format-agnostic 3D MRI volume: header geometry, voxel buffer (as a vector of MriSlice), scan parameters and provenance. More...

#include <mri_vol_data.h>

Public Member Functions

 MriVolData ()
bool read (const QString &path)
bool isValid () const
int dimX () const
int dimY () const
int dimZ () const
QVector< int > dims () const
QVector< float > voxelDataAsFloat () const
Eigen::Matrix4f computeVox2Ras () const
Eigen::Matrix4f computeVox2RasTkr () const

Public Attributes

QString fileName
int version
int width
int height
int depth
int nframes
int type
int dof
bool rasGood
float xsize
float ysize
float zsize
Eigen::Vector3f x_ras
Eigen::Vector3f y_ras
Eigen::Vector3f z_ras
Eigen::Vector3f c_ras
FIFFLIB::FiffCoordTrans voxelSurfRasT
float TR
float flipAngle
float TE
float TI
float FoV
QString talairachXfmPath
QVector< MriSliceslices

Detailed Description

Format-agnostic 3D MRI volume: header geometry, voxel buffer (as a vector of MriSlice), scan parameters and provenance.

The volume is the single in-memory representation every consumer in mne-cpp operates on, regardless of whether it was loaded from MGH/MGZ, NIfTI-1 or a FreeSurfer COR directory. Storage is decomposed into a vector of MriSlice so the COR.fif writer can serialise without an intermediate copy, while the slice viewer and the BEM coregistration step both index it through the same (column, row, slice) coordinate.

The header captures FreeSurfer's MGH conventions: voxel sizes (spacingX/Y/Z), direction cosines (Mdc, column-major), centre RAS (c_ras) and voxel data type (MRI_UCHAR / MRI_INT / MRI_FLOAT / MRI_SHORT). Optional scan parameters (TR, flip angle, TE, TI, FoV) and tags (Talairach transform path, provenance) round out the structure. The read() entry point dispatches on the file extension so callers do not need to branch on format.

Format reference: https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat

Ported from mneMRIdataRec in MNE C (mne_types_mne-c.h) by Matti Hamalainen.

Definition at line 141 of file mri_vol_data.h.

Constructor & Destructor Documentation

◆ MriVolData()

MriVolData::MriVolData ( )

Default constructor.

Definition at line 52 of file mri_vol_data.cpp.

Member Function Documentation

◆ computeVox2Ras()

Matrix4f MriVolData::computeVox2Ras ( ) const

Builds the voxel-to-surface-RAS (MRI) 4×4 transform matrix.

Following FreeSurfer convention: M = Mdc * diag(xsize, ysize, zsize) P0 = c_ras - M * (dim/2) vox2ras = | M P0 | (in mm, converted to meters for FIFF) | 0 1 |

Returns
The 4×4 voxel-to-scanner-RAS transform in meters.

Definition at line 132 of file mri_vol_data.cpp.

◆ computeVox2RasTkr()

Matrix4f MriVolData::computeVox2RasTkr ( ) const

Builds the voxel-to-surface-RAS (tkRAS / tkregister) 4×4 transform.

Identical to computeVox2Ras() but forces c_ras = (0,0,0), producing the coordinate system used by FreeSurfer surfaces (lh.white, etc.).

Returns
The 4×4 voxel-to-tkRAS transform in meters.

Definition at line 179 of file mri_vol_data.cpp.

◆ dims()

QVector< int > MRILIB::MriVolData::dims ( ) const
inline
Returns
Volume dimensions as {dimX, dimY, dimZ}.

Definition at line 194 of file mri_vol_data.h.

◆ dimX()

int MRILIB::MriVolData::dimX ( ) const
inline
Returns
First (x) dimension — fastest-varying axis.

Definition at line 176 of file mri_vol_data.h.

◆ dimY()

int MRILIB::MriVolData::dimY ( ) const
inline
Returns
Second (y) dimension.

Definition at line 182 of file mri_vol_data.h.

◆ dimZ()

int MRILIB::MriVolData::dimZ ( ) const
inline
Returns
Third (z) dimension — slowest-varying axis.

Definition at line 188 of file mri_vol_data.h.

◆ isValid()

bool MriVolData::isValid ( ) const

Returns whether this volume contains valid data.

Returns
True if the volume has been loaded successfully.

Definition at line 78 of file mri_vol_data.cpp.

◆ read()

bool MriVolData::read ( const QString & path)

Convenience loader: reads an MGH/MGZ file and populates this volume.

Wraps MriMghIO::read() so callers don't need to manage a separate additionalTrans vector. Mirrors MNE-Python's nib.load(path) one-liner.

Parameters
[in]pathPath to the .mgh or .mgz file.
Returns
True on success, false on error.

Definition at line 85 of file mri_vol_data.cpp.

◆ voxelDataAsFloat()

QVector< float > MriVolData::voxelDataAsFloat ( ) const

Returns all voxel data as a contiguous float array in x-fastest order.

Mirrors MNE-Python's img.get_fdata().ravel(order='F'). Regardless of the on-disk type (UCHAR, SHORT, INT, FLOAT) the output is always float. The array length is width * height * depth.

Returns
Flat voxel data; empty vector if the volume has no slices.

Definition at line 99 of file mri_vol_data.cpp.

Member Data Documentation

◆ c_ras

Eigen::Vector3f MRILIB::MriVolData::c_ras

Center RAS coordinates (cr, ca, cs). Default: (0, 0, 0).

Definition at line 252 of file mri_vol_data.h.

◆ depth

int MRILIB::MriVolData::depth

Third dimension (slowest).

Definition at line 241 of file mri_vol_data.h.

◆ dof

int MRILIB::MriVolData::dof

Degrees of freedom.

Definition at line 244 of file mri_vol_data.h.

◆ fileName

QString MRILIB::MriVolData::fileName

Name of the source file.

Definition at line 237 of file mri_vol_data.h.

◆ flipAngle

float MRILIB::MriVolData::flipAngle

Flip angle (radians).

Definition at line 265 of file mri_vol_data.h.

◆ FoV

float MRILIB::MriVolData::FoV

Field of view (unreliable per FreeSurfer docs).

Definition at line 268 of file mri_vol_data.h.

◆ height

int MRILIB::MriVolData::height

Second dimension.

Definition at line 240 of file mri_vol_data.h.

◆ nframes

int MRILIB::MriVolData::nframes

Number of frames (scalar components per voxel).

Definition at line 242 of file mri_vol_data.h.

◆ rasGood

bool MRILIB::MriVolData::rasGood

Whether the direction cosines in the header are valid.

Definition at line 245 of file mri_vol_data.h.

◆ slices

QVector<MriSlice> MRILIB::MriVolData::slices

Per-slice data (for COR-equivalent representation).

Definition at line 280 of file mri_vol_data.h.

◆ talairachXfmPath

QString MRILIB::MriVolData::talairachXfmPath

Path to the Talairach .xfm file (from MGH footer tags).

Definition at line 274 of file mri_vol_data.h.

◆ TE

float MRILIB::MriVolData::TE

Echo time (ms).

Definition at line 266 of file mri_vol_data.h.

◆ TI

float MRILIB::MriVolData::TI

Inversion time (ms).

Definition at line 267 of file mri_vol_data.h.

◆ TR

float MRILIB::MriVolData::TR

Repetition time (ms).

Definition at line 264 of file mri_vol_data.h.

◆ type

int MRILIB::MriVolData::type

Voxel data type (MRI_UCHAR, MRI_INT, MRI_FLOAT, MRI_SHORT).

Definition at line 243 of file mri_vol_data.h.

◆ version

int MRILIB::MriVolData::version

MGH format version (should be 1).

Definition at line 238 of file mri_vol_data.h.

◆ voxelSurfRasT

FIFFLIB::FiffCoordTrans MRILIB::MriVolData::voxelSurfRasT

Voxel -> surface RAS (MRI) transform.

Definition at line 258 of file mri_vol_data.h.

◆ width

int MRILIB::MriVolData::width

First dimension of the image buffer (fastest).

Definition at line 239 of file mri_vol_data.h.

◆ x_ras

Eigen::Vector3f MRILIB::MriVolData::x_ras

X-direction cosines (xr, xa, xs). Default: (-1, 0, 0).

Definition at line 249 of file mri_vol_data.h.

◆ xsize

float MRILIB::MriVolData::xsize

Voxel spacing in X direction (mm).

Definition at line 246 of file mri_vol_data.h.

◆ y_ras

Eigen::Vector3f MRILIB::MriVolData::y_ras

Y-direction cosines (yr, ya, ys). Default: (0, 0, -1).

Definition at line 250 of file mri_vol_data.h.

◆ ysize

float MRILIB::MriVolData::ysize

Voxel spacing in Y direction (mm).

Definition at line 247 of file mri_vol_data.h.

◆ z_ras

Eigen::Vector3f MRILIB::MriVolData::z_ras

Z-direction cosines (zr, za, zs). Default: (0, 1, 0).

Definition at line 251 of file mri_vol_data.h.

◆ zsize

float MRILIB::MriVolData::zsize

Voxel spacing in Z direction (mm).

Definition at line 248 of file mri_vol_data.h.


The documentation for this class was generated from the following files: