TL;DR. The hidden test is a Bruker timsTOF at fixed lab-frame collision energies of 20, 40 and 60 eV; one quarter of the spectra are "merged", and the enveda-180 code plus a 600-group numerical test show a merged spectrum is the raw-ion-count sum of the three single-energy scans (re-centroided), so it is dominated by the lower-energy scans and looks like a mid-energy (Orbitrap NCE 30-45) spectrum. The train parquet converts Orbitrap NCE to eV with eV = NCE x (m/z)/500 (charge factor 1), passes through QTOF volts as eV, and leaves ion-trap NCE unconverted; but empirically a timsTOF 20 eV scan matches an Orbitrap NCE 20 scan (median sqrt-cosine 0.82), not the 33 NCE that the formula implies, so every NCE-conditioned model or Orbitrap library must be driven with ~0.65-0.75x the timsTOF lab eV. The forced astrophysics analogy (forward model x instrument response) yields one concrete, fully specified experiment with 2,421 timsTOF/Orbitrap training pairs and a scaffold-split MRR@25 evaluation; it partially holds.
1. How collision energy is set on each platform
1.1 Bruker timsTOF (PASEF)
In dda-PASEF the quadrupole isolates each precursor as it elutes from the TIMS ramp, and the method file maps collision energy to the ion-mobility coordinate 1/K0, not directly to m/z (m/z and 1/K0 are correlated, so this is an indirect mass scaling). Verified settings:
| Application | Collision energy rule | Source |
|---|---|---|
| Proteomics dda-PASEF (community default) | linear in 1/K0: 20 eV at 1/K0 = 0.6 Vs/cm2 -> 59 eV at 1/K0 = 1.6 Vs/cm2 | Wang et al. 2024, Microbiome Res Rep, DOI 10.20517/mrr.2024.21 ("ramped linearly as a function of mobility from 59 eV at 1/k0 = 1.6 Vs/cm2 to 20 eV at 1/k0 = 0.6 Vs/cm2") |
| diaPASEF (same paper) | 20 eV at 1/K0 = 0.85 -> 59 eV at 1/K0 = 1.3 | same |
| Original PASEF paper (Meier et al. 2018, MCP, DOI 10.1074/mcp.TIR118.000900) | stepwise over the TIMS ramp: 52 eV (0-19% of ramp time), 47 (19-38%), 42 (38-57%), 37 (57-76%), 32 eV (rest) | Methods, PMC6283298 |
| Lipidomics dda-PASEF (Vasilopoulou et al. 2020, Nat Commun, DOI 10.1038/s41467-019-14044-x) | "ion mobility-dependent collision energy, linearly increased from 25 to 45 eV in positive mode, and from 35 to 55 eV in negative mode"; isolation +/- 1 Th; 1/K0 0.6-1.95 | PMC6965134 |
| Serum lipidomics "MS/MS stepping" (Monteiro & Buzatto 2026, STAR Protoc, DOI 10.1016/j.xpro.2026.104607) | two stepped scans per PASEF event: pos 22->28 eV (1/K0 0.60) and 28->37 eV (1/K0 2.00); neg 21->33 and 27->39 eV; collision RF 1250/1450 V, transfer time 65/70 us | PMC13251676 |
| enveda-180 / CASMI test | fixed 20, 40, 60 eV (negative mode stored as -20/-40/-60; Bruker sign convention), no 1/K0 interpolation | train/test parquet collision_energy_orig; enveda-180 ms_prepper/reader.py reads CollisionEnergy per precursor straight from the .d; if a ramp had been used the values would be continuous, not three integers |
I could not open the enveda-180 preprint (README cites ChemRxiv DOI 10.26434/chemrxiv.15004319/v1 - the DOI pattern looks non-standard and did not resolve for me; unverified), so isolation width, whether the three energies were separate injections or in-run CE stepping, and the TIMS ramp are open. Bruker's small-molecule default is thus not one number: the Metabolomics "collision energy stepping" idea exists (STAR protocol above) but Enveda chose fixed energies.
1.2 Lab-frame vs centre-of-mass energy
Only the centre-of-mass fraction of the lab energy can be converted to internal energy in one collision: E_com = E_lab x m_gas/(m_gas + m_ion). Bruker QTOF/timsTOF collision cells and Thermo HCD cells both use N2 (Szabo et al. 2021: "The collision gas in both instruments is nitrogen"); Waters QTOFs typically use argon.
| precursor m/z | gas | m_gas/(m_gas+m_ion) | E_com @ 20 eV | @ 40 eV | @ 60 eV | Orbitrap NCE giving the same lab eV (z=1) for 20/40/60 eV |
|---|---|---|---|---|---|---|
| 150 | N2 | 0.157 | 3.15 | 6.29 | 9.44 | 67 / 133 / 200 |
| 300 | N2 | 0.085 | 1.71 | 3.42 | 5.12 | 33 / 67 / 100 |
| 500 | N2 | 0.053 | 1.06 | 2.12 | 3.18 | 20 / 40 / 60 |
| 800 | N2 | 0.034 | 0.68 | 1.35 | 2.03 | 12.5 / 25 / 37.5 |
| 300 | Ar | 0.118 | 2.35 | 4.70 | 7.05 | - |
| 500 | Ar | 0.074 | 1.48 | 2.96 | 4.44 | - |
Single-collision E_com is far below bond energies (3-4 eV); dissociation needs multiple collisions (several in a 10^-2 mbar cell), so the mapping from lab eV to internal energy is instrument-specific (gas pressure, cell length, residence time). This is why Szabo et al. find a slope of 0.92 (R2 = 0.997) between best-matching QTof-CID and Orbitrap-HCD energies for leucine enkephalin ("1 eV increase in collision energy on the Thermo Orbitrap increases the internal energy of the precursor ion slightly more than 1 eV increase on the Bruker QTof"), with HCD needing "a few eV lower" (QTof 20/30/60 eV matched by HCD 18/28/55 eV; peptide example QTof 50 eV ~ HCD 42 eV).
1.3 Thermo normalized collision energy (NCE)
Thermo's PSB104 bulletin defines NCE as a 0-100% scale that "automatically compensates for this mass dependency" because "the collision energy needed to achieve optimum fragmentation efficiency has been shown to follow a linear correlation with m/z". The de facto formula for HCD is eV = NCE x (m/z)/500 x f(z); the charge factors f(2) = 0.9, f(3) = 0.85 appear in Szabo et al. 2021 (their Bruker default-CE equation, "The charge factor equals to 0.9 and 0.85 in the case of doubly and triply charged peptides"); a patent-text variant CE = NCE/100 x (0.2 - z/100) x m/z surfaced in search snippets only (low confidence, not read in the original). What matters for us: the train parquet used exactly eV = NCE x (m/z)/500 - the ratio ev/(NCE x m/z/500) over 966,330 pluskal_ms2 energy values has median 0.9998 (e.g. NCE 15/20/60 at m/z 468.1444 -> 14.0/18.7/56.2 eV).
2. Semantics of collision_energy_ev, collision_energy_orig, collision_energy_orig_units (computed from train.parquet, 2,539,608 rows)
2.1 Crosstab collision_energy_orig_units x ingest_lib
| ingest_lib | eV | NCE | V | unknown | total |
|---|---|---|---|---|---|
| enveda-180 | 1,153,785 | 0 | 0 | 0 | 1,153,785 |
| pluskal_ms2 | 0 | 527,581 | 0 | 0 | 527,581 |
| riken | 147,110 | 158,807 | 17,038 | 24,216 | 347,171 |
| gnps | 0 | 0 | 0 | 220,849 | 220,849 |
| massbank | 41,726 | 39,660 | 18,672 | 1,669 | 101,727 |
| mona | 16,501 | 51,234 | 9,821 | 14,860 | 92,416 |
| spectraverse | 1,248 | 2,619 | 0 | 47,066 | 50,933 |
| msdial | 7,354 | 9,165 | 11,025 | 13,221 | 40,765 |
| drug_plus | 0 | 0 | 0 | 2,545 | 2,545 |
| enveda-np-examples | 1,184 | 0 | 0 | 0 | 1,184 |
| masaryk | 0 | 0 | 0 | 652 | 652 |
All 220,849 GNPS rows, all spectraverse "unknown" rows (47,075) and all drug_plus/masaryk rows have collision_energy_ev = None (319,865 rows with orig None; plus free-text orig such as "15, 30, 45, 60, 70 or 90 (nominal)" [416], "30.0,50.0,70.0" [304], "3 kV" [175] that were not parsed).
2.2 How orig becomes ev
| units | example orig -> ev | rule inferred |
|---|---|---|
| eV | "40" -> [40.0]; "-60,-40,-20" -> [20.0, 40.0, 60.0]; "10 eV" -> [10.0] | abs value, split on comma, sorted ascending |
| V | "20 V" -> [20.0]; "Ramp 5-60 V" -> [5.0, 60.0] (1,397 rows); "-10, -35, -60V" -> [10.0, 35.0, 60.0] | volts passed through as eV (z=1); a ramp is stored as a 2-element list indistinguishable from a 2-energy merge |
| NCE (Orbitrap/QFT/ITFT) | "[20.0]" at m/z 468.14 -> [18.7]; "HCD (NCE 20-30-40%)" at m/z 285.08 -> [11.4, 17.1, 22.8]; "30%" at m/z 817.64 -> [49.1]; "65% (nominal)" at m/z 428.23 -> [55.7] | converted: ev = NCE x (m/z)/500, charge factor 1 |
| NCE on ion traps ("35" with instrument "Linear Ion Trap"/"QIT"/"LC-ESI-IT") | ev = None: riken 6,334; msdial 3,111 + 142 + 71; mona 660 | not converted (resonance-excitation NCE is a different scale) - 10,318 NCE rows have no eV |
Order gotcha: for pluskal_ms2 multi-energy rows the orig list keeps acquisition order ("[20.0, 15.0, 60.0, 40.0]", 16,762 rows; "[20.0, 30.0, 60.0, 40.0]", 20,978 rows) while collision_energy_ev is sorted ascending, so position i of orig does not correspond to position i of ev; one row has 3 orig values but 2 ev values. pluskal_ms2 multi-CE rows: 2 values 3,548; 3 values 82,949; 4 values 83,611; 5 values 4,598; 6 values 16 (these are MSnLib-style merged/stepped Orbitrap ID-X spectra).
2.3 enveda-180 (1,153,785 rows, 182,941 InChIKey14; 887,895 positive / 265,890 negative)
collision_energy_ev |
rows | share | num_peaks median (p25-p75) | mean |
|---|---|---|---|---|
| [40.0] | 327,468 | 28.4% | 132 (38-299) | 208 |
| [20.0, 40.0, 60.0] | 304,780 | 26.4% | 258 (66-548) | 408 |
| [60.0] | 299,465 | 26.0% | 126 (40-272) | 193 |
| [20.0] | 220,130 | 19.1% | 88 (26-204) | 154 |
| [20.0, 40.0] | 1,776 | 0.15% | 9 (6-13) | 12 |
| [20.0, 60.0] | 116 | 0.01% | 6 | 7 |
| [40.0, 60.0] | 50 | <0.01% | 5 | 6 |
Merged rows (>= 2 energies) = 306,722 = 26.6%; the merged three-energy spectrum has roughly 2x the peaks of any single-energy spectrum (258 vs 88-132), and the two-energy merges are tiny (median 9 peaks) - almost certainly cases where one scan failed QC; the test set contains none of them. Grouping by (InChIKey14, adduct): 350,115 groups; 186,392 (53.2%) have all four spectra (20, 40, 60, merged); 73,755 have merged + 40 + 60 (no 20 eV single); 31,590 have only 40 + 60; 7,749 have the merged spectrum only; 46,578 have singles only. Original strings: "40" 244,197, "20,40,60" 240,127, "60" 229,217, "20" 173,189, "-40" 83,271, "-60" 70,248, "-60,-40,-20" 64,653, "-20" 46,941, "20,40" 1,037, "-40,-20" 739.
2.4 test.parquet (1,213 rows, all instrument_type = timsTOF, units always eV)
collision_energy_ev |
rows | orig strings |
|---|---|---|
| [60.0] | 363 | "60" 289 + "-60" 74 |
| [40.0] | 362 | "40" 281 + "-40" 81 |
| [20.0, 40.0, 60.0] | 298 (24.6%) | "20,40,60" 257 + "-60,-40,-20" 41 |
| [20.0] | 190 | "20" 160 + "-20" 30 |
The visible test is 226 negative-mode rows (18.6%) and 987 positive. No 2-energy merges, no other energies.
2.5 What a merged enveda-180 spectrum physically is (code + numerical test)
Code (enveda/enveda-180, data_processing/extraction/extract.py lines ~330-452 and utils.py): for each adduct the m0-isotope MS/MS microscans of all precursor-selection events across >= 2 distinct collision energies are concatenated and centroided with centroid_tof_signal_df (consecutive TOF indices with gap < 2 are one peak; make_peak_centroid returns the intensity-weighted mean m/z and the sum of intensity); the record gets collision_energies = sorted(unique), mean_collision_energy = mean (= 40 for 20/40/60), collision_energies_merged = True, num_merged_microscans. Single-energy records are built the same way per (adduct, msms_id, collision_energy). MS1 intensity threshold 50 counts and "stray signal" filters (ms_prepper/filters.py: MIN_MS2_TOF_COUNT = 5) are applied upstream; there is no relative-intensity cutoff (minimum relative intensity in merged spectra: median 4.2e-5).
Numerical test on 600 random (InChIKey14, adduct) groups having all four spectra, reconstructing the merged spectrum from the three singles after de-normalising with base_peak_intensity (raw counts): the raw-count sum rule is the best fit in 595/600 (median per-peak MAE 8e-5 after re-normalisation; p90 1.2e-3), vs raw max 2, normalised sum 1, none 2. The merged peak set is a subset of the union of the singles in 334/400 (exact union only 10/400): peaks present in a single but absent from the merged spectrum have median relative intensity 5.9e-4 (p90 0.008, p99 0.08) - faint peaks are lost or re-clustered when the pooled TOF profiles are re-centroided. Base-peak raw counts per energy are very unequal: examples b20:b40:b60 = 399,341:341,591:66,697 and 130,526:23,809:3,704 - so the merged spectrum is a count-weighted sum dominated by the 20 and 40 eV scans. Consequence (Section 4 table): merged vs its own 40 eV scan cosine 0.874, vs 20 eV 0.858, vs 60 eV 0.693.
3. Merged multi-CE spectra across ecosystems
| Scheme | What is combined | Intensity rule | Source |
|---|---|---|---|
| enveda-180 / CASMI test "[20,40,60]" | three separate PASEF MS/MS events of one precursor | sum of raw counts, re-centroided (count-weighted, not equal-weighted) | code + test above |
| Thermo stepped NCE (Orbitrap) | one scan: "the precursor ion is fragmented at a low, medium, and high collisional energy, the fragments from these three energies are combined and are detected simultaneously" | hardware sum of nominally equal ion-population fractions; one scan, one TIC | Diedrich, Pinto & Yates 2013, JASMS, DOI 10.1007/s13361-013-0709-7 (NCE 20/25/30; 30 +/- 20%) |
| MassBank "merged spectrum" | ESI-MS2 of the same compound "under different collision-induced dissociation conditions" | not specified in abstract; "improved the precision of the identification ... by 21-23% at a similarity score of 0.6" | Horai et al. 2010, J Mass Spectrom, DOI 10.1002/jms.1777 |
| mzmine / MSnLib (Pluskal lab; = pluskal_ms2 in train) | SAME_ENERGY: repeated scans at one energy, "maximum signal height for each fragment signal"; ALL_ENERGIES: merge across the energies (uses the same-energy merges); PSEUDO_MS2: whole MSn tree | max for same-energy; cross-energy aggregation not stated in the record | Zenodo 11163380; Brungs et al. 2025, Nat Methods, DOI 10.1038/s41592-025-02813-0 (Orbitrap ID-X, MS2 at NCE 20 and 60, MS3 at 20/40/60) |
| ICEBERG / SCARF training data | "we first merge all scans at various collision energies, combine peaks that are within 10^-4 m/z tolerance ... renormalize ... by dividing by the maximum observed intensity, and take the square-root ... keep the top 50 peaks with intensity above 0.003" | sum vs max not stated in the paper | Goldman et al., arXiv 2304.13136 |
| MassSpecGym | no merging; each spectrum kept with its NCE (53% of entries have NCE; 98% Orbitrap or QTOF) | n/a | arXiv 2410.23326 |
| NIST20 (MassFormer/FraGNNet training) | separate spectra per NCE, ~11 energies per molecule | n/a | arXiv 2111.04824 |
| MS-DIAL | search snippets claim MS-DIAL can merge MS2 across or within collision energies; unverified (docs not read) | - | - |
Enveda publications: the Bruker "Customer Insight" page says Enveda runs a timsTOF Pro 2 and relies on "clean MS/MS fragmentation patterns and ion mobility data" plus CCS, with no energies given; the PRISM foundation-model announcement (1.2 B spectra, spectral masking) gives no acquisition detail. Nothing published by Enveda that I could open states the merge rule - the code is the source of truth.
4. Head-to-head cross-platform comparisons (numbers)
Hoang et al. 2024, Anal Chem, DOI 10.1021/acs.analchem.3c05576 (PMC11007677). >100 standards on Agilent 6520/6546 QTOF, Bruker Impact II QTOF, Waters Synapt G2-Si, SCIEX TripleTOF 5600 and Thermo Q Exactive Plus at 0/10/20/40 eV (Thermo no 0 eV). Cross-platform cosine identification succeeded for 24 standards at 10 eV, 60 at 20 eV, 38 at 40 eV, <50 at 0 eV; examples at 20 eV: Z-FA-FMK 0.928-1.000, sphingosine 0.990-0.999, caffeine 0.982-0.994; "the average cosine scores did not necessarily increase with a greater number of fragments ... plateaued or slightly decreased". Recommendation: standardise at 20 eV. No timsTOF in the study.
Szabo, Schlosser, Vekey, Drahos, Revesz 2021, J Mass Spectrom 56:e4693, DOI 10.1002/jms.4693. Bruker Maxis II QTof CID vs Q Exactive Focus HCD (both N2): best-match energy pairs linear with slope 0.92 (R2 0.997); HCD a few eV lower; CID spectra contain 60% more b ions; survival yield 84-85% at the Orbitrap minimum (10 eV) ~ QTof 12 eV, QTof 98% at 6 eV and 99.4% at 0 eV; bimodal score-vs-energy curves for 60% of peptides on QTof vs 20% on Orbitrap.
Li et al. 2021, Nat Methods, DOI 10.1038/s41592-021-01331-z. Entropy similarity AUC 0.958 on 434,287 NIST20 spectra; "acceptable AUCs were even obtained when searching QTOF spectra against orbital ion trap MS/MS libraries or vice versa"; FDR < 10% at entropy similarity 0.75 on 37,299 natural-product spectra; gut-metabolome 770 compounds: 5.8% vs 9.6% FDR; median spectral entropy rises from 0.7-0.8 (< 15 eV) to 1.8-2.5 (> 45 eV).
No published small-molecule timsTOF-vs-Orbitrap MS2 similarity study was found (TIMS-Bench, Rajkumar et al. 2026, DOI 10.64898/2026.05.23.724673, benchmarks processing tools, not cross-instrument similarity). So I measured it in train.parquet: same InChIKey14 and same adduct ([M+H]+ or [M-H]-), precursor m/z within 0.02, precursor region (> m/z_p - 1) removed, sqrt-intensity cosine, 0.01 Da match tolerance (2,421 timsTOF/Orbitrap pairs; Orbitrap = pluskal_ms2, i.e. MSnLib Orbitrap ID-X flow injection; only 4 timsTOF/QTOF pairs qualified, so the QTOF column is from 52 spectra at 6 eV and is weak):
| timsTOF spectrum | vs Orbitrap NCE 15 | NCE 20 | NCE 30 | NCE 45 | NCE 60 | vs own merged | vs tims 40 | vs tims 60 |
|---|---|---|---|---|---|---|---|---|
| 20 eV | 0.807 (n=251) | 0.824 (1,109) | 0.759 (854) | - | 0.317 (1,119) | 0.858 (701) | 0.631 | 0.285 |
| 40 eV | 0.338 | 0.456 (1,769) | 0.614 (1,209) | 0.698 (325) | 0.615 (1,812) | 0.874 | - | 0.722 |
| 60 eV | 0.150 | 0.189 (1,716) | 0.301 | 0.463 | 0.609 (1,762) | 0.693 | - | - |
| merged 20/40/60 | 0.606 | 0.614 (1,804) | 0.676 (1,226) | 0.693 (326) | 0.552 (1,847) | - | - | - |
(medians; fraction >= 0.7: tims20/NCE20 0.68, tims40/NCE45 0.50, tims60/NCE60 0.34, merged/NCE45 0.48.) Read-outs: (i) a timsTOF 20 eV scan is an Orbitrap NCE 15-20 scan, i.e. 9-14 eV HCD at m/z 300-350 - the "same lab eV" assumption (NCE 33) is wrong by ~0.65x; timsTOF 40 eV ~ NCE 45 (~30 eV HCD at m/z 330, factor ~0.75); timsTOF 60 eV ~ NCE >= 60 (~40 eV HCD, factor <= 0.66, best match probably above the library's energy range). (ii) The merged spectrum behaves like a single mid-energy scan (best vs NCE 30-45) and is very close to its own 40 eV scan (0.874). (iii) Same-molecule, same-instrument, different-energy similarity (20 vs 60 eV: 0.285) is worse than cross-instrument at matched energy - energy mismatch, not vendor, is the dominant nuisance.
5. CID physics that is predictable with energy
- Survival-yield / breakdown curves. Precursor survival vs E_com is sigmoidal; CE50 (energy at 50% survival) is "easily determined, quantitative, highly reproducible, and could discriminate between structural and even positional isomers", "independent of cone potential and orthogonal to compound mass" over 54 compounds on a Waters QTOF (Kertesz, Hall, Hill, Grant 2009, JASMS, DOI 10.1016/j.jasms.2009.06.002). Over large mass ranges the energy for 50% fragmentation is linear in precursor mass, R2 > 0.996 (Li-PEG to 4.5 kDa) and R2 = 0.991 for multiply charged species across instruments - the degrees-of-freedom effect, consistent with fast energy randomisation/RRKM (Memboeuf et al. 2010, Anal Chem, DOI 10.1021/ac902463q). Converting CE50 to Ecom50 removes most of this: "The Ecom50 range was only 13.5% of the CE50 range" (Hall et al. 2014, Curr Comput Aided Drug Des, DOI 10.2174/1573409911666141231113516); Ecom50 is predictable from structure with r2 0.89-0.94 on 52 compounds (Hall et al. 2012, JCIM, DOI 10.1021/ci300092s) and was used by MolFind to remove ~28% of PubChem candidates per mass bin (Menikarachchi et al. 2012, Anal Chem, DOI 10.1021/ac302048x).
- Instrument transmission bias. RF-only ion-guide mass discrimination distorts relative abundances: "compounds that generate major product ions with m/z values < 150 have peak intensities that deviate substantially from their actual abundance" (Dubey et al. 2015, Metabolomics, DOI 10.1007/s11306-014-0732-0, PMC4422648; ten compounds 46-854 Da, oa-TOF).
- Energy-ordered pathways. Low E_com favours the lowest-barrier, entropically cheap channels: small-neutral losses (H2O, NH3, CO, CO2, HCOOH, CH3OH), glycosidic cleavages (-162/-146/-132 Da), retro-Diels-Alder and amide cleavages; these product ions are themselves intermediates and are consumed sequentially at higher E_com into aromatic/heteroaromatic core ions and low-mass "fingerprint" ions. In peptides this is the b-ion (low-E optimum) vs y-ion split that produces bimodal score-vs-energy curves (Szabo et al. 2021). Which specific neutral loss dominates is molecule-specific (that is what CFM-ID/ICEBERG learn); what is generic is the monotone shift of the intensity-weighted fragment m/z toward lower values and the depletion of the precursor.
Measured on enveda-180 single-energy [M+H]+ / [M-H]- spectra (300,000-row random sample; precursor = peaks within 10 ppm of precursor m/z; TIC = sum of all normalised intensities):
| adduct | m/z bin | CE (eV) | n | median precursor / TIC | precursor absent (<0.1% TIC) | precursor is base peak | median peaks | frag TIC below m/z 150 | intensity-weighted fragment m/z / precursor m/z |
|---|---|---|---|---|---|---|---|---|---|
| [M+H]+ | 250-350 | 20 | 29,571 | 0.113 | 3.1% | 13.6% | 173 | 0.24 | 0.55 |
| [M+H]+ | 250-350 | 40 | 48,081 | 0.000 | 72.4% | 0.7% | 246 | 0.68 | 0.44 |
| [M+H]+ | 250-350 | 60 | 47,518 | 0.000 | 99.3% | 0.0% | 206 | 0.94 | 0.37 |
| [M+H]+ | 250-350 | merged | 45,477 | 0.111 | 3.0% | 24.6% | 441 | 0.54 | 0.47 |
| [M+H]+ | 350-450 | 20 | 8,215 | 0.128 | 2.9% | 14.8% | 192 | 0.07 | 0.54 |
| [M+H]+ | 350-450 | 40 | 15,833 | 0.0002 | 62.6% | 1.2% | 312 | 0.37 | 0.44 |
| [M+H]+ | 350-450 | 60 | 15,889 | 0.000 | 98.6% | 0.0% | 296 | 0.76 | 0.35 |
| [M+H]+ | 350-450 | merged | 15,495 | 0.138 | 2.8% | 29.1% | 557 | 0.38 | 0.45 |
| [M-H]- | 250-350 | 20 | 8,952 | 0.148 | 7.9% | 15.6% | 60 | 0.13 | 0.60 |
| [M-H]- | 250-350 | 40 | 17,395 | 0.000 | 60.7% | 1.5% | 53 | 0.59 | 0.47 |
| [M-H]- | 250-350 | 60 | 14,732 | 0.000 | 98.2% | 0.0% | 37 | 0.90 | 0.39 |
| [M-H]- | 350-450 | 20 | 2,252 | 0.169 | 8.3% | 17.5% | 65 | 0.04 | 0.59 |
| [M-H]- | 350-450 | 40 | 6,068 | 0.0014 | 48.6% | 3.9% | 71 | 0.28 | 0.47 |
| [M-H]- | 350-450 | 60 | 5,537 | 0.000 | 95.9% | 0.0% | 52 | 0.69 | 0.37 |
So for 300-500 Da protonated molecules on this timsTOF: at 20 eV the precursor survives in ~97% of spectra and carries ~11-13% of the TIC (base peak in 14%); at 40 eV it is gone in 63-72% (survival is the useful discriminator here - the mass dependence 72% -> 63% is the DOF effect); at 60 eV it is gone in 99%, and 76-94% of the fragment TIC is below m/z 150. Negative mode survives slightly better. The merged spectrum inherits the 20 eV precursor (base peak in 25-29% of merged spectra), which inflates cosine against any spectrum containing a precursor peak.
6. Collision-energy handling in in-silico fragmenters
| Tool | CE input | Training energies / instrument | How to drive it for a timsTOF 20/40/60 spectrum |
|---|---|---|---|
| CFM-ID 4.0 (Wang et al. 2021, Anal Chem, DOI 10.1021/acs.analchem.1c01465; web server NAR 2022, DOI 10.1093/nar/gkac383, PMC9252813) | three discrete models: 10, 20, 40 eV (ESI-QTOF CID) | QTOF CID only; HMDB/NIST20 validation: 401 [M+H]+ and 237 [M-H]- compounds at 10/20/40 eV; CASMI-2016 Cat-3: 162/204 Orbitrap spectra identified; "matching the experimental collision energy with CFM-ID's prediction energy produced the best results, even for HCD-Orbitrap" (NCE mapped to the nearest CID level) | by the Section 4 calibration, timsTOF 20 eV ~ CFM 10-20, 40 eV ~ CFM 20-40, 60 eV ~ CFM 40; for the merged spectrum compare to the count-weighted sum of the three predictions (weights from Section 2.5, e.g. 0.5/0.4/0.1) or to all three and take the max |
| ICEBERG (Goldman et al. 2024, arXiv 2304.13136; code samgoldman97/ms-pred) | v1: none - trained on spectra merged across all energies, "excluding collision energies and instrument types as extensions for future work"; ICEBERG 2.0+ "use collision energy as an input" (ms-pred README; NIST is "the only database where all spectra have collision energy annotations") | NPLIB1 (GNPS, mostly Orbitrap/QTOF, mean MW 413) and NIST20 (mean MW 317); cosine 0.63 vs 0.57 (SCARF) on NPLIB1, 0.727 vs 0.726 on NIST20; CASMI-2022 PubChem retrieval top-1 12.9% | v1: feed the merged spectrum directly - it is the same object ICEBERG was trained on (merged over energies, sqrt, top-50 > 0.003); v2: pass an NCE-equivalent (40 eV merged -> ~NCE 45) |
| SCARF (Goldman et al.) | none | same merged data | as ICEBERG v1 |
| MassFormer (Young et al., arXiv 2111.04824) | NCE is an input; NIST20 ~11 energies per molecule; "the model can recover prior knowledge about the effect of collision energy" | NIST20 Orbitrap HCD | predict at NCE 20 / 45 / 60+ (not at NCE = eV x 500/(m/z), which over-estimates by ~1.4x) and sum with count weights |
| FraGNNet (Young et al. 2024, arXiv 2404.02360) | "Collision Energy Embedding" in fragment features | NIST20 | same as MassFormer |
| MIST / fingerprint models (Goldman et al.) | none | merged spectra | merged spectrum directly |
7. Forced analogy: stellar spectroscopy (forward model x instrument response)
The analogy. A stellar classifier never compares an observed spectrum to a raw synthetic one; it computes F_obs(lambda) = F_model(T_eff, log g, [Fe/H]) * LSF x throughput(lambda) + noise, and fits with chi2 using a per-pixel noise model. The forward model is physics; the instrument response R (line-spread function, wavelength solution, throughput) is calibrated once per instrument from standard stars and applied to every template. Translated: a library or in-silico spectrum S_lib(f; E) is the "model atmosphere" output under condition E; a timsTOF-specific response R maps it into timsTOF-merged intensity space: S_tims(f) ~ R[S_lib(.; E_1..E_k); m_p, z, adduct]. Cosine on raw templates is the equivalent of comparing an unconvolved model to data - every "standard star" in Section 4 says the mismatch is large and systematic.
Concrete experiment (all ingredients exist in train.parquet).
- Pairs. 2,523 InChIKey14 have both timsTOF and Orbitrap spectra (2,499 via pluskal_ms2, 1,040 also in GNPS, 253 riken, 238 mona, 210 massbank; 2,288 of them are enveda-180 molecules and 250 are enveda-np-examples, which matter because they are COCONUT-like); 3,468 (InChIKey14, adduct) timsTOF/Orbitrap pairs (2,198 [M+H]+, 996 [M-H]-, 167 [M+FA-H]-, 47 [M+Na]+) covering 10,939 timsTOF and 40,681 Orbitrap spectra; only 412 timsTOF/QTOF pairs (14,681 QTOF spectra). Split by Murcko scaffold of the InChIKey14, never by spectrum.
- Response model R, three nested forms. (a) Energy-axis map only: library energies re-indexed by the Section 4 calibration (timsTOF eV -> NCE 20/45/60), then count-weighted sum w = (0.5, 0.4, 0.1) learned by non-negative least squares on the pairs - zero parameters beyond three weights and one scale factor. (b) Peak-wise transfer: for each fragment f present in any library energy, predict its timsTOF relative intensity from features [log I_lib(f) at each available NCE, m_f/m_p, m_f, m_p, adduct, polarity, is-precursor, is-neutral-loss-of-precursor] with a gradient-boosted regressor (also predicts presence/absence, i.e. the Dubey-type low-m/z transmission term). (c) Spectrum-conditioned: a small transformer taking the set of (m_f, I_lib at 3-5 NCEs) tokens and emitting timsTOF intensities, trained with a cosine/entropy loss - this is the "learned LSF".
- Evaluation. Primary: cosine and entropy similarity of R(S_lib) to the real timsTOF merged spectrum on held-out scaffolds, versus the raw library spectrum (baseline from Section 4: median 0.55-0.69 depending on NCE). Decisive: a retrieval test that mimics the hidden test - for each held-out timsTOF merged spectrum, candidates = COCONUT + train structures within 10 ppm neutral mass, score each candidate by similarity between the timsTOF spectrum and R applied to the candidate's library spectrum (if any) or CFM-ID/ICEBERG prediction, report MRR@25 with vs without R. Secondary: apply R to CFM-ID 10/20/40 eV and ICEBERG predictions for the 250 enveda-np-examples molecules (natural-product chemistry, timsTOF) - the closest proxy to the hidden test.
- Expected effect size. Form (a) alone should lift the merged-vs-Orbitrap median similarity from ~0.61 (NCE 20) toward the matched-energy ceiling (~0.70-0.82); if MRR@25 gains are < 0.01 on a timsTOF held-out set the analogy is not worth more effort.
Where it holds, partially holds, and breaks.
- Holds: the instrument response has large, systematic, learnable components - energy-axis offset (slope ~0.65-0.75 timsTOF-eV -> HCD-eV; Szabo's 0.92 QTof -> HCD), the count-weighted merge, low-m/z transmission (Dubey), and a precursor term. A response model is also exactly what Thermo's own NCE and Bruker's 1/K0 ramp are: crude R's.
- Partially holds: unlike an LSF, R is not shift-invariant or linear - the same lab energy deposits different internal energy in different molecules (DOF effect, R2 > 0.996 mass dependence) and ion-population statistics differ (Szabo: Orbitrap "larger number of collisions" and C-trap residence time; timsTOF adds TIMS accumulation and quad isolation of 2-3 Th). So R must take (m_p, adduct) and, in form (b)/(c), the fragment identity.
- Breaks: CID is not LTE - there is no temperature; the internal-energy distribution after multiple collisions is broad and kinetic, and fragment intensities are RRKM rate x observation-window products with kinetic shifts. A spectrum at one energy is not a "convolved" version of another; sequential fragmentation makes intermediate ions appear and disappear non-monotonically (b-ion vs y-ion bimodality). Hence R cannot be calibrated from "standard stars" and applied blindly: it is molecule-dependent, and the honest implementation is a learned conditional map (form c), i.e. the analogy collapses into "train a spectrum-to-spectrum translator", with the physics supplying the inductive biases (energy map, count weights, precursor survival, low-m/z bias). The chi2-with-noise-model half of the analogy does transfer cleanly:
base_peak_intensityx normalised intensity recovers raw counts, so a Poisson-weighted similarity (down-weight peaks with < ~50 counts) is a free, physically justified improvement over cosine.
8. Gotchas / what could fool us
- "eV" is not a common currency. Train stores Orbitrap NCE converted with (m/z)/500 and QTOF volts verbatim; empirically a timsTOF 20 eV spectrum matches Orbitrap NCE 20 (0.82) and only 0.32 vs NCE 60 - but the converted column says the NCE-20 spectrum of a 330 Da molecule is "13 eV" and the NCE-60 one "40 eV". Treating
collision_energy_evas comparable acrossingest_libwill teach a model the wrong energy axis. - Sorted
evvs unsortedorigin pluskal_ms2 multi-energy rows: positional alignment is lost (and one row has mismatched lengths). - Ramps masquerade as merges: "Ramp 5-60 V" -> [5.0, 60.0] (1,397 rows), "Ramp 20%-70% (nominal)" similar; a 2-element list is not necessarily two scans.
- 10,318 ion-trap NCE rows have
ev = None, and 319,865 rows (all GNPS) have no energy at all - any CE feature must handle missingness explicitly, and missingness is library-identifying (GNPS/spectraverse/drug_plus). - The merged spectrum is count-weighted, so it is effectively a 20-40 eV spectrum with a 60 eV tail; it is not the equal-thirds Thermo stepped-NCE object, not a max-merge (mzmine SAME_ENERGY), and not a normalised average. Models trained on other "merged" conventions see a different object.
- Merged num_peaks ~ 2x single (258 vs 88-132; p75 548), with many peaks < 1e-3 relative intensity; peak-count-sensitive scores change (Hoang: cosine plateaus/decreases with more fragments). Top-N truncation and the 0.003 cutoff used by ICEBERG change what a "merged" spectrum is.
- The precursor survives at 20 eV (and therefore in every merged spectrum): base peak in 14% of 20 eV and 25-29% of merged [M+H]+ spectra. Any similarity that includes the precursor peak is inflated for every candidate with the right mass - strip the precursor and its isotopes (> m_p - 1.0) before scoring, as done in Section 4.
- Instrument type is a chemistry label in train: all 1,154,969 timsTOF rows come from enveda-180 (Enamine REAL drug-like synthetics) and enveda-np-examples; a model can learn "timsTOF => Enamine-like" and then meet natural products on timsTOF in the hidden test. Validate on enveda-np-examples (1,184 rows, 99.6% in COCONUT) and on the 2,288 cross-instrument molecules, not on random enveda-180 rows.
- Visible test rows are verbatim enveda-180 rows - any local score on them is leakage; also hold out by InChIKey14 and by CE pattern so the 20/40/60/merged quartet of one molecule never spans the split.
- [2M+H]+ / [2M+Na]+ in positive mode dissociate to monomer ions at 20 eV; mass-binned survival statistics computed over all adducts show "72% precursor absent at 20 eV for m/z 500-700" purely from dimers (I made this mistake before restricting to [M+H]+/[M-H]-).
- Two-energy merges in train (1,942 rows) are degenerate (median 5-9 peaks) and absent from test - drop them from training or they teach "merged = tiny".
- NCE equivalents of timsTOF 60 eV exceed typical library energies: for a 300 Da ion, 60 eV lab is NCE 100 by formula and ~NCE 60-70 by the empirical calibration; NIST20/MSnLib rarely go that high, so 60 eV singles are the hardest to match against libraries and the merged spectrum's 60 eV component is largely unmatched.
- The enveda-180 preprint DOI in the README did not resolve for me; acquisition details (isolation width, microscans, separate injections vs CE stepping) are unverified - treat any claim about them as low confidence.
9. Implications for the challenge
- Calibrate the energy axis before any library or in-silico comparison: use timsTOF 20 eV ~ NCE 15-20, 40 eV ~ NCE 45, 60 eV ~ NCE >= 60 (Section 4), i.e. NCE_equiv ~ 0.65-0.75 x eV x 500/(m/z) for z = 1; feed MassFormer/FraGNNet/ICEBERG-2 these NCEs, and CFM-ID 10-20 / 20-40 / 40 eV.
- Synthesise the merged object exactly: for any candidate spectrum set (predicted or library), build the count-weighted sum (start with weights 0.5/0.4/0.1 from the base-peak ratios, then fit by NNLS on the 186,392 all-four groups), re-normalise to base peak, drop peaks < 1e-3; compare merged test spectra to that, and single-energy test spectra to the matched energy.
- Train on singles, not only on merged: 73% of train rows and 75% of test rows are single-energy; a spectrum-to-fingerprint model should take the CE pattern as a conditioning token (20 / 40 / 60 / merged) and the model can be made invariant by augmenting - synthesise merged spectra from the triplets and single spectra from merged minus the others where available.
- Strip precursor and isotopes, and use Poisson-weighted similarity: recover counts with
base_peak_intensity; weight peaks by sqrt(count) and ignore peaks < ~50 counts; evaluate entropy similarity (Li 2021) in addition to cosine. - Use precursor survival and the intensity-weighted fragment-m/z ratio as cheap, energy-explicit features: at 40 eV, survival (present in 28-37% of [M+H]+ spectra at 250-450 Da) carries Ecom50-type stability information that discriminates isomers (Kertesz 2009); a predicted Ecom50 (Hall 2012 QSAR, r2 ~0.9) is a candidate-ranking feature orthogonal to fingerprints.
- Run the response-model experiment of Section 7 with form (a) first (one afternoon: energy map + three weights), measure MRR@25 on a scaffold-held-out timsTOF set with a COCONUT +/- 10 ppm pool; proceed to forms (b)/(c) only if the gain is >= 0.01.
- For CFM-ID/ICEBERG candidate scoring on the hidden test, score each candidate against each single-energy spectrum at its matched prediction energy and combine per molecule (median 3 spectra per molecule); do not score only the merged spectrum.
- Build the local validation set from enveda-np-examples (1,184 rows) plus the 2,288 cross-instrument enveda-180 molecules, scaffold-split, with the hidden-test CE mix (19/28/26/27% for 20/40/60/merged in train; 16/30/30/25% in visible test).
10. Open questions
- What exactly did Enveda acquire: isolation width, TIMS ramp range, number of microscans per energy, separate injections per CE vs in-run stepping, and whether the hidden test used the identical pipeline (the merge rule is inferred from the public code and a 600-group fit, not from a statement).
- Does the enveda-180 preprint (ChemRxiv DOI as cited in the README) give a per-energy QC filter that explains the 73,755 groups lacking a 20 eV single scan?
- Energy range of MSnLib/NIST20 Orbitrap spectra above NCE 60: is a timsTOF 60 eV scan ever matchable to a library energy?
- Does ICEBERG 2.0 accept an arbitrary NCE, and what did it see for merged training spectra?
- Is the Enveda PRISM model (1.2 B spectra) trained on merged or single-energy timsTOF spectra? Unknown; nothing published.
- Would a Poisson-weighted / count-aware similarity beat sqrt-cosine on the 2,421 cross-instrument pairs? (One-hour test with the tables in the JSON file.)
Sources
- Train/test parquet analyses:
C:\Temp\casmi26\data\train.parquet(2,539,608 rows) andtest.parquet(1,213 rows), pyarrow 25; scripts in the session scratchpad (ce_analysis.py...ce_analysis5.py); all tables also incid_fragmentation_physics_collision_energy.json. - enveda/enveda-180 GitHub repository (README;
data_processing/extraction/extract.py,utils.py,centroid.py;ms_prepper/reader.py,filters.py), https://github.com/enveda/enveda-180 (cloned 2026-10-07); README cites Krettler et al. 2026 ChemRxiv DOI 10.26434/chemrxiv.15004319/v1 (not resolved - unverified). - Enveda GitHub organisation listing https://github.com/orgs/enveda/repositories; Bruker "Customer Insight Enveda" https://www.bruker.com/en/landingpages/bdal/customer-insight-enveda.html; TIMS-Bench README (Rajkumar et al. 2026, DOI 10.64898/2026.05.23.724673).
- Wang A. et al. 2024, Microbiome Research Reports, DOI 10.20517/mrr.2024.21 (PMC11480776).
- Meier F. et al. 2018, Mol Cell Proteomics, DOI 10.1074/mcp.TIR118.000900 (PMC6283298).
- Vasilopoulou C.G. et al. 2020, Nat Commun, DOI 10.1038/s41467-019-14044-x (PMC6965134).
- Monteiro F.S., Buzatto A.Z. 2026, STAR Protocols, DOI 10.1016/j.xpro.2026.104607 (PMC13251676).
- Thermo Fisher PSB104 "Normalized Collision Energy Technology", https://documents.thermofisher.com/TFS-Assets/CMD/Warranties/PSB104-Normalized-Collision-Energy-Technology-EN.pdf.
- Szabo D., Schlosser G., Vekey K., Drahos L., Revesz A. 2021, J Mass Spectrom 56:e4693, DOI 10.1002/jms.4693 (author PDF at pak.elte.hu).
- Hoang C. et al. 2024, Anal Chem, DOI 10.1021/acs.analchem.3c05576 (PMID 38529642, PMC11007677).
- Li Y. et al. 2021, Nat Methods, DOI 10.1038/s41592-021-01331-z (PMC11492813).
- Diedrich J.K., Pinto A.F.M., Yates J.R. 2013, J Am Soc Mass Spectrom, DOI 10.1007/s13361-013-0709-7 (PMC3815594).
- Horai H. et al. 2010, J Mass Spectrom, DOI 10.1002/jms.1777 (Europe PMC record).
- Brungs C. et al. 2025, Nat Methods, DOI 10.1038/s41592-025-02813-0 (PMC12510872); MSnLib Zenodo record 11163380.
- Goldman S. et al., ICEBERG, arXiv 2304.13136 (PDF); samgoldman97/ms-pred README.
- Bushuiev R. et al., MassSpecGym, arXiv 2410.23326 (HTML v3).
- Young A. et al., MassFormer, arXiv 2111.04824; Young A. et al., FraGNNet, arXiv 2404.02360 (HTML v2).
- Wang F. et al. 2022, CFM-ID 4.0 web server, Nucleic Acids Res, DOI 10.1093/nar/gkac383 (PMC9252813); Wang F. et al. 2021, Anal Chem, DOI 10.1021/acs.analchem.1c01465 (cited via the NAR paper; not opened directly).
- Kertesz T.M., Hall L.H., Hill D.W., Grant D.F. 2009, J Am Soc Mass Spectrom, DOI 10.1016/j.jasms.2009.06.002.
- Memboeuf A. et al. 2010, Anal Chem, DOI 10.1021/ac902463q.
- Hall L.M. et al. 2012, J Chem Inf Model, DOI 10.1021/ci300092s; Hall L.H. et al. 2014, Curr Comput Aided Drug Des, DOI 10.2174/1573409911666141231113516; Menikarachchi L.C. et al. 2012, Anal Chem, DOI 10.1021/ac302048x; Dubey R. et al. 2015, Metabolomics, DOI 10.1007/s11306-014-0732-0 (PMC4422648).
- Kaggle data-page facts (collision_energy_ev list semantics; enveda-180 1,153,785 spectra / 182,941 structures) taken from GitHub mirrors/write-ups surfaced by search (eganeganegan/casmi26 and others; the Kaggle page itself is JS-rendered and was not read).