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:
- Field,
run_field_mapping_per_echo: echoe’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. - Background removal, inversion and referencing: the host calls
super::run_bg_removal,super::run_dipole_inversionandsuper::apply_referenceon that echo’s field withScanMetadata::echo(e), so a method that converts at an echo time (STAR-QSM’ste, MEDI’s, …) uses that echo’s. - Outputs: the per-echo χ maps, and their voxel-wise mean across echoes
(
mean_across_echoes) as the single QSM.voxel_majorlays the per-echo maps out asSeparationInputs::qsm_per_echotakes 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, eachn_voxelslong), with equal weights. See the module docs. Empty whenmapsis; panics if the maps’ lengths differ. - voxel_
major maps(one per echo, eachn_voxelslong) interleaved voxel-major,(n_voxels, n_echoes)with the echo fastest, asSeparationInputs::qsm_per_echoand the multi-echo magnitude take them. Panics if the maps’ lengths differ.