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->symmetric_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 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...
ExperimentalSpectrumDataPointType type
SpectralAlignmentType alignment_type
std::size_t origin_column_indices