Skip to main content

FieldMappingConfig

Struct FieldMappingConfig 

Source
pub struct FieldMappingConfig {
    pub unwrapping_algorithm: UnwrappingAlgorithm,
    pub phase_offset_removal: bool,
    pub phase_offset_sigma_mm: [f64; 3],
    pub bipolar_correction: bool,
    pub b0_estimation: B0EstimationMethod,
    pub laplacian_solver: LaplacianSolver,
    pub laplacian_unmasked: bool,
    pub romeo_params: RomeoParams,
    pub prelude_params: PreludeParams,
}
Expand description

Field mapping configuration

Fields§

§unwrapping_algorithm: UnwrappingAlgorithm§phase_offset_removal: bool§phase_offset_sigma_mm: [f64; 3]

Gaussian smoothing sigma of the MCPC-3D-S phase offsets, in mm per axis (default [7, 7, 7]); divided by the voxel size to give the smoothing in voxels (Self::phase_offset_sigma_voxels). The default is the ROMEO command line’s (what users run, romeo -B): --phase-offset-smoothing-sigma-mm, “default: [7,7,7]”, divided by the NIfTI voxel size (ROMEO.jl 08776d4, ext/RomeoApp/argparse.jl l. 79-84 and 217-224, caller.jl l. 137-138). The same physical width at every resolution. MriResearchTools’ mcpc3ds function itself defaults to sigma = [10, 10, 5] in voxels (src/mcpc3ds.jl l. 39), which QSM.rs used before; that is 10/10/5 mm at 1 mm voxels but a different width at any other resolution.

Measured on 1 mm data (ROMEO field, default V-SHARP, RTS), where the old default is 10/10/5 mm: χ moves by at most 0.003 XSIM, on the qsm-forward phantom XSIM 0.254 → 0.256, NRMSE 85.9 → 85.7 %, and on an in-vivo 3T Philips scan, agreement with the UK Biobank pipeline’s χ, XSIM 0.714 → 0.714, NRMSE 69.7 → 69.4 %.

§bipolar_correction: bool§b0_estimation: B0EstimationMethod

How the unwrapped echoes are combined, with that method’s own settings (default B0EstimationMethod::WeightedAvg with B0WeightType::PhaseSNR).

§laplacian_solver: LaplacianSolver

Poisson solver used when unwrapping_algorithm is UnwrappingAlgorithm::Laplacian (default LaplacianSolver::Dct). With LaplacianSolver::Fft { pad: [64; 3] } and b0_estimation B0EstimationMethod::WeightedAvg with B0WeightType::AssumedDecay at 40 ms, a multi-echo run gives UK Biobank’s field map (see run_field_mapping).

§laplacian_unmasked: bool

Laplacian unwrapping on the raw phase over the whole volume, instead of on the phase zeroed outside the brain mask (default false). Zeroing first keeps the noise outside the brain out of the global Poisson solve, and is what UK Biobank (MRPhaseUnwrap(mask .* phase)) does. QSM.jl’s unwrap_laplacian takes the raw phase: its :dct solver (this crate’s LaplacianSolver::Dct) ignores the mask, so it is laplacian_unmasked: true here, while its default :mgpcg (not ported) multiplies the Laplacian by the mask and solves with a Dirichlet boundary on it, which also removes the background (see crate::unwrap::laplacian). STI Suite 3.0’s QSM_GUI and QSMART unwrap the raw phase (rules sti.unwrap-unmasked, qsmart.unwrap-unmasked; see crate::unwrap::laplacian). With B0EstimationMethod::QsmartEchofit the unwrapped echoes are also kept over the whole volume, as QSMART fits them; the other combinations use the voxels inside the mask. Only with Laplacian unwrapping.

§romeo_params: RomeoParams

ROMEO’s settings (default RomeoParams::default, ROMEO.jl’s API defaults). RomeoParams::romeo_cli gives the romeo command line’s (romeo3 weights with a magnitude, no temporal re-unwrapping), which with the rest of this default config is the CLI’s B0 pipeline. Which of the two QSMxT should default to is being measured (QSM.rs#319).

§prelude_params: PreludeParams

PRELUDE’s settings, used when unwrapping_algorithm is UnwrappingAlgorithm::Prelude (default PreludeParams::default: FSL prelude’s defaults, 8 phase partitions with regions labelled slice by slice, and the median wrap count removed per echo as FSL’s output has it).

Implementations§

Source§

impl FieldMappingConfig

Source

pub fn phase_offset_sigma_voxels(&self, voxel_size: (f64, f64, f64)) -> [f64; 3]

phase_offset_sigma_mm in voxels of voxel_size (mm), as the ROMEO command line converts it.

Trait Implementations§

Source§

impl Clone for FieldMappingConfig

Source§

fn clone(&self) -> FieldMappingConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FieldMappingConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FieldMappingConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneAny for T
where T: Any + Clone,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.