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