PeptideSpectrumMatching reports several scores for every spectrum (SEQUEST-like, Andromeda-like, X!Tandem-like, plus mass error, peptide length and how far the best candidate is ahead of the next one). PSMStatistics learns one combined score from these columns. It uses the target and decoy labels of the matches as training signal, retrains in iterations while the set of confident targets grows (semi supervised), and stops when an iteration adds too few new positives or the iteration limit is reached. From the combined score it computes a q-value and a PEP value per match and keeps the PSMs under both thresholds.
PSMStatistics also reads the output of PeptideSpectrumMatchingTIMs. Both tools write the 28 column layout of this release, and .psm files written by earlier releases (23 columns) have to be regenerated before this release of PSMStatistics reads them. When every row carries finite Hyperscore and Expectscore values, it uses both as model features, with Expectscore represented by its negative log10, and seeds the first training round with the expectation value. Without them the SEQUEST-like score seeds it, as before.
Flag |
Meaning |
Comes from |
|---|---|---|
|
one or more |
|
|
the SQLite peptide database |
|
|
the output directory, created when missing |
|
|
the parameter file in JSON |
this page |
|
switch: save diagnostic charts to the output directory |
|
|
number of files scored at the same time, default 1 |
For every input run.psm the tool writes run.qpsm to the output directory. The file is tab separated with a header and holds one row per scan: the identifiers of the peptide and its modification state, the search scores, the combined ModelScore, QValue, PEPValue, the sequence and the protein names.
ProteinInference and PSMBasedQuantification read .qpsm files.
The tool also creates a run_plots directory per input. It stays empty unless you pass -dc, which adds Metrics.html and InitialSeparation.html, plus one separationAtIteration_<n>.html per training iteration. Charts exist only for the estimated threshold. Log output goes to PSMStatistics_log.txt and run_log.txt in the output directory.
Parameter |
Default |
Meaning |
|---|---|---|
|
|
Learn the combined score and filter by q-value and PEP value. The nested record is listed below. |
|
|
Skip the learning. Keep the best match per scan among those whose |
|
|
Regex applied to the FASTA headers of the database to produce the |
|
|
Part of the parameter record. Keep it at |
The fields of Threshold.Estimate:
Parameter |
Default |
Meaning |
|---|---|---|
|
|
Keep PSMs with a q-value below this value. |
|
|
Keep PSMs with a PEP value below this value. |
|
|
Upper limit for the retraining iterations. |
|
|
Stop when the number of positives at the q-value threshold grows by less than this fraction from one iteration to the next. |
|
|
How the PEP curve is fitted. |
The default file is pSMStatisticsParams.json.
open ProteomIQon
open ProteomIQon.Domain
let psmStatisticsParams : Dto.PSMStatisticsParams =
{
Threshold =
Threshold.Estimate
{
QValueThreshold = 0.01
PepValueThreshold = 0.05
MaxIterations = 15
MinimumIncreaseBetweenIterations = 0.005
PepValueFittingMethod = PepValueFittingMethod.IRLS
}
ParseProteinIDRegexPattern = "id"
KeepTemporaryFiles = true
}
// Replace the temp folder with your project folder.
let outputPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "pSMStatisticsParams.json")
Json.serializeAndWrite outputPath psmStatisticsParams
The resulting .qpsm file is generated as a tab-delimited text file.
These columns can be inspected individually to examine specific search results, scoring metrics, and identification parameters.
Column |
Description |
|---|---|
PSMId |
Identifier of the MS/MS spectrum |
GlobalMod |
Indicator, if a peptide ion species is labeled or unlabeled |
PepSequenceID |
Unique identifier of the unmodified peptide sequence, which points to PeptideDB |
ModSequenceID |
Unique identifier of the modified peptide sequence (including PTMs, e.g., methylation), which points to PeptideDB |
Label |
Target/decoy label: 1 = target, −1 = decoy |
ScanNr |
Scan identifier, combining the spectrum ID in the raw file with an ascending MS2 ID |
ScanTime |
Retention time (RT) in minutes of the MS/MS scan |
Charge |
Precursor ion charge state |
PrecursorMZ |
Precursor ion mass-to-charge ratio (m/z) |
TheoMass |
Theoretical peptide mass in the spectrum (based on amino acid composition) in Dalton |
AbsDeltaMass |
Absolute mass deviation between theoretical and measured mass (mass error) |
PeptideLength |
Peptide length in Amino Acid count |
MissCleavages |
Number of missed cleavages |
SequestScore |
SEQUEST similarity score (e.g., XCorr) quantifying agreement between theoretical and experimental spectra |
SequestNormDeltaBestToRest |
Normalized separation of the best SEQUEST score from the remaining candidate scores |
SequestNormDeltaNext |
Normalized separation between the best and second-best SEQUEST scores |
AndroScore |
Andromeda score quantifying the match between theoretical and experimental spectra |
AndroNormDeltaBestToRest |
Normalized separation of the best Andromeda score from the remaining candidate scores |
AndroNormDeltaNext |
Normalized separation between the best and second-best Andromeda scores |
XTandemScore |
XTandem score quantifying the match between theoretical and experimental spectra |
XtandemNormDeltaBestToRest |
Normalized separation of the best XTandem score from the remaining candidate scores |
XtandemNormDeltaNext |
Normalized separation between the best and second-best XTandem scores |
ModelScore |
Best score value achieved by iterative model to distinguish between target & decoy |
QValue |
Q-value (False-Discovery-Rate) based on combined model scores |
PEPValue |
Posterior Error Probability |
StringSequence |
Amino Acid sequence (one-letter code) from PeptideDB which matches the psm candidate |
ProteinNames |
Protein Names out of the PeptideDB |
Install with dotnet tool install --global ProteomIQon.PSMStatistics, then score one run:
|
Several runs at once, three of them in parallel:
|
Add -dc to write the separation charts for each iteration:
|
All flags:
|