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)
116 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
131 int reAlignScoreNOToAdd =
140 reAlignScoreNOToAdd =
143 it_pos.index1() == peptide_spectrum.
getPeptideSp().get()->size())
154 reAlignScoreNOToAdd =
157 it_pos.index1() == peptide_spectrum.
getPeptideSp().get()->size())
169 reAlignScoreNOToAdd =
172 it_pos.index1() == peptide_spectrum.
getPeptideSp().get()->size())
191 pappso::MzRange aaMassRange(peptide_spectrum.at(it_pos.index1()).diff_mz,
200 if(itKpeak == experimental_spectrum.rend())
202 matrix_data_point_i_j.
score =
203 m_matrix(it_pos.index1() - 1, it_pos.index2()).score +
211 m_matrix(it_pos.index1() - 1, itKpeak->indice);
212 int scoreAlignK = matrix_data_point_previ_k.
score + alignScoreToAdd;
219 for(l = it_pos.index1() - 1; l > 0; l--)
221 if(
m_matrix(l, itKpeak->indice).origin_column_indices !=
225 if(std::abs(
m_matrix(l, itKpeak->indice).mass_difference -
227 scoreAlignK = matrix_data_point_previ_k.
score + reAlignScoreToAdd;
232 it_pos, itKpeak->indice, reAlignScoreToAdd, reAlignScoreNOToAdd);
239 if(scoreAlignK >= reAlignBestScore.
score)
242 matrix_data_point_i_j.
score = scoreAlignK;
254 matrix_data_point_i_j = reAlignBestScore;
262 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
264 std::size_t expeIndicesK,
269 std::size_t previous_peptide_row = it_pos.index1() - 1;
271 int bestScore = -10000;
277 for(
long m = expeIndicesK; m > -1; m--)
281 if(
m_matrix(previous_peptide_row, m).score > bestScore)
289 return_data_point.
score = bestScore + reAlignScore;
293 return return_data_point;
297 std::size_t lastAlignIndiceI = previous_peptide_row;
298 for(
long l = previous_peptide_row; l > 0; l--)
300 if(
m_matrix(l, origin).origin_column_indices != 0)
302 lastAlignIndiceI = l;
309 if((lastAlignIndiceI != (previous_peptide_row)) && (it_pos.index1() > 1) &&
310 (std::abs(
m_matrix(previous_peptide_row, expeIndicesK).mass_difference -
311 m_matrix(lastAlignIndiceI, origin).mass_difference) <
314 return_data_point.
score = bestScore + alignScoreToAdd;
321 return return_data_point;
331 auto it_peptide = peptide_spectrum.begin();
332 auto it_spectrum = experimental_spectrum.begin();
334 ++itr1, it_peptide++)
336 it_spectrum = experimental_spectrum.begin();
337 for(
auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++, it_spectrum++)
340 if(it_peptide == peptide_spectrum.begin())
342 (*itr2).origin_column_indices = 0;
344 (*itr2).mass_difference = it_spectrum->symetric_mz - it_peptide->mz;
351const matrix<SpectralAlignmentDataPoint> &
360 std::vector<int> score;
362 auto itr1 =
m_matrix.begin1() + row_indice;
363 for(
auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++)
365 score.push_back((*itr2).score);
377boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
385 const boost::numeric::ublas::matrix<SpectralAlignmentDataPoint>::iterator2
405 QString pepModified =
"";
406 QString theoSequence =
412 double actualDelMass;
415 double totExplainMass = 0.0;
425 QString tempPepSeq =
"";
427 QString aminoAcid =
"";
428 actualDelMass =
m_matrix(actualI, actualJ).mass_difference;
430 prevJ =
m_matrix(actualI, actualJ).origin_column_indices;
431 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
435 if(
m_matrix(actualI, actualJ).alignment_type ==
439 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(actualI - 1));
441 while(
m_matrix(prevI, prevJ).alignment_type ==
446 QString(
"[%1]").arg(theoSequence.at(prevI - 1)) + tempPepSeq;
453 pepModified = tempPepSeq + pepModified;
455 qDebug() <<
"a1 pepModified=" << pepModified;
465 tempPepSeq = QString(
"%1").arg(theoSequence.at(actualI - 1));
466 aminoAcid = tempPepSeq;
469 if(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
477 while(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
481 tempPepSeq = QString(
"[%1]").arg(theoSequence.at(prevI - 1)) +
484 QString(
"%1").arg(theoSequence.at(prevI - 1)) + tempAA;
487 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
495 if(std::abs(actualDelMass - prevDelMass) >
499 tempPepSeq = tempPepSeq.mid(0, tempPepSeq.length() - 1);
502 QString(
"[%1]").arg(actualDelMass - prevDelMass) +
504 totExplainMass += (actualDelMass - prevDelMass);
506 qDebug() <<
"a2a1 tempPepSeq=" << tempPepSeq;
512 else if(
m_matrix(actualI, actualJ).alignment_type ==
517 QString(
"[%1]").arg(actualDelMass - prevDelMass) + tempPepSeq;
519 totExplainMass += (actualDelMass - prevDelMass);
524 else if(actualI == 1 &&
525 m_matrix(actualI, actualJ).alignment_type ==
529 tempPepSeq = QString(
"[%1]").arg(actualDelMass) + tempPepSeq;
530 totExplainMass += actualDelMass;
534 pepModified = tempPepSeq + pepModified;
535 qDebug() <<
"a2 pepModified=" << pepModified;
545 return QString(
"%1_[%2]")
557 QObject::tr(
"Spectral alignment failed m_maxScore == %1")
567 double actualDelMass;
578 QString aminoAcid =
"";
579 actualDelMass =
m_matrix(actualI, actualJ).mass_difference;
581 prevJ =
m_matrix(actualI, actualJ).origin_column_indices;
582 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
586 if(
m_matrix(actualI, actualJ).alignment_type ==
591 while(
m_matrix(prevI, prevJ).alignment_type ==
596 sg_peptide_model[prevI - 1].bracket =
true;
614 if(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
622 while(prevI > 0 &&
m_matrix(prevI, prevJ).alignment_type ==
628 sg_peptide_model[prevI - 1].bracket =
true;
630 prevDelMass =
m_matrix(prevI, prevJ).mass_difference;
638 if(std::abs(actualDelMass - prevDelMass) >
642 int mass_i = actualI - 1;
650 sg_peptide_model[mass_i - 1].mass_difference =
651 actualDelMass - prevDelMass;
658 else if(
m_matrix(actualI, actualJ).alignment_type ==
662 int mass_i = actualI - 1;
670 sg_peptide_model[mass_i - 1].mass_difference =
671 actualDelMass - prevDelMass;
676 else if(actualI == 1 &&
677 m_matrix(actualI, actualJ).alignment_type ==
694 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...
void setBeginMassDelta(double)
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
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)
std::shared_ptr< const PeptideSpectrum > PeptideSpectraCsp
@ scoreAlignNative
Score for good alignment native (int)
@ scoreReAlignSymNO
Score for re-alignment without offset symetric (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 symetric (int)
@ scoreAlignSym
Score for good alignment symetric (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
@ symetric
new peak : computed symetric mass from a corresponding native peak
@ both
both, the ion and the complement exists in the original spectrum
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
ExperimentalSpectrumDataPointType type
SpectralAlignmentType alignment_type
std::size_t origin_column_indices