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
37using namespace std;
38
39namespace pappso
40{
41
42AaBase::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 {
52 QObject::tr("amino acid %1 not found").arg(aa_letter));
53 }
54}
55
56AaBase::AaBase(AminoAcidChar aa_char) : m_aaLetter((char)aa_char)
57{
58}
59
60
61AaBase::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',
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',
135 MASSOXYGEN * 1)));
136 // C6H13NO2
137 ret.insert(std::pair<char, pappso_double>(
138 'I',
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',
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',
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',
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
380AaBase::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
393int
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
418void
420{
421 if(m_aaLetter == 'L')
422 m_aaLetter = 'I';
423}
424
425
426int
427AaBase::getNumberOfIsotope(Isotope isotope [[maybe_unused]]) const
428{
429 return 0;
430}
431
432
433const char &
435{
436 return m_aaLetter;
437}
438
439const 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)