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

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