Skip to content

Mobility windows: fit 1/K0 from (charge, m/z) in Phase 2, derive pass-2 width from within-peptide spread #126

Description

@jspaezp

NOTE: The conclusions here apply when comparing vs predicted libraries ... whether it holds for empirical libraries in similar instrumentation is to be seen. (IDK what the run-run variability for it is under same conditions ... )

Phase 3 runs with a ±14% mobility window on every config tried. The number comes from median ± 3·1.4826·MAD of library-vs-observed 1/K0 over the Phase 1 calibrants, which is a measure of the library predictor, not of anything a window should cover. Measured on 250225_Desnaux_200ng_Hela_ICC_off_DIA.d, 5816 IDs at 1% (mini fasta):

The library 1/K0 carries almost no information beyond charge. Charge 2 predictions span 1.22–1.26 (p10–p90) while observed spans 1.06–1.19; corr(lib, obs) = 0.66, corr(m/z, obs) = 0.87. Raw |obs − lib| is 8.2% at p50. The calibrant query's ±5% box around library mobility (processing.rs, query_tolerance) therefore keeps the 42% of peptides whose prediction happened to land.

A per-charge quadratic in m/z predicts it far better. Residual |obs − fit|/obs:

model z=2 p50 / p90 z=3 p50 / p90
library value as is 8.2% / 13.4% (all)
per-charge linear on library value 2.1% / 4.8% 3.5% / 8.6%
per-charge a·mz² + b·mz + c, no library 1.25% / 3.4% 2.2% / 4.9%
same + library term 1.18% / 3.0% 2.2% / 4.8%

Mobility needs two windows, m/z needs one. m/z has a theoretical value; after calibration the residual is instrument precision and one window serves every phase. 1/K0 has no theoretical value: after the fit above, the residual is genuine peptide-to-peptide variation (a prior range, ±4–5% at 3σ), and once a peptide is observed the remaining uncertainty is its own ion cloud. Within-peptide spread around the observed center, measured on 628 confident precursors with per-frame mobility calibration: MAD 0.31% for precursor isotopes, 0.80% for fragments (3σ ≈ 1.4% / 3.6%), identical for raw data and every centroiding config.

Proposed:

  1. Phase 2 fits 1/K0 = a·mz² + b·mz + c per charge on the calibrants, robustly. Pass 1 (and the calibrant query) use the fit ± its residual MAD·3 instead of the library value ± 5%.
  2. Pass 2 window from the within-peptide spread of the calibrants' own fragments, centered on a robust fragment mobility (median or brightest) rather than the intensity-weighted mean. Tightening the current window around the current center collapses (2.4% → 762 IDs, 4.7% → 1809), so the center has to change with the width.
  3. Predictor side (msspeculator): near-zero within-charge spread in predicted 1/K0 is a model problem and deserves its own issue there.

Data and scripts: exploration/2026-09-centroiding, note sections 7–9. Related: #125 clamps the m/z window for the analogous estimator problem on the m/z side; the m/z offset estimator itself (mean over a 50 ppm box) is still to fix.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions