pub struct MediParams {Show 20 fields
pub lambda: f64,
pub merit: bool,
pub smv: bool,
pub smv_radius: f64,
pub smv_shrink_mask: bool,
pub msmv: Option<MsmvParams>,
pub data_weighting: i32,
pub percentage: f64,
pub cg_tol: f64,
pub cg_max_iter: usize,
pub max_iter: usize,
pub tol: f64,
pub b0: f64,
pub echo_times: Vec<f64>,
pub te: EchoTime,
pub csf: bool,
pub lambda_csf: f64,
pub csf_r2s_threshold: f64,
pub csf_erode: bool,
pub zeropad: (usize, usize, usize),
}Expand description
MEDI parameters (MEDI_L1.m / parse_QSM_input.m defaults)
Fields§
§lambda: f64Weight of the data-fidelity term ('lambda'): larger fits the data more closely
merit: boolMERIT: reweight the noise by the data residual after each iteration ('merit')
smv: boolMEDI-SMV ('smv'; false is 'nosmv'): high-pass the local field with the spherical
mean value kernel, RDF − SMV(RDF), and fit it with the SMV-filtered dipole kernel
(1 − SphereK)·D and the SMV-propagated noise sqrt(SMV(N²) + N²). This removes the
residual background a background removal leaves near the edge. It is applied to the
local field, not the total field (see the module docs). On by default, as in
MEDI_L1.m.
smv_radius: f64SMV radius in mm
smv_shrink_mask: boolWith SMV, erode the mask to where the SMV of the mask exceeds 0.999 (smv_shrink_mask,
default on). With it off, the field is still high-passed, the kernel filtered and the
noise propagated, on the full mask, as the 2024.11.26 MEDI_L1.m does. The mSMV
prerelease’s MEDI_L1.m skips the field high-pass in this case and keeps the rest; medi
follows the release (table in the module docs). The edge band within the SMV radius then
holds RDF − SMV(RDF) of a sphere that reaches outside the mask. Ignored without SMV,
and with msmv, which keeps the mask, as MEDI_L1 does.
msmv: Option<MsmvParams>MEDI-mSMV (MEDI_L1(..., 'msmv', smv_radius)): replace the SMV step’s mask erosion and
field high-pass with msmv on the full mask, keeping the
SMV-filtered dipole kernel and noise. Takes the local field from a background removal
(the authors used PDF, V-SHARP and LBV) on its mask; implies SMV (radius
smv_radius). Needs at least three echoes: the vessel mask uses R2*
from arlo.m on the echo magnitudes, as MEDI’s pipeline computes it. None (default) is
plain MEDI or MEDI-SMV. See the module docs.
data_weighting: i32Data weighting: 0 uniform (1 everywhere), 1 SNR (mask / n_std, mean 1 in the mask)
percentage: f64Edge fraction for the gradient mask ('percentage'): the threshold is set so that the
number of gradient components (all three directions) above it is this fraction of the
number of voxels in the mask
cg_tol: f64CG relative residual tolerance
cg_max_iter: usizeMaximum CG iterations per Gauss-Newton step
max_iter: usizeMaximum Gauss-Newton iterations
tol: f64Stop when ||dχ|| / ||χ|| falls below this
b0: f64Field strength in Tesla (scan parameter, for the radian conversion)
echo_times: Vec<f64>Echo times in seconds, one per echo magnitude (scan parameter). The radian conversion
picks one with te; the CSF mask uses R2* from all of them (arlo.m).
te: EchoTimeWhich echo time the radian conversion uses. Default EchoTime::Spacing, MEDI’s
delta_TE: MEDI_L1.m works on the field in radians over delta_TE
(x/(2*pi*delta_TE*CF)*1e6), which its readers set to TE(2) − TE(1), or TE for one
echo (Read_Siemens_DICOM.m lines 176-178).
csf: boolMEDI+0: zero-reference to the ventricular CSF (extract_CSF.m on arlo.m R2*, and
MEDI_L1’s lambda_CSF term). On by default, as in MEDI’s pipeline. Needs at least
three echoes; with fewer, MEDI runs without it (see the module docs).
lambda_csf: f64Weight of the CSF term ('lambda_CSF')
csf_r2s_threshold: f64extract_CSF.m’s thresh_R2s: voxels below this R2* (Hz) are CSF candidates
csf_erode: boolextract_CSF.m’s flag_erode: erode the mask by a 10 mm SMV before finding the CSF
zeropad: (usize, usize, usize)Voxels of zeros appended along x, y and z before the inversion ('zeropad'). With SMV,
axes that are still odd get one more (see the module docs).
Trait Implementations§
Source§impl Clone for MediParams
impl Clone for MediParams
Source§fn clone(&self) -> MediParams
fn clone(&self) -> MediParams
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MediParams
impl Debug for MediParams
Source§impl Default for MediParams
impl Default for MediParams
Auto Trait Implementations§
impl Freeze for MediParams
impl RefUnwindSafe for MediParams
impl Send for MediParams
impl Sync for MediParams
impl Unpin for MediParams
impl UnsafeUnpin for MediParams
impl UnwindSafe for MediParams
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneAny for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more