Skip to main content

project_mobility_ion

Function project_mobility_ion 

Source
pub fn project_mobility_ion(
    ion: &IonScalar,
    geometry: &SamplingGeometry,
    env: &MobilityEnv,
    target_p: f64,
    step_size: f64,
) -> Vec<(i32, f64)>
Expand description

Mobility projection for a single ion: (scan_index, abundance) over the geometry’s scan grid, scan indices being positions into the ascending geometry.inv_mobility (per the SamplingGeometry contract).

Each occupied scan’s abundance is the mobility Gaussian’s CDF over that scan’s own bin — the midpoints to its neighbours on the (possibly non-uniform) calibrated grid — so dense/sparse regions are integrated correctly (a single mean spacing would overlap/gap them).

Intensity-contract note: for MobilityModality::None the result is the full marginal [(0, 1.0)] by definition (no mobility axis, complete integration). For Tims the per-scan abundances sum to the captured mass, which is <= 1 (grid clipping + target_p truncation) — the two cases are intentionally different and downstream normalisation must account for it.