libpappsomspp
Library for mass spectrometry
Toggle main menu visibility
Loading...
Searching...
No Matches
proteinpresenceabsencematrix.cpp
Go to the documentation of this file.
1
/**
2
* \file protein/proteinpresenceabsencematrix.cpp
3
* \date 07/02/2024
4
* \author Olivier Langella
5
* \brief presence/absence matrix of amino acid code along the protein sequence
6
*/
7
8
/*******************************************************************************
9
* Copyright (c) 2024 Olivier Langella
10
*<Olivier.Langella@universite-paris-saclay.fr>.
11
*
12
* This file is part of PAPPSOms++.
13
*
14
* PAPPSOms++ is free software: you can redistribute it and/or modify
15
* it under the terms of the GNU General Public License as published by
16
* the Free Software Foundation, either version 3 of the License, or
17
* (at your option) any later version.
18
*
19
* PAPPSOms++ is distributed in the hope that it will be useful,
20
* but WITHOUT ANY WARRANTY; without even the implied warranty of
21
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
* GNU General Public License for more details.
23
*
24
* You should have received a copy of the GNU General Public License
25
* along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
26
*
27
******************************************************************************/
28
29
#include "
proteinpresenceabsencematrix.h
"
30
#include "
proteinintegercode.h
"
31
32
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrix
()
33
{
34
}
35
36
pappso::ProteinPresenceAbsenceMatrix::~ProteinPresenceAbsenceMatrix
()
37
{
38
}
39
40
41
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrix
(
42
const
pappso::ProteinPresenceAbsenceMatrix
&other)
43
{
44
m_presenceAbsenceMatrix
= other.
m_presenceAbsenceMatrix
;
45
}
46
47
pappso::ProteinPresenceAbsenceMatrix
&
48
pappso::ProteinPresenceAbsenceMatrix::operator=
(
const
pappso::ProteinPresenceAbsenceMatrix
&other)
49
{
50
m_presenceAbsenceMatrix
= other.
m_presenceAbsenceMatrix
;
51
52
return
*
this
;
53
}
54
55
56
const
boost::numeric::ublas::matrix<
57
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrixElement
> &
58
pappso::ProteinPresenceAbsenceMatrix::getPresenceAbsenceMatrix
()
const
59
{
60
return
m_presenceAbsenceMatrix
;
61
}
62
63
void
64
pappso::ProteinPresenceAbsenceMatrix::fillMatrix
(
65
const
pappso::ProteinIntegerCode
&coded_protein,
66
const
std::vector<uint32_t> &code_list_from_spectrum)
67
{
68
const
std::vector<std::uint8_t> &seq_aa_code = coded_protein.
getSeqAaCode
();
69
70
m_presenceAbsenceMatrix
.resize(seq_aa_code.size(), 5);
71
std::vector<std::uint8_t>::const_iterator it_aa = seq_aa_code.begin();
72
auto
it_couple = coded_protein.
getPeptideCodedFragment
(2).begin();
73
auto
it_trio = coded_protein.
getPeptideCodedFragment
(3).begin();
74
auto
it_quatro = coded_protein.
getPeptideCodedFragment
(4).begin();
75
auto
it_cinqo = coded_protein.
getPeptideCodedFragment
(5).begin();
76
77
for
(std::size_t i = 0; i < seq_aa_code.size(); i++)
78
{
79
if
(std::binary_search(
80
code_list_from_spectrum.begin(), code_list_from_spectrum.end(), (std::uint32_t)(*it_aa)))
81
{
82
// presence
83
m_presenceAbsenceMatrix
(i, 0) =
ProteinPresenceAbsenceMatrixElement::present
;
84
}
85
else
86
{
87
m_presenceAbsenceMatrix
(i, 0) =
ProteinPresenceAbsenceMatrixElement::absent
;
88
}
89
if
(std::binary_search(
90
code_list_from_spectrum.begin(), code_list_from_spectrum.end(), *it_couple))
91
{
92
// presence
93
m_presenceAbsenceMatrix
(i, 1) =
ProteinPresenceAbsenceMatrixElement::present
;
94
}
95
else
96
{
97
m_presenceAbsenceMatrix
(i, 1) =
ProteinPresenceAbsenceMatrixElement::absent
;
98
}
99
if
(std::binary_search(
100
code_list_from_spectrum.begin(), code_list_from_spectrum.end(), *it_trio))
101
{
102
// presence
103
m_presenceAbsenceMatrix
(i, 2) =
ProteinPresenceAbsenceMatrixElement::present
;
104
}
105
else
106
{
107
m_presenceAbsenceMatrix
(i, 2) =
ProteinPresenceAbsenceMatrixElement::absent
;
108
}
109
if
(std::binary_search(
110
code_list_from_spectrum.begin(), code_list_from_spectrum.end(), *it_quatro))
111
{
112
// presence
113
m_presenceAbsenceMatrix
(i, 3) =
ProteinPresenceAbsenceMatrixElement::present
;
114
}
115
else
116
{
117
m_presenceAbsenceMatrix
(i, 3) =
ProteinPresenceAbsenceMatrixElement::absent
;
118
}
119
if
(std::binary_search(
120
code_list_from_spectrum.begin(), code_list_from_spectrum.end(), *it_cinqo))
121
{
122
// presence
123
m_presenceAbsenceMatrix
(i, 4) =
ProteinPresenceAbsenceMatrixElement::present
;
124
}
125
else
126
{
127
m_presenceAbsenceMatrix
(i, 4) =
ProteinPresenceAbsenceMatrixElement::absent
;
128
}
129
it_aa++;
130
it_couple++;
131
it_trio++;
132
it_quatro++;
133
it_cinqo++;
134
}
135
}
136
137
138
std::vector<double>
139
pappso::ProteinPresenceAbsenceMatrix::convolution
()
const
140
{
141
142
std::vector<double> convolution_score;
143
144
for
(std::size_t ipos = 0; ipos <
m_presenceAbsenceMatrix
.size1(); ipos++)
145
{
146
convolution_score.push_back(
convolutionKernel
(ipos));
147
}
148
149
return
convolution_score;
150
}
151
152
double
153
pappso::ProteinPresenceAbsenceMatrix::getScore
(std::size_t seq_position,
154
std::size_t aa_fragment_size)
const
155
{
156
if
(
m_presenceAbsenceMatrix
(seq_position, aa_fragment_size) ==
157
ProteinPresenceAbsenceMatrixElement::present
)
158
{
159
switch
(aa_fragment_size)
160
{
161
case
0:
162
return
1;
163
case
1:
164
return
3;
165
case
2:
166
return
6;
167
case
3:
168
return
8;
169
case
4:
170
return
10;
171
default
:
172
break
;
173
}
174
}
175
else
176
{
177
// absent
178
switch
(aa_fragment_size)
179
{
180
case
0:
181
return
0.1;
182
case
1:
183
return
0.3;
184
case
2:
185
return
0.6;
186
case
3:
187
return
0.8;
188
case
4:
189
return
1;
190
default
:
191
break
;
192
}
193
}
194
return
0.1;
195
}
196
197
double
198
pappso::ProteinPresenceAbsenceMatrix::convolutionKernel
(std::size_t position)
const
199
{
200
double
score = 0;
201
202
std::size_t size_seq =
m_presenceAbsenceMatrix
.size1();
203
// single :
204
double
single_score = 0;
205
std::size_t endpos = std::min(position + 5, size_seq);
206
for
(std::size_t ipos = position; ipos < endpos; ipos++)
207
{
208
single_score +=
getScore
(ipos, 0);
209
}
210
211
// duo
212
double
duo_score = 0;
213
endpos = std::min(position + 4, size_seq);
214
for
(std::size_t ipos = position; ipos < endpos; ipos++)
215
{
216
duo_score +=
getScore
(ipos, 1);
217
}
218
219
220
// trio
221
double
trio_score = 0;
222
endpos = std::min(position + 3, size_seq);
223
for
(std::size_t ipos = position; ipos < endpos; ipos++)
224
{
225
trio_score +=
getScore
(ipos, 2);
226
}
227
228
229
// quatro
230
double
quatro_score = 0;
231
endpos = std::min(position + 2, size_seq);
232
for
(std::size_t ipos = position; ipos < endpos; ipos++)
233
{
234
quatro_score +=
getScore
(ipos, 3);
235
}
236
237
// cinqo
238
score +=
getScore
(position, 4);
239
return
score * single_score * duo_score * trio_score * quatro_score;
240
}
pappso::ProteinIntegerCode
Definition
proteinintegercode.h:44
pappso::ProteinIntegerCode::getPeptideCodedFragment
const std::vector< std::uint32_t > & getPeptideCodedFragment(std::size_t size) const
Definition
proteinintegercode.cpp:107
pappso::ProteinIntegerCode::getSeqAaCode
const std::vector< std::uint8_t > & getSeqAaCode() const
Definition
proteinintegercode.cpp:73
pappso::ProteinPresenceAbsenceMatrix
Definition
proteinpresenceabsencematrix.h:44
pappso::ProteinPresenceAbsenceMatrix::convolution
std::vector< double > convolution() const
process convolution of spectrum code list along protein sequence
Definition
proteinpresenceabsencematrix.cpp:139
pappso::ProteinPresenceAbsenceMatrix::~ProteinPresenceAbsenceMatrix
virtual ~ProteinPresenceAbsenceMatrix()
Definition
proteinpresenceabsencematrix.cpp:36
pappso::ProteinPresenceAbsenceMatrix::getScore
double getScore(std::size_t seq_position, std::size_t aa_fragment_size) const
Definition
proteinpresenceabsencematrix.cpp:153
pappso::ProteinPresenceAbsenceMatrix::operator=
ProteinPresenceAbsenceMatrix & operator=(const ProteinPresenceAbsenceMatrix &other)
Definition
proteinpresenceabsencematrix.cpp:48
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrix
ProteinPresenceAbsenceMatrix()
Definition
proteinpresenceabsencematrix.cpp:32
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrixElement
ProteinPresenceAbsenceMatrixElement
Definition
proteinpresenceabsencematrix.h:73
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrixElement::present
@ present
the aa sequence code is present
Definition
proteinpresenceabsencematrix.h:75
pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrixElement::absent
@ absent
the aa sequence code is not present
Definition
proteinpresenceabsencematrix.h:74
pappso::ProteinPresenceAbsenceMatrix::convolutionKernel
double convolutionKernel(std::size_t position) const
Definition
proteinpresenceabsencematrix.cpp:198
pappso::ProteinPresenceAbsenceMatrix::fillMatrix
void fillMatrix(const pappso::ProteinIntegerCode &coded_protein, const std::vector< uint32_t > &code_list_from_spectrum)
Definition
proteinpresenceabsencematrix.cpp:64
pappso::ProteinPresenceAbsenceMatrix::m_presenceAbsenceMatrix
boost::numeric::ublas::matrix< ProteinPresenceAbsenceMatrixElement > m_presenceAbsenceMatrix
Definition
proteinpresenceabsencematrix.h:91
pappso::ProteinPresenceAbsenceMatrix::getPresenceAbsenceMatrix
const boost::numeric::ublas::matrix< pappso::ProteinPresenceAbsenceMatrix::ProteinPresenceAbsenceMatrixElement > & getPresenceAbsenceMatrix() const
Definition
proteinpresenceabsencematrix.cpp:58
proteinintegercode.h
transform protein amino acid sequence into vectors of amino acid codes
proteinpresenceabsencematrix.h
presence/absence matrix of amino acid code along the protein sequence
pappsomspp
core
protein
proteinpresenceabsencematrix.cpp
Generated on
for libpappsomspp by
1.17.0