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