25 #include <QStringList>
27 #include "../exception/exceptionnotpossible.h"
38 char vv1[] = {
'A',
'R',
'N',
'D',
'C',
'Q',
'E',
'G',
'H',
'I',
39 'L',
'K',
'M',
'F',
'P',
'S',
'T',
'W',
'Y',
'V'};
42 char vv2[] = {
'N',
'D'};
45 char vv3[] = {
'Q',
'E'};
55 char vv1[] = {
'A',
'R',
'N',
'D',
'C',
'Q',
'E',
'G',
'H',
'I',
56 'L',
'K',
'M',
'F',
'P',
'S',
'T',
'W',
'Y',
'V'};
59 char vv2[] = {
'N',
'D'};
62 char vv3[] = {
'Q',
'E'};
105 qDebug() <<
"Enzyme::eat begin ";
106 const QString sequence = protein_sp.get()->getSequence();
107 qDebug() << sequence;
108 QStringList peptide_list;
110 int peptide_start = 0;
111 int peptide_size = sequence.size();
120 peptide_list.append(sequence.mid(peptide_start, peptide_size));
122 peptide_start += peptide_size;
125 peptide_size = sequence.size() - peptide_start;
128 peptide_list.append(sequence.mid(peptide_start, peptide_size));
131 unsigned int start = 1;
133 foreach(
const QString &peptide, peptide_list)
138 sequence_database_id,
147 start += peptide.size();
150 unsigned int miscleavage_i = 0;
154 qDebug() <<
"miscleavage_i=" << miscleavage_i;
155 int chunk_number = miscleavage_i + 1;
156 unsigned int start = 1;
159 for(
auto i = 0; i < peptide_list.size(); ++i)
161 qDebug() <<
"start=" << start;
162 QStringList peptide_mis_list;
163 for(
auto j = 0; (j < chunk_number) && ((i + j) < peptide_list.size());
166 peptide_mis_list << peptide_list.at(i + j);
168 if(peptide_mis_list.size() == chunk_number)
174 sequence_database_id,
177 peptide_mis_list.join(
""),
184 start += peptide_list.at(i).size();
192 std::string new_peptide = p_peptide_variant_list->at(0);
193 qDebug() <<
"Enzyme::replaceWildcards begin " << new_peptide.c_str();
194 std::vector<std::string> old_peptide_variant_list;
195 old_peptide_variant_list.assign(p_peptide_variant_list->begin(),
196 p_peptide_variant_list->end());
199 for(
char wildcard : {
'X',
'B',
'Z'})
202 std::size_t position = new_peptide.find(wildcard);
203 if(position == std::string::npos)
209 p_peptide_variant_list->clear();
216 const std::vector<char> *p_x_replace_wildcard =
nullptr;
221 else if(wildcard ==
'B')
225 else if(wildcard ==
'Z')
230 if(p_x_replace_wildcard !=
nullptr)
232 for(std::string orig_peptide : old_peptide_variant_list)
234 for(
char replace : *p_x_replace_wildcard)
236 orig_peptide[position] = replace;
237 p_peptide_variant_list->push_back(orig_peptide);
244 QObject::tr(
"x_replace_wildcard is empty"));
256 std::vector<std::string>().swap(
257 old_peptide_variant_list);
260 qDebug() <<
"Enzyme::replaceWildcards end " << new_peptide.c_str();
272 std::int8_t sequence_database_id,
278 unsigned int missed_cleavage_number,
279 bool semi_enzyme)
const
281 if(peptide.contains(
'X') || peptide.contains(
'B') || peptide.contains(
'Z'))
284 std::vector<std::string> peptide_variant_list;
285 peptide_variant_list.push_back(peptide.toStdString());
287 while((peptide_variant_list.at(0).find(
'X') != std::string::npos) ||
288 (peptide_variant_list.at(0).find(
'B') != std::string::npos) ||
289 (peptide_variant_list.at(0).find(
'Z') != std::string::npos))
295 peptide_variant_list.shrink_to_fit();
302 enzyme_product.
setPeptide(sequence_database_id,
305 QString(peptide_variant_list.at(0).c_str()),
308 missed_cleavage_number,
313 std::string peptide_variant = peptide_variant_list.back();
314 while(peptide_variant_list.size() > 0)
316 enzyme_product.
setPeptide(sequence_database_id,
319 QString(peptide_variant.c_str()),
322 missed_cleavage_number,
324 peptide_variant_list.pop_back();
325 if(peptide_variant_list.size() > 0)
327 peptide_variant = peptide_variant_list.back();
331 std::vector<std::string>().swap(
332 peptide_variant_list);
336 enzyme_product.
setPeptide(sequence_database_id,
342 missed_cleavage_number,