88 auto last_theoretical_peptide = std::prev(
m_matrix.end1());
91 for(
auto itmj = ++itmi.begin(); itmj != itmi.end(); itmj++)
100 if(itmi == last_theoretical_peptide && (*itmj).score >
m_maxScore)
116 std::size_t start = 1;
120 while(start < ref_peptide.get()->getPeptideSp().get()->size() - 5)
123 ref_peptide.get()->getPeptideSp().get()->getSequence().mid(start));
124 std::size_t length = peptide_sp.get()->size();
125 while(peptide_sp.get()->getMass() > (precursor_mass * 1.1))
128 std::make_shared<pappso::Peptide>(peptide_sp.get()->getSequence().mid(0, length - 1));
133 std::make_shared<pappso::specglob::PeptideSpectrum>(peptide_sp);
155 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2 &it_pos,
220 auto itKpeak = experimental_spectrum.
reverseFindDiffMz(it_pos.index2(), aaMassRange);
224 if(itKpeak == experimental_spectrum.rend())
226 matrix_data_point_i_j.
score =
m_matrix(it_pos.index1() - 1, it_pos.index2()).score +
234 m_matrix(it_pos.index1() - 1, itKpeak->indice);
235 int scoreAlignK = matrix_data_point_previ_k.
score + alignScoreToAdd;
241 for(l = it_pos.index1() - 1; l > 0; l--)
243 if(
m_matrix(l, itKpeak->indice).origin_column_indices != itKpeak->indice)
246 if(std::abs(
m_matrix(l, itKpeak->indice).mass_difference - (*it_pos).mass_difference) >
248 scoreAlignK = matrix_data_point_previ_k.
score + reAlignScoreToAdd;
260 if(scoreAlignK >= reAlignBestScore.
score)
263 matrix_data_point_i_j.
score = scoreAlignK;
275 matrix_data_point_i_j = reAlignBestScore;
283 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2 &it_pos,
284 std::size_t expeIndicesK,
289 std::size_t previous_peptide_row = it_pos.index1() - 1;
291 int bestScore = -10000;
297 for(
long m = expeIndicesK; m > -1; m--)
301 if(
m_matrix(previous_peptide_row, m).score > bestScore)
303 bestScore =
m_matrix(previous_peptide_row, m).score;
309 return_data_point.
score = bestScore + reAlignScore;
313 return return_data_point;
317 std::size_t lastAlignIndiceI = previous_peptide_row;
318 for(
long l = previous_peptide_row; l > 0; l--)
320 if(
m_matrix(l, origin).origin_column_indices != 0)
322 lastAlignIndiceI = l;
329 if((lastAlignIndiceI != (previous_peptide_row)) && (it_pos.index1() > 1) &&
330 (std::abs(
m_matrix(previous_peptide_row, expeIndicesK).mass_difference -
333 return_data_point.
score = bestScore + alignScoreToAdd;
339 return return_data_point;
348 auto it_peptide = peptide_spectrum.begin();
349 auto it_spectrum = experimental_spectrum.begin();
350 for(
auto itr1 =
m_matrix.begin1(); itr1 !=
m_matrix.end1(); ++itr1, it_peptide++)
352 it_spectrum = experimental_spectrum.begin();
353 for(
auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++, it_spectrum++)
356 if(it_peptide == peptide_spectrum.begin())
358 (*itr2).origin_column_indices = 0;
360 (*itr2).mass_difference = it_spectrum->peak_mz - it_peptide->mz;
367const matrix<SpectralAlignmentDataPoint> &
376 std::vector<int> score;
378 auto itr1 =
m_matrix.begin1() + row_indice;
379 for(
auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++)
381 score.push_back((*itr2).score);
393boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
401 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2 &itpos)
const
420 QString pepModified =
"";
426 double actualDelMass;
429 double totExplainMass = 0.0;
439 QString tempPepSeq =
"";
441 QString aminoAcid =
"";
442 actualDelMass =
m_matrix(actualI, actualJ).mass_difference;
444 prevJ =
m_matrix(actualI, actualJ).origin_column_indices;
445 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
452 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(actualI - 1));
457 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(prevI - 1)) + tempPepSeq;
464 pepModified = tempPepSeq + pepModified;
466 qDebug() <<
"a1 pepModified=" << pepModified;
476 tempPepSeq = QString(
"%1").arg(theoSequence.at(actualI - 1));
477 aminoAcid = tempPepSeq;
491 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(prevI - 1)) + tempPepSeq;
492 tempAA = QString(
"%1").arg(theoSequence.at(prevI - 1)) + tempAA;
495 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
503 if(std::abs(actualDelMass - prevDelMass) >
m_precisionPtr->getNominal())
506 tempPepSeq = tempPepSeq.mid(0, tempPepSeq.length() - 1);
508 tempPepSeq += QString(
"[%1]").arg(actualDelMass - prevDelMass) + aminoAcid;
509 totExplainMass += (actualDelMass - prevDelMass);
511 qDebug() <<
"a2a1 tempPepSeq=" << tempPepSeq;
520 tempPepSeq = QString(
"[%1]").arg(actualDelMass - prevDelMass) + tempPepSeq;
522 totExplainMass += (actualDelMass - prevDelMass);
527 else if(actualI == 1 &&
531 tempPepSeq = QString(
"[%1]").arg(actualDelMass) + tempPepSeq;
532 totExplainMass += actualDelMass;
536 pepModified = tempPepSeq + pepModified;
537 qDebug() <<
"a2 pepModified=" << pepModified;
557 QObject::tr(
"building peptide model failed m_maxScore == %1").arg(
m_maxScore));
565 double actualDelMass;
576 QString aminoAcid =
"";
577 actualDelMass =
m_matrix(actualI, actualJ).mass_difference;
579 prevJ =
m_matrix(actualI, actualJ).origin_column_indices;
580 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
592 sg_peptide_model[prevI - 1].bracket =
true;
623 sg_peptide_model[prevI - 1].bracket =
true;
625 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
633 if(std::abs(actualDelMass - prevDelMass) >
m_precisionPtr->getNominal())
636 int mass_i = actualI - 1;
643 sg_peptide_model[mass_i - 1].mass_difference = actualDelMass - prevDelMass;
653 int mass_i = actualI - 1;
660 sg_peptide_model[mass_i - 1].mass_difference = actualDelMass - prevDelMass;
665 else if(actualI == 1 &&
682 return sg_peptide_model;
std::vector< ExperimentalSpectrumDataPoint >::const_reverse_iterator reverseFindDiffMz(std::size_t start_position, const pappso::MzRange &targeted_mass_range) const
find the peak for wich mass difference from rbegin corresponds to aaTheoMass Find if a peak back in t...
bool ltrimOnRemoval()
try to remove left amino acid if there is a removal
void setBeginMassDelta(double)
bool eliminateComplementaryDelta(pappso::PrecisionPtr precision)
pappso::PeptideSp getPeptideSp() const
PeptideSpectraCsp mcsp_peptideSpectrum
SpectralAlignment(ScoreValues score_values, pappso::PrecisionPtr precision_ptr)
SpectralAlignmentDataPoint getBestRealignScore(const boost::numeric::ublas::matrix< SpectralAlignmentDataPoint >::iterator2 &it_pos, std::size_t expeIndicesK, int reAlignScore, int alignScoreToAdd)
boost::numeric::ublas::matrix< SpectralAlignmentDataPoint >::iterator2 getMaxPosIterator() const
std::vector< int > getScoreRow(std::size_t row_indice) const
double m_precursorMassDelta
ScoreValues m_scoreValues
pappso::PrecisionPtr m_precisionPtr
void fillMassDelta(const PeptideSpectrum &peptide_spectrum, const ExperimentalSpectrum &experimental_spectrum)
QString backTrack() const
double getPrecursorMzDelta() const
PeptideModel buildPeptideModel() const
const ExperimentalSpectrumDataPoint & getExperimentalSpectrumDataPoint(const boost::numeric::ublas::matrix< SpectralAlignmentDataPoint >::iterator2 &itpos) const
ExperimentalSpectrumCsp mcsp_experimentalSpectrum
PeptideSpectraCsp getPeptideSpectraCsp() const
PeptideModel rtrim(PrecisionPtr precision_ptr)
trim the current peptide to get a minimal alignment score
ExperimentalSpectrumCsp getExperimentalSpectrumCsp() const
const matrix< SpectralAlignmentDataPoint > & getMatrix() const
boost::numeric::ublas::matrix< SpectralAlignmentDataPoint >::iterator2 m_itPosMax
matrix< SpectralAlignmentDataPoint > m_matrix
void fillMatricesWithScores(const boost::numeric::ublas::matrix< SpectralAlignmentDataPoint >::iterator2 &it_pos, const PeptideSpectrum &peptide_spectrum, const ExperimentalSpectrum &experimental_spectrum)
void align(PeptideSpectraCsp peptide_spectrum, ExperimentalSpectrumCsp experimental_spectrum)
build the alignment matrix between a peptide sequence and an experimental spectrum
std::shared_ptr< const PeptideSpectrum > PeptideSpectraCsp
@ scoreAlignNative
Score for good alignment native (int).
@ scoreReAlignSymNO
Score for re-alignment without offset symmetric (int).
@ scoreNonAlign
Score for non alignment (int).
@ scoreAlignBoth
Score for good alignment both (int).
@ scoreReAlignBoth
Score for re-alignment both (int).
@ scoreReAlignBothNO
Score for re-alignment without offset both (int).
@ scoreReAlignSym
Score for re-alignment symmetric (int).
@ scoreAlignSym
Score for good alignment symmetric (int).
@ scoreReAlignNativeNO
Score for re-alignment without offset native (int).
std::shared_ptr< const ExperimentalSpectrum > ExperimentalSpectrumCsp
@ nonAlign
the type of alignment to put in origin matrix NON Alignment (0 - NA)
@ reAlign
Re Alignment (1 - RE).
@ align
Alignment (2 - AL).
ExperimentalSpectrumDataPointType
@ both
both, the ion and the complement exists in the original spectrum
@ symmetric
new peak : computed symmetric mass from a corresponding native peak
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< const Peptide > PeptideSp
const PrecisionBase * PrecisionPtr
ExperimentalSpectrumDataPointType type
SpectralAlignmentType alignment_type
std::size_t origin_column_indices