libpappsomspp
Library for mass spectrometry
aamodification.cpp
Go to the documentation of this file.
1 /**
2  * \file pappsomspp/amino_acid/aamodification.h
3  * \date 7/3/2015
4  * \author Olivier Langella
5  * \brief amino acid modification model
6  */
7 
8 /*******************************************************************************
9  * Copyright (c) 2015 Olivier Langella <Olivier.Langella@moulon.inra.fr>.
10  *
11  * This file is part of the PAPPSOms++ library.
12  *
13  * PAPPSOms++ is free software: you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation, either version 3 of the License, or
16  * (at your option) any later version.
17  *
18  * PAPPSOms++ is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
25  *
26  * Contributors:
27  * Olivier Langella <Olivier.Langella@moulon.inra.fr> - initial API and
28  *implementation
29  ******************************************************************************/
30 
31 #include <QRegExp>
32 #include <QDebug>
33 #include <cmath>
34 
35 #include "aamodification.h"
36 #include "aa.h"
37 #include "../pappsoexception.h"
38 #include "../mzrange.h"
39 #include "../peptide/peptide.h"
40 #include "../obo/filterobopsimodsink.h"
41 #include "../obo/filterobopsimodtermaccession.h"
42 #include "../exception/exceptionnotfound.h"
43 
44 /*
45 
46 inline void initMyResource() {
47  Q_INIT_RESOURCE(resources);
48 }
49 */
50 
51 namespace pappso
52 {
53 
55 
56 AaModification::AaModification(const QString &accession, pappso_double mass)
57  : m_mass(mass), m_accession(accession)
58 {
59  m_atomCount = {{AtomIsotopeSurvey::C, 0},
60  {AtomIsotopeSurvey::H, 0},
61  {AtomIsotopeSurvey::N, 0},
62  {AtomIsotopeSurvey::O, 0},
63  {AtomIsotopeSurvey::S, 0}};
64 
65  m_mapIsotope = {{Isotope::C13, 0},
66  {Isotope::H2, 0},
67  {Isotope::N15, 0},
68  {Isotope::O17, 0},
69  {Isotope::O18, 0},
70  {Isotope::S33, 0},
71  {Isotope::S34, 0},
72  {Isotope::S36, 0}};
73 }
74 
75 
76 AaModification::AaModification(AaModification &&toCopy) // move constructor
77  : m_mass(toCopy.m_mass),
78  m_atomCount(std::move(toCopy.m_atomCount)),
79  m_mapIsotope(toCopy.m_mapIsotope),
80  m_accession(toCopy.m_accession)
81 {
82  m_origin = toCopy.m_origin;
83 }
84 
86 {
87 }
88 
89 const QString &
91 {
92 
93  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
94  return m_accession;
95 }
96 const QString &
98 {
99  return m_name;
100 }
103  MapAccessionModifications ret;
104 
105  return ret;
106  }();
107 
110 {
111  AaModification *new_mod;
112  // qDebug() << " AaModification::createInstance begin";
113  new_mod = new AaModification(term.m_accession, term.m_diffMono);
114  // xref: DiffFormula: "C 0 H 0 N 0 O 1 S 0"
115  new_mod->setDiffFormula(term.m_diffFormula);
116  new_mod->setXrefOrigin(term.m_origin);
117  new_mod->m_name = term.m_name;
118  return new_mod;
119 }
120 
122 AaModification::createInstance(const QString &accession)
123 {
124  if(accession == "internal:Nter_hydrolytic_cleavage_H")
125  {
126  OboPsiModTerm term;
127  term.m_accession = accession;
128  term.m_diffFormula = "H 1";
129  term.m_diffMono = MPROTIUM;
130  term.m_name = "Nter hydrolytic cleavage H+";
131  return (AaModification::createInstance(term));
132  }
133  if(accession == "internal:Cter_hydrolytic_cleavage_HO")
134  {
135  OboPsiModTerm term;
136  term.m_accession = accession;
137  term.m_diffFormula = "H 1 O 1";
138  term.m_diffMono = MPROTIUM + MASSOXYGEN;
139  term.m_name = "Cter hydrolytic cleavage HO";
140  return (AaModification::createInstance(term));
141  }
142  if(accession.startsWith("MUTATION:"))
143  {
144  QRegExp regexp_mutation("^MUTATION:([A-Z])=>([A-Z])$");
145  if(regexp_mutation.exactMatch(accession))
146  {
147  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
148  << regexp_mutation.capturedTexts()[1].at(0) << " "
149  << regexp_mutation.capturedTexts()[2].at(0);
150 
151  Aa aa_from(
152  regexp_mutation.capturedTexts()[1].toStdString().c_str()[0]);
153  Aa aa_to(regexp_mutation.capturedTexts()[2].toStdString().c_str()[0]);
154  AaModificationP instance_mutation =
155  createInstanceMutation(aa_from, aa_to);
156  return instance_mutation;
157  // m_psiModLabel<<"|";
158  }
159  }
160  // initMyResource();
161  FilterOboPsiModSink term_list;
162  FilterOboPsiModTermAccession filterm_accession(term_list, accession);
163 
164  OboPsiMod psimod(filterm_accession);
165 
166  try
167  {
168  return (AaModification::createInstance(term_list.getOne()));
169  }
170  catch(ExceptionNotFound &e)
171  {
172  throw ExceptionNotFound(QObject::tr("modification not found : [%1]\n%2")
173  .arg(accession)
174  .arg(e.qwhat()));
175  }
176 }
177 
178 void
179 AaModification::setXrefOrigin(const QString &origin)
180 {
181  // xref: Origin: "N"
182  // xref: Origin: "X"
183  m_origin = origin;
184 }
185 void
186 AaModification::setDiffFormula(const QString &diff_formula)
187 {
188  QRegExp rx("(^|\\s)([C,H,O,N,H,S])\\s([-]{0,1}\\d+)");
189  int pos = 0;
190 
191  while((pos = rx.indexIn(diff_formula, pos)) != -1)
192  {
193  qDebug() << rx.cap(2) << " " << rx.cap(3);
194  if(rx.cap(2) == "C")
195  {
196  m_atomCount[AtomIsotopeSurvey::C] = rx.cap(3).toInt();
197  }
198  else if(rx.cap(2) == "H")
199  {
200  m_atomCount[AtomIsotopeSurvey::H] = rx.cap(3).toInt();
201  }
202  else if(rx.cap(2) == "N")
203  {
204  m_atomCount[AtomIsotopeSurvey::N] = rx.cap(3).toInt();
205  }
206  else if(rx.cap(2) == "O")
207  {
208  m_atomCount[AtomIsotopeSurvey::O] = rx.cap(3).toInt();
209  }
210  else if(rx.cap(2) == "S")
211  {
212  m_atomCount[AtomIsotopeSurvey::S] = rx.cap(3).toInt();
213  }
214  pos += rx.matchedLength();
215  }
216 
217  // look for isotopes :
218  rx.setPattern("\\(([-]{0,1}\\d+)\\)([C,H,O,N,H,S])\\s([-]{0,1}\\d+)");
219  pos = 0;
220 
221  while((pos = rx.indexIn(diff_formula, pos)) != -1)
222  {
223  qDebug() << rx.cap(1) << " " << rx.cap(2) << " " << rx.cap(3);
224  int number_of_isotopes = rx.cap(3).toInt();
225  if(rx.cap(2) == "C")
226  {
227  if(rx.cap(1) == "13")
228  {
229  m_mapIsotope.at(Isotope::C13) = number_of_isotopes;
230  }
231  m_atomCount[AtomIsotopeSurvey::C] += number_of_isotopes;
232  }
233  else if(rx.cap(2) == "H")
234  {
235  if(rx.cap(1) == "2")
236  {
237  m_mapIsotope.at(Isotope::H2) = number_of_isotopes;
238  }
239  m_atomCount[AtomIsotopeSurvey::H] += number_of_isotopes;
240  }
241  else if(rx.cap(2) == "N")
242  {
243  if(rx.cap(1) == "15")
244  {
245  m_mapIsotope.at(Isotope::N15) = number_of_isotopes;
246  }
247  m_atomCount[AtomIsotopeSurvey::N] += number_of_isotopes;
248  }
249  else if(rx.cap(2) == "O")
250  {
251  if(rx.cap(1) == "17")
252  {
253  m_mapIsotope.at(Isotope::O17) = number_of_isotopes;
254  }
255  else if(rx.cap(1) == "18")
256  {
257  m_mapIsotope.at(Isotope::O18) = number_of_isotopes;
258  }
259  m_atomCount[AtomIsotopeSurvey::O] += number_of_isotopes;
260  }
261  else if(rx.cap(2) == "S")
262  {
263  if(rx.cap(1) == "33")
264  {
265  m_mapIsotope.at(Isotope::S33) = number_of_isotopes;
266  }
267  else if(rx.cap(1) == "34")
268  {
269  m_mapIsotope.at(Isotope::S34) = number_of_isotopes;
270  }
271  else if(rx.cap(1) == "36")
272  {
273  m_mapIsotope.at(Isotope::S36) = number_of_isotopes;
274  }
275  m_atomCount[AtomIsotopeSurvey::S] += number_of_isotopes;
276  }
277  pos += rx.matchedLength();
278  }
279 
280 
282 }
283 
284 
285 void
287 {
288  pappso_double theoreticalm_mass = 0;
289  std::map<AtomIsotopeSurvey, int>::const_iterator it_atom =
290  m_atomCount.find(AtomIsotopeSurvey::C);
291  if(it_atom != m_atomCount.end())
292  {
293  theoreticalm_mass += MASSCARBON * (it_atom->second);
294  }
295  it_atom = m_atomCount.find(AtomIsotopeSurvey::H);
296  if(it_atom != m_atomCount.end())
297  {
298  theoreticalm_mass += MPROTIUM * (it_atom->second);
299  }
300 
301  it_atom = m_atomCount.find(AtomIsotopeSurvey::O);
302  if(it_atom != m_atomCount.end())
303  {
304  theoreticalm_mass += MASSOXYGEN * (it_atom->second);
305  }
306 
307  it_atom = m_atomCount.find(AtomIsotopeSurvey::N);
308  if(it_atom != m_atomCount.end())
309  {
310  theoreticalm_mass += MASSNITROGEN * (it_atom->second);
311  }
312  it_atom = m_atomCount.find(AtomIsotopeSurvey::S);
313  if(it_atom != m_atomCount.end())
314  {
315  theoreticalm_mass += MASSSULFUR * (it_atom->second);
316  }
317 
318  qDebug() << theoreticalm_mass;
319 
320  theoreticalm_mass += DIFFC12C13 * m_mapIsotope.at(Isotope::C13);
321  theoreticalm_mass += DIFFH1H2 * m_mapIsotope.at(Isotope::H2);
322  theoreticalm_mass += DIFFN14N15 * m_mapIsotope.at(Isotope::N15);
323  theoreticalm_mass += DIFFO16O17 * m_mapIsotope.at(Isotope::O17);
324  theoreticalm_mass += DIFFO16O18 * m_mapIsotope.at(Isotope::O18);
325  theoreticalm_mass += DIFFS32S33 * m_mapIsotope.at(Isotope::S33);
326  theoreticalm_mass += DIFFS32S34 * m_mapIsotope.at(Isotope::S34);
327  theoreticalm_mass += DIFFS32S36 * m_mapIsotope.at(Isotope::S36);
328 
329 
330  pappso_double diff = std::fabs((pappso_double)m_mass - theoreticalm_mass);
331  if(diff < 0.001)
332  {
333  m_mass = theoreticalm_mass;
334  qDebug() << "AaModification::calculateMassFromChemicalComponents "
335  << diff;
336  }
337  else
338  {
339  qDebug()
340  << "ERROR in AaModification::calculateMassFromChemicalComponents theo="
341  << theoreticalm_mass << " m=" << m_mass << " diff=" << diff
342  << " accession=" << m_accession;
343  }
344 }
345 
348 {
349  QString accession = QString("%1").arg(modificationMass);
350  qDebug() << "AaModification::getInstanceCustomizedMod " << accession;
351  QMutexLocker locker(&m_mutex);
352  if(m_mapAccessionModifications.find(accession) ==
354  {
355  // not found
356  m_mapAccessionModifications.insert(std::pair<QString, AaModification *>(
357  accession, new AaModification(accession, modificationMass)));
358  }
359  else
360  {
361  // found
362  }
363  return m_mapAccessionModifications.at(accession);
364 }
365 
367 AaModification::getInstance(const QString &accession)
368 {
369  try
370  {
371  QMutexLocker locker(&m_mutex);
372  MapAccessionModifications::iterator it =
373  m_mapAccessionModifications.find(accession);
374  if(it == m_mapAccessionModifications.end())
375  {
376 
377  // not found
378  std::pair<MapAccessionModifications::iterator, bool> insert_res =
380  std::pair<QString, AaModificationP>(
381  accession, AaModification::createInstance(accession)));
382  it = insert_res.first;
383  }
384  else
385  {
386  // found
387  }
388  return it->second;
389  }
390  catch(ExceptionNotFound &e)
391  {
392  throw ExceptionNotFound(
393  QObject::tr("ERROR getting instance of : %1 NOT FOUND\n%2")
394  .arg(accession)
395  .arg(e.qwhat()));
396  }
397  catch(PappsoException &e)
398  {
399  throw PappsoException(QObject::tr("ERROR getting instance of %1\n%2")
400  .arg(accession)
401  .arg(e.qwhat()));
402  }
403  catch(std::exception &e)
404  {
405  throw PappsoException(QObject::tr("ERROR getting instance of %1\n%2")
406  .arg(accession)
407  .arg(e.what()));
408  }
409 }
410 
413 {
414 
415  QMutexLocker locker(&m_mutex);
416  MapAccessionModifications::iterator it =
418  if(it == m_mapAccessionModifications.end())
419  {
420  // not found
421  std::pair<MapAccessionModifications::iterator, bool> insert_res =
422  m_mapAccessionModifications.insert(std::pair<QString, AaModificationP>(
423  oboterm.m_accession, AaModification::createInstance(oboterm)));
424  it = insert_res.first;
425  }
426  else
427  {
428  // found
429  }
430  return it->second;
431 }
432 
433 
436  pappso_double mass,
437  const PeptideSp &peptide_sp,
438  unsigned int position)
439 {
441  if(MzRange(mass, precision).contains(getInstance("MOD:00719")->getMass()))
442  {
443  if(type == "M")
444  {
445  return getInstance("MOD:00719");
446  }
447  if(type == "K")
448  {
449  return getInstance("MOD:01047");
450  }
451  }
452  // accession== "MOD:00057"
453  if(MzRange(mass, precision).contains(getInstance("MOD:00408")->getMass()))
454  {
455  // id: MOD:00394
456  // name: acetylated residue
457  // potential N-terminus modifications
458  if(position == 0)
459  {
460  return getInstance("MOD:00408");
461  }
462  }
463  if(MzRange(mass, precision).contains(getInstance("MOD:01160")->getMass()))
464  {
465  //-17.02655
466  // loss of ammonia [MOD:01160] -17.026549
467  return getInstance("MOD:01160");
468  }
469 
470  if(MzRange(mass, precision).contains(getInstance("MOD:01060")->getMass()))
471  {
472  //// iodoacetamide [MOD:00397] 57.021464
473  if(type == "C")
474  {
475  return getInstance("MOD:01060");
476  }
477  else
478  {
479  return getInstance("MOD:00397");
480  }
481  }
482  if(MzRange(mass, precision).contains(getInstance("MOD:00704")->getMass()))
483  {
484  // loss of water
485  /*
486  if (position == 0) {
487  if (peptide_sp.get()->getSequence().startsWith("EG")) {
488  return getInstance("MOD:00365");
489  }
490  if (peptide_sp.get()->getSequence().startsWith("ES")) {
491  return getInstance("MOD:00953");
492  }
493  if (type == "E") {
494  return getInstance("MOD:00420");
495  }
496  }
497  */
498  // dehydrated residue [MOD:00704] -18.010565
499  return getInstance("MOD:00704");
500  }
501  if(MzRange(mass, precision).contains(getInstance("MOD:00696")->getMass()))
502  {
503  // phosphorylated residue [MOD:00696] 79.966330
504  return getInstance("MOD:00696");
505  }
506  bool isCter = false;
507  if(peptide_sp.get()->size() == (position + 1))
508  {
509  isCter = true;
510  }
511  if((position == 0) || isCter)
512  {
513  if(MzRange(mass, precision).contains(getInstance("MOD:00429")->getMass()))
514  {
515  // dimethyl
516  return getInstance("MOD:00429");
517  }
518  if(MzRange(mass, precision).contains(getInstance("MOD:00552")->getMass()))
519  {
520  // 4x(2)H labeled dimethyl residue
521  return getInstance("MOD:00552");
522  }
523  if(MzRange(mass, precision).contains(getInstance("MOD:00638")->getMass()))
524  {
525  // 2x(13)C,6x(2)H-dimethylated arginine
526  return getInstance("MOD:00638");
527  }
528  }
529  throw PappsoException(
530  QObject::tr("tandem modification not found : %1 %2 %3 %4")
531  .arg(type)
532  .arg(mass)
533  .arg(peptide_sp.get()->getSequence())
534  .arg(position));
535 }
536 
539 {
540  return m_mass;
541 }
542 
543 
544 int
546 {
547  // qDebug() << "AaModification::getNumberOfAtom(AtomIsotopeSurvey atom) NOT
548  // IMPLEMENTED";
549  return m_atomCount.at(atom);
550 }
551 
552 
553 int
555 {
556  try
557  {
558  return m_mapIsotope.at(isotope);
559  }
560  catch(std::exception &e)
561  {
562  throw PappsoException(
563  QObject::tr("ERROR in AaModification::getNumberOfIsotope %2")
564  .arg(e.what()));
565  }
566 }
567 
568 
569 bool
571 {
572  if(m_accession.startsWith("internal:"))
573  {
574  return true;
575  }
576  return false;
577 }
578 
580 AaModification::createInstanceMutation(const Aa &aa_from, const Aa &aa_to)
581 {
582  QString accession(
583  QString("MUTATION:%1=>%2").arg(aa_from.getLetter()).arg(aa_to.getLetter()));
584  double diffMono = aa_to.getMass() - aa_from.getMass();
585  // not found
586  AaModification *instance_mutation;
587  // qDebug() << " AaModification::createInstance begin";
588  instance_mutation = new AaModification(accession, diffMono);
589  // xref: DiffFormula: "C 0 H 0 N 0 O 1 S 0"
590 
591  for(std::int8_t atomInt = (std::int8_t)AtomIsotopeSurvey::C;
592  atomInt != (std::int8_t)AtomIsotopeSurvey::last;
593  atomInt++)
594  {
595  AtomIsotopeSurvey atom = static_cast<AtomIsotopeSurvey>(atomInt);
596  instance_mutation->m_atomCount[atom] =
597  aa_to.getNumberOfAtom(atom) - aa_from.getNumberOfAtom(atom);
598  }
599  instance_mutation->m_name = QString("mutation from %1 to %2")
600  .arg(aa_from.getLetter())
601  .arg(aa_to.getLetter());
602  return instance_mutation;
603 }
604 
605 
607 AaModification::getInstanceMutation(const QChar &mut_from, const QChar &mut_to)
608 {
609  QString accession(QString("MUTATION:%1=>%2").arg(mut_from).arg(mut_to));
610  try
611  {
612  QMutexLocker locker(&m_mutex);
613  MapAccessionModifications::iterator it =
614  m_mapAccessionModifications.find(accession);
615  if(it == m_mapAccessionModifications.end())
616  {
617  Aa aa_from(mut_from.toLatin1());
618  Aa aa_to(mut_to.toLatin1());
619  AaModificationP instance_mutation =
620  createInstanceMutation(aa_from, aa_to);
621 
622  std::pair<MapAccessionModifications::iterator, bool> insert_res =
624  std::pair<QString, AaModificationP>(accession,
625  instance_mutation));
626  it = insert_res.first;
627  }
628  else
629  {
630  // found
631  }
632  return it->second;
633  }
634  catch(ExceptionNotFound &e)
635  {
636  throw ExceptionNotFound(
637  QObject::tr("ERROR getting instance of : %1 NOT FOUND\n%2")
638  .arg(accession)
639  .arg(e.qwhat()));
640  }
641  catch(PappsoException &e)
642  {
643  throw PappsoException(QObject::tr("ERROR getting instance of %1\n%2")
644  .arg(accession)
645  .arg(e.qwhat()));
646  }
647  catch(std::exception &e)
648  {
649  throw PappsoException(QObject::tr("ERROR getting instance of %1\n%2")
650  .arg(accession)
651  .arg(e.what()));
652  }
653 } // namespace pappso
654 
655 } // namespace pappso
pappso::AaModification::setDiffFormula
void setDiffFormula(const QString &diff_formula)
Definition: aamodification.cpp:186
pappso::pappso_double
double pappso_double
A type definition for doubles.
Definition: types.h:48
pappso::AaModification::m_mass
pappso_double m_mass
Definition: aamodification.h:59
pappso::AaModification::calculateMassFromChemicalComponents
void calculateMassFromChemicalComponents()
Definition: aamodification.cpp:286
pappso::AaModification::getAccession
const QString & getAccession() const
Definition: aamodification.cpp:90
pappso::AaModification::createInstanceMutation
static AaModificationP createInstanceMutation(const Aa &aa_from, const Aa &aa_to)
Definition: aamodification.cpp:580
pappso::OboPsiModTerm
Definition: obopsimod.h:36
pappso::AaModification::m_accession
const QString m_accession
Definition: aamodification.h:77
pappso::MASSCARBON
const pappso_double MASSCARBON(12)
pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition: aa.cpp:39
pappso::FilterOboPsiModSink
Definition: filterobopsimodsink.h:36
pappso::OboPsiMod
Definition: obopsimod.h:71
pappso::DIFFN14N15
const pappso_double DIFFN14N15(15.0001088982 - MASSNITROGEN)
pappso::Isotope
Isotope
Definition: types.h:91
pappso::DIFFH1H2
const pappso_double DIFFH1H2(2.0141017778 - MPROTIUM)
pappso::AaModification::getInstanceXtandemMod
static AaModificationP getInstanceXtandemMod(const QString &type, pappso_double mass, const PeptideSp &peptide_sp, unsigned int position)
Definition: aamodification.cpp:435
pappso::OboPsiModTerm::m_diffFormula
QString m_diffFormula
Definition: obopsimod.h:52
pappso::AaModification::getNumberOfAtom
int getNumberOfAtom(AtomIsotopeSurvey atom) const override final
get the number of atom C, O, N, H in the molecule
Definition: aamodification.cpp:545
pappso::DIFFS32S33
const pappso_double DIFFS32S33(32.97145876 - MASSSULFUR)
pappso::OboPsiModTerm::m_accession
QString m_accession
Definition: obopsimod.h:48
pappso::Aa::getNumberOfAtom
int getNumberOfAtom(AtomIsotopeSurvey atom) const override final
get the number of atom C, O, N, H in the molecule
Definition: aa.cpp:166
pappso::AaModification::AaModification
AaModification(const QString &accession, pappso_double mass)
Definition: aamodification.cpp:56
pappso::AaModification::getMass
pappso_double getMass() const
Definition: aamodification.cpp:538
pappso::Aa::getMass
pappso_double getMass() const override
Definition: aa.cpp:79
pappso::AaBase::getLetter
virtual const char & getLetter() const
Definition: aabase.cpp:432
pappso::AaModification::getInstanceMutation
static AaModificationP getInstanceMutation(const QChar &mut_from, const QChar &mut_to)
get a fake modification coding a mutation from an amino acid to an other
Definition: aamodification.cpp:607
pappso::AaModificationP
const AaModification * AaModificationP
Definition: aamodification.h:52
pappso::PrecisionFactory::getDaltonInstance
static PrecisionPtr getDaltonInstance(pappso_double value)
Definition: precision.cpp:129
pappso::MzRange
Definition: mzrange.h:46
pappso::DIFFS32S34
const pappso_double DIFFS32S34(33.96786690 - MASSSULFUR)
pappso::FilterOboPsiModTermAccession
Definition: filterobopsimodtermaccession.h:33
pappso::AaModification::isInternal
bool isInternal() const
Definition: aamodification.cpp:570
pappso::AaModification::m_mapAccessionModifications
static MapAccessionModifications m_mapAccessionModifications
Definition: aamodification.h:72
pappso::DIFFC12C13
const pappso_double DIFFC12C13(1.0033548378)
pappso::AaModification::getNumberOfIsotope
int getNumberOfIsotope(Isotope isotope) const override final
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
Definition: aamodification.cpp:554
pappso::AaModification::getInstance
static AaModificationP getInstance(const QString &accession)
Definition: aamodification.cpp:367
pappso::AaModification::m_mapIsotope
std::map< Isotope, int > m_mapIsotope
Definition: aamodification.h:62
aamodification.h
amino acid modification model
pappso::AaModification::MapAccessionModifications
std::map< QString, AaModificationP > MapAccessionModifications
Definition: aamodification.h:71
pappso::AaModification::m_atomCount
std::map< AtomIsotopeSurvey, int > m_atomCount
Definition: aamodification.h:61
pappso::DIFFS32S36
const pappso_double DIFFS32S36(35.96708076 - MASSSULFUR)
pappso::AaModification::setXrefOrigin
void setXrefOrigin(const QString &origin)
set list of amino acid on which this modification takes place
Definition: aamodification.cpp:179
pappso::ExceptionNotFound
Definition: exceptionnotfound.h:32
pappso::AaModification::getName
const QString & getName() const
Definition: aamodification.cpp:97
pappso::PrecisionBase
Definition: precision.h:44
pappso::FilterOboPsiModSink::getOne
const OboPsiModTerm & getOne()
Definition: filterobopsimodsink.cpp:50
pappso::AaModification::~AaModification
~AaModification()
Definition: aamodification.cpp:85
pappso::AaModification::createInstance
static AaModificationP createInstance(const QString &saccession)
Definition: aamodification.cpp:122
pappso::AtomIsotopeSurvey::last
@ last
pappso::MASSSULFUR
const pappso_double MASSSULFUR(31.97207100)
pappso::AaModification::m_mutex
static QMutex m_mutex
Definition: aamodification.h:74
pappso::PappsoException::qwhat
virtual const QString & qwhat() const
Definition: pappsoexception.h:66
pappso::Isotope::C13
@ C13
pappso::OboPsiModTerm::m_name
QString m_name
Definition: obopsimod.h:49
aa.h
pappso::AaModification::getInstanceCustomizedMod
static AaModificationP getInstanceCustomizedMod(pappso_double modificationMass)
Definition: aamodification.cpp:347
pappso::MASSOXYGEN
const pappso_double MASSOXYGEN(15.99491461956)
pappso::MPROTIUM
const pappso_double MPROTIUM(1.007825032241)
pappso::MASSNITROGEN
const pappso_double MASSNITROGEN(14.0030740048)
pappso::DIFFO16O17
const pappso_double DIFFO16O17(16.99913150 - MASSOXYGEN)
pappso::AaModification::m_name
QString m_name
Definition: aamodification.h:78
pappso::PeptideSp
std::shared_ptr< const Peptide > PeptideSp
Definition: aamodification.h:47
pappso::OboPsiModTerm::m_diffMono
pappso_double m_diffMono
Definition: obopsimod.h:55
pappso::Aa
Definition: aa.h:45
pappso::AaModification
Definition: aamodification.h:57
pappso::DIFFO16O18
const pappso_double DIFFO16O18(17.9991610 - MASSOXYGEN)
pappso::PappsoException
Definition: pappsoexception.h:42
pappso::AtomIsotopeSurvey
AtomIsotopeSurvey
Definition: types.h:76
pappso::AaModification::m_origin
QString m_origin
Definition: aamodification.h:60
pappso::OboPsiModTerm::m_origin
QString m_origin
Definition: obopsimod.h:53