docs(33): what banding costs on a small library, and the calibration defect it exposed - #111
Merged
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
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