pub struct StarParams {
pub pad: [usize; 3],
pub echo_times: Vec<f64>,
pub te: EchoTime,
pub b0: f64,
}Expand description
Parameters for star_qsm. The defaults are STI Suite’s: the GUI’s padding, and
QSM_star’s defaults otherwise.
Fields§
§pad: [usize; 3]Zero padding per side in voxels, per axis (x, y, z in voxel axes): STI’s 'padsize'.
Default STAR_GUI_PAD = [8, 8, 20]: what STI Suite 3.0’s QSM_GUI passes to
QSM_star, so the default gives what STI Suite’s GUI users get. It is a constant in the
GUI, not derived from the data. Probed in MATLAB R2023b by driving QSM_GUI headless
(load, “3D GRE data”, “star QSM”, and the “Single button for QSM” path) with a logging
wrapper around QSM_star: 'padsize' was [8 8 20] on all 14 grid / voxel-size
combinations tried (32 to 128 voxels per axis, axes permuted; 0.5 to 3 mm voxels,
isotropic and anisotropic) and with other mask sizes and positions, field strengths,
B0 directions and V-SHARP radii. The GUI has no padding control. The 20 is on the third
voxel axis whatever the B0 direction. (The GUI’s phase unwrapping fails on odd matrix
sizes, so it never gives QSM_star an odd grid; see step 1 of the module docs for odd
grids here.)
QSM_STAR_DEFAULT_PAD ([0, 0, 0]) is what QSM_star does when called without
'padsize'. STI_Templates.m lists [12 12 12] as the default
(STI_TEMPLATES_STAR_PAD), but that is not what the function does. Any other padding
can be given per axis.
B0 direction (a deliberate deviation from the GUI). The GUI takes 'H' from its
H_Vector field, which loading the data does not fill from the scan (the same probe:
the loader returned an oblique direction and QSM_star still got [0 0 1]), so GUI
users get [0 0 1] unless they type a direction in. star_qsm instead takes the
direction as its bdir argument, and the pipeline passes the scan’s B0 direction (from
the affine, as for every other inversion), which is correct for oblique acquisitions.
For the GUI’s result, pass (0, 0, 1) explicitly; for axial scans the two agree.
echo_times: Vec<f64>Echo times in seconds, in acquisition order (default [0.04], STI’s 40 ms). The
pipeline sets them from the scan metadata.
te: EchoTimeWhich echo time the field is converted to phase at (see the module docs, Units).
Default EchoTime::Sum, as STI Suite 3.0’s multi-echo pipeline (QSM_GUI) gives
QSM_star its phase. Probed in MATLAB R2023b with logging wrappers, on 3 synthetic
echoes: loading the data sets its sum_TE field (TE_value) to 1000·sum(TEs);
“3D GRE data” (VSHARPCallBackFcn) runs V_SHARP on the sum of the echoes’
Laplacian-unwrapped phases (MRPhaseUnwrap), bit for bit, and divides that tissue
phase by 2π·ΣTE for its frequency map; “star QSM” (starQSMCallBack) calls
QSM_star(TissuePhase, NewMask, 'TE', sum_TE, ...). So the phase is the field over
ΣTE. (STI_Templates.m line 107’s TE=40 is that field’s default.)
b0: f64Field strength in tesla (default 3). The pipeline sets it from the scan metadata.
Implementations§
Trait Implementations§
Source§impl Clone for StarParams
impl Clone for StarParams
Source§fn clone(&self) -> StarParams
fn clone(&self) -> StarParams
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 StarParams
impl Debug for StarParams
Source§impl Default for StarParams
impl Default for StarParams
Auto Trait Implementations§
impl Freeze for StarParams
impl RefUnwindSafe for StarParams
impl Send for StarParams
impl Sync for StarParams
impl Unpin for StarParams
impl UnsafeUnpin for StarParams
impl UnwindSafe for StarParams
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