1
// -*- mode: C++; tab-width: 2; -*-
4
// --------------------------------------------------------------------------
5
// OpenMS Mass Spectrometry Framework
6
// --------------------------------------------------------------------------
7
// Copyright (C) 2003-2011 -- Oliver Kohlbacher, Knut Reinert
9
// This library is free software; you can redistribute it and/or
10
// modify it under the terms of the GNU Lesser General Public
11
// License as published by the Free Software Foundation; either
12
// version 2.1 of the License, or (at your option) any later version.
14
// This library is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
// Lesser General Public License for more details.
19
// You should have received a copy of the GNU Lesser General Public
20
// License along with this library; if not, write to the Free Software
21
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1
// --------------------------------------------------------------------------
2
// OpenMS -- Open-Source Mass Spectrometry
3
// --------------------------------------------------------------------------
4
// Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5
// ETH Zurich, and Freie Universitaet Berlin 2002-2013.
7
// This software is released under a three-clause BSD license:
8
// * Redistributions of source code must retain the above copyright
9
// notice, this list of conditions and the following disclaimer.
10
// * Redistributions in binary form must reproduce the above copyright
11
// notice, this list of conditions and the following disclaimer in the
12
// documentation and/or other materials provided with the distribution.
13
// * Neither the name of any author or any participating institution
14
// may be used to endorse or promote products derived from this software
15
// without specific prior written permission.
16
// For a full list of authors, refer to the file AUTHORS.
17
// --------------------------------------------------------------------------
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
// ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22
// INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
30
// --------------------------------------------------------------------------
24
31
// $Maintainer: Andreas Bertsch $
36
ResidueModification::ResidueModification()
37
: term_spec_(ResidueModification::ANYWHERE),
38
classification_(ResidueModification::ARTIFACT),
41
diff_average_mass_(0.0),
43
neutral_loss_mono_mass_(0.0),
44
neutral_loss_average_mass_(0.0)
48
ResidueModification::ResidueModification(const ResidueModification& rhs)
50
full_id_(rhs.full_id_),
51
psi_mod_accession_(rhs.psi_mod_accession_),
52
unimod_accession_(rhs.unimod_accession_),
53
full_name_(rhs.full_name_),
55
term_spec_(rhs.term_spec_),
57
classification_(rhs.classification_),
58
average_mass_(rhs.average_mass_),
59
mono_mass_(rhs.mono_mass_),
60
diff_average_mass_(rhs.diff_average_mass_),
61
diff_mono_mass_(rhs.diff_mono_mass_),
62
formula_(rhs.formula_),
63
diff_formula_(rhs.diff_formula_),
64
synonyms_(rhs.synonyms_),
65
neutral_loss_diff_formula_(rhs.neutral_loss_diff_formula_),
66
neutral_loss_mono_mass_(rhs.neutral_loss_mono_mass_),
67
neutral_loss_average_mass_(rhs.neutral_loss_average_mass_)
71
ResidueModification& ResidueModification::operator = (const ResidueModification& rhs)
76
full_id_ = rhs.full_id_;
77
psi_mod_accession_ = rhs.psi_mod_accession_;
78
unimod_accession_ = rhs.unimod_accession_;
79
full_name_ = rhs.full_name_;
81
term_spec_ = rhs.term_spec_;
82
origin_ = rhs.origin_;
83
classification_ = rhs.classification_;
84
average_mass_ = rhs.average_mass_;
85
mono_mass_ = rhs.mono_mass_;
86
diff_average_mass_ = rhs.diff_average_mass_;
87
diff_mono_mass_ = rhs.diff_mono_mass_;
88
formula_ = rhs.formula_;
89
diff_formula_ = rhs.diff_formula_;
90
synonyms_ = rhs.synonyms_;
91
neutral_loss_diff_formula_ = rhs.neutral_loss_diff_formula_;
92
neutral_loss_mono_mass_ = rhs.neutral_loss_mono_mass_;
93
neutral_loss_average_mass_ = rhs.neutral_loss_average_mass_;
99
bool ResidueModification::operator == (const ResidueModification& rhs) const
101
return id_ == rhs.id_ &&
102
full_id_ == rhs.full_id_ &&
103
psi_mod_accession_ == rhs.psi_mod_accession_ &&
104
unimod_accession_ == rhs.unimod_accession_ &&
105
full_name_ == rhs.full_name_ &&
106
name_ == rhs.name_ &&
107
term_spec_ == rhs.term_spec_ &&
108
origin_ == rhs.origin_ &&
109
classification_ == rhs.classification_ &&
110
average_mass_ == rhs.average_mass_ &&
111
mono_mass_ == rhs.mono_mass_ &&
112
diff_average_mass_ == rhs.diff_average_mass_ &&
113
diff_mono_mass_ == rhs.diff_mono_mass_ &&
114
formula_ == rhs.formula_ &&
115
diff_formula_ == rhs.diff_formula_ &&
116
synonyms_ == rhs.synonyms_ &&
117
neutral_loss_diff_formula_ == rhs.neutral_loss_diff_formula_ &&
118
neutral_loss_mono_mass_ == rhs.neutral_loss_mono_mass_ &&
119
neutral_loss_average_mass_ == rhs.neutral_loss_average_mass_;
122
bool ResidueModification::operator != (const ResidueModification& rhs) const
124
return !(*this == rhs);
127
ResidueModification::~ResidueModification()
132
void ResidueModification::setId(const String& id)
137
const String& ResidueModification::getId() const
142
void ResidueModification::setFullId(const String& full_id)
147
const String& ResidueModification::getFullId() const
152
void ResidueModification::setPSIMODAccession(const String& id)
154
psi_mod_accession_ = id;
157
const String& ResidueModification::getPSIMODAccession() const
159
return psi_mod_accession_;
162
void ResidueModification::setUniModAccession(const String& id)
164
unimod_accession_ = id;
167
const String& ResidueModification::getUniModAccession() const
169
return unimod_accession_;
172
void ResidueModification::setFullName(const String& full_name)
174
full_name_ = full_name;
177
const String& ResidueModification::getFullName() const
182
void ResidueModification::setName(const String& name)
187
const String& ResidueModification::getName() const
192
void ResidueModification::setTermSpecificity(Term_Specificity term_spec)
194
term_spec_ = term_spec;
197
void ResidueModification::setTermSpecificity(const String& term_spec)
199
if (term_spec == "C-term")
204
if (term_spec == "N-term")
209
if (term_spec == "none")
211
term_spec_ = ANYWHERE;
214
cerr << "ResidueModification: cannot convert '" << term_spec << "' into term specificity!" << endl;
218
ResidueModification::Term_Specificity ResidueModification::getTermSpecificity() const
223
String ResidueModification::getTermSpecificityName(Term_Specificity term_spec) const
225
if (term_spec == NUMBER_OF_TERM_SPECIFICITY)
227
term_spec = term_spec_;
231
case C_TERM: return "C-term";
232
case N_TERM: return "N-term";
234
if (term_spec != ANYWHERE)
236
cerr << "ResidueModification: cannot convert '" << term_spec << "' into term specificity name!" << endl;
242
void ResidueModification::setOrigin(const String& origin)
247
const String& ResidueModification::getOrigin() const
252
void ResidueModification::setSourceClassification(Source_Classification classification)
254
classification_ = classification;
257
void ResidueModification::setSourceClassification(const String& classification)
259
String c = classification;
43
ResidueModification::ResidueModification() :
44
term_spec_(ResidueModification::ANYWHERE),
45
classification_(ResidueModification::ARTIFACT),
48
diff_average_mass_(0.0),
50
neutral_loss_mono_mass_(0.0),
51
neutral_loss_average_mass_(0.0)
55
ResidueModification::ResidueModification(const ResidueModification & rhs) :
57
full_id_(rhs.full_id_),
58
psi_mod_accession_(rhs.psi_mod_accession_),
59
unimod_accession_(rhs.unimod_accession_),
60
full_name_(rhs.full_name_),
62
term_spec_(rhs.term_spec_),
64
classification_(rhs.classification_),
65
average_mass_(rhs.average_mass_),
66
mono_mass_(rhs.mono_mass_),
67
diff_average_mass_(rhs.diff_average_mass_),
68
diff_mono_mass_(rhs.diff_mono_mass_),
69
formula_(rhs.formula_),
70
diff_formula_(rhs.diff_formula_),
71
synonyms_(rhs.synonyms_),
72
neutral_loss_diff_formula_(rhs.neutral_loss_diff_formula_),
73
neutral_loss_mono_mass_(rhs.neutral_loss_mono_mass_),
74
neutral_loss_average_mass_(rhs.neutral_loss_average_mass_)
78
ResidueModification & ResidueModification::operator=(const ResidueModification & rhs)
83
full_id_ = rhs.full_id_;
84
psi_mod_accession_ = rhs.psi_mod_accession_;
85
unimod_accession_ = rhs.unimod_accession_;
86
full_name_ = rhs.full_name_;
88
term_spec_ = rhs.term_spec_;
89
origin_ = rhs.origin_;
90
classification_ = rhs.classification_;
91
average_mass_ = rhs.average_mass_;
92
mono_mass_ = rhs.mono_mass_;
93
diff_average_mass_ = rhs.diff_average_mass_;
94
diff_mono_mass_ = rhs.diff_mono_mass_;
95
formula_ = rhs.formula_;
96
diff_formula_ = rhs.diff_formula_;
97
synonyms_ = rhs.synonyms_;
98
neutral_loss_diff_formula_ = rhs.neutral_loss_diff_formula_;
99
neutral_loss_mono_mass_ = rhs.neutral_loss_mono_mass_;
100
neutral_loss_average_mass_ = rhs.neutral_loss_average_mass_;
106
bool ResidueModification::operator==(const ResidueModification & rhs) const
108
return id_ == rhs.id_ &&
109
full_id_ == rhs.full_id_ &&
110
psi_mod_accession_ == rhs.psi_mod_accession_ &&
111
unimod_accession_ == rhs.unimod_accession_ &&
112
full_name_ == rhs.full_name_ &&
113
name_ == rhs.name_ &&
114
term_spec_ == rhs.term_spec_ &&
115
origin_ == rhs.origin_ &&
116
classification_ == rhs.classification_ &&
117
average_mass_ == rhs.average_mass_ &&
118
mono_mass_ == rhs.mono_mass_ &&
119
diff_average_mass_ == rhs.diff_average_mass_ &&
120
diff_mono_mass_ == rhs.diff_mono_mass_ &&
121
formula_ == rhs.formula_ &&
122
diff_formula_ == rhs.diff_formula_ &&
123
synonyms_ == rhs.synonyms_ &&
124
neutral_loss_diff_formula_ == rhs.neutral_loss_diff_formula_ &&
125
neutral_loss_mono_mass_ == rhs.neutral_loss_mono_mass_ &&
126
neutral_loss_average_mass_ == rhs.neutral_loss_average_mass_;
129
bool ResidueModification::operator!=(const ResidueModification & rhs) const
131
return !(*this == rhs);
134
ResidueModification::~ResidueModification()
139
void ResidueModification::setId(const String & id)
144
const String & ResidueModification::getId() const
149
void ResidueModification::setFullId(const String & full_id)
154
const String & ResidueModification::getFullId() const
159
void ResidueModification::setPSIMODAccession(const String & id)
161
psi_mod_accession_ = id;
164
const String & ResidueModification::getPSIMODAccession() const
166
return psi_mod_accession_;
169
void ResidueModification::setUniModAccession(const String & id)
171
unimod_accession_ = id;
174
const String & ResidueModification::getUniModAccession() const
176
return unimod_accession_;
179
void ResidueModification::setFullName(const String & full_name)
181
full_name_ = full_name;
184
const String & ResidueModification::getFullName() const
189
void ResidueModification::setName(const String & name)
194
const String & ResidueModification::getName() const
199
void ResidueModification::setTermSpecificity(Term_Specificity term_spec)
201
term_spec_ = term_spec;
204
void ResidueModification::setTermSpecificity(const String & term_spec)
206
if (term_spec == "C-term")
211
if (term_spec == "N-term")
216
if (term_spec == "none")
218
term_spec_ = ANYWHERE;
221
cerr << "ResidueModification: cannot convert '" << term_spec << "' into term specificity!" << endl;
225
ResidueModification::Term_Specificity ResidueModification::getTermSpecificity() const
230
String ResidueModification::getTermSpecificityName(Term_Specificity term_spec) const
232
if (term_spec == NUMBER_OF_TERM_SPECIFICITY)
234
term_spec = term_spec_;
238
case C_TERM: return "C-term";
240
case N_TERM: return "N-term";
243
if (term_spec != ANYWHERE)
245
cerr << "ResidueModification: cannot convert '" << term_spec << "' into term specificity name!" << endl;
251
void ResidueModification::setOrigin(const String & origin)
256
const String & ResidueModification::getOrigin() const
261
void ResidueModification::setSourceClassification(Source_Classification classification)
263
classification_ = classification;
266
void ResidueModification::setSourceClassification(const String & classification)
268
String c = classification;
261
270
if (c == "artifact" || c == "artefact") // unimod uses Artefact (BE) not Artifcat (AE)
263
classification_ = ARTIFACT;
268
classification_ = NATURAL;
271
if (c == "hypothetical")
273
classification_ = HYPOTHETICAL;
272
classification_ = ARTIFACT;
277
classification_ = NATURAL;
280
if (c == "hypothetical")
282
classification_ = HYPOTHETICAL;
276
285
if (c == "post-translational")
278
287
classification_ = POSTTRANSLATIONAL;
337
346
classification_ = UNKNOWN;
339
//cerr << "ResidueModification: Unknown source classification '" << classification << "'" << endl;
343
ResidueModification::Source_Classification ResidueModification::getSourceClassification() const
345
return classification_;
348
String ResidueModification::getSourceClassificationName(Source_Classification classification) const
350
if (classification == NUMBER_OF_SOURCE_CLASSIFICATIONS)
352
classification = classification_;
354
switch (classification)
348
//cerr << "ResidueModification: Unknown source classification '" << classification << "'" << endl;
352
ResidueModification::Source_Classification ResidueModification::getSourceClassification() const
354
return classification_;
357
String ResidueModification::getSourceClassificationName(Source_Classification classification) const
359
if (classification == NUMBER_OF_SOURCE_CLASSIFICATIONS)
361
classification = classification_;
363
switch (classification)
356
365
case ARTIFACT: return "Artefact"; // return Artefact (BE) not Artifcat (AE)
357
367
case NATURAL: return "Natural";
358
369
case HYPOTHETICAL: return "Hypothetical";
359
371
case POSTTRANSLATIONAL: return "Post-translational";
360
373
case MULTIPLE: return "Multiple";
361
375
case CHEMICAL_DERIVATIVE: return "Chemical derivative";
362
377
case ISOTOPIC_LABEL: return "Isotopic label";
363
379
case PRETRANSLATIONAL: return "Pre-translational";
364
381
case OTHER_GLYCOSYLATION: return "Other glycosylation";
365
383
case NLINKED_GLYCOSYLATION: return "N-linked glycosylation";
366
385
case AA_SUBSTITUTION: return "AA substitution";
367
387
case OTHER: return "Other";
368
389
case NONSTANDARD_RESIDUE: return "Non-standard residue";
369
391
case COTRANSLATIONAL: return "Co-translational";
370
case OLINKED_GLYCOSYLATION: return "O-linked glycosylation";
393
case OLINKED_GLYCOSYLATION: return "O-linked glycosylation";
371
395
case UNKNOWN: return "";
373
397
default: return "Unknown";
378
void ResidueModification::setAverageMass(DoubleReal mass)
380
average_mass_ = mass;
383
DoubleReal ResidueModification::getAverageMass() const
385
return average_mass_;
388
void ResidueModification::setMonoMass(DoubleReal mass)
393
DoubleReal ResidueModification::getMonoMass() const
399
void ResidueModification::setDiffAverageMass(DoubleReal mass)
401
diff_average_mass_ = mass;
404
DoubleReal ResidueModification::getDiffAverageMass() const
406
return diff_average_mass_;
409
void ResidueModification::setDiffMonoMass(DoubleReal mass)
411
diff_mono_mass_ = mass;
414
DoubleReal ResidueModification::getDiffMonoMass() const
416
return diff_mono_mass_;
419
void ResidueModification::setFormula(const String& formula)
424
const String& ResidueModification::getFormula() const
429
void ResidueModification::setDiffFormula(const EmpiricalFormula& diff_formula)
431
diff_formula_ = diff_formula;
434
const EmpiricalFormula& ResidueModification::getDiffFormula() const
436
return diff_formula_;
439
void ResidueModification::addSynonym(const String& synonym)
441
synonyms_.insert(synonym);
444
void ResidueModification::setSynonyms(const set<String>& synonyms)
446
synonyms_ = synonyms;
449
const set<String>& ResidueModification::getSynonyms() const
454
void ResidueModification::setNeutralLossDiffFormula(const EmpiricalFormula& diff_formula)
456
neutral_loss_diff_formula_ = diff_formula;
459
const EmpiricalFormula& ResidueModification::getNeutralLossDiffFormula() const
461
return neutral_loss_diff_formula_;
464
void ResidueModification::setNeutralLossMonoMass(DoubleReal mono_mass)
466
neutral_loss_mono_mass_ = mono_mass;
469
DoubleReal ResidueModification::getNeutralLossMonoMass() const
471
return neutral_loss_mono_mass_;
474
void ResidueModification::setNeutralLossAverageMass(DoubleReal average_mass)
476
neutral_loss_average_mass_ = average_mass;
479
DoubleReal ResidueModification::getNeutralLossAverageMass() const
481
return neutral_loss_average_mass_;
484
bool ResidueModification::hasNeutralLoss() const
486
return neutral_loss_diff_formula_ != "";
402
void ResidueModification::setAverageMass(DoubleReal mass)
404
average_mass_ = mass;
407
DoubleReal ResidueModification::getAverageMass() const
409
return average_mass_;
412
void ResidueModification::setMonoMass(DoubleReal mass)
417
DoubleReal ResidueModification::getMonoMass() const
422
void ResidueModification::setDiffAverageMass(DoubleReal mass)
424
diff_average_mass_ = mass;
427
DoubleReal ResidueModification::getDiffAverageMass() const
429
return diff_average_mass_;
432
void ResidueModification::setDiffMonoMass(DoubleReal mass)
434
diff_mono_mass_ = mass;
437
DoubleReal ResidueModification::getDiffMonoMass() const
439
return diff_mono_mass_;
442
void ResidueModification::setFormula(const String & formula)
447
const String & ResidueModification::getFormula() const
452
void ResidueModification::setDiffFormula(const EmpiricalFormula & diff_formula)
454
diff_formula_ = diff_formula;
457
const EmpiricalFormula & ResidueModification::getDiffFormula() const
459
return diff_formula_;
462
void ResidueModification::addSynonym(const String & synonym)
464
synonyms_.insert(synonym);
467
void ResidueModification::setSynonyms(const set<String> & synonyms)
469
synonyms_ = synonyms;
472
const set<String> & ResidueModification::getSynonyms() const
477
void ResidueModification::setNeutralLossDiffFormula(const EmpiricalFormula & diff_formula)
479
neutral_loss_diff_formula_ = diff_formula;
482
const EmpiricalFormula & ResidueModification::getNeutralLossDiffFormula() const
484
return neutral_loss_diff_formula_;
487
void ResidueModification::setNeutralLossMonoMass(DoubleReal mono_mass)
489
neutral_loss_mono_mass_ = mono_mass;
492
DoubleReal ResidueModification::getNeutralLossMonoMass() const
494
return neutral_loss_mono_mass_;
497
void ResidueModification::setNeutralLossAverageMass(DoubleReal average_mass)
499
neutral_loss_average_mass_ = average_mass;
502
DoubleReal ResidueModification::getNeutralLossAverageMass() const
504
return neutral_loss_average_mass_;
507
bool ResidueModification::hasNeutralLoss() const
509
return neutral_loss_diff_formula_ != "";