Skip to main content

Module per_echo

Module per_echo 

Source
Expand description

Per-echo QSM: a susceptibility map reconstructed from each echo on its own.

The usual pipeline combines the echoes into one field (super::run_field_mapping) and inverts that. A per-echo reconstruction (QsmPipelineConfig::qsm_per_echo) instead runs every stage once per echo:

  1. Field, run_field_mapping_per_echo: echo e’s phase unwrapped and divided by its own echo time. The echo combination, phase-offset removal and bipolar correction combine or compare echoes, so they do not run.
  2. Background removal, inversion and referencing: the host calls super::run_bg_removal, super::run_dipole_inversion and super::apply_reference on that echo’s field with ScanMetadata::echo(e), so a method that converts at an echo time (STAR-QSM’s te, MEDI’s, …) uses that echo’s.
  3. Outputs: the per-echo χ maps, and their voxel-wise mean across echoes (mean_across_echoes) as the single QSM. voxel_major lays the per-echo maps out as SeparationInputs::qsm_per_echo takes them.

§Why, and the reference

DECOMPOSE’s signal model synthesises each echo’s phase from that echo’s χ(t): “Note that QSM of each echo, χ(t), is used instead of the average QSM across all echoes” (Chen et al. 2021, NeuroImage 242:118477, §2.2), and “it is necessary to use TE-dependent QSM as the input” (§4.1). Their pipeline (§3.6, and DECOMPOSE_analysis.m) is the one above: Laplacian unwrapping of each echo’s raw phase, V-SHARP, and STAR-QSM “to compute the susceptibility maps for each echo”. The pipeline rule decompose.qsm-per-echo recommends this mode when DECOMPOSE is chosen.

§The mean across echoes

mean_across_echoes is the plain voxel-wise arithmetic mean with equal weights: the “average QSM across all echoes” Chen et al. contrast χ(t) with (§2.2), which names no weighting. Referencing commutes with it: the mean of maps each referenced to their mean over one mask is referenced to its mean over that mask.

Re-exports§

pub use super::field_mapping::run_field_mapping_per_echo;

Functions§

mean_across_echoes
The voxel-wise mean of maps (one map per echo, each n_voxels long), with equal weights. See the module docs. Empty when maps is; panics if the maps’ lengths differ.
voxel_major
maps (one per echo, each n_voxels long) interleaved voxel-major, (n_voxels, n_echoes) with the echo fastest, as SeparationInputs::qsm_per_echo and the multi-echo magnitude take them. Panics if the maps’ lengths differ.