Skip to content

Feature request: built-in converter for Sage (results.sage.tsv) #143

Description

@neely

Hi MSstatsConvert team,

I'd like to request a built-in cleaning/converter function for Sage, the open-source Rust-based proteomics search engine, similar to the existing support for MaxQuant, OpenMS, Spectronaut, Skyline, etc.

Sage is a fast, open-source DDA/DIA search engine that outputs PSMs as a tab-separated file, typically results.sage.tsv. It's increasingly used as a MaxQuant/MSFragger alternative, so native MSstatsClean/*toMSstatsFormat support would help labs standardizing on Sage move directly into MSstats/MSstatsTMT workflows. github

Representative header and row from results.sage.tsv:

psm_id  peptide  proteins  protein_groups  num_proteins  num_protein_groups  filename  scannr  rank  label  expmass  calcmass  charge  peptide_len  missed_cleavages  semi_enzymatic  isotope_error  precursor_ppm  fragment_ppm  hyperscore  delta_next  delta_best  rt  aligned_rt  predicted_rt  delta_rt_model  ion_mobility  predicted_mobility  delta_mobility  matched_peaks  longest_b  longest_y  longest_y_pct  matched_intensity_pct  scored_candidates  poisson  sage_discriminant_score  posterior_error  spectrum_q  peptide_q  protein_q  protein_group_q  ms2_intensity

Proposed mapping to the standard MSstats long format described in the "Working with MSstatsConvert" vignette:

MSstats column Sage source
ProteinName proteins (or protein_groups for grouped analysis)
PeptideSequence peptide (strip inline mod tags like C[+57.021465] into a separate modification representation, similar to how MaxQuant's Modifications column is handled)
PrecursorCharge charge
FragmentIon, ProductCharge not available — fill with NA via columns_to_fill, as already supported
Run filename
Intensity ms2_intensity (or a quant column if run alongside a Sage quant step)
IsotopeLabelType constant "L" for label-free Sage runs

Useful filtering columns already present in Sage output that could plug into the existing score_filtering/pattern_filtering mechanism:

  • spectrum_q, peptide_q, protein_q - q-value based filtering (similar to score_filtering with direction = "smaller").
  • label - decoy flag (label = -1 for decoys), useful for exact_filtering/pattern_filtering to drop decoy hits before statistical modeling.
  • rank - could be used to keep only rank-1 PSMs per spectrum.

Following the existing pattern in the package (built-in MSstatsClean support plus a SagetoMSstatsFormat/SagetoMSstatsTMTFormat wrapper, analogous to MaxQtoMSstatsFormat etc.), it would be great to have:

  1. Native MSstatsClean(type = "MSstats", tool = "Sage") support that maps the columns above.
  2. Documentation of required/optional Sage columns, mirroring the "Importing and cleaning data" and "Preprocessing" sections of the MSstatsConvert vignette.
  3. Guidance on decoy (label) and q-value filtering defaults, since Sage reports both target and decoy PSMs in the same TSV by default.

I can provide a small results.sage.tsv (with a handful of PSMs, including decoys and one or two modified peptides) plus a minimal annotation file if that's helpful for building/testing the converter.

Thanks for considering this, and happy to test a draft implementation,
Ben

results.sage.tsv

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions