pub struct BrukerFormulaConverter {
pub mz: MzCalibrator,
pub im: MobilityCalibrator,
pub mz_model_type: i64,
/* private fields */
}Expand description
SDK-free converter using the exact Bruker calibration formulas.
Reads the MzCalibration, TimsCalibration and Frames tables from
analysis.tdf and evaluates the published calibration curves directly (see
crate::data::calibration). Verified against the Bruker SDK:
- scan <-> 1/K0 : machine-precision exact (ModelType 2).
- TOF <-> m/z : bit-exact for MzCalibration ModelType 1; ModelType 2 uses the same C0/C1/C2 quadratic-in-sqrt(m) curve and reproduces the SDK to ~1 ppm (the proprietary ModelType-2 C8..C14 fine correction is not modelled).
The calibration is resolved per frame: every frame’s Frames.T1/T2 and
its MzCalibration/TimsCalibration foreign keys are read, so a run that
carries more than one calibration row is handled, and the temperature
compensation is evaluated for the frame the caller asks about. That matters
because dC1 is ~20 ppm/degC: pinning one frame’s temperature for a whole run
costs ~20 ppm of mass accuracy per degC the digitizer drifts.
Self::temperature_spread reports how far the temperatures actually moved,
so callers can tell a quiet run from a drifting one.
Frame ids that are not in the file, and frames whose calibration rows use an
unsupported ModelType, fall back to the calibrators built from
fallback_frame_id.
Fields§
§mz: MzCalibratorCalibrator built from fallback_frame_id; also used for unknown frames.
im: MobilityCalibratorMobility calibrator for fallback_frame_id; also used for unknown frames.
mz_model_type: i64MzCalibration.ModelType of the fallback frame’s row.
Implementations§
Source§impl BrukerFormulaConverter
impl BrukerFormulaConverter
Sourcepub fn from_d_folder(
data_path: &str,
fallback_frame_id: u32,
) -> Result<Self, Box<dyn Error>>
pub fn from_d_folder( data_path: &str, fallback_frame_id: u32, ) -> Result<Self, Box<dyn Error>>
Build the converter from a .d folder.
fallback_frame_id (conventionally 1) selects the calibration used for
frames that are missing from the Frames table or whose calibration rows
this converter cannot evaluate; every frame that is in the file uses its
own rows and temperatures.
Sourcepub fn temperature_spread(&self) -> (f64, f64)
pub fn temperature_spread(&self) -> (f64, f64)
Spread (max - min, in degC) of Frames.T1 and Frames.T2 across the run.
A near-zero spread means per-frame and fixed-frame calibration agree; a large one means the digitizer temperature moved and per-frame compensation is doing real work (~20 ppm of m/z per degC).
Trait Implementations§
Source§impl IndexConverter for BrukerFormulaConverter
impl IndexConverter for BrukerFormulaConverter
fn tof_to_mz(&self, frame_id: u32, tof_values: &Vec<u32>) -> Vec<f64>
fn mz_to_tof(&self, frame_id: u32, mz_values: &Vec<f64>) -> Vec<u32>
fn scan_to_inverse_mobility( &self, frame_id: u32, scan_values: &Vec<u32>, ) -> Vec<f64>
fn inverse_mobility_to_scan( &self, frame_id: u32, inverse_mobility_values: &Vec<f64>, ) -> Vec<u32>
Auto Trait Implementations§
impl Freeze for BrukerFormulaConverter
impl RefUnwindSafe for BrukerFormulaConverter
impl Send for BrukerFormulaConverter
impl Sync for BrukerFormulaConverter
impl Unpin for BrukerFormulaConverter
impl UnsafeUnpin for BrukerFormulaConverter
impl UnwindSafe for BrukerFormulaConverter
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.