libpappsomspp
Library for mass spectrometry
aabase.cpp
Go to the documentation of this file.
1 /**
2  * \file pappsomspp/amino_acid/aaBase.cpp
3  * \date 7/3/2015
4  * \author Olivier Langella
5  * \brief private amino acid 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 <QDebug>
32 #include "aabase.h"
33 #include "../exception/exceptionnotfound.h"
34 
35 using namespace std;
36 
37 namespace pappso
38 {
39 
40 AaBase::AaBase(char aa_letter) : m_aaLetter(aa_letter)
41 {
42  /*
43  if (AaBase::_aa_mass_map.empty()) {
44  AaBase::static_builder();
45  }
46  */
47  if(m_aaMassMap.find(aa_letter) == m_aaMassMap.end())
48  {
49  throw ExceptionNotFound(
50  QObject::tr("amino acid %1 not found").arg(aa_letter));
51  }
52 }
53 
54 AaBase::AaBase(AminoAcidChar aa_char) : m_aaLetter((char)aa_char)
55 {
56 }
57 
58 
59 AaBase::AaBase(const AaBase &aa) : m_aaLetter(aa.m_aaLetter)
60 {
61 }
62 
64 {
65  // TODO Auto-generated destructor stub
66 }
67 
69  AminoAcidCharList ret = {
82  };
83 
84 
85  return ret;
86 }();
87 
89  AaMassMap ret;
90  // populate ret
91  // http://education.expasy.org/student_projects/isotopident/htdocs/aa-list.html
92 
93  // C11H12N2O2
94  ret.insert(std::pair<char, pappso_double>(
95  'W',
96  pappso_double(MASSCARBON * 11 + MPROTIUM * 10 + MASSNITROGEN * 2 +
97  MASSOXYGEN * 1)));
98  // C2H5NO2
99  ret.insert(std::pair<char, pappso_double>(
100  'G',
102  MASSOXYGEN * 1)));
103 
104  // C3H7NO2
105  ret.insert(std::pair<char, pappso_double>(
106  'A',
108  MASSOXYGEN * 1)));
109  // C3H7NO3
110  ret.insert(std::pair<char, pappso_double>(
111  'S',
113  MASSOXYGEN * 2)));
114  // C5H9NO2
115  ret.insert(std::pair<char, pappso_double>(
116  'P',
118  MASSOXYGEN * 1)));
119  // C5H11NO2
120  ret.insert(std::pair<char, pappso_double>(
121  'V',
123  MASSOXYGEN * 1)));
124  // C4H9NO3
125  ret.insert(std::pair<char, pappso_double>(
126  'T',
128  MASSOXYGEN * 2)));
129  // C6H13NO2
130  ret.insert(std::pair<char, pappso_double>(
131  'L',
132  pappso_double(MASSCARBON * 6 + MPROTIUM * 11 + MASSNITROGEN * 1 +
133  MASSOXYGEN * 1)));
134  // C6H13NO2
135  ret.insert(std::pair<char, pappso_double>(
136  'I',
137  pappso_double(MASSCARBON * 6 + MPROTIUM * 11 + MASSNITROGEN * 1 +
138  MASSOXYGEN * 1)));
139  // C4H8N2O3
140  ret.insert(std::pair<char, pappso_double>(
141  'N',
143  MASSOXYGEN * 2)));
144  // C4H7NO4
145  ret.insert(std::pair<char, pappso_double>(
146  'D',
148  MASSOXYGEN * 3)));
149  // C6H14N2O2
150  ret.insert(std::pair<char, pappso_double>(
151  'K',
152  pappso_double(MASSCARBON * 6 + MPROTIUM * 12 + MASSNITROGEN * 2 +
153  MASSOXYGEN * 1)));
154  // C5H10N2O3
155  ret.insert(std::pair<char, pappso_double>(
156  'Q',
158  MASSOXYGEN * 2)));
159  // C5H9NO4
160  ret.insert(std::pair<char, pappso_double>(
161  'E',
163  MASSOXYGEN * 3)));
164 
165  // C5H11NO2S
166  ret.insert(std::pair<char, pappso_double>(
167  'M',
169  MASSOXYGEN * 1 + MASSSULFUR)));
170  // $arrret['m'] = 147.04; #METHIONINE OXIDEE (+16)
171  // case 'm':
172  // mass = (float) 131.0404;
173  // addModification((float) 15.994915);
174  // C6H9N3O2
175  ret.insert(std::pair<char, pappso_double>(
176  'H',
178  MASSOXYGEN * 1)));
179  // C9H11NO2
180  ret.insert(std::pair<char, pappso_double>(
181  'F',
183  MASSOXYGEN * 1)));
184  // C6H14N4O2
185  ret.insert(std::pair<char, pappso_double>(
186  'R',
187  pappso_double(MASSCARBON * 6 + MPROTIUM * 12 + MASSNITROGEN * 4 +
188  MASSOXYGEN * 1)));
189  // C3H7NO2S
190  ret.insert(std::pair<char, pappso_double>(
191  'C',
193  MASSOXYGEN * 1 + MASSSULFUR)));
194  // mass = (float) 161.01; // CYSTEINE CARBAMIDOMETHYLE
195  // addModification((float) 57.021464);
196  // C9H11NO3
197  ret.insert(std::pair<char, pappso_double>(
198  'Y',
200  MASSOXYGEN * 2)));
201 
202  // Pyrrolysine C12H21N3O3
203  ret.insert(std::pair<char, pappso_double>(
204  'O',
205  pappso_double(MASSCARBON * 12 + MPROTIUM * 21 + MASSNITROGEN * 3 +
206  MASSOXYGEN * 3)));
207 
208  // Selenocysteine C3H7NO2Se
209  ret.insert(std::pair<char, pappso_double>(
210  'U',
212  MASSOXYGEN * 2 + MASSSELENIUM)));
213  // 168.018678469607
214  // ret.insert(std::pair<char, pappso_double>('U', pappso_double(168.964203)));
215  //_aa_mass_map.insert(
216  // std::pair<char, pappso_double>('X', pappso_double(103.00919)));
217  return ret;
218 }();
219 
221  AaIntMap ret;
222  // populate ret
223 
224  ret.insert(std::pair<char, unsigned int>('W', 11));
225  ret.insert(std::pair<char, unsigned int>('G', 2));
226  ret.insert(std::pair<char, unsigned int>('A', 3));
227  ret.insert(std::pair<char, unsigned int>('S', 3));
228  ret.insert(std::pair<char, unsigned int>('P', 5));
229  ret.insert(std::pair<char, unsigned int>('V', 5));
230  ret.insert(std::pair<char, unsigned int>('T', 4));
231  ret.insert(std::pair<char, unsigned int>('L', 6));
232  ret.insert(std::pair<char, unsigned int>('I', 6));
233  ret.insert(std::pair<char, unsigned int>('N', 4));
234  ret.insert(std::pair<char, unsigned int>('D', 4));
235  ret.insert(std::pair<char, unsigned int>('K', 6));
236  ret.insert(std::pair<char, unsigned int>('Q', 5));
237  ret.insert(std::pair<char, unsigned int>('E', 5));
238  ret.insert(std::pair<char, unsigned int>('M', 5));
239  ret.insert(std::pair<char, unsigned int>('H', 6));
240  ret.insert(std::pair<char, unsigned int>('F', 9));
241  ret.insert(std::pair<char, unsigned int>('R', 6));
242  ret.insert(std::pair<char, unsigned int>('C', 3));
243  ret.insert(std::pair<char, unsigned int>('Y', 9));
244  // Selenocysteine C3H7NO2Se
245  ret.insert(std::pair<char, unsigned int>('U', 3));
246  // Pyrrolysine C12H21N3O3
247  ret.insert(std::pair<char, unsigned int>('O', 12));
248  return ret;
249 }();
250 
251 
253  AaIntMap ret;
254  // populate ret
255 
256  ret.insert(std::pair<char, unsigned int>('A', 5));
257  ret.insert(std::pair<char, unsigned int>('C', 5));
258  ret.insert(std::pair<char, unsigned int>('D', 5));
259  ret.insert(std::pair<char, unsigned int>('E', 7));
260  ret.insert(std::pair<char, unsigned int>('F', 9));
261  ret.insert(std::pair<char, unsigned int>('G', 3));
262  ret.insert(std::pair<char, unsigned int>('H', 7));
263  ret.insert(std::pair<char, unsigned int>('I', 11));
264  ret.insert(std::pair<char, unsigned int>('K', 12));
265  ret.insert(std::pair<char, unsigned int>('L', 11));
266  ret.insert(std::pair<char, unsigned int>('M', 9));
267  ret.insert(std::pair<char, unsigned int>('N', 6));
268  ret.insert(std::pair<char, unsigned int>('P', 7));
269  ret.insert(std::pair<char, unsigned int>('Q', 8));
270  ret.insert(std::pair<char, unsigned int>('R', 12));
271  ret.insert(std::pair<char, unsigned int>('S', 5));
272  ret.insert(std::pair<char, unsigned int>('T', 7));
273  ret.insert(std::pair<char, unsigned int>('V', 9));
274  ret.insert(std::pair<char, unsigned int>('W', 10));
275  ret.insert(std::pair<char, unsigned int>('Y', 9));
276  // Selenocysteine C3H7NO2Se
277  ret.insert(std::pair<char, unsigned int>('U', 7));
278  // Pyrrolysine C12H21N3O3
279  ret.insert(std::pair<char, unsigned int>('O', 21));
280  return ret;
281 }();
282 
283 
285  AaIntMap ret;
286  // populate ret
287 
288  ret.insert(std::pair<char, unsigned int>('A', 1));
289  ret.insert(std::pair<char, unsigned int>('C', 1));
290  ret.insert(std::pair<char, unsigned int>('D', 1));
291  ret.insert(std::pair<char, unsigned int>('E', 1));
292  ret.insert(std::pair<char, unsigned int>('F', 1));
293  ret.insert(std::pair<char, unsigned int>('G', 1));
294  ret.insert(std::pair<char, unsigned int>('H', 3));
295  ret.insert(std::pair<char, unsigned int>('I', 1));
296  ret.insert(std::pair<char, unsigned int>('K', 2));
297  ret.insert(std::pair<char, unsigned int>('L', 1));
298  ret.insert(std::pair<char, unsigned int>('M', 1));
299  ret.insert(std::pair<char, unsigned int>('N', 2));
300  ret.insert(std::pair<char, unsigned int>('P', 1));
301  ret.insert(std::pair<char, unsigned int>('Q', 2));
302  ret.insert(std::pair<char, unsigned int>('R', 4));
303  ret.insert(std::pair<char, unsigned int>('S', 1));
304  ret.insert(std::pair<char, unsigned int>('T', 1));
305  ret.insert(std::pair<char, unsigned int>('V', 1));
306  ret.insert(std::pair<char, unsigned int>('W', 2));
307  ret.insert(std::pair<char, unsigned int>('Y', 1));
308  // Selenocysteine C3H7NO2Se
309  ret.insert(std::pair<char, unsigned int>('U', 1));
310  // Pyrrolysine C12H21N3O3
311  ret.insert(std::pair<char, unsigned int>('O', 3));
312  return ret;
313 }();
314 
316  AaIntMap ret;
317  // populate ret
318 
319  ret.insert(std::pair<char, unsigned int>('A', 1));
320  ret.insert(std::pair<char, unsigned int>('C', 1));
321  ret.insert(std::pair<char, unsigned int>('D', 3));
322  ret.insert(std::pair<char, unsigned int>('E', 3));
323  ret.insert(std::pair<char, unsigned int>('F', 1));
324  ret.insert(std::pair<char, unsigned int>('G', 1));
325  ret.insert(std::pair<char, unsigned int>('H', 1));
326  ret.insert(std::pair<char, unsigned int>('I', 1));
327  ret.insert(std::pair<char, unsigned int>('K', 1));
328  ret.insert(std::pair<char, unsigned int>('L', 1));
329  ret.insert(std::pair<char, unsigned int>('M', 1));
330  ret.insert(std::pair<char, unsigned int>('N', 2));
331  ret.insert(std::pair<char, unsigned int>('P', 1));
332  ret.insert(std::pair<char, unsigned int>('Q', 2));
333  ret.insert(std::pair<char, unsigned int>('R', 1));
334  ret.insert(std::pair<char, unsigned int>('S', 2));
335  ret.insert(std::pair<char, unsigned int>('T', 2));
336  ret.insert(std::pair<char, unsigned int>('V', 1));
337  ret.insert(std::pair<char, unsigned int>('W', 1));
338  ret.insert(std::pair<char, unsigned int>('Y', 2));
339  // Selenocysteine C3H7NO2Se
340  ret.insert(std::pair<char, unsigned int>('U', 2));
341  // Pyrrolysine C12H21N3O3
342  ret.insert(std::pair<char, unsigned int>('O', 3));
343  return ret;
344 }();
345 
347  AaIntMap ret;
348  // populate ret
349 
350  ret.insert(std::pair<char, unsigned int>('A', 0));
351  ret.insert(std::pair<char, unsigned int>('C', 1));
352  ret.insert(std::pair<char, unsigned int>('D', 0));
353  ret.insert(std::pair<char, unsigned int>('E', 0));
354  ret.insert(std::pair<char, unsigned int>('F', 0));
355  ret.insert(std::pair<char, unsigned int>('G', 0));
356  ret.insert(std::pair<char, unsigned int>('H', 0));
357  ret.insert(std::pair<char, unsigned int>('I', 0));
358  ret.insert(std::pair<char, unsigned int>('K', 0));
359  ret.insert(std::pair<char, unsigned int>('L', 0));
360  ret.insert(std::pair<char, unsigned int>('M', 1));
361  ret.insert(std::pair<char, unsigned int>('N', 0));
362  ret.insert(std::pair<char, unsigned int>('P', 0));
363  ret.insert(std::pair<char, unsigned int>('Q', 0));
364  ret.insert(std::pair<char, unsigned int>('R', 0));
365  ret.insert(std::pair<char, unsigned int>('S', 0));
366  ret.insert(std::pair<char, unsigned int>('T', 0));
367  ret.insert(std::pair<char, unsigned int>('V', 0));
368  ret.insert(std::pair<char, unsigned int>('W', 0));
369  ret.insert(std::pair<char, unsigned int>('Y', 0));
370  // Selenocysteine C3H7NO2Se
371  ret.insert(std::pair<char, unsigned int>('U', 0));
372  // Pyrrolysine C12H21N3O3
373  ret.insert(std::pair<char, unsigned int>('O', 0));
374  return ret;
375 }();
376 
378 AaBase::getAaMass(char aa_letter)
379 {
380  return m_aaMassMap.at(aa_letter);
381 }
382 
383 
386 {
387  return m_aaMassMap.at(m_aaLetter);
388 }
389 
390 
391 int
393 {
394  switch(atom)
395  {
397  return this->m_aaNumberOfCarbonMap.at(m_aaLetter);
399  return this->m_aaNumberOfHydrogenMap.at(m_aaLetter);
401  return this->m_aaNumberOfNitrogenMap.at(m_aaLetter);
403  return this->m_aaNumberOfOxygenMap.at(m_aaLetter);
405  return this->m_aaNumberOfSulfurMap.at(m_aaLetter);
406  default:
407  return 0;
408  }
409  // selenium (U) is not taken into account to compute isotopes
410  // it has 5 stable isotopes and the most abundant is 80Se (49,61%)
411  qDebug() << "AaBase::getNumberOfAtom(AtomIsotopeSurvey atom) NOT IMPLEMENTED";
412  return 0;
413 }
414 
415 
416 void
418 {
419  if(m_aaLetter == 'L')
420  m_aaLetter = 'I';
421 }
422 
423 
424 int
425 AaBase::getNumberOfIsotope(Isotope isotope [[maybe_unused]]) const
426 {
427  return 0;
428 }
429 
430 
431 const char &
433 {
434  return m_aaLetter;
435 }
436 
437 const std::vector<AminoAcidChar> &
439 {
440  return m_aminoAcidCharList;
441 }
442 } /* namespace pappso */
private amino acid model
AaBase(char aa_letter)
Definition: aabase.cpp:40
std::vector< AminoAcidChar > AminoAcidCharList
Definition: aabase.h:70
static AaMassMap m_aaMassMap
Definition: aabase.h:72
std::map< char, unsigned int > AaIntMap
Definition: aabase.h:69
static AaIntMap m_aaNumberOfSulfurMap
Definition: aabase.h:74
static AaIntMap m_aaNumberOfCarbonMap
Definition: aabase.h:73
static AaIntMap m_aaNumberOfOxygenMap
Definition: aabase.h:77
virtual pappso_double getMass() const
Definition: aabase.cpp:385
char m_aaLetter
Definition: aabase.h:65
static const std::vector< AminoAcidChar > & getAminoAcidCharList()
Definition: aabase.cpp:438
static pappso_double getAaMass(char aa_letter)
Definition: aabase.cpp:378
virtual void replaceLeucineIsoleucine()
Definition: aabase.cpp:417
std::map< char, pappso_double > AaMassMap
Definition: aabase.h:68
virtual const char & getLetter() const
Definition: aabase.cpp:432
virtual ~AaBase()
Definition: aabase.cpp:63
static AminoAcidCharList m_aminoAcidCharList
Definition: aabase.h:78
static AaIntMap m_aaNumberOfNitrogenMap
Definition: aabase.h:76
static AaIntMap m_aaNumberOfHydrogenMap
Definition: aabase.h:75
virtual int getNumberOfAtom(AtomIsotopeSurvey atom) const override
get the number of atom C, O, N, H in the molecule
Definition: aabase.cpp:392
int getNumberOfIsotope(Isotope isotope) const override
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
Definition: aabase.cpp:425
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition: aa.cpp:39
AminoAcidChar
Definition: types.h:133
const pappso_double MASSCARBON(12)
const pappso_double MASSSULFUR(31.9720711741)
const pappso_double MASSSELENIUM(79.916520)
AtomIsotopeSurvey
Definition: types.h:76
double pappso_double
A type definition for doubles.
Definition: types.h:48
Isotope
Definition: types.h:91
const pappso_double MPROTIUM(1.007825032241)
const pappso_double MASSNITROGEN(14.0030740048)
const pappso_double MASSOXYGEN(15.99491461956)