Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

ProSE: rescore all runs of a multi-file search with one joint Percolator model

Đang mở
#10,581 4 bình luận 0 reaction 0 người được giao Xem trên GitHub

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
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
cpp
Lĩnh vực
data

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_merged fails (since #10578 with exit code INCOMPATIBLE_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_merged always 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:model with joint (default for more than one file) and per_run.

Implementation notes

  • Today the rescoring sits in ProSEAlgorithm::applyPsmFDR_, which the multi-file path of searchWithModificationAnalysis() 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::rescorePSMs trains and scores one PeptideIdentificationList. 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 flag line 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_merged is written.
  • A blank-like run (real spectra, random database) in a batch: no target passes the FDR threshold, and the batch still merges.
  • per_run reproduces 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

Mở trong Codespaces

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.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của OpenMS/OpenMS

Tất cả issue của OpenMS/OpenMS

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.