27#include "../peptide/peptidenaturalisotopelist.h"
34 unsigned int parent_charge,
36 const std::list<PeptideIon> &ion_type_list_in,
37 unsigned int max_isotope_number,
38 [[maybe_unused]]
unsigned int max_isotope_rank)
39 : _precision(precision)
45 qDebug() <<
"peptideSp.get()->getSequence()=" << peptideSp.get()->getSequence()
46 <<
" max_isotope_number=" << max_isotope_number
47 <<
" spectrum.size=" << spectrum.size() <<
" parent_charge=" << parent_charge
48 <<
" ion_type_list.size=" << ion_type_list_in.size()
49 <<
" max_isotope_rank=" << max_isotope_rank;
51 std::list<PeptideIon> ion_type_list(ion_type_list_in);
65 qDebug() <<
" fragmentIonList.size()=" << fragmentIonList.
size();
66 std::vector<DataPoint> peak_list(spectrum.begin(), spectrum.end());
67 for(
auto ion_type : ion_type_list)
69 const std::list<PeptideFragmentIonSp> peptide_fragment_ion_list =
71 qDebug() <<
" peptide_fragment_ion_list.size()=" << peptide_fragment_ion_list.size();
73 for(
unsigned int charge = 1; charge <= parent_charge; charge++)
76 for(
auto &&peptide_fragment_ion : peptide_fragment_ion_list)
78 qDebug() <<
"peptide_fragment_ion.get()->getMz(charge)="
79 << peptide_fragment_ion.get()->getMz(charge);
81 for(
unsigned int isotope_number = 0; isotope_number <= max_isotope_number;
86 if(max_isotope_rank == 0)
90 peptide_fragment_ion, isotope_number, charge, precision);
95 isotope_list, max_isotope_rank, isotope_number, charge, precision);
98 qDebug() <<
"max_isotope_rank=" << max_isotope_rank
99 <<
" isotope_number=" << isotope_number <<
" charge=" << charge
100 <<
" precision=" << precision
101 <<
" p_isotopeIon->getMz()=" << p_isotopeIon->
getMz() <<
" "
102 << isotope_number <<
" " << p_isotopeIon->
toString();
104 std::vector<DataPoint>::iterator it_peak =
106 if(it_peak != peak_list.end())
111 peptide_fragment_ion));
112 peak_list.erase(it_peak);
126 QObject::tr(
"ERROR building PeptideIsotopeSpectrumMatch, PAPPSO exception:\n%1")
127 .arg(exception_pappso.
qwhat());
128 qDebug() <<
"PeptideIsotopeSpectrumMatch::PeptideIsotopeSpectrumMatch "
129 "PappsoException :\n"
133 catch(std::exception &exception_std)
136 QObject::tr(
"ERROR building PeptideIsotopeSpectrumMatch, std exception:\n%1")
137 .arg(exception_std.what());
138 qDebug() <<
"PeptideIsotopeSpectrumMatch::PeptideIsotopeSpectrumMatch "
149 std::vector<PeptideNaturalIsotopeAverageSp> v_peptideIsotopeList,
150 std::vector<PeptideFragmentIonSp> v_peptideIonList,
152 : _precision(precision)
154 qDebug() <<
" begin";
155 if(v_peptideIsotopeList.size() != v_peptideIonList.size())
158 QObject::tr(
"v_peptideIsotopeList.size() %1 != v_peptideIonList.size() %2")
159 .arg(v_peptideIsotopeList.size())
160 .arg(v_peptideIonList.size()));
163 auto isotopeIt = v_peptideIsotopeList.begin();
164 auto ionIt = v_peptideIonList.begin();
165 std::vector<DataPoint> peak_list(spectrum.begin(), spectrum.end());
167 while(isotopeIt != v_peptideIsotopeList.end())
169 std::vector<DataPoint>::iterator it_peak =
171 if(it_peak != peak_list.end())
174 peak_list.erase(it_peak);
184 : _precision(other._precision), _peak_ion_match_list(other._peak_ion_match_list)
194std::vector<DataPoint>::iterator
199 std::vector<DataPoint>::iterator itpeak = peak_list.begin();
200 std::vector<DataPoint>::iterator itend = peak_list.end();
201 std::vector<DataPoint>::iterator itselect = peak_list.end();
205 while(itpeak != itend)
210 if(itpeak->y > best_intensity)
212 best_intensity = itpeak->y;
222const std::list<PeakIonIsotopeMatch> &
250 if(a.getPeptideIonType() < b.getPeptideIonType())
252 if(a.getPeptideFragmentIonSp().get()->size() < b.getPeptideFragmentIonSp().get()->size())
254 if(a.getCharge() < b.getCharge())
256 if(a.getPeptideNaturalIsotopeAverageSp().get()->getIsotopeNumber() <
257 b.getPeptideNaturalIsotopeAverageSp().get()->getIsotopeNumber())
262 std::size_t nserie = 0;
263 std::size_t isotopeserie = 0;
264 unsigned int charge = 0;
269 if((nserie != it->getPeptideFragmentIonSp().get()->size()) ||
270 (ion_type != it->getPeptideIonType()) || (charge != it->getCharge()))
272 ion_type = it->getPeptideIonType();
274 nserie = it->getPeptideFragmentIonSp().get()->size();
275 charge = it->getCharge();
277 if(isotopeserie <= it->getPeptideNaturalIsotopeAverageSp().get()->getIsotopeNumber())
279 isotopeserie = it->getPeptideNaturalIsotopeAverageSp().get()->getIsotopeNumber();
Class to represent a mass spectrum.
virtual const QString & qwhat() const
const std::list< PeptideFragmentIonSp > getPeptideFragmentIonSp(PeptideIon ion_type) const
virtual ~PeptideIsotopeSpectrumMatch()
std::list< PeakIonIsotopeMatch >::const_iterator const_iterator
std::list< PeakIonIsotopeMatch > _peak_ion_match_list
PeptideIsotopeSpectrumMatch(const MassSpectrum &spectrum, const PeptideSp &peptide_sp, unsigned int parent_charge, PrecisionPtr precision, const std::list< PeptideIon > &ion_type_list, unsigned int max_isotope_number, unsigned int max_isotope_rank)
annotate spectrum with peptide ions and isotopes
const std::list< PeakIonIsotopeMatch > & getPeakIonIsotopeMatchList() const
const_iterator begin() const
void dropPeaksLackingMonoisotope()
const_iterator end() const
virtual std::vector< DataPoint >::iterator getBestPeakIterator(std::vector< DataPoint > &peak_list, const PeptideNaturalIsotopeAverage &ion) const
virtual QString toString() const
pappso_double getMz() const
virtual bool matchPeak(pappso_double peak_mz) const final
PeptideNaturalIsotopeAverageSp makePeptideNaturalIsotopeAverageSp() const
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
PeptideIon
PeptideIon enum defines all types of ions (Nter or Cter)
std::shared_ptr< const Peptide > PeptideSp
double pappso_double
A type definition for doubles.