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:
- Native
MSstatsClean(type = "MSstats", tool = "Sage") support that maps the columns above.
- Documentation of required/optional Sage columns, mirroring the "Importing and cleaning data" and "Preprocessing" sections of the
MSstatsConvert vignette.
- 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
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 nativeMSstatsClean/*toMSstatsFormatsupport would help labs standardizing on Sage move directly into MSstats/MSstatsTMT workflows. githubRepresentative header and row from
results.sage.tsv:Proposed mapping to the standard MSstats long format described in the "Working with MSstatsConvert" vignette:
ProteinNameproteins(orprotein_groupsfor grouped analysis)PeptideSequencepeptide(strip inline mod tags likeC[+57.021465]into a separate modification representation, similar to how MaxQuant'sModificationscolumn is handled)PrecursorChargechargeFragmentIon,ProductChargeNAviacolumns_to_fill, as already supportedRunfilenameIntensityms2_intensity(or a quant column if run alongside a Sage quant step)IsotopeLabelType"L"for label-free Sage runsUseful filtering columns already present in Sage output that could plug into the existing
score_filtering/pattern_filteringmechanism:spectrum_q,peptide_q,protein_q- q-value based filtering (similar to score_filtering withdirection = "smaller").label- decoy flag (label = -1for decoys), useful forexact_filtering/pattern_filteringto 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
MSstatsCleansupport plus aSagetoMSstatsFormat/SagetoMSstatsTMTFormatwrapper, analogous toMaxQtoMSstatsFormatetc.), it would be great to have:MSstatsClean(type = "MSstats", tool = "Sage")support that maps the columns above.MSstatsConvertvignette.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