OpenMS
Loading...
Searching...
No Matches
ResidueModification.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: Andreas Bertsch $
7// --------------------------------------------------------------------------
8//
9
10#pragma once
11
15
16#include <functional>
17#include <set>
18
19namespace OpenMS
20{
21 // forward declaration
22 class Residue;
23
54 class OPENMS_DLLAPI ResidueModification
55 {
56public:
57
74 {
75 ANYWHERE = 0,
76 C_TERM = 1,
77 N_TERM = 2,
78 PROTEIN_C_TERM = 3,
79 PROTEIN_N_TERM = 4,
80 NUMBER_OF_TERM_SPECIFICITY
81 };
82
105
115 {
117 DEFINED = 0,
122 NUMBER_OF_PROVENANCE
123 };
125
129
132
135
138
142
146
149
153
158 void setId(const std::string& id);
159
161 const std::string& getId() const;
162
170 void setFullId(const std::string& full_id = "");
171
173
182 const std::string& getFullId() const;
183
185 void setUniModRecordId(const Int& id);
186
188 const Int& getUniModRecordId() const;
189
191 const std::string getUniModAccession() const;
192
194 void setPSIMODAccession(const std::string& id);
195
197 const std::string& getPSIMODAccession() const;
198
200 void setFullName(const std::string& full_name);
201
203 const std::string& getFullName() const;
204
206 void setName(const std::string& name);
207
209 const std::string& getName() const;
210
217
225 void setTermSpecificity(const std::string& name);
226
229
236 std::string getTermSpecificityName(TermSpecificity term_spec = NUMBER_OF_TERM_SPECIFICITY) const;
237
246 void setOrigin(char origin);
247
249 char getOrigin() const;
250
252 void setSourceClassification(const std::string& classification);
253
256
259
261 std::string getSourceClassificationName(SourceClassification classification = NUMBER_OF_SOURCE_CLASSIFICATIONS) const;
262
264 void setProvenance(Provenance provenance);
265
268
270 void setAverageMass(double mass);
271
273 double getAverageMass() const;
274
276 void setMonoMass(double mass);
277
279 double getMonoMass() const;
280
282 void setDiffAverageMass(double mass);
283
285 double getDiffAverageMass() const;
286
288 void setDiffMonoMass(double mass);
289
291 double getDiffMonoMass() const;
292
294 void setFormula(const std::string& composition);
295
297 const std::string& getFormula() const;
298
300 void setDiffFormula(const EmpiricalFormula& diff_formula);
301
304
306 void setSynonyms(const std::set<std::string>& synonyms);
307
309 void addSynonym(const std::string& synonym);
310
312 const std::set<std::string>& getSynonyms() const;
313
315 void setNeutralLossDiffFormulas(const std::vector<EmpiricalFormula>& diff_formulas);
316
318 const std::vector<EmpiricalFormula>& getNeutralLossDiffFormulas() const;
319
321 void setNeutralLossMonoMasses(std::vector<double> mono_masses);
322
324 std::vector<double> getNeutralLossMonoMasses() const;
325
327 void setNeutralLossAverageMasses(std::vector<double> average_masses);
328
330 std::vector<double> getNeutralLossAverageMasses() const;
332
337 bool hasNeutralLoss() const;
338
340 bool isUserDefined() const;
341
343 bool operator==(const ResidueModification& modification) const;
344
346 bool operator!=(const ResidueModification& modification) const;
347
349 bool operator<(const ResidueModification& modification) const;
350
352
355
362 static const ResidueModification* createUnknownFromMassString(const std::string& mod,
363 const double mass,
364 const bool delta_mass,
365 const TermSpecificity specificity,
366 const Residue* residue = nullptr);
367
385 const std::set<const ResidueModification*>& addons,
386 bool allow_unknown_masses = false,
387 const Residue* residue = nullptr);
388
396 std::string toString() const;
397
400 static std::string getDiffMonoMassString(const double diff_mono_mass);
401
403 static std::string getDiffMonoMassWithBracket(const double diff_mono_mass);
404
406 static std::string getMonoMassWithBracket(const double mono_mass);
407
424 std::string toDefinitionString() const;
425
428 static ResidueModification fromDefinitionString(const std::string& record);
429
431 static std::vector<std::string> splitDefinitionRecords(const std::string& records);
433
434protected:
435 std::string id_;
436
437 std::string full_id_;
438
440
441 // The UniMod record id (an integer)
443
444 std::string full_name_;
445
446 std::string name_;
447
449
451
453
455
457
459
461
462 std::string formula_;
463
465
466 std::set<std::string> synonyms_;
467
468 std::vector<EmpiricalFormula> neutral_loss_diff_formulas_;
469
470 std::vector<double> neutral_loss_mono_masses_;
471
472 std::vector<double> neutral_loss_average_masses_;
473
476 };
477} // namespace OpenMS
478
479// Hash function specialization for ResidueModification
480// Placed in std namespace to allow use with std::unordered_map/set
481namespace std
482{
493 template<>
494 struct hash<OpenMS::ResidueModification>
495 {
496 std::size_t operator()(const OpenMS::ResidueModification& mod) const noexcept
497 {
498 // Hash string fields
499 std::size_t seed = OpenMS::fnv1a_hash_string(mod.getId());
500 OpenMS::hash_combine(seed, OpenMS::fnv1a_hash_string(mod.getFullId()));
501 OpenMS::hash_combine(seed, OpenMS::fnv1a_hash_string(mod.getPSIMODAccession()));
502 OpenMS::hash_combine(seed, OpenMS::hash_int(mod.getUniModRecordId()));
503 OpenMS::hash_combine(seed, OpenMS::fnv1a_hash_string(mod.getFullName()));
505
506 // Hash enum fields (as integers)
507 OpenMS::hash_combine(seed, OpenMS::hash_int(static_cast<int>(mod.getTermSpecificity())));
508 OpenMS::hash_combine(seed, OpenMS::hash_char(mod.getOrigin()));
509 OpenMS::hash_combine(seed, OpenMS::hash_int(static_cast<int>(mod.getSourceClassification())));
510
511 // Hash mass fields
512 OpenMS::hash_combine(seed, OpenMS::hash_float(mod.getAverageMass()));
513 OpenMS::hash_combine(seed, OpenMS::hash_float(mod.getMonoMass()));
514 OpenMS::hash_combine(seed, OpenMS::hash_float(mod.getDiffAverageMass()));
515 OpenMS::hash_combine(seed, OpenMS::hash_float(mod.getDiffMonoMass()));
516
517 // Hash formula fields
518 OpenMS::hash_combine(seed, OpenMS::fnv1a_hash_string(mod.getFormula()));
519 OpenMS::hash_combine(seed, std::hash<OpenMS::EmpiricalFormula>{}(mod.getDiffFormula()));
520
521 // Hash synonyms (set<std::string>)
522 const auto& synonyms = mod.getSynonyms();
523 OpenMS::hash_combine(seed, OpenMS::hash_int(synonyms.size()));
524 for (const auto& syn : synonyms)
525 {
527 }
528
529 // Hash neutral loss diff formulas (vector<EmpiricalFormula>)
530 const auto& nl_formulas = mod.getNeutralLossDiffFormulas();
531 OpenMS::hash_combine(seed, OpenMS::hash_int(nl_formulas.size()));
532 for (const auto& nlf : nl_formulas)
533 {
534 OpenMS::hash_combine(seed, std::hash<OpenMS::EmpiricalFormula>{}(nlf));
535 }
536
537 // Hash neutral loss mono masses (vector<double>)
538 const auto& nl_mono = mod.getNeutralLossMonoMasses();
539 OpenMS::hash_combine(seed, OpenMS::hash_int(nl_mono.size()));
540 for (double mass : nl_mono)
541 {
543 }
544
545 // Hash neutral loss average masses (vector<double>)
546 const auto& nl_avg = mod.getNeutralLossAverageMasses();
547 OpenMS::hash_combine(seed, OpenMS::hash_int(nl_avg.size()));
548 for (double mass : nl_avg)
549 {
551 }
552
553 return seed;
554 }
555 };
556} // namespace std
Representation of an empirical formula.
Definition EmpiricalFormula.h:62
Representation of a modification on an amino acid residue.
Definition ResidueModification.h:55
const std::string & getPSIMODAccession() const
returns the PSI-MOD accession if available
double average_mass_
Definition ResidueModification.h:454
void setSourceClassification(const std::string &classification)
classification as defined by the PSI-MOD
void setFullId(const std::string &full_id="")
Sets the full identifier (Unimod Accession + origin, if available)
Provenance getProvenance() const
returns where the definition of this modification came from
void setDiffFormula(const EmpiricalFormula &diff_formula)
sets diff formula (no masses will be changed)
std::string toString() const
const EmpiricalFormula & getDiffFormula() const
returns the diff formula if one was set
static const ResidueModification * createUnknownFromMassString(const std::string &mod, const double mass, const bool delta_mass, const TermSpecificity specificity, const Residue *residue=nullptr)
ResidueModification & operator=(ResidueModification &&) &=default
Move assignment operator.
ResidueModification(ResidueModification &&)=default
Move constructor.
void setId(const std::string &id)
set the identifier of the modification
static std::string getDiffMonoMassWithBracket(const double diff_mono_mass)
return a string of the form '[+>mass<] (the '+' might be a '-', if mass is negative).
std::vector< EmpiricalFormula > neutral_loss_diff_formulas_
Definition ResidueModification.h:468
SourceClassification getSourceClassification() const
returns the source classification, if none was set, it is unspecific
std::set< std::string > synonyms_
Definition ResidueModification.h:466
const std::string getUniModAccession() const
returns the unimod accession if available
std::vector< double > getNeutralLossAverageMasses() const
returns the neutral loss average weight
void setSynonyms(const std::set< std::string > &synonyms)
sets the synonyms of that modification
bool hasNeutralLoss() const
returns true if a neutral loss formula is set
const std::string & getId() const
returns the identifier of the modification
const std::string & getName() const
returns the PSI-MS-label if available; e.g. Mascot uses this name
void setSourceClassification(SourceClassification classification)
sets the source classification
void setDiffAverageMass(double mass)
set the difference average mass
std::string full_name_
Definition ResidueModification.h:444
Provenance
Where the definition of this modification came from.
Definition ResidueModification.h:115
@ MASS_ONLY
Anonymous mass or formula modification; reconstructible from its own serialised form.
Definition ResidueModification.h:121
@ CV
From a controlled vocabulary shipped with OpenMS (Unimod, PSI-MOD, XLMOD, custom_mods....
Definition ResidueModification.h:119
Int unimod_record_id_
Definition ResidueModification.h:442
std::string name_
Definition ResidueModification.h:446
void setNeutralLossMonoMasses(std::vector< double > mono_masses)
set the neutral loss mono weight
void addSynonym(const std::string &synonym)
adds a synonym to the unique list
std::string full_id_
Definition ResidueModification.h:437
std::vector< double > neutral_loss_average_masses_
Definition ResidueModification.h:472
static ResidueModification fromDefinitionString(const std::string &record)
std::vector< double > neutral_loss_mono_masses_
Definition ResidueModification.h:470
double mono_mass_
Definition ResidueModification.h:456
double diff_average_mass_
Definition ResidueModification.h:458
TermSpecificity
Position where the modification is allowed to occur.
Definition ResidueModification.h:74
void setFormula(const std::string &composition)
set the formula (no masses will be changed)
void setPSIMODAccession(const std::string &id)
set the MOD:XXXXX accession of PSI-MOD
static std::string getDiffMonoMassString(const double diff_mono_mass)
void setDiffMonoMass(double mass)
sets the difference monoisotopic mass
TermSpecificity term_spec_
Definition ResidueModification.h:448
const std::string & getFullName() const
returns the full name of the modification
void setNeutralLossDiffFormulas(const std::vector< EmpiricalFormula > &diff_formulas)
sets the neutral loss formula
ResidueModification()
Default constructor.
bool operator<(const ResidueModification &modification) const
less operator
ResidueModification & operator=(const ResidueModification &)=default
Assignment operator.
void setAverageMass(double mass)
sets the average mass
ResidueModification(const ResidueModification &)=default
Copy constructor.
bool operator!=(const ResidueModification &modification) const
inequality operator
double getDiffMonoMass() const
returns the diff monoisotopic mass, or 0.0 if not set
SourceClassification
Classification of the modification.
Definition ResidueModification.h:86
@ NATURAL
A natural modification.
Definition ResidueModification.h:89
@ POSTTRANSLATIONAL
A post-translational modification.
Definition ResidueModification.h:90
@ COTRANSLATIONAL
A co-translational modification.
Definition ResidueModification.h:100
@ OTHER_GLYCOSYLATION
Other glycosylation (i.e. neither N nor O-linked)
Definition ResidueModification.h:95
@ NLINKED_GLYCOSYLATION
N-linked glycosylation.
Definition ResidueModification.h:96
@ UNKNOWN
An unknown modification.
Definition ResidueModification.h:102
@ HYPOTHETICAL
A hypothetical modification.
Definition ResidueModification.h:88
@ PRETRANSLATIONAL
A pre-translational modification.
Definition ResidueModification.h:94
@ CHEMICAL_DERIVATIVE
A chemical derivative.
Definition ResidueModification.h:92
@ AA_SUBSTITUTION
An amino acid substitution that presents like a modification.
Definition ResidueModification.h:97
@ MULTIPLE
A combination of multiple modifications.
Definition ResidueModification.h:91
@ ISOTOPIC_LABEL
A chemical label (artificial)
Definition ResidueModification.h:93
@ OLINKED_GLYCOSYLATION
A O-linked glycosylation.
Definition ResidueModification.h:101
@ OTHER
Other modification.
Definition ResidueModification.h:98
@ NONSTANDARD_RESIDUE
A non-standard amino acid.
Definition ResidueModification.h:99
TermSpecificity getTermSpecificity() const
returns terminal specificity
SourceClassification classification_
Definition ResidueModification.h:452
const std::vector< EmpiricalFormula > & getNeutralLossDiffFormulas() const
returns the neutral loss diff formula (if available)
char origin_
Definition ResidueModification.h:450
double diff_mono_mass_
Definition ResidueModification.h:460
void setName(const std::string &name)
sets the name of modification
std::vector< double > getNeutralLossMonoMasses() const
returns the neutral loss mono weight
std::string getSourceClassificationName(SourceClassification classification=NUMBER_OF_SOURCE_CLASSIFICATIONS) const
returns the classification
static std::vector< std::string > splitDefinitionRecords(const std::string &records)
Split a ';'-joined sequence of records, honouring '\' escapes. Empty input yields no records.
void setUniModRecordId(const Int &id)
sets the unimod record id
const std::string & getFullId() const
returns the full identifier of the mod (Unimod accession + origin, if available)
bool isUserDefined() const
returns true if it is a user-defined modification (empty id)
virtual ~ResidueModification()
Destructor.
char getOrigin() const
Returns the origin (i.e. modified amino acid)
std::string toDefinitionString() const
Serialise this modification as a version-1 definition record.
std::string psi_mod_accession_
Definition ResidueModification.h:439
double getMonoMass() const
return the monoisotopic mass, or 0.0 if not set
std::string formula_
Definition ResidueModification.h:462
void setOrigin(char origin)
Sets the origin (i.e. modified amino acid)
bool operator==(const ResidueModification &modification) const
equality operator
Provenance provenance_
not part of operator==, operator< or std::hash (see operator==)
Definition ResidueModification.h:475
static const ResidueModification * combineMods(const ResidueModification *base, const std::set< const ResidueModification * > &addons, bool allow_unknown_masses=false, const Residue *residue=nullptr)
Merge a set of mods to a given modification (usually the one which is already present,...
void setFullName(const std::string &full_name)
sets the full name of the modification; must NOT contain the origin (or . for terminals!...
double getAverageMass() const
returns the average mass if set
std::string id_
Definition ResidueModification.h:435
static std::string getMonoMassWithBracket(const double mono_mass)
return a string of the form '[>mass<]
void setProvenance(Provenance provenance)
sets where the definition of this modification came from
const std::set< std::string > & getSynonyms() const
returns the set of synonyms
void setTermSpecificity(const std::string &name)
Sets the terminal specificity using a name.
void setTermSpecificity(TermSpecificity term_spec)
Sets the term specificity.
EmpiricalFormula diff_formula_
Definition ResidueModification.h:464
std::string getTermSpecificityName(TermSpecificity term_spec=NUMBER_OF_TERM_SPECIFICITY) const
Returns the name of the terminal specificity.
double getDiffAverageMass() const
returns the difference average mass, or 0.0 if not set
const Int & getUniModRecordId() const
gets the unimod record id
const std::string & getFormula() const
returns the chemical formula if set
void setNeutralLossAverageMasses(std::vector< double > average_masses)
set the neutral loss average weight
void setMonoMass(double mass)
sets the monoisotopic mass (this must include the weight of the residue itself!)
Representation of an amino acid residue.
Definition Residue.h:41
int Int
Signed integer type.
Definition Types.h:72
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
std::size_t hash_int(T value) noexcept
Hash for an integer type.
Definition HashUtils.h:107
void hash_combine(std::size_t &seed, std::size_t value) noexcept
Combine a hash value with additional data using golden ratio mixing.
Definition HashUtils.h:87
std::size_t hash_char(char c) noexcept
Hash for a character.
Definition HashUtils.h:119
std::size_t hash_float(T value) noexcept
Hash for a floating point type (float or double).
Definition HashUtils.h:142
std::size_t fnv1a_hash_string(const std::string &s) noexcept
FNV-1a hash for a string.
Definition HashUtils.h:70
STL namespace.
std::size_t operator()(const OpenMS::ResidueModification &mod) const noexcept
Definition ResidueModification.h:496