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
37
38using namespace std;
39
40namespace pappso
41{
42
43AaBase::AaBase(char aa_letter) : m_aaLetter(aa_letter)
44{
45 /*
46 if (AaBase::_aa_mass_map.empty()) {
47 AaBase::static_builder();
48 }
49 */
50 qDebug() << aa_letter;
51 if(m_aaMassMap.find(aa_letter) == m_aaMassMap.end())
52 {
53 qDebug() << "error";
54 if((int)aa_letter == 0)
55 {
56 throw ExceptionNotPossible(QObject::tr("amino acid letter is void"));
57 }
58 else
59 {
60 throw ExceptionNotFound(QObject::tr("amino acid %1 not found").arg(aa_letter));
61 }
62 }
63 qDebug();
64}
65
67{
68}
69
70
72{
73}
74
76{
77 // TODO Auto-generated destructor stub
78}
79
81 AminoAcidCharList ret = {
93 };
94
95
96 return ret;
97}();
98
100 AaMassMap ret;
101 // populate ret
102 // http://education.expasy.org/student_projects/isotopident/htdocs/aa-list.html
103
104 // C11H12N2O2
105 ret.insert(std::pair<char, pappso_double>(
106 'W', pappso_double(MASSCARBON * 11 + MPROTIUM * 10 + MASSNITROGEN * 2 + MASSOXYGEN * 1)));
107 // C2H5NO2
108 ret.insert(std::pair<char, pappso_double>(
109 'G', pappso_double(MASSCARBON * 2 + MPROTIUM * 3 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
110
111 // C3H7NO2
112 ret.insert(std::pair<char, pappso_double>(
113 'A', pappso_double(MASSCARBON * 3 + MPROTIUM * 5 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
114 // C3H7NO3
115 ret.insert(std::pair<char, pappso_double>(
116 'S', pappso_double(MASSCARBON * 3 + MPROTIUM * 5 + MASSNITROGEN * 1 + MASSOXYGEN * 2)));
117 // C5H9NO2
118 ret.insert(std::pair<char, pappso_double>(
119 'P', pappso_double(MASSCARBON * 5 + MPROTIUM * 7 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
120 // C5H11NO2
121 ret.insert(std::pair<char, pappso_double>(
122 'V', pappso_double(MASSCARBON * 5 + MPROTIUM * 9 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
123 // C4H9NO3
124 ret.insert(std::pair<char, pappso_double>(
125 'T', pappso_double(MASSCARBON * 4 + MPROTIUM * 7 + MASSNITROGEN * 1 + MASSOXYGEN * 2)));
126 // C6H13NO2
127 ret.insert(std::pair<char, pappso_double>(
128 'L', pappso_double(MASSCARBON * 6 + MPROTIUM * 11 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
129 // C6H13NO2
130 ret.insert(std::pair<char, pappso_double>(
131 'I', pappso_double(MASSCARBON * 6 + MPROTIUM * 11 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
132 // C4H8N2O3
133 ret.insert(std::pair<char, pappso_double>(
134 'N', pappso_double(MASSCARBON * 4 + MPROTIUM * 6 + MASSNITROGEN * 2 + MASSOXYGEN * 2)));
135 // C4H7NO4
136 ret.insert(std::pair<char, pappso_double>(
137 'D', pappso_double(MASSCARBON * 4 + MPROTIUM * 5 + MASSNITROGEN * 1 + MASSOXYGEN * 3)));
138 // C6H14N2O2
139 ret.insert(std::pair<char, pappso_double>(
140 'K', pappso_double(MASSCARBON * 6 + MPROTIUM * 12 + MASSNITROGEN * 2 + MASSOXYGEN * 1)));
141 // C5H10N2O3
142 ret.insert(std::pair<char, pappso_double>(
143 'Q', pappso_double(MASSCARBON * 5 + MPROTIUM * 8 + MASSNITROGEN * 2 + MASSOXYGEN * 2)));
144 // C5H9NO4
145 ret.insert(std::pair<char, pappso_double>(
146 'E', pappso_double(MASSCARBON * 5 + MPROTIUM * 7 + MASSNITROGEN * 1 + MASSOXYGEN * 3)));
147
148 // C5H11NO2S
149 ret.insert(std::pair<char, pappso_double>(
150 'M',
152 // $arrret['m'] = 147.04; #METHIONINE OXIDEE (+16)
153 // case 'm':
154 // mass = (float) 131.0404;
155 // addModification((float) 15.994915);
156 // C6H9N3O2
157 ret.insert(std::pair<char, pappso_double>(
158 'H', pappso_double(MASSCARBON * 6 + MPROTIUM * 7 + MASSNITROGEN * 3 + MASSOXYGEN * 1)));
159 // C9H11NO2
160 ret.insert(std::pair<char, pappso_double>(
161 'F', pappso_double(MASSCARBON * 9 + MPROTIUM * 9 + MASSNITROGEN * 1 + MASSOXYGEN * 1)));
162 // C6H14N4O2
163 ret.insert(std::pair<char, pappso_double>(
164 'R', pappso_double(MASSCARBON * 6 + MPROTIUM * 12 + MASSNITROGEN * 4 + MASSOXYGEN * 1)));
165 // C3H7NO2S
166 ret.insert(std::pair<char, pappso_double>(
167 'C',
169 // mass = (float) 161.01; // CYSTEINE CARBAMIDOMETHYLE
170 // addModification((float) 57.021464);
171 // C9H11NO3
172 ret.insert(std::pair<char, pappso_double>(
173 'Y', pappso_double(MASSCARBON * 9 + MPROTIUM * 9 + MASSNITROGEN * 1 + MASSOXYGEN * 2)));
174
175 // Pyrrolysine C12H21N3O3
176 ret.insert(std::pair<char, pappso_double>(
177 'O', pappso_double(MASSCARBON * 12 + MPROTIUM * 21 + MASSNITROGEN * 3 + MASSOXYGEN * 3)));
178
179 // Selenocysteine C3H7NO2Se
180 ret.insert(
181 std::pair<char, pappso_double>('U',
183 MASSOXYGEN * 2 + MASSSELENIUM)));
184 // 168.018678469607
185 // ret.insert(std::pair<char, pappso_double>('U', pappso_double(168.964203)));
186 //_aa_mass_map.insert(
187 // std::pair<char, pappso_double>('X', pappso_double(103.00919)));
188 return ret;
189}();
190
192 AaIntMap ret;
193 // populate ret
194
195 ret.insert(std::pair<char, unsigned int>('W', 11));
196 ret.insert(std::pair<char, unsigned int>('G', 2));
197 ret.insert(std::pair<char, unsigned int>('A', 3));
198 ret.insert(std::pair<char, unsigned int>('S', 3));
199 ret.insert(std::pair<char, unsigned int>('P', 5));
200 ret.insert(std::pair<char, unsigned int>('V', 5));
201 ret.insert(std::pair<char, unsigned int>('T', 4));
202 ret.insert(std::pair<char, unsigned int>('L', 6));
203 ret.insert(std::pair<char, unsigned int>('I', 6));
204 ret.insert(std::pair<char, unsigned int>('N', 4));
205 ret.insert(std::pair<char, unsigned int>('D', 4));
206 ret.insert(std::pair<char, unsigned int>('K', 6));
207 ret.insert(std::pair<char, unsigned int>('Q', 5));
208 ret.insert(std::pair<char, unsigned int>('E', 5));
209 ret.insert(std::pair<char, unsigned int>('M', 5));
210 ret.insert(std::pair<char, unsigned int>('H', 6));
211 ret.insert(std::pair<char, unsigned int>('F', 9));
212 ret.insert(std::pair<char, unsigned int>('R', 6));
213 ret.insert(std::pair<char, unsigned int>('C', 3));
214 ret.insert(std::pair<char, unsigned int>('Y', 9));
215 // Selenocysteine C3H7NO2Se
216 ret.insert(std::pair<char, unsigned int>('U', 3));
217 // Pyrrolysine C12H21N3O3
218 ret.insert(std::pair<char, unsigned int>('O', 12));
219 return ret;
220}();
221
222
224 AaIntMap ret;
225 // populate ret
226
227 ret.insert(std::pair<char, unsigned int>('A', 5));
228 ret.insert(std::pair<char, unsigned int>('C', 5));
229 ret.insert(std::pair<char, unsigned int>('D', 5));
230 ret.insert(std::pair<char, unsigned int>('E', 7));
231 ret.insert(std::pair<char, unsigned int>('F', 9));
232 ret.insert(std::pair<char, unsigned int>('G', 3));
233 ret.insert(std::pair<char, unsigned int>('H', 7));
234 ret.insert(std::pair<char, unsigned int>('I', 11));
235 ret.insert(std::pair<char, unsigned int>('K', 12));
236 ret.insert(std::pair<char, unsigned int>('L', 11));
237 ret.insert(std::pair<char, unsigned int>('M', 9));
238 ret.insert(std::pair<char, unsigned int>('N', 6));
239 ret.insert(std::pair<char, unsigned int>('P', 7));
240 ret.insert(std::pair<char, unsigned int>('Q', 8));
241 ret.insert(std::pair<char, unsigned int>('R', 12));
242 ret.insert(std::pair<char, unsigned int>('S', 5));
243 ret.insert(std::pair<char, unsigned int>('T', 7));
244 ret.insert(std::pair<char, unsigned int>('V', 9));
245 ret.insert(std::pair<char, unsigned int>('W', 10));
246 ret.insert(std::pair<char, unsigned int>('Y', 9));
247 // Selenocysteine C3H7NO2Se
248 ret.insert(std::pair<char, unsigned int>('U', 7));
249 // Pyrrolysine C12H21N3O3
250 ret.insert(std::pair<char, unsigned int>('O', 21));
251 return ret;
252}();
253
254
256 AaIntMap ret;
257 // populate ret
258
259 ret.insert(std::pair<char, unsigned int>('A', 1));
260 ret.insert(std::pair<char, unsigned int>('C', 1));
261 ret.insert(std::pair<char, unsigned int>('D', 1));
262 ret.insert(std::pair<char, unsigned int>('E', 1));
263 ret.insert(std::pair<char, unsigned int>('F', 1));
264 ret.insert(std::pair<char, unsigned int>('G', 1));
265 ret.insert(std::pair<char, unsigned int>('H', 3));
266 ret.insert(std::pair<char, unsigned int>('I', 1));
267 ret.insert(std::pair<char, unsigned int>('K', 2));
268 ret.insert(std::pair<char, unsigned int>('L', 1));
269 ret.insert(std::pair<char, unsigned int>('M', 1));
270 ret.insert(std::pair<char, unsigned int>('N', 2));
271 ret.insert(std::pair<char, unsigned int>('P', 1));
272 ret.insert(std::pair<char, unsigned int>('Q', 2));
273 ret.insert(std::pair<char, unsigned int>('R', 4));
274 ret.insert(std::pair<char, unsigned int>('S', 1));
275 ret.insert(std::pair<char, unsigned int>('T', 1));
276 ret.insert(std::pair<char, unsigned int>('V', 1));
277 ret.insert(std::pair<char, unsigned int>('W', 2));
278 ret.insert(std::pair<char, unsigned int>('Y', 1));
279 // Selenocysteine C3H7NO2Se
280 ret.insert(std::pair<char, unsigned int>('U', 1));
281 // Pyrrolysine C12H21N3O3
282 ret.insert(std::pair<char, unsigned int>('O', 3));
283 return ret;
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', 3));
293 ret.insert(std::pair<char, unsigned int>('E', 3));
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', 1));
297 ret.insert(std::pair<char, unsigned int>('I', 1));
298 ret.insert(std::pair<char, unsigned int>('K', 1));
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', 1));
305 ret.insert(std::pair<char, unsigned int>('S', 2));
306 ret.insert(std::pair<char, unsigned int>('T', 2));
307 ret.insert(std::pair<char, unsigned int>('V', 1));
308 ret.insert(std::pair<char, unsigned int>('W', 1));
309 ret.insert(std::pair<char, unsigned int>('Y', 2));
310 // Selenocysteine C3H7NO2Se
311 ret.insert(std::pair<char, unsigned int>('U', 2));
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', 0));
322 ret.insert(std::pair<char, unsigned int>('C', 1));
323 ret.insert(std::pair<char, unsigned int>('D', 0));
324 ret.insert(std::pair<char, unsigned int>('E', 0));
325 ret.insert(std::pair<char, unsigned int>('F', 0));
326 ret.insert(std::pair<char, unsigned int>('G', 0));
327 ret.insert(std::pair<char, unsigned int>('H', 0));
328 ret.insert(std::pair<char, unsigned int>('I', 0));
329 ret.insert(std::pair<char, unsigned int>('K', 0));
330 ret.insert(std::pair<char, unsigned int>('L', 0));
331 ret.insert(std::pair<char, unsigned int>('M', 1));
332 ret.insert(std::pair<char, unsigned int>('N', 0));
333 ret.insert(std::pair<char, unsigned int>('P', 0));
334 ret.insert(std::pair<char, unsigned int>('Q', 0));
335 ret.insert(std::pair<char, unsigned int>('R', 0));
336 ret.insert(std::pair<char, unsigned int>('S', 0));
337 ret.insert(std::pair<char, unsigned int>('T', 0));
338 ret.insert(std::pair<char, unsigned int>('V', 0));
339 ret.insert(std::pair<char, unsigned int>('W', 0));
340 ret.insert(std::pair<char, unsigned int>('Y', 0));
341 // Selenocysteine C3H7NO2Se
342 ret.insert(std::pair<char, unsigned int>('U', 0));
343 // Pyrrolysine C12H21N3O3
344 ret.insert(std::pair<char, unsigned int>('O', 0));
345 return ret;
346}();
347
349AaBase::getAaMass(char aa_letter)
350{
351 return m_aaMassMap.at(aa_letter);
352}
353
354
357{
358 return m_aaMassMap.at(m_aaLetter);
359}
360
361
362int
364{
365 switch(atom)
366 {
368 return this->m_aaNumberOfCarbonMap.at(m_aaLetter);
370 return this->m_aaNumberOfHydrogenMap.at(m_aaLetter);
372 return this->m_aaNumberOfNitrogenMap.at(m_aaLetter);
374 return this->m_aaNumberOfOxygenMap.at(m_aaLetter);
376 return this->m_aaNumberOfSulfurMap.at(m_aaLetter);
377 default:
378 return 0;
379 }
380 // selenium (U) is not taken into account to compute isotopes
381 // it has 5 stable isotopes and the most abundant is 80Se (49,61%)
382 qDebug() << "AaBase::getNumberOfAtom(Enums::AtomIsotopeSurvey atom) NOT IMPLEMENTED";
383 return 0;
384}
385
386
387void
389{
390 if(m_aaLetter == 'L')
391 m_aaLetter = 'I';
392}
393
394
395int
396AaBase::getNumberOfIsotope(Enums::Isotope isotope [[maybe_unused]]) const
397{
398 return 0;
399}
400
401
402const char &
404{
405 return m_aaLetter;
406}
407
413
414const std::vector<Enums::AminoAcidChar> &
419} /* namespace pappso */
AaBase(char aa_letter)
Definition aabase.cpp:43
int getNumberOfIsotope(Enums::Isotope isotope) const override
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
Definition aabase.cpp:396
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
static const std::vector< Enums::AminoAcidChar > & getAminoAcidCharList()
Definition aabase.cpp:415
const Enums::AminoAcidChar & getAminoAcidChar() const
Definition aabase.cpp:409
virtual pappso_double getMass() const
Definition aabase.cpp:356
virtual int getNumberOfAtom(Enums::AtomIsotopeSurvey atom) const override
get the number of atom C, O, N, H in the molecule
Definition aabase.cpp:363
char m_aaLetter
Definition aabase.h:68
static pappso_double getAaMass(char aa_letter)
Definition aabase.cpp:349
virtual void replaceLeucineIsoleucine()
Definition aabase.cpp:388
std::map< char, pappso_double > AaMassMap
Definition aabase.h:71
virtual const char & getLetter() const
Definition aabase.cpp:403
virtual ~AaBase()
Definition aabase.cpp:75
static AminoAcidCharList m_aminoAcidCharList
Definition aabase.h:81
static AaIntMap m_aaNumberOfNitrogenMap
Definition aabase.h:79
static AaIntMap m_aaNumberOfHydrogenMap
Definition aabase.h:78
std::vector< Enums::AminoAcidChar > AminoAcidCharList
Definition aabase.h:73
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
const pappso_double MASSCARBON(12)
const pappso_double MASSSULFUR(31.9720711741)
const pappso_double MASSSELENIUM(79.916520)
double pappso_double
A type definition for doubles.
Definition types.h:61
const pappso_double MPROTIUM(1.007825032241)
const pappso_double MASSNITROGEN(14.0030740048)
const pappso_double MASSOXYGEN(15.99491461956)