Skip to content

docs(33): what banding costs on a small library, and the calibration defect it exposed - #111

Merged
RobbinBouwmeester merged 3 commits into
mainfrom
docs/hye-astral-banded
Sep 23, 2026
Merged

RobbinBouwmeester merged 3 commits into
mainfrom
docs/hye-astral-banded

Conversation

@RobbinBouwmeester

Copy link
Copy Markdown
Member

Today's HYE Astral measurement, recorded before it is lost.

Six 15-minute Astral files, imported HYE library, the same adapted retention times in both arms, one unbanded and one cut into 100 bands of three isolation windows:

unbanded 100 bands
precursors at 1% 126,436 121,966
peptides at 1% 113,860 110,006
protein groups at 1% 12,166 12,029
extract, summed over six files 4.6 CPU-min 153 CPU-min
search-seed, summed 1.8 CPU-min 215 CPU-min
engine peak resident 11.8 GB 182 GB

Band size, not band count. The 48-to-64 range this document already records was derived on a 203M-precursor library, where a band holds 3.2M precursors. Here a band holds 126,000 and decodes its own 3.84 GiB copy of the run's spectra to search a 0.016 GiB slice of library, a ratio of 240 to 1. That is the whole cost, and it is why the machine sat at load 35 of 128: it was waiting on decodes, not searching.

The lost identifications were a defect. A grouped run fits the fragment mass calibration per band and combines the bands' scalars, giving 11.400 ppm where a single fit on the same data gives 8.452. The tolerance is 1.5 x p95(|dev - median|), and that percentile over one band's ~2,000 deviations has a heavier tail than over the union; each band also selects calibrants on its own q, whose 1/T floor is looser (106,088 confident against 97,584). The wider tolerance admitted 33% more candidates and the extra noise cost 3.4% of the peptides.

Causal, not correlated: one band extracted twice, identical in every input except the calibration file it was handed, accepted 12,414 candidates at 11.400 ppm and 8,791 at 8.452. A control arm, unbanded on the same adapted library, reproduced the unbanded arm's 113,860 peptides exactly, which rules out the seeding difference between the two arms.

A fix that fits the calibration once on the bands' pooled deviations, the way the retention-time calibration already uses the pooled anchors, is in progress separately.

🤖 Generated with Claude Code

RobbinBouwmeester and others added 3 commits September 22, 2026 23:14
…defect it exposed

The band counts in this document were derived on a 203M-precursor library,
where a band of a 63-band plan holds 3.2M precursors. The six-file HYE Astral
benchmark has 10.9M, so 100 bands is 126,000 precursors each, and at that size
the fixed cost per band dominates: every band decodes its own 3.84 GiB copy of
the run's spectra to search a 0.016 GiB slice of library. Seeding cost 215
CPU-minutes against 1.8 unbanded, extraction 153 against 4.6, and the peak was
182 GB against 11.8, with the machine at load 35 of 128 because it was waiting
on decodes rather than searching.

The 3.4% of peptides the banded arm lost was a defect rather than a property of
banding. A grouped run fitted the fragment mass calibration per band and
combined the bands' scalars, giving 11.400 ppm where a single fit on the same
data gives 8.452, because a 95th percentile over one band's ~2,000 deviations
has a heavier tail than the same percentile over the union, and because each
band selects calibrants on its own q, whose 1/T floor is looser. One band
extracted twice, identical but for the calibration file, accepted 12,414
candidates at 11.400 ppm and 8,791 at 8.452. A control arm, unbanded on the same
adapted library, reproduced the unbanded arm's 113,860 peptides exactly, which
rules out the remaining difference between the arms.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The banded arm repeated on the pooled-deviation build reproduces the unbanded
calibration to eight significant figures (8.452381790 against 8.452381550) from
the same 181,196 calibrants, and then extracts the same candidate set as the
unbanded run to the row: 4,986,153 accepted, 74,115,941 chromatogram rows.
Banding is identification-neutral on this data once the calibration is fitted
once; what it costs is the fixed per-band work.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The banded arm on the pooled-deviation build returns 125,983 precursors,
113,789 peptides and 12,221 protein groups, against the unbanded arm's 126,436 /
113,860 / 12,166. That is 98% of the lost peptides back, with the remainder
inside the single-seed spread this pool shows; the protein groups land slightly
above the unbanded arm, which is the same noise in the other direction. The
scored population is identical to the row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@RobbinBouwmeester
RobbinBouwmeester merged commit 4b41bbd into main Sep 23, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant