libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
aacode.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/amino_acid/aacode.cpp
3 * \date 03/05/2023
4 * \author Olivier Langella
5 * \brief give an integer code to each amino acid
6 */
7
8/*******************************************************************************
9 * Copyright (c) 2023 Olivier Langella <Olivier.Langella@u-psud.fr>.
10 *
11 * This file is part of PAPPSOms-tools.
12 *
13 * PAPPSOms-tools 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-tools 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-tools. If not, see <http://www.gnu.org/licenses/>.
25 *
26 ******************************************************************************/
27
28#include "aacode.h"
29#include "../exception/exceptionnotfound.h"
30#include "../exception/exceptionoutofrange.h"
31
32using namespace pappso;
33
35{
36 m_asciiTable.resize(90, 0);
37
38 m_aaCollection.push_back(Aa('A'));
39 m_aaCollection.push_back(Aa('C'));
40 m_aaCollection.push_back(Aa('D'));
41 m_aaCollection.push_back(Aa('E'));
42 m_aaCollection.push_back(Aa('F'));
43 m_aaCollection.push_back(Aa('G'));
44 m_aaCollection.push_back(Aa('H'));
45 m_aaCollection.push_back(Aa('I'));
46 m_aaCollection.push_back(Aa('K'));
47 m_aaCollection.push_back(Aa('M'));
48 m_aaCollection.push_back(Aa('N'));
49 m_aaCollection.push_back(Aa('P'));
50 m_aaCollection.push_back(Aa('Q'));
51 m_aaCollection.push_back(Aa('R'));
52 m_aaCollection.push_back(Aa('S'));
53 m_aaCollection.push_back(Aa('T'));
54 m_aaCollection.push_back(Aa('V'));
55 m_aaCollection.push_back(Aa('W'));
56 m_aaCollection.push_back(Aa('Y'));
57
59}
60
62{
63
64 m_asciiTable = other.m_asciiTable;
65
66 m_aaCollection = other.m_aaCollection;
67}
68
72
73std::size_t
75{
76 return 19;
77}
78
79
80uint8_t
81pappso::AaCode::getAaCode(char aa_letter) const
82{
83 // qDebug() << aa_letter << " " << (uint8_t)aa_letter;
84 // qDebug() << m_asciiTable[77];
85 return m_asciiTable[aa_letter];
86}
87
88const pappso::Aa &
89pappso::AaCode::getAa(char aa_letter) const
90{
91
92 auto it = std::find_if(
93 m_aaCollection.begin(), m_aaCollection.end(), [aa_letter](const Aa &aa) {
94 if(aa.getLetter() == aa_letter)
95 return true;
96 return false;
97 });
98 if(it != m_aaCollection.end())
99 {
100 return *it;
101 }
103 QObject::tr("error, %1 amino acid not found in m_aaCollection")
104 .arg(aa_letter));
105}
106
107
108const pappso::Aa &
109pappso::AaCode::getAa(uint8_t aa_code) const
110{
111 if(aa_code == 0)
112 {
114 QObject::tr("error, 0 is null : no amino acid").arg(aa_code));
115 }
116 else if(aa_code > 19)
117 {
119 QObject::tr("error, %1 amino acid code not found in m_aaCollection")
120 .arg(aa_code));
121 }
122 return m_aaCollection[aa_code - 1];
123}
124
125
126void
128 pappso::AaModificationP aaModification)
129{
130
131 auto it = std::find_if(
132 m_aaCollection.begin(), m_aaCollection.end(), [aa_letter](const Aa &aa) {
133 if(aa.getLetter() == aa_letter)
134 return true;
135 return false;
136 });
137 if(it != m_aaCollection.end())
138 {
139 it->addAaModification(aaModification);
140 }
141 else
142 {
144 QObject::tr("error, %1 amino acid not found in m_aaCollection")
145 .arg(aa_letter));
146 }
147
148 updateNumbers();
149}
150
151
152void
154{
155
156 std::sort(
157 m_aaCollection.begin(),
158 m_aaCollection.end(),
159 [](const Aa &aa1, const Aa &aa2) { return aa1.getMass() < aa2.getMass(); });
160
161 std::size_t n = 1;
162 for(const Aa &aa : m_aaCollection)
163 {
164 // qDebug() << aa.getLetter() << " " << n;
165 m_asciiTable[aa.getLetter()] = n;
166 n++;
167 }
168 m_asciiTable['L'] = m_asciiTable['I'];
169
170 updateMass();
171}
172
173void
175{
176 m_massCollection.resize(1);
177
178 for(const Aa &aa : m_aaCollection)
179 {
180 m_massCollection.push_back(aa.getMass());
181 }
182}
183
184
185double
186pappso::AaCode::getMass(uint8_t aa_code) const
187{
188 return m_massCollection[aa_code];
189}
give an integer code to each amino acid
collection of integer code for each amino acid 0 => null 1 to 20 => amino acid sorted by there mass (...
Definition aacode.h:43
void updateNumbers()
give a number (the code) to each amino acid sorted by mass
Definition aacode.cpp:153
void addAaModification(char aa_letter, AaModificationP aaModification)
Definition aacode.cpp:127
std::vector< uint8_t > m_asciiTable
Definition aacode.h:81
void updateMass()
update mass cache
Definition aacode.cpp:174
uint8_t getAaCode(char aa_letter) const
Definition aacode.cpp:81
double getMass(uint8_t aa_code) const
Definition aacode.cpp:186
std::size_t getSize() const
Definition aacode.cpp:74
std::vector< Aa > m_aaCollection
Definition aacode.h:83
const Aa & getAa(char aa_letter) const
Definition aacode.cpp:89
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39