Input data format¶
The reconstruction programs read one ISMRMRD HDF5 file per run. It holds the k-space data and trajectories as ISMRMRD acquisitions, the maps the reconstruction needs as named NDArrays, and an XML header. FORGE Studio and Magneto's convertRecoInfoToIsmrmrd write files in this layout, and GenSyntheticISMRMRD writes a small synthetic example.
Header¶
FORGE reads these fields from the first encoding space. A file with more than one encoding space is refused.
| Field | Used for |
|---|---|
encodedSpace.matrixSize x, y, z |
Image size, unless -x, -y or -z is given |
reconSpace.fieldOfView_mm, or encodedSpace.fieldOfView_mm where that is zero |
Voxel size in the NIfTI header (field of view divided by matrix size), unless --voxel-size is given. A zero field of view gives 1 mm. |
encodingLimits |
Number of shots, partitions, slices, repetitions, averages, echoes and cardiac phases (see below) |
Acquisitions¶
Each acquisition is one readout for all coils. FORGE places it with these counters from the acquisition header:
| Counter | Meaning in FORGE |
|---|---|
kspace_encode_step_1 |
Shot |
kspace_encode_step_2 |
Partition |
slice |
Slice |
repetition |
Repetition |
average |
Average |
contrast |
Echo |
phase |
Cardiac phase |
The encodingLimits maximum of each counter sets how many there are. The reconstruction programs make one image for each combination of slice, repetition, average, echo and cardiac phase, and use every shot and partition of that combination as its data.
The trajectory of each acquisition has four rows:
| Row | Content | Units |
|---|---|---|
| 0 | kx | cycles per field of view, in [−Nx/2, Nx/2) |
| 1 | ky | cycles per field of view, in [−Ny/2, Ny/2) |
| 2 | kz | cycles per field of view, in [−Nz/2, Nz/2). Zero for 2D. |
| 3 | Sample time, used for field correction | seconds |
The acquisition's direction cosines and position give the image orientation in the NIfTI output. See Image orientation.
NDArrays¶
Each array is read as one flat vector. Images inside the arrays use FORGE's voxel order: y fastest, then x, then z.
| Name | Type | Needed by | Content and layout |
|---|---|---|---|
SENSEMap |
complex double | all but gridCoilImages |
Coil sensitivities. For each slice, all coils, coil slowest: Nx·Ny·Nz × Ncoils values per slice. |
FieldMap |
double | all but gridCoilImages |
Off-resonance in rad/s, Nx·Ny·Nz values per slice |
PhaseMaps |
double | forgePcSense, forgePcSenseTimeSeg, oscillateRecon and their MPI versions |
Phase of each shot in radians. One block of Nx·Ny·Nz × Nshots × Npartitions values per image, with blocks ordered slice fastest, then average, cardiac phase, echo and repetition. |
v |
complex double | oscillateRecon |
The NRep × NRep temporal basis, column-major, one basis vector per column. The first --Rank columns are used. |
Each name should appear once. If a file has more than one array with the same name, FORGE uses the first.
The programs apply each shot's phase map as exp(+i·PhaseMap) in the forward model.
Example files¶
GenSyntheticISMRMRD writes a small radial dataset in this layout, without v. See its entry in the command-line reference for its options.