67 const std::vector<uint32_t> &code_list_from_spectrum)
69 const std::vector<std::uint8_t> &seq_aa_code = coded_protein.
getSeqAaCode();
71 m_presenceAbsenceMatrix.resize(seq_aa_code.size(), 5);
72 std::vector<std::uint8_t>::const_iterator it_aa = seq_aa_code.begin();
78 for(std::size_t i = 0; i < seq_aa_code.size(); i++)
80 if(std::binary_search(code_list_from_spectrum.begin(),
81 code_list_from_spectrum.end(),
82 (std::uint32_t)(*it_aa)))
85 m_presenceAbsenceMatrix(i, 0) =
86 ProteinPresenceAbsenceMatrixElement::present;
90 m_presenceAbsenceMatrix(i, 0) =
91 ProteinPresenceAbsenceMatrixElement::absent;
93 if(std::binary_search(code_list_from_spectrum.begin(),
94 code_list_from_spectrum.end(),
98 m_presenceAbsenceMatrix(i, 1) =
99 ProteinPresenceAbsenceMatrixElement::present;
103 m_presenceAbsenceMatrix(i, 1) =
104 ProteinPresenceAbsenceMatrixElement::absent;
106 if(std::binary_search(code_list_from_spectrum.begin(),
107 code_list_from_spectrum.end(),
111 m_presenceAbsenceMatrix(i, 2) =
112 ProteinPresenceAbsenceMatrixElement::present;
116 m_presenceAbsenceMatrix(i, 2) =
117 ProteinPresenceAbsenceMatrixElement::absent;
119 if(std::binary_search(code_list_from_spectrum.begin(),
120 code_list_from_spectrum.end(),
124 m_presenceAbsenceMatrix(i, 3) =
125 ProteinPresenceAbsenceMatrixElement::present;
129 m_presenceAbsenceMatrix(i, 3) =
130 ProteinPresenceAbsenceMatrixElement::absent;
132 if(std::binary_search(code_list_from_spectrum.begin(),
133 code_list_from_spectrum.end(),
137 m_presenceAbsenceMatrix(i, 4) =
138 ProteinPresenceAbsenceMatrixElement::present;
142 m_presenceAbsenceMatrix(i, 4) =
143 ProteinPresenceAbsenceMatrixElement::absent;
215 std::size_t position)
const
219 std::size_t size_seq = m_presenceAbsenceMatrix.size1();
221 double single_score = 0;
222 std::size_t endpos = std::min(position + 5, size_seq);
223 for(std::size_t ipos = position; ipos < endpos; ipos++)
225 single_score += getScore(ipos, 0);
229 double duo_score = 0;
230 endpos = std::min(position + 4, size_seq);
231 for(std::size_t ipos = position; ipos < endpos; ipos++)
233 duo_score += getScore(ipos, 1);
238 double trio_score = 0;
239 endpos = std::min(position + 3, size_seq);
240 for(std::size_t ipos = position; ipos < endpos; ipos++)
242 trio_score += getScore(ipos, 2);
247 double quatro_score = 0;
248 endpos = std::min(position + 2, size_seq);
249 for(std::size_t ipos = position; ipos < endpos; ipos++)
251 quatro_score += getScore(ipos, 3);
255 score += getScore(position, 4);
256 return score * single_score * duo_score * trio_score * quatro_score;