ProSE: rescore all runs of a multi-file search with one joint Percolator model
Maintainer thường phản hồi trong vòng 1 ngày
@satyam102006 đang làm issue này rồi.
Từ ngày 15/10/2026.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 8/100
Hướng nghiên cứu
The per-file rescoring lives in ProSEAlgorithm::applyPsmFDR_, called from the multi-file loop in searchWithModificationAnalysis(), and Percolator::rescorePSMs trains and scores one list at a time. Read how MultiFileSearchResult::per_file holds the PSMs, then decide how training across all runs fits before per-run scoring. Done means the two-file, blank-like and per_run tests described in the issue pass.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Motivation
With #10578, ProSE rescores PSMs with Percolator by default (Search:rescore). Each input file is rescored on its own and gets its own model. Small runs suffer from this:
- Single-cell runs and other small runs: each run trains a model on its own few PSMs. A run with fewer than 100 PSMs, or without decoy PSMs, is not rescored at all and keeps its HyperScore-based q-values. A run just above that limit gets a model trained on very little data. The 100 PSMs are all PSMs (best hit per spectrum, targets and decoys, before the FDR filter), not confident identifications.
- Blanks: a blank easily has more than 100 PSMs, all of them false. Percolator then runs. Its sanity check finds no targets at q < test FDR and falls back to the best single feature (
Resetting score vector, using default vector). The result is conservative: in a simulation with real spectra against a random database, 0 target PSMs passed 5% FDR. But the run is reported as rescored. - Batches with
-out_merged: if Percolator rescores only some files (e.g. one blank or one small run in a batch), the runs report different search engines and scores. They cannot be pooled, so-out_mergedfails (since #10578 with exit codeINCOMPATIBLE_INPUT_DATA). With rescoring on by default, this hits typical single-cell batches.
Proposal
For multi-file searches, train one Percolator model on the PSMs of all runs (a joint model, as mokapot offers for single-cell data). Apply it to every run, and compute q-values per run (and on the pooled set for -out_merged).
- Small runs and blanks are scored with a model trained on enough data. Only the q-value estimate stays per run.
- All runs carry Percolator scores, so
-out_mergedalways works. The mixed outcome disappears, except when the whole batch has too few PSMs or no decoys. - Keep per-run models as an option, e.g. a parameter
rescore:modelwithjoint(default for more than one file) andper_run.
Implementation notes
- Today the rescoring sits in
ProSEAlgorithm::applyPsmFDR_, which the multi-file path ofsearchWithModificationAnalysis()calls per file inside its search loop. A joint model needs the PSMs of all files first: train after all searches, then apply the model and the PSM FDR per file, then compute the run statistics, the modification analysis and the pooled aggregate. Percolator::rescorePSMstrains and scores onePeptideIdentificationList. A joint model needs either one call on the concatenated PSMs, with per-run TDC and q-values afterwards from the SVM score, or a split into train (all runs) and score (each run).- The PIN feature set must be the same for all runs: standard features with the charge range over all runs, plus
extra_features, which already match across runs of one search. - Memory: the PSMs of all files are kept anyway (
MultiFileSearchResult::per_file), so training needs no additional copy beyond Percolator's own feature matrix. - The chunked multi-file loop and the distributed (sharded) workflow keep per-run models, or document that a joint model needs all shards in one process.
Also worth doing
- Report the sanity-check fallback (learned model replaced by the best single feature) per run, instead of only the raw
Resetting score vector … Use --override flagline on stderr. The flag does not exist in ProSE. This is a small change and goes into #10578.
Tests
- A two-file search with one run below 100 PSMs: both runs get Percolator q-values, and
-out_mergedis written. - A blank-like run (real spectra, random database) in a batch: no target passes the FDR threshold, and the batch still merges.
per_runreproduces the current results.
- Ngôn ngữ chính
- C++
- Star
- 623
- Fork
- 441
- Merge trung bình
- 23 giờ 47 phút
- Pull request đã merge (30 ngày)
- 289
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của OpenMS/OpenMS
-
MSstatsFile: Condition written unquoted, so conditions containing commas produce malformed MSstats CSVCó thể đã có người làm @niharikavuchintala đã nhận 4 ngày trước. Đang mởnew contributor
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
OpenMS/OpenMS#10512 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[FEATUREFINDER] Biosaur2Algorithm::centroidProfileSpectra_: dead drift-time guard would drop every FAIMS CVCó thể làm lại được @kavyansh-1 đã nhận 35 ngày trước và không có pull request nào đang mở. Đang mởdefect
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
OpenMS/OpenMS#10005 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
USI: msRun keeps the .mzML extension, and non-Thermo native IDs become scan numbersCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
OpenMS/OpenMS#10591 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 15/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 15/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của OpenMS/OpenMS
Issue tương tự
-
os:Linux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
acceptable_buffer_backends: unknown backend names are silently ignoredCó thể đã có người làm @mini-1235 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
ros2/rmw_fastrtps#945 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bot-triaged module: correctness (silent) module: mps module: NaNs and Infs triage review
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày