Raw Acquisition Data

Raw k-space data is stored in MRD format as individual readout acquisitions. Each readout contains the complex raw data for all channels, a fixed AcquisitionHeader, and optionally corresponding k-space trajectory information. Most datasets will be comprised of many acquisitions, each stored indvidiually with its own AcquisitionHeader, optional trajectory, and raw data.

AcquisitionHeader

An MRD AcquisitionHeader accompanies each readout containing metadata common to most data. It is of a fixed size and thus fields cannot be added, removed, or otherwise repurposed. It contains the following information:

Field

Description

Type

Offset

version

Major version number (currently 1)

uint16

0 bytes

flags

A bit mask of common attributes applicable to individual acquisition readouts

uint64

2 bytes

measurement_uid

Unique ID corresponding to the readout

uint32

10 bytes

scan_counter

Zero-indexed incrementing counter for readouts

uint32

14 bytes

acquisition_time_stamp

Clock time stamp (e.g. milliseconds since midnight)

uint32

18 bytes

physiology_time_stamp

Time stamps relative to physiological triggering, e.g. ECG, pulse oximetry, respiratory. Multiplicity defined by ISMRMRD_PHYS_STAMPS (currently 3)

uint32 (x3)

22 bytes

number_of_samples

Number of digitized readout samples

uint16

34 bytes

available_channels

Number of possible receiver coils (channels)

uint16

36 bytes

active_channels

Number of active receiver coils

uint16

38 bytes

channel_mask

Bit mask indicating active coils (64*16 = 1024 bits)

uint64 (x16)

40 bytes

discard_pre

Number of readout samples to be discarded at the beginning (e.g. if the ADC is active during gradient events)

uint16

168 bytes

discard_post

Number of readout samples to be discarded at the end (e.g. if the ADC is active during gradient events)

uint16

170 bytes

center_sample

Index of the readout sample corresponing to k-space center (zero indexed)

uint16

172 bytes

encoding_space_ref

Indexed reference to the encoding spaces enumerated in the MRD (xml) header

uint16

174 bytes

trajectory_dimensions

Dimensionality of the k-space trajectory vector (e.g. 2 for 2D radial (kx, ky), 0 for no trajectory data)

uint16

176 bytes

sample_time_us

Readout bandwidth, as time between samples in microseconds

float (32 bit)

178 bytes

position

Center of the excited volume, in (left, posterior, superior) (LPS) coordinates relative to isocenter in millimeters

float (32 bit) (x3)

182 bytes

read_dir

Directional cosine of readout/frequency encoding

float (32 bit) (x3)

194 bytes

phase_dir

Directional cosine of phase encoding (2D)

float (32 bit) (x3)

206 bytes

slice_dir

Directional cosine of slice normal, i.e. cross-product of read_dir and phase_dir

float (32 bit) (x3)

218 bytes

patient_table_position

Offset position of the patient table, in LPS coordinates

float (32 bit) (x3)

230 bytes

idx

Encoding loop counters, as defined below

uint16 (x17)

242 bytes

user_int

User-defined integer parameters, multiplicity defined by ISMRMRD_USER_INTS (currently 8)

int32 (x8)

276 bytes

user_float

User-defined float parameters, multiplicity defined by ISMRMRD_USER_FLOATS (currently 8)

float (32 bit) (x8)

308 bytes

Total

340 bytes

A reference implementation for serialization/deserialization of the AcquisitionHeader can be found in serialization.cpp.

MRD EncodingCounters

MR acquisitions often loop through a set of counters (e.g. phase encodes) in a complete experiment. The following encoding counters are referred to by the idx field in the AcquisitionHeader.

Field

Format

Description

Type

Offset

kspace_encode_step_1

uint16

Phase encoding line

uint16

0 bytes

kspace_encode_step_2

uint16

Partition encoding

uint16

2 bytes

average

uint16

Signal average

uint16

4 bytes

slice

uint16

Slice number (multi-slice 2D)

uint16

6 bytes

contrast

uint16

Echo number in multi-echo

uint16

8 bytes

phase

uint16

Cardiac phase

uint16

10 bytes

repetition

uint16

Counter in repeated/dynamic acquisitions

uint16

12 bytes

set

uint16

Sets of different preparation, e.g. flow encoding, diffusion weighting

uint16

14 bytes

segment

uint16

Counter for segmented acquisitions

uint16

16 bytes

user

uint16 (x8)

User defined counters, multiplicity defined by ISMRMRD_USER_INTS (currently 8)

uint16 (x8)

18 bytes

Total

34 bytes

A reference implementation for serialization/deserialization of the EncodingCounters can be found in serialization.cpp.

MRD AcquisitionFlags

The flags field in the AcquisitionHeader is a 64 bit mask that can be used to indicate specific attributes of the corresponding readout. One usage of these flags is to trigger the processing of data when a condition is met, e.g. the last readout for the current slice. The following flags are defined in the ISMRMRD_AcquisitionFlags enum of ismrmrd.h:

    ISMRMRD_ACQ_FIRST_IN_ENCODE_STEP1               =  1,
    ISMRMRD_ACQ_LAST_IN_ENCODE_STEP1                =  2,
    ISMRMRD_ACQ_FIRST_IN_ENCODE_STEP2               =  3,
    ISMRMRD_ACQ_LAST_IN_ENCODE_STEP2                =  4,
    ISMRMRD_ACQ_FIRST_IN_AVERAGE                    =  5,
    ISMRMRD_ACQ_LAST_IN_AVERAGE                     =  6,
    ISMRMRD_ACQ_FIRST_IN_SLICE                      =  7,
    ISMRMRD_ACQ_LAST_IN_SLICE                       =  8,
    ISMRMRD_ACQ_FIRST_IN_CONTRAST                   =  9,
    ISMRMRD_ACQ_LAST_IN_CONTRAST                    = 10,
    ISMRMRD_ACQ_FIRST_IN_PHASE                      = 11,
    ISMRMRD_ACQ_LAST_IN_PHASE                       = 12,
    ISMRMRD_ACQ_FIRST_IN_REPETITION                 = 13,
    ISMRMRD_ACQ_LAST_IN_REPETITION                  = 14,
    ISMRMRD_ACQ_FIRST_IN_SET                        = 15,
    ISMRMRD_ACQ_LAST_IN_SET                         = 16,
    ISMRMRD_ACQ_FIRST_IN_SEGMENT                    = 17,
    ISMRMRD_ACQ_LAST_IN_SEGMENT                     = 18,
    ISMRMRD_ACQ_IS_NOISE_MEASUREMENT                = 19,
    ISMRMRD_ACQ_IS_PARALLEL_CALIBRATION             = 20,
    ISMRMRD_ACQ_IS_PARALLEL_CALIBRATION_AND_IMAGING = 21,
    ISMRMRD_ACQ_IS_REVERSE                          = 22,
    ISMRMRD_ACQ_IS_NAVIGATION_DATA                  = 23,
    ISMRMRD_ACQ_IS_PHASECORR_DATA                   = 24,
    ISMRMRD_ACQ_LAST_IN_MEASUREMENT                 = 25,
    ISMRMRD_ACQ_IS_HPFEEDBACK_DATA                  = 26,
    ISMRMRD_ACQ_IS_DUMMYSCAN_DATA                   = 27,
    ISMRMRD_ACQ_IS_RTFEEDBACK_DATA                  = 28,
    ISMRMRD_ACQ_IS_SURFACECOILCORRECTIONSCAN_DATA   = 29,
    ISMRMRD_ACQ_COMPRESSION1                        = 53,
    ISMRMRD_ACQ_COMPRESSION2                        = 54,
    ISMRMRD_ACQ_COMPRESSION3                        = 55,
    ISMRMRD_ACQ_COMPRESSION4                        = 56,
    ISMRMRD_ACQ_USER1                               = 57,
    ISMRMRD_ACQ_USER2                               = 58,
    ISMRMRD_ACQ_USER3                               = 59,
    ISMRMRD_ACQ_USER4                               = 60,
    ISMRMRD_ACQ_USER5                               = 61,
    ISMRMRD_ACQ_USER6                               = 62,
    ISMRMRD_ACQ_USER7                               = 63,
    ISMRMRD_ACQ_USER8                               = 64

k-space Trajectory

k-space trajectory information is optionally included with each readout, with dimensionality specified by the trajectory_dimensions field in the AcquisitionHeader. Common values are 2 for 2D radial (kx, ky), 3 for 3D radial (kx, ky, kz). Trajectory information is omitted if trajectory_dimensions is set to 0.

Trajectory data is organized by looping through the dimensions first then the samples:

  • For 2D trajectory data:

    Sample 1 Sample 2 ... Sample n
    kx ky kx ky kx ky
  • For 3D trajectory data:

    Sample 1 Sample 2 ... Sample n
    kx ky kz kx ky kz kx ky kz

Raw Data

MR acquisition raw data are stored as complex valued floats. Data from all receiver channels are included in a single readout object. Data is organized by looping through real/imaginary data, samples, then channels:

Channel 1 Channel 2 ... Channel n
Sample 1 ... Sample n Sample 1 ... Sample n Sample 1 ... Sample n
Re Im Re Im Re Im Re Im Re Im Re Im Re Im Re Im Re Im