Skip to content

Add a Proteins page: protein table with coverage, linked peptides and PSMs - #43

Open
t0mdavid-m wants to merge 1 commit into
mainfrom
claude/parity-protein-table
Open

t0mdavid-m wants to merge 1 commit into
mainfrom
claude/parity-protein-table

Conversation

@t0mdavid-m

Copy link
Copy Markdown
Member

Requested by Tom · project thread

Before: proteins only appeared as rows of the abundance table. That table has intensities, but no sequence coverage and no peptide or PSM counts, and nothing leads from a protein to the evidence for it.

After: a new page, Workflow Results › Proteins, has:

  • Key figures: proteins, peptides and target PSMs across all runs.
  • Protein table: accession, gene (from GN=), coverage %, distinct and unique peptides, PSMs, "found in n of m" runs, PSMs per run, length, and a description without the OS=/GN= tail.
  • Coverage map of the selected protein: the sequence in blocks of 10 residues, 50 per row, with covered residues highlighted.
  • Peptides of the selected protein: PSMs, number of runs, best q-value, charges and whether the peptide is shared. Selecting one filters the next table.
  • PSMs of the selected peptide: file, scan, RT, m/z, charge, score and q-value.

This is the second item for parity with the protein table and drill-down of Timo Sachsenberg's ProSE web app (timosachsenberg/prose-web). It follows #42 (Identification QC), and the two are independent.

How: src/common/protein_table.py reads the top hits of the psm_filter idXMLs and the target entries of the run's FASTA (decoys left out). It builds the three tables, with peptides and PSMs in long format (one row per protein they map to), so the OpenMS-Insight Tables link through a shared StateManager (interactivity on the protein and peptide, filters downstream). Since this comes from the PSMs and FASTA, it works the same for LFQ and TMT. show_insight_table gains two optional arguments, state_manager and column_overrides. The second exists because OpenMS-Insight stores floats as float32, so rounded values like coverage need a Tabulator formatter to display without float noise.

Not in this PR: protein q-values and protein groups from ProteinInference/ProteomicsLFQ, contaminant flags, and filters for minimum peptides or "found in". These are later parity items.

Validation:

  • pytest test_gui.py tests/: 125 passed, including 5 new tests in tests/test_protein_table.py and 1 in tests/test_insight_table.py.
  • Pylint errors-only: clean, as CI runs it.
  • Checked in Chromium on a synthetic three-run workspace (60 yeast proteins from example-data). Selecting a protein switched the coverage map and peptide table, and selecting a peptide narrowed the PSMs to that peptide.

Generated by Claude Code

… PSMs

Second step towards feature parity with the ProSE web app (protein table,
coverage map and drill-down).

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: e2f4422c-d2fe-4d9d-9670-cfcd5c2990bc
  • 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