libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
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 = {
83 };
84
85
86 return ret;
87}();
88
90 AaMassMap ret;
91 // populate ret
92 // http://education.expasy.org/student_projects/isotopident/htdocs/aa-list.html
93
94 // C11H12N2O2
95 ret.insert(std::pair<char, pappso_double>(
96 'W',
98 MASSOXYGEN * 1)));
99 // C2H5NO2
100 ret.insert(std::pair<char, pappso_double>(
101 'G',
103 MASSOXYGEN * 1)));
104
105 // C3H7NO2
106 ret.insert(std::pair<char, pappso_double>(
107 'A',
109 MASSOXYGEN * 1)));
110 // C3H7NO3
111 ret.insert(std::pair<char, pappso_double>(
112 'S',
114 MASSOXYGEN * 2)));
115 // C5H9NO2
116 ret.insert(std::pair<char, pappso_double>(
117 'P',
119 MASSOXYGEN * 1)));
120 // C5H11NO2
121 ret.insert(std::pair<char, pappso_double>(
122 'V',
124 MASSOXYGEN * 1)));
125 // C4H9NO3
126 ret.insert(std::pair<char, pappso_double>(
127 'T',
129 MASSOXYGEN * 2)));
130 // C6H13NO2
131 ret.insert(std::pair<char, pappso_double>(
132 'L',
134 MASSOXYGEN * 1)));
135 // C6H13NO2
136 ret.insert(std::pair<char, pappso_double>(
137 'I',
139 MASSOXYGEN * 1)));
140 // C4H8N2O3
141 ret.insert(std::pair<char, pappso_double>(
142 'N',
144 MASSOXYGEN * 2)));
145 // C4H7NO4
146 ret.insert(std::pair<char, pappso_double>(
147 'D',
149 MASSOXYGEN * 3)));
150 // C6H14N2O2
151 ret.insert(std::pair<char, pappso_double>(
152 'K',
154 MASSOXYGEN * 1)));
155 // C5H10N2O3
156 ret.insert(std::pair<char, pappso_double>(
157 'Q',
159 MASSOXYGEN * 2)));
160 // C5H9NO4
161 ret.insert(std::pair<char, pappso_double>(
162 'E',
164 MASSOXYGEN * 3)));
165
166 // C5H11NO2S
167 ret.insert(std::pair<char, pappso_double>(
168 'M',
170 MASSOXYGEN * 1 + MASSSULFUR)));
171 // $arrret['m'] = 147.04; #METHIONINE OXIDEE (+16)
172 // case 'm':
173 // mass = (float) 131.0404;
174 // addModification((float) 15.994915);
175 // C6H9N3O2
176 ret.insert(std::pair<char, pappso_double>(
177 'H',
179 MASSOXYGEN * 1)));
180 // C9H11NO2
181 ret.insert(std::pair<char, pappso_double>(
182 'F',
184 MASSOXYGEN * 1)));
185 // C6H14N4O2
186 ret.insert(std::pair<char, pappso_double>(
187 'R',
189 MASSOXYGEN * 1)));
190 // C3H7NO2S
191 ret.insert(std::pair<char, pappso_double>(
192 'C',
194 MASSOXYGEN * 1 + MASSSULFUR)));
195 // mass = (float) 161.01; // CYSTEINE CARBAMIDOMETHYLE
196 // addModification((float) 57.021464);
197 // C9H11NO3
198 ret.insert(std::pair<char, pappso_double>(
199 'Y',
201 MASSOXYGEN * 2)));
202
203 // Pyrrolysine C12H21N3O3
204 ret.insert(std::pair<char, pappso_double>(
205 'O',
207 MASSOXYGEN * 3)));
208
209 // Selenocysteine C3H7NO2Se
210 ret.insert(std::pair<char, pappso_double>(
211 'U',
213 MASSOXYGEN * 2 + MASSSELENIUM)));
214 // 168.018678469607
215 // ret.insert(std::pair<char, pappso_double>('U', pappso_double(168.964203)));
216 //_aa_mass_map.insert(
217 // std::pair<char, pappso_double>('X', pappso_double(103.00919)));
218 return ret;
219}();
220
222 AaIntMap ret;
223 // populate ret
224
225 ret.insert(std::pair<char, unsigned int>('W', 11));
226 ret.insert(std::pair<char, unsigned int>('G', 2));
227 ret.insert(std::pair<char, unsigned int>('A', 3));
228 ret.insert(std::pair<char, unsigned int>('S', 3));
229 ret.insert(std::pair<char, unsigned int>('P', 5));
230 ret.insert(std::pair<char, unsigned int>('V', 5));
231 ret.insert(std::pair<char, unsigned int>('T', 4));
232 ret.insert(std::pair<char, unsigned int>('L', 6));
233 ret.insert(std::pair<char, unsigned int>('I', 6));
234 ret.insert(std::pair<char, unsigned int>('N', 4));
235 ret.insert(std::pair<char, unsigned int>('D', 4));
236 ret.insert(std::pair<char, unsigned int>('K', 6));
237 ret.insert(std::pair<char, unsigned int>('Q', 5));
238 ret.insert(std::pair<char, unsigned int>('E', 5));
239 ret.insert(std::pair<char, unsigned int>('M', 5));
240 ret.insert(std::pair<char, unsigned int>('H', 6));
241 ret.insert(std::pair<char, unsigned int>('F', 9));
242 ret.insert(std::pair<char, unsigned int>('R', 6));
243 ret.insert(std::pair<char, unsigned int>('C', 3));
244 ret.insert(std::pair<char, unsigned int>('Y', 9));
245 // Selenocysteine C3H7NO2Se
246 ret.insert(std::pair<char, unsigned int>('U', 3));
247 // Pyrrolysine C12H21N3O3
248 ret.insert(std::pair<char, unsigned int>('O', 12));
249 return ret;
250}();
251
252
254 AaIntMap ret;
255 // populate ret
256
257 ret.insert(std::pair<char, unsigned int>('A', 5));
258 ret.insert(std::pair<char, unsigned int>('C', 5));
259 ret.insert(std::pair<char, unsigned int>('D', 5));
260 ret.insert(std::pair<char, unsigned int>('E', 7));
261 ret.insert(std::pair<char, unsigned int>('F', 9));
262 ret.insert(std::pair<char, unsigned int>('G', 3));
263 ret.insert(std::pair<char, unsigned int>('H', 7));
264 ret.insert(std::pair<char, unsigned int>('I', 11));
265 ret.insert(std::pair<char, unsigned int>('K', 12));
266 ret.insert(std::pair<char, unsigned int>('L', 11));
267 ret.insert(std::pair<char, unsigned int>('M', 9));
268 ret.insert(std::pair<char, unsigned int>('N', 6));
269 ret.insert(std::pair<char, unsigned int>('P', 7));
270 ret.insert(std::pair<char, unsigned int>('Q', 8));
271 ret.insert(std::pair<char, unsigned int>('R', 12));
272 ret.insert(std::pair<char, unsigned int>('S', 5));
273 ret.insert(std::pair<char, unsigned int>('T', 7));
274 ret.insert(std::pair<char, unsigned int>('V', 9));
275 ret.insert(std::pair<char, unsigned int>('W', 10));
276 ret.insert(std::pair<char, unsigned int>('Y', 9));
277 // Selenocysteine C3H7NO2Se
278 ret.insert(std::pair<char, unsigned int>('U', 7));
279 // Pyrrolysine C12H21N3O3
280 ret.insert(std::pair<char, unsigned int>('O', 21));
281 return ret;
282}();
283
284
286 AaIntMap ret;
287 // populate ret
288
289 ret.insert(std::pair<char, unsigned int>('A', 1));
290 ret.insert(std::pair<char, unsigned int>('C', 1));
291 ret.insert(std::pair<char, unsigned int>('D', 1));
292 ret.insert(std::pair<char, unsigned int>('E', 1));
293 ret.insert(std::pair<char, unsigned int>('F', 1));
294 ret.insert(std::pair<char, unsigned int>('G', 1));
295 ret.insert(std::pair<char, unsigned int>('H', 3));
296 ret.insert(std::pair<char, unsigned int>('I', 1));
297 ret.insert(std::pair<char, unsigned int>('K', 2));
298 ret.insert(std::pair<char, unsigned int>('L', 1));
299 ret.insert(std::pair<char, unsigned int>('M', 1));
300 ret.insert(std::pair<char, unsigned int>('N', 2));
301 ret.insert(std::pair<char, unsigned int>('P', 1));
302 ret.insert(std::pair<char, unsigned int>('Q', 2));
303 ret.insert(std::pair<char, unsigned int>('R', 4));
304 ret.insert(std::pair<char, unsigned int>('S', 1));
305 ret.insert(std::pair<char, unsigned int>('T', 1));
306 ret.insert(std::pair<char, unsigned int>('V', 1));
307 ret.insert(std::pair<char, unsigned int>('W', 2));
308 ret.insert(std::pair<char, unsigned int>('Y', 1));
309 // Selenocysteine C3H7NO2Se
310 ret.insert(std::pair<char, unsigned int>('U', 1));
311 // Pyrrolysine C12H21N3O3
312 ret.insert(std::pair<char, unsigned int>('O', 3));
313 return ret;
314}();
315
317 AaIntMap ret;
318 // populate ret
319
320 ret.insert(std::pair<char, unsigned int>('A', 1));
321 ret.insert(std::pair<char, unsigned int>('C', 1));
322 ret.insert(std::pair<char, unsigned int>('D', 3));
323 ret.insert(std::pair<char, unsigned int>('E', 3));
324 ret.insert(std::pair<char, unsigned int>('F', 1));
325 ret.insert(std::pair<char, unsigned int>('G', 1));
326 ret.insert(std::pair<char, unsigned int>('H', 1));
327 ret.insert(std::pair<char, unsigned int>('I', 1));
328 ret.insert(std::pair<char, unsigned int>('K', 1));
329 ret.insert(std::pair<char, unsigned int>('L', 1));
330 ret.insert(std::pair<char, unsigned int>('M', 1));
331 ret.insert(std::pair<char, unsigned int>('N', 2));
332 ret.insert(std::pair<char, unsigned int>('P', 1));
333 ret.insert(std::pair<char, unsigned int>('Q', 2));
334 ret.insert(std::pair<char, unsigned int>('R', 1));
335 ret.insert(std::pair<char, unsigned int>('S', 2));
336 ret.insert(std::pair<char, unsigned int>('T', 2));
337 ret.insert(std::pair<char, unsigned int>('V', 1));
338 ret.insert(std::pair<char, unsigned int>('W', 1));
339 ret.insert(std::pair<char, unsigned int>('Y', 2));
340 // Selenocysteine C3H7NO2Se
341 ret.insert(std::pair<char, unsigned int>('U', 2));
342 // Pyrrolysine C12H21N3O3
343 ret.insert(std::pair<char, unsigned int>('O', 3));
344 return ret;
345}();
346
348 AaIntMap ret;
349 // populate ret
350
351 ret.insert(std::pair<char, unsigned int>('A', 0));
352 ret.insert(std::pair<char, unsigned int>('C', 1));
353 ret.insert(std::pair<char, unsigned int>('D', 0));
354 ret.insert(std::pair<char, unsigned int>('E', 0));
355 ret.insert(std::pair<char, unsigned int>('F', 0));
356 ret.insert(std::pair<char, unsigned int>('G', 0));
357 ret.insert(std::pair<char, unsigned int>('H', 0));
358 ret.insert(std::pair<char, unsigned int>('I', 0));
359 ret.insert(std::pair<char, unsigned int>('K', 0));
360 ret.insert(std::pair<char, unsigned int>('L', 0));
361 ret.insert(std::pair<char, unsigned int>('M', 1));
362 ret.insert(std::pair<char, unsigned int>('N', 0));
363 ret.insert(std::pair<char, unsigned int>('P', 0));
364 ret.insert(std::pair<char, unsigned int>('Q', 0));
365 ret.insert(std::pair<char, unsigned int>('R', 0));
366 ret.insert(std::pair<char, unsigned int>('S', 0));
367 ret.insert(std::pair<char, unsigned int>('T', 0));
368 ret.insert(std::pair<char, unsigned int>('V', 0));
369 ret.insert(std::pair<char, unsigned int>('W', 0));
370 ret.insert(std::pair<char, unsigned int>('Y', 0));
371 // Selenocysteine C3H7NO2Se
372 ret.insert(std::pair<char, unsigned int>('U', 0));
373 // Pyrrolysine C12H21N3O3
374 ret.insert(std::pair<char, unsigned int>('O', 0));
375 return ret;
376}();
377
379AaBase::getAaMass(char aa_letter)
380{
381 return m_aaMassMap.at(aa_letter);
382}
383
384
387{
388 return m_aaMassMap.at(m_aaLetter);
389}
390
391
392int
394{
395 switch(atom)
396 {
398 return this->m_aaNumberOfCarbonMap.at(m_aaLetter);
400 return this->m_aaNumberOfHydrogenMap.at(m_aaLetter);
402 return this->m_aaNumberOfNitrogenMap.at(m_aaLetter);
404 return this->m_aaNumberOfOxygenMap.at(m_aaLetter);
406 return this->m_aaNumberOfSulfurMap.at(m_aaLetter);
407 default:
408 return 0;
409 }
410 // selenium (U) is not taken into account to compute isotopes
411 // it has 5 stable isotopes and the most abundant is 80Se (49,61%)
412 qDebug() << "AaBase::getNumberOfAtom(AtomIsotopeSurvey atom) NOT IMPLEMENTED";
413 return 0;
414}
415
416
417void
419{
420 if(m_aaLetter == 'L')
421 m_aaLetter = 'I';
422}
423
424
425int
426AaBase::getNumberOfIsotope(Isotope isotope [[maybe_unused]]) const
427{
428 return 0;
429}
430
431
432const char &
434{
435 return m_aaLetter;
436}
437
438const AminoAcidChar &
440{
441 return (AminoAcidChar &)m_aaLetter;
442}
443
444const std::vector<AminoAcidChar> &
449} /* namespace pappso */
private amino acid model
AaBase(char aa_letter)
Definition aabase.cpp:42
std::vector< AminoAcidChar > AminoAcidCharList
Definition aabase.h:73
static AaMassMap m_aaMassMap
Definition aabase.h:75
std::map< char, unsigned int > AaIntMap
Definition aabase.h:72
static AaIntMap m_aaNumberOfSulfurMap
Definition aabase.h:77
static AaIntMap m_aaNumberOfCarbonMap
Definition aabase.h:76
static AaIntMap m_aaNumberOfOxygenMap
Definition aabase.h:80
virtual pappso_double getMass() const
Definition aabase.cpp:386
char m_aaLetter
Definition aabase.h:68
static const std::vector< AminoAcidChar > & getAminoAcidCharList()
Definition aabase.cpp:445
static pappso_double getAaMass(char aa_letter)
Definition aabase.cpp:379
virtual void replaceLeucineIsoleucine()
Definition aabase.cpp:418
std::map< char, pappso_double > AaMassMap
Definition aabase.h:71
virtual const char & getLetter() const
Definition aabase.cpp:433
const AminoAcidChar & getAminoAcidChar() const
Definition aabase.cpp:439
virtual ~AaBase()
Definition aabase.cpp:65
static AminoAcidCharList m_aminoAcidCharList
Definition aabase.h:81
static AaIntMap m_aaNumberOfNitrogenMap
Definition aabase.h:79
static AaIntMap m_aaNumberOfHydrogenMap
Definition aabase.h:78
virtual int getNumberOfAtom(AtomIsotopeSurvey atom) const override
get the number of atom C, O, N, H in the molecule
Definition aabase.cpp:393
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:426
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
AminoAcidChar
Definition types.h:163
const pappso_double MASSCARBON(12)
const pappso_double MASSSULFUR(31.9720711741)
const pappso_double MASSSELENIUM(79.916520)
AtomIsotopeSurvey
Definition types.h:89
double pappso_double
A type definition for doubles.
Definition types.h:50
Isotope
Definition types.h:104
const pappso_double MPROTIUM(1.007825032241)
const pappso_double MASSNITROGEN(14.0030740048)
const pappso_double MASSOXYGEN(15.99491461956)