OpenMS
Loading...
Searching...
No Matches
OpenSearchModificationAnalysis.h
Go to the documentation of this file.
1// Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2// SPDX-License-Identifier: BSD-3-Clause
3//
4// --------------------------------------------------------------------------
5// $Maintainer: Timo Sachsenberg $
6// $Authors: Timo Sachsenberg $
7// --------------------------------------------------------------------------
8
9#pragma once
10
13
14#include <cmath>
15#include <map>
16#include <vector>
17#include <unordered_map>
18#include <unordered_set>
19
20namespace OpenMS
21{
36 {
37 public:
38
41 {
42 double count = 0.0;
43 std::vector<double> masses;
44 int num_charge_states = 0;
45 };
46
49 {
50 int count;
51 std::string name;
53 std::vector<double> masses;
54 };
55
58 {
59 double delta_mass = 0.0;
60 int count = 0;
61 int unique_peptides = 0;
62 int num_charge_states = 0;
63 double percentage = 0.0;
64 std::string mapped_modification;
65 bool is_known_modification = false;
66 };
67
69 struct PTMEntry
70 {
71 std::string name;
72 double theoretical_mass = 0.0;
73 double observed_mass = 0.0;
74 double mass_deviation = 0.0;
75 int count = 0;
76 int unique_peptides = 0;
77 int num_charge_states = 0;
78 double percentage = 0.0;
79 std::map<char, int> residue_counts;
80 std::string target_residues;
81 };
82
85 {
86 std::vector<DeltaMassEntry> entries;
87 int total_psms = 0;
88 int modified_psms = 0;
89 int unmodified_psms = 0;
90 int decoy_psms = 0;
91 double mean_delta_mass = 0.0;
92 double median_delta_mass = 0.0;
93 };
94
97 {
98 std::vector<PTMEntry> entries;
99 int total_modified_psms = 0;
100 int unknown_modification_psms = 0;
101 int num_unique_modifications = 0;
102 };
103
111
114 {
115 double epsilon;
116 FuzzyDoubleComparator(double eps = 1e-9) : epsilon(eps) {}
117 bool operator()(const double& a, const double& b) const
118 {
119 return std::fabs(a - b) >= epsilon && a < b;
120 }
121 };
122
124 using DeltaMassHistogram = std::map<double, double, FuzzyDoubleComparator>;
125 using DeltaMassToChargeCount = std::map<double, int, FuzzyDoubleComparator>;
126
129
132
145 std::pair<DeltaMassHistogram, DeltaMassToChargeCount>
147 bool use_smoothing = false,
148 bool debug = false) const;
149
174 std::vector<ModificationSummary>
176 const DeltaMassToChargeCount& charge_histogram,
177 PeptideIdentificationList& peptide_ids,
178 double precursor_mass_tolerance = 5.0,
179 bool precursor_mass_tolerance_unit_ppm = true,
180 const std::string& output_file = "") const;
181
192 std::vector<ModificationSummary>
194 double precursor_mass_tolerance = 5.0,
195 bool precursor_mass_tolerance_unit_ppm = true,
196 bool use_smoothing = false,
197 const std::string& output_file = "") const;
198
216 double precursor_mass_tolerance = 5.0,
217 bool precursor_mass_tolerance_unit_ppm = true,
218 bool use_smoothing = false,
219 const std::string& output_file = "") const;
220
242 const DeltaMassToChargeCount& charge_histogram,
243 const PeptideIdentificationList& peptide_ids,
244 double precursor_mass_tolerance = 5.0,
245 bool precursor_mass_tolerance_unit_ppm = true) const;
246
260 double precursor_mass_tolerance = 5.0,
261 bool precursor_mass_tolerance_unit_ppm = true) const;
262
274 std::map<char, int>
276 double delta_mass,
277 double tolerance = 0.01) const;
278
286 const std::string& output_file) const;
287
295 const std::string& output_file) const;
296
298 static constexpr double DELTA_MASS_ZERO_THRESHOLD_ = 0.05; // Da
299
301 static bool isUnmodified(double delta_mass)
302 {
303 return std::abs(delta_mass) <= DELTA_MASS_ZERO_THRESHOLD_;
304 }
305
306 private:
307
310 static constexpr double MAX_MOD_MAPPING_TOL_ = 0.02; // Da
311
315 static constexpr double MOD_MAPPING_AMBIGUITY_TOL_ = 0.0005; // Da
316
318 static constexpr double DELTA_MASS_BIN_WIDTH_ = 0.0005; // Da
319
321 static Int64 deltaMassBin_(double delta_mass)
322 {
323 return static_cast<Int64>(std::llround(delta_mass / DELTA_MASS_BIN_WIDTH_));
324 }
325
327 static double gaussian_(double x, double sigma);
328
331 double sigma = 0.001);
332
335 double count_threshold = 0.0,
336 double snr = 2.0);
337
339 void writeModificationSummary_(const std::vector<ModificationSummary>& modifications,
340 const std::string& output_file) const;
341
343 std::map<double, std::string, FuzzyDoubleComparator>
345
347 std::string getTargetResidues_(const std::string& mod_name) const;
348
351 double delta_mass,
352 double tolerance) const;
353 };
354
355} // namespace OpenMS
Utility class for analyzing modification patterns in open search results.
Definition OpenSearchModificationAnalysis.h:36
void writeDeltaMassStatistics(const DeltaMassStatistics &stats, const std::string &output_file) const
Write delta mass statistics to a TSV file.
std::map< char, int > residue_counts
Count per amino acid residue.
Definition OpenSearchModificationAnalysis.h:79
std::string target_residues
Target residues for this modification.
Definition OpenSearchModificationAnalysis.h:80
static Int64 deltaMassBin_(double delta_mass)
The index of the bin of the delta mass histogram of delta_mass (its mass: index * DELTA_MASS_BIN_WIDT...
Definition OpenSearchModificationAnalysis.h:321
static DeltaMassHistogram smoothDeltaMassHistogram_(const DeltaMassHistogram &histogram, double sigma=0.001)
Smooth delta mass histogram using Gaussian kernel density estimation.
~OpenSearchModificationAnalysis()=default
Destructor.
void writeModificationSummary_(const std::vector< ModificationSummary > &modifications, const std::string &output_file) const
Write modification summary table to file.
std::vector< ModificationSummary > mapDeltaMassesToModifications(const DeltaMassHistogram &delta_mass_histogram, const DeltaMassToChargeCount &charge_histogram, PeptideIdentificationList &peptide_ids, double precursor_mass_tolerance=5.0, bool precursor_mass_tolerance_unit_ppm=true, const std::string &output_file="") const
Map delta masses to known modifications and annotate peptides.
int num_charge_states
Number of charge states.
Definition OpenSearchModificationAnalysis.h:52
DeltaMassStatistics delta_mass_stats
Delta mass histogram statistics.
Definition OpenSearchModificationAnalysis.h:107
static bool isUnmodified(double delta_mass)
Whether a PSM of delta mass delta_mass counts as unmodified: within DELTA_MASS_ZERO_THRESHOLD_ of zer...
Definition OpenSearchModificationAnalysis.h:301
std::vector< ModificationSummary > summaries
Legacy modification summaries.
Definition OpenSearchModificationAnalysis.h:109
std::map< double, int, FuzzyDoubleComparator > DeltaMassToChargeCount
Definition OpenSearchModificationAnalysis.h:125
std::vector< double > masses
Masses associated with the modification.
Definition OpenSearchModificationAnalysis.h:43
OpenSearchModificationAnalysis()=default
Default constructor.
std::map< double, std::string, FuzzyDoubleComparator > buildModificationMassLookup_() const
Build lookup table mapping mass differences to known modifications.
PTMStatistics generatePTMStatistics(const PeptideIdentificationList &peptide_ids, double precursor_mass_tolerance=5.0, bool precursor_mass_tolerance_unit_ppm=true) const
Generate PTM statistics table with residue localization.
std::string name
Modification name.
Definition OpenSearchModificationAnalysis.h:51
PTMStatistics ptm_stats
Mapped PTM statistics.
Definition OpenSearchModificationAnalysis.h:108
DeltaMassStatistics generateDeltaMassStatistics(const DeltaMassHistogram &histogram, const DeltaMassToChargeCount &charge_histogram, const PeptideIdentificationList &peptide_ids, double precursor_mass_tolerance=5.0, bool precursor_mass_tolerance_unit_ppm=true) const
Generate delta mass statistics table from histogram data.
std::map< double, double, FuzzyDoubleComparator > DeltaMassHistogram
Type definitions for delta mass analysis.
Definition OpenSearchModificationAnalysis.h:124
OpenSearchAnalysisResult analyzeModificationsWithStatistics(PeptideIdentificationList &peptide_ids, double precursor_mass_tolerance=5.0, bool precursor_mass_tolerance_unit_ppm=true, bool use_smoothing=false, const std::string &output_file="") const
Complete analysis returning structured statistics tables.
std::string getTargetResidues_(const std::string &mod_name) const
Get target residues for a modification name.
std::map< char, int > analyzeResidueFrequency(const PeptideIdentificationList &peptide_ids, double delta_mass, double tolerance=0.01) const
Analyze which amino acid residues are associated with a delta mass.
static double gaussian_(double x, double sigma)
Gaussian function for smoothing.
std::pair< DeltaMassHistogram, DeltaMassToChargeCount > analyzeDeltaMassPatterns(const PeptideIdentificationList &peptide_ids, bool use_smoothing=false, bool debug=false) const
Analyze delta mass patterns from peptide identifications.
std::vector< ModificationSummary > analyzeModifications(PeptideIdentificationList &peptide_ids, double precursor_mass_tolerance=5.0, bool precursor_mass_tolerance_unit_ppm=true, bool use_smoothing=false, const std::string &output_file="") const
Complete analysis workflow: analyze patterns and map to modifications.
std::string mapped_modification
Name of mapped modification (if any)
Definition OpenSearchModificationAnalysis.h:64
std::vector< DeltaMassEntry > entries
All delta mass entries.
Definition OpenSearchModificationAnalysis.h:86
int count
Modification rate (number of occurrences)
Definition OpenSearchModificationAnalysis.h:50
int countUniquePeptides_(const PeptideIdentificationList &peptide_ids, double delta_mass, double tolerance) const
Count unique peptide sequences matching a delta mass.
static DeltaMassHistogram findPeaksInHistogram_(const DeltaMassHistogram &histogram, double count_threshold=0.0, double snr=2.0)
Find peaks in delta mass histogram based on count threshold and signal-to-noise ratio.
std::vector< PTMEntry > entries
All PTM entries.
Definition OpenSearchModificationAnalysis.h:98
void writePTMStatistics(const PTMStatistics &stats, const std::string &output_file) const
Write PTM statistics to a TSV file.
Statistics for a single delta mass bin in the histogram.
Definition OpenSearchModificationAnalysis.h:58
Container for delta mass statistics table.
Definition OpenSearchModificationAnalysis.h:85
Stores details of a modification pattern found in the data.
Definition OpenSearchModificationAnalysis.h:41
Data structure for modification summary output.
Definition OpenSearchModificationAnalysis.h:49
Combined result of open search modification analysis.
Definition OpenSearchModificationAnalysis.h:106
Statistics for a mapped PTM.
Definition OpenSearchModificationAnalysis.h:70
Container for PTM statistics table.
Definition OpenSearchModificationAnalysis.h:97
Container for peptide identifications from multiple spectra.
Definition PeptideIdentificationList.h:66
int64_t Int64
Signed integer type (64bit)
Definition Types.h:40
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
Comparator for approximate comparison of double values.
Definition OpenSearchModificationAnalysis.h:114
double epsilon
Definition OpenSearchModificationAnalysis.h:115
FuzzyDoubleComparator(double eps=1e-9)
Definition OpenSearchModificationAnalysis.h:116
bool operator()(const double &a, const double &b) const
Definition OpenSearchModificationAnalysis.h:117