pub struct WhQsmParams {}Expand description
WH-QSM parameters.
Fields§
§alpha1: f64TV regularization weight.
mu1: f64ADMM penalty for the TV splitting (mu).
mu2: f64ADMM penalty for the data-fidelity splitting.
beta: f64Weak-harmonic ROI penalty (constrains the harmonic field inside the mask). Default 150,
WH_nlTV.m’s own default. FANSI’s demo (script_DICOM_Philips.m l. 432-433) sets
beta = 200, muh = 5, as a starting point to “fine tune” (“usually, beta is between 20
to 50 times larger than muh”); the function’s default is kept.
muh: f64ADMM penalty for the harmonic-field splitting.
max_iter: usizeMaximum outer iterations.
tol_update: f64Percent-update stopping tolerance on x.
tol_delta: f64Inner Newton stopping tolerance.
weight: WhQsmWeightMagnitude normalisation for the data weight.
b0: f64Field strength in Tesla (scan parameter, for the radian conversion).
echo_times: Vec<f64>Echo times in seconds, in acquisition order (scan parameter, for the radian conversion).
te: EchoTimeWhich echo time the radian conversion uses. Default EchoTime::First. FANSI’s
multi-echo example, script_DICOM_Philips.m, scales the field by deltaTE = TE(echo2) - TE(echo1) (FANSI-toolbox 93044a3, line 364) before WH_nlTV (line 436), but
with a weight from M0 and the fit noise, and its comment on that line says “You may use
also any individual echo time”. With the default flat weight (WhQsmWeight::Flat), the
first echo does better: on QSM-CI’s simulated head (7 T, echoes 4/12/20/28 ms, its true
local field and mask; FANSI’s kernel, the flat weight over the whole volume, QSM.rs#402)
χ NRMSE 33.6 % and r 0.945 at the first echo against 42.0 % and 0.914 at the spacing.
(Before QSM.rs#402, with the continuous kernel and the weight only in the mask, the
spacing diverged on the qsm-forward phantom, r 0.07, and the first echo gave XSIM 0.754,
NRMSE 35.5 %.) With a magnitude weight the echo spacing does better than
the first echo (echo-1 magnitude, WhQsmWeight::MaxNormalised; qsm-forward phantom,
integration-test settings, FANSI’s kernel, QSM.rs#418; XSIM / NRMSE / r 0.676 / 48.9% /
0.876 vs 0.638 / 49.9% / 0.873; with the continuous kernel, #276: XSIM 0.673 vs 0.637).
kernel: FansiKernelThe dipole kernel. Default FansiKernel::Discrete, FANSI’s
dipole_kernel_angulated as the original is run with; FansiKernel::Continuous is
the crate’s continuous kernel (see FansiKernel for the decision and the measurements).
Trait Implementations§
Source§impl Clone for WhQsmParams
impl Clone for WhQsmParams
Source§fn clone(&self) -> WhQsmParams
fn clone(&self) -> WhQsmParams
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 WhQsmParams
impl Debug for WhQsmParams
Source§impl Default for WhQsmParams
impl Default for WhQsmParams
Auto Trait Implementations§
impl Freeze for WhQsmParams
impl RefUnwindSafe for WhQsmParams
impl Send for WhQsmParams
impl Sync for WhQsmParams
impl Unpin for WhQsmParams
impl UnsafeUnpin for WhQsmParams
impl UnwindSafe for WhQsmParams
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