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