39#include "../../pappsoexception.h"
40#include "../../utils.h"
91 auto last_theoretical_peptide = std::prev(
m_matrix.end1());
94 for(
auto itmj = ++itmi.begin(); itmj != itmi.end(); itmj++)
104 if(itmi == last_theoretical_peptide && (*itmj).score >
m_maxScore)
120 std::size_t start = 1;
124 while(start < ref_peptide.get()->getPeptideSp().get()->size() - 5)
127 ref_peptide.get()->getPeptideSp().get()->getSequence().mid(start));
128 std::size_t length = peptide_sp.get()->size();
129 while(peptide_sp.get()->getMass() > (precursor_mass * 1.1))
131 peptide_sp = std::make_shared<pappso::Peptide>(
132 peptide_sp.get()->getSequence().mid(0, length - 1));
137 std::make_shared<pappso::specglob::PeptideSpectrum>(peptide_sp);
159 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
174 int reAlignScoreNOToAdd =
183 reAlignScoreNOToAdd =
186 it_pos.index1() == peptide_spectrum.
getPeptideSp().get()->size())
197 reAlignScoreNOToAdd =
200 it_pos.index1() == peptide_spectrum.
getPeptideSp().get()->size())
212 reAlignScoreNOToAdd =
215 it_pos.index1() == peptide_spectrum.
getPeptideSp().get()->size())
234 pappso::MzRange aaMassRange(peptide_spectrum.at(it_pos.index1()).diff_mz,
243 if(itKpeak == experimental_spectrum.rend())
245 matrix_data_point_i_j.
score =
246 m_matrix(it_pos.index1() - 1, it_pos.index2()).score +
254 m_matrix(it_pos.index1() - 1, itKpeak->indice);
255 int scoreAlignK = matrix_data_point_previ_k.
score + alignScoreToAdd;
262 for(l = it_pos.index1() - 1; l > 0; l--)
264 if(
m_matrix(l, itKpeak->indice).origin_column_indices !=
268 if(std::abs(
m_matrix(l, itKpeak->indice).mass_difference -
270 scoreAlignK = matrix_data_point_previ_k.
score + reAlignScoreToAdd;
275 it_pos, itKpeak->indice, reAlignScoreToAdd, reAlignScoreNOToAdd);
282 if(scoreAlignK >= reAlignBestScore.
score)
285 matrix_data_point_i_j.
score = scoreAlignK;
297 matrix_data_point_i_j = reAlignBestScore;
305 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
307 std::size_t expeIndicesK,
312 std::size_t previous_peptide_row = it_pos.index1() - 1;
314 int bestScore = -10000;
320 for(
long m = expeIndicesK; m > -1; m--)
324 if(
m_matrix(previous_peptide_row, m).score > bestScore)
332 return_data_point.
score = bestScore + reAlignScore;
336 return return_data_point;
340 std::size_t lastAlignIndiceI = previous_peptide_row;
341 for(
long l = previous_peptide_row; l > 0; l--)
343 if(
m_matrix(l, origin).origin_column_indices != 0)
345 lastAlignIndiceI = l;
352 if((lastAlignIndiceI != (previous_peptide_row)) && (it_pos.index1() > 1) &&
353 (std::abs(
m_matrix(previous_peptide_row, expeIndicesK).mass_difference -
354 m_matrix(lastAlignIndiceI, origin).mass_difference) <
357 return_data_point.
score = bestScore + alignScoreToAdd;
364 return return_data_point;
374 auto it_peptide = peptide_spectrum.begin();
375 auto it_spectrum = experimental_spectrum.begin();
377 ++itr1, it_peptide++)
379 it_spectrum = experimental_spectrum.begin();
380 for(
auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++, it_spectrum++)
383 if(it_peptide == peptide_spectrum.begin())
385 (*itr2).origin_column_indices = 0;
387 (*itr2).mass_difference = it_spectrum->symmetric_mz - it_peptide->mz;
394const matrix<SpectralAlignmentDataPoint> &
403 std::vector<int> score;
405 auto itr1 =
m_matrix.begin1() + row_indice;
406 for(
auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++)
408 score.push_back((*itr2).score);
420boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
428 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
448 QString pepModified =
"";
449 QString theoSequence =
455 double actualDelMass;
458 double totExplainMass = 0.0;
468 QString tempPepSeq =
"";
470 QString aminoAcid =
"";
471 actualDelMass =
m_matrix(actualI, actualJ).mass_difference;
473 prevJ =
m_matrix(actualI, actualJ).origin_column_indices;
474 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
478 if(
m_matrix(actualI, actualJ).alignment_type ==
482 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(actualI - 1));
484 while(
m_matrix(prevI, prevJ).alignment_type ==
489 QString(
"[%1]").arg(theoSequence.at(prevI - 1)) + tempPepSeq;
496 pepModified = tempPepSeq + pepModified;
498 qDebug() <<
"a1 pepModified=" << pepModified;
508 tempPepSeq = QString(
"%1").arg(theoSequence.at(actualI - 1));
509 aminoAcid = tempPepSeq;
512 if(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
520 while(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
524 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(prevI - 1)) +
527 QString(
"%1").arg(theoSequence.at(prevI - 1)) + tempAA;
530 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
538 if(std::abs(actualDelMass - prevDelMass) >
542 tempPepSeq = tempPepSeq.mid(0, tempPepSeq.length() - 1);
545 QString(
"[%1]").arg(actualDelMass - prevDelMass) +
547 totExplainMass += (actualDelMass - prevDelMass);
549 qDebug() <<
"a2a1 tempPepSeq=" << tempPepSeq;
555 else if(
m_matrix(actualI, actualJ).alignment_type ==
560 QString(
"[%1]").arg(actualDelMass - prevDelMass) + tempPepSeq;
562 totExplainMass += (actualDelMass - prevDelMass);
567 else if(actualI == 1 &&
568 m_matrix(actualI, actualJ).alignment_type ==
572 tempPepSeq = QString(
"[%1]").arg(actualDelMass) + tempPepSeq;
573 totExplainMass += actualDelMass;
577 pepModified = tempPepSeq + pepModified;
578 qDebug() <<
"a2 pepModified=" << pepModified;
588 return QString(
"%1_[%2]")
600 QObject::tr(
"building peptide model failed m_maxScore == %1")
610 double actualDelMass;
621 QString aminoAcid =
"";
622 actualDelMass =
m_matrix(actualI, actualJ).mass_difference;
624 prevJ =
m_matrix(actualI, actualJ).origin_column_indices;
625 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
629 if(
m_matrix(actualI, actualJ).alignment_type ==
634 while(
m_matrix(prevI, prevJ).alignment_type ==
639 sg_peptide_model[prevI - 1].bracket =
true;
657 if(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
665 while(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
671 sg_peptide_model[prevI - 1].bracket =
true;
673 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
681 if(std::abs(actualDelMass - prevDelMass) >
685 int mass_i = actualI - 1;
693 sg_peptide_model[mass_i - 1].mass_difference =
694 actualDelMass - prevDelMass;
701 else if(
m_matrix(actualI, actualJ).alignment_type ==
705 int mass_i = actualI - 1;
713 sg_peptide_model[mass_i - 1].mass_difference =
714 actualDelMass - prevDelMass;
719 else if(actualI == 1 &&
720 m_matrix(actualI, actualJ).alignment_type ==
737 return sg_peptide_model;
virtual pappso_double getNominal() const final
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
int get(ScoreValueType type)
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
ExperimentalSpectrumDataPointType type
SpectralAlignmentType alignment_type
std::size_t origin_column_indices