Skip to content

Add an Identification QC page (score distribution, precursor error, PSMs per file) - #42

Open
t0mdavid-m wants to merge 1 commit into
mainfrom
claude/project-thread-15e1iz
Open

t0mdavid-m wants to merge 1 commit into
mainfrom
claude/project-thread-15e1iz

Conversation

@t0mdavid-m

Copy link
Copy Markdown
Member

Requested by Tom · project thread

Before: the only way to judge a search's quality was to scroll each run's PSM table one file at a time. There was no view of target/decoy separation, mass calibration, or run-to-run consistency.

After: a new page, Workflow Results › Identification QC, puts three plots over all runs on one page:

  • Score distribution: target and decoy PSMs overlaid, using the Percolator score. If Percolator didn't run, it falls back to −log10 of Comet's E-value. A dashed line marks the lowest target score that passes the PSM FDR set on the Configure page.
  • Precursor mass error: a histogram in ppm of the target PSMs that pass the FDR, with the median marked. 13C isotope picks of up to three peaks are corrected before binning.
  • PSMs per file: target PSMs per run as horizontal bars.

This is the first item on the list for parity with the QC tab of Timo Sachsenberg's ProSE web app (timosachsenberg/prose-web).

How: src/common/qc_plots.py reads the existing percolator_results and psm_filter idXMLs into one flat table per run (top hit only). Pages cache it with st.cache_data, keyed on file mtimes. The plots are Plotly figures shown through show_fig(). OpenMS-Insight has no histogram or bar component, so Plotly is used here. The workflow itself is unchanged.

Validation:

  • pytest test_gui.py tests/: 123 passed, including 4 new tests in tests/test_qc_plots.py that run on synthetic idXMLs.
  • pylint --errors-only: no errors in the new files.
  • The page was rendered in Chromium against a workspace of three synthetic runs (about 3,500 PSMs).

Generated by Claude Code

…SMs per file

First step towards feature parity with the ProSE web app's QC tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D5Wo2FHPpi5a8X6GppNxEk
@t0mdavid-m t0mdavid-m self-assigned this Oct 20, 2026
@coderabbitai

coderabbitai Bot commented Oct 20, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1a7d3b95-0acf-4f4f-8533-d1cd0784e5e2
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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.

2 participants