nx_peptide_deconv.nx
buildroot/runtime/nx_peptide_deconv.nx
about
nx_peptide_deconv.nx -- SOTA ANALYTICAL: charge-state DECONVOLUTION. The
inverse of the charge ladder: given raw multiply-charged m/z peaks with NO
known charge, recover the neutral monoisotopic mass and assign each peak its
charge. This is the step that turns an electrospray spectrum -- a forest of
peaks at unknown charges -- into a single mass you can match against a
catalog.
WHY IT IS STATE OF THE ART. A peptide sprays as a charge LADDER; the
instrument reports m/z, not mass, and not charge. Deconvolution is the hard,
central MS problem of inverting that. The classic two-peak solution: if two
ADJACENT peaks are the same molecule at charges z and z+1, then
M = z*(mz_hi - proton) = (z+1)*(mz_lo - proton)
which solves for the integer charge z WITHOUT knowing it in advance, and
then for M. nx_peptide_deconv does exactly this, then VERIFIES the deduced
mass reproduces both peaks -- so a spurious pair is rejected, not trusted.
ANCHORED, NOT ASSERTED. The proton mass is the same anchored constant the
mass stack uses; the algebra is exact. The gate liar-kills it: generate a
KNOWN peptide's real charge ladder, deconvolve it blind, and demand the
EXACT neutral mass back -- and demand an unrelated pair be rejected as
inconsistent. Recovering the input you never told it is the proof.
This closes the loop with nx_supplement_screen: that screens a peak at an
assumed charge; this DEDUCES the charge from the spectrum, so an unknown
"research peptide" spectrum can be reduced to a mass and then identified.
All INTEGER, _q4 = x10^4 Da, proton from nx_peptide.
Grounding (cited; researcher-groundable):
mann_1989_electrospray_charge_deconvolution
fenn_1989_multiple_charging
published_charge_state_mass_deduction
genealogy_id: peptide_chemistry + analytical_sota + liar_killer
dependencies 2 imports · 2 importers
imports: nx_syscalls.nxnx_peptide.nx
imported by: nx_peptide_identify.nxnx_qc_svc.nx
structs
| none |
consts
| 39 | const DECONV_INVALID: i64 = 0 - 1 |
functions
| 48 | func deconv_charge_hi(mz_lo: i64, mz_hi: i64) -> i64 |
| 59 | func deconv_neutral_mass(mz_lo: i64, mz_hi: i64) -> i64 |
| 66 | func deconv_predict_mz(mass_q4: i64, z: i64) -> i64 called by 1: deconv_pair_consistent |
| 73 | func deconv_pair_consistent(mz_lo: i64, mz_hi: i64, tol_q4: i64) -> i64 |
| 90 | func deconv_mass_verified(mz_lo: i64, mz_hi: i64, tol_q4: i64) -> i64 |
| 103 | func deconv_mass_near(a: i64, b: i64, tol_q4: i64) -> i64 called by 1: deconv_support |
| 113 | func deconv_from_list(peaks: *i64, n: i64, tol_q4: i64) -> i64 |
| 131 | func deconv_support(peaks: *i64, n: i64, mass_q4: i64, tol_q4: i64) -> i64 |
| 147 | func deconv_assign_charge(mz_q4: i64, mass_q4: i64) -> i64 |