pub struct FieldMappingResult {
pub b0_field_ppm: Vec<f64>,
pub valid_mask: Vec<u8>,
pub phase_offset: Option<Vec<f64>>,
pub robust_fit: Option<RobustFitReport>,
pub reliability: Option<Vec<u8>>,
pub qsmart_fit_threshold: Option<f64>,
pub field_noise_ppm: Option<Vec<f64>>,
pub complex_fit: Option<FitPpmComplexResult>,
}Expand description
Results from field mapping stage
Fields§
§b0_field_ppm: Vec<f64>B0 field map in ppm; 0 outside valid_mask (inside mask).
valid_mask: Vec<u8>Where the field is defined: the brain mask passed in, less the voxels where MCPC-3D-S’s
phase offset is undefined (PhaseOffsetRemoval::valid)
when phase-offset removal ran; the brain mask itself on every other path. The reference
(MriResearchTools’ mcpc3ds → ROMEO.jl → calculateB0_unwrapped) leaves the field NaN
there, so later stages (background removal, inversion, referencing) must work in this mask,
not in the brain mask.
phase_offset: Option<Vec<f64>>Phase offset map (if phase offset removal was used); 0 where it is undefined.
robust_fit: Option<RobustFitReport>What the robust fit found, when B0EstimationMethod::RobustFit combined the echoes;
None for every other method.
reliability: Option<Vec<u8>>QSMART’s reliability map R_0 (1 = reliable), when B0EstimationMethod::QsmartEchofit
combined the echoes; None for every other method. Pass it to
run_qsmart.
qsmart_fit_threshold: Option<f64>The blurred echo-fit residual reliability was cut at, when
B0EstimationMethod::QsmartEchofit combined the echoes: the percentile’s value for
QsmartFitThreshold::Percentile, the
value itself for a fixed threshold (echofit.m prints it as “Setting adaptive echo-fit
threshold at %2.2f”). None for every other method.
field_noise_ppm: Option<Vec<f64>>Standard deviation of b0_field_ppm per voxel, in ppm, for the methods that estimate it:
B0EstimationMethod::ComplexFit (Fit_ppm_complex.m’s dp1, MEDI’s N_std, which
MEDI passes to PDF and MEDI_L1). None for every other method.
complex_fit: Option<FitPpmComplexResult>MEDI’s complex fit itself, when B0EstimationMethod::ComplexFit made the field map:
fit_ppm_complex’s result, before spatial unwrapping.
Its field is MEDI’s iFreq_raw (phase per
echo spacing, radians, wrapped) and its noise
MEDI’s N_std (radians per echo spacing), so a caller that wants them need not run the fit
again. None for every other method.
Auto Trait Implementations§
impl Freeze for FieldMappingResult
impl RefUnwindSafe for FieldMappingResult
impl Send for FieldMappingResult
impl Sync for FieldMappingResult
impl Unpin for FieldMappingResult
impl UnsafeUnpin for FieldMappingResult
impl UnwindSafe for FieldMappingResult
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> 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