ProSE: rescore all runs of a multi-file search with one joint Percolator model
I maintainer di solito rispondono entro 1 giorno
@satyam102006 ci sta già lavorando.
Dal 15/10/2026.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 8/100
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- C++
- Stelle
- 623
- Fork
- 441
- Merge medio
- 23h 47m
- PR unite (30g)
- 289
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di OpenMS/OpenMS
-
MSstatsFile: Condition written unquoted, so conditions containing commas produce malformed MSstats CSVForse già presa @niharikavuchintala l’ha presa 4 giorni fa. Apertanew contributor
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
OpenMS/OpenMS#10512 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[FEATUREFINDER] Biosaur2Algorithm::centroidProfileSpectra_: dead drift-time guard would drop every FAIMS CVForse di nuovo libera @kavyansh-1 l’ha presa 35 giorni fa e non c’è nessuna pull request aperta. Apertadefect
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenMS/OpenMS#10005 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
USI: msRun keeps the .mzML extension, and non-Thermo native IDs become scan numbersForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
OpenMS/OpenMS#10591 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di OpenMS/OpenMS
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
NVIDIA-RTX/NRI#277 ·
I maintainer di solito rispondono entro 1 giorno
-
os:Linux
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 3 giorni