73 std::swap(ion_type_ref, ion_type);
89 if((std::int8_t)ion_type < (std::int8_t)8)
114 QString::const_iterator it(pepstr.begin());
116 while(it != pepstr.end())
118 qDebug() << it->toLatin1();
162 return std::make_shared<const Peptide>(*
this);
168 return std::make_shared<Peptide>(*
this);
172std::vector<Aa>::iterator
178std::vector<Aa>::iterator
184std::vector<Aa>::const_iterator
190std::vector<Aa>::const_iterator
196std::vector<Aa>::const_reverse_iterator
202std::vector<Aa>::const_reverse_iterator
224 if(position >=
size())
229 qDebug() <<
"Peptide::addAaModification begin " << position;
230 std::vector<Aa>::iterator it =
m_aaVec.begin() + position;
231 it->addAaModification(aaModification);
233 qDebug() <<
"Peptide::addAaModification end";
241 for(
auto &aa : *
this)
243 if(aa.getAminoAcidChar() == amino_acid)
245 aa.addAaModification(aaModification);
258 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
261 seq += it->getLetter();
270 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
272 QStringList modification_str_list;
275 modification_str_list <<
m_NterMod->getAccession();
278 seq += it->getLetter();
283 modification_str_list <<
m_CterMod->getAccession();
285 for(
auto &pmod : it->getModificationList())
287 modification_str_list << pmod->getAccession();
289 if(modification_str_list.size() > 0)
290 seq += QString(
"(%1)").arg(modification_str_list.join(
","));
291 modification_str_list.clear();
301 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
304 seq += it->toAbsoluteString();
307 return seq.replace(
"L",
"I");
315 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
318 seq += it->toString();
327 std::vector<double> raw_mass_arr;
330 raw_mass_arr.push_back(aa.getMass());
338 std::vector<double> mz_arr;
339 double mass_accumulator = 0;
340 double mass_shift = 0;
345 mass_accumulator += aa.getMass();
346 mz_arr.push_back(mass_accumulator);
351 std::vector<Aa>::const_reverse_iterator it(
m_aaVec.rbegin());
354 mass_accumulator += it->getMass();
355 mz_arr.push_back(mass_accumulator);
363 QObject::tr(
"Peptide::getMassIonSerie not implemented for ion type %1")
366 for(
double &mass : mz_arr)
368 mass = (mass + mass_shift + (
MHPLUS * (double)charge)) / (
double)charge;
409 number +=
m_NterMod->getNumberOfAtom(atom);
411 number +=
m_CterMod->getNumberOfAtom(atom);
412 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
415 number += it->getNumberOfAtom(atom);
428 number +=
m_NterMod->getNumberOfIsotope(isotope);
430 number +=
m_CterMod->getNumberOfIsotope(isotope);
431 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
434 number += it->getNumberOfIsotope(isotope);
445 unsigned int number = 0;
446 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
449 number += it->getNumberOfModification(mod);
459 unsigned int number = 0;
460 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
463 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) != aa_list.end())
465 number += it->getNumberOfModification(mod);
478 std::vector<Aa>::iterator it(
m_aaVec.begin());
481 it->replaceAaModification(oldmod, newmod);
495 std::vector<Aa>::iterator it(
m_aaVec.begin());
498 if(it->getAminoAcidChar() == aa)
500 it->replaceAaModification(oldmod, newmod);
510 std::vector<Aa>::iterator it(
m_aaVec.begin());
513 it->removeAaModification(mod);
521std::vector<unsigned int>
524 std::vector<unsigned int> position_list;
525 unsigned int position = 0;
526 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
529 unsigned int number = 0;
530 number += it->getNumberOfModification(mod);
531 for(
unsigned int j = 0; j < number; j++)
533 position_list.push_back(position);
539 return position_list;
542std::vector<unsigned int>
545 std::vector<unsigned int> position_list;
546 unsigned int position = 0;
547 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
550 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) != aa_list.end())
552 unsigned int number = 0;
553 number += it->getNumberOfModification(mod);
554 for(
unsigned int j = 0; j < number; j++)
556 position_list.push_back(position);
563 return position_list;
566std::vector<unsigned int>
569 std::vector<unsigned int> position_list;
570 unsigned int number = 0;
571 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
574 if(it->getLetter() == aa)
575 position_list.push_back(number);
580 return position_list;
583std::vector<unsigned int>
586 std::vector<unsigned int> position_list;
587 unsigned int number = 0;
588 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
592 bool found = (std::find(list_aa.begin(), list_aa.end(), it->getLetter()) != list_aa.end());
595 position_list.push_back(number);
601 return position_list;
616 QObject::tr(
"modification is not a cleavage Nter modification : %1")
632 QObject::tr(
"modification is not a cleavage Cter modification : %1")
660 QObject::tr(
"modification is not a peptide Nter modification : mod == nulptr"));
675 QObject::tr(
"modification is not a peptide Cter modification : mod == nulptr"));
708 std::size_t k = (
size - 1);
709 for(std::size_t i = 0; i < (
size / 2); i++, k--)
743 std::vector<Aa>::iterator it(
m_aaVec.begin());
744 std::vector<Aa>::iterator itend(
m_aaVec.end());
745 for(; it != itend; it++)
747 it->replaceLeucineIsoleucine();
755 std::vector<Aa>::iterator it(
m_aaVec.begin());
772 std::vector<Aa>::iterator it(
m_aaVec.end());
806 QString nter_accession =
m_NterMod->getAccession();
807 seq = QString(
"[%1]-").arg(nter_accession);
809 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
812 seq += it->toProForma();
818 QString cter_accession =
m_CterMod->getAccession();
819 seq += QString(
"-[%1]").arg(cter_accession);
const QString & getAccession() const
static AaModificationP getInstance(const QString &accession)
virtual const ChemicalFormula getChemicalFormulaCharge(unsigned int charge) const
AaModificationP m_cleavageCterMod
void replaceLeucineIsoleucine()
PeptideSp makePeptideSp() const
Peptide(const QString &pepstr)
AaModificationP getCterModification() const
void setNterModification(AaModificationP mod)
void replaceAaModification(AaModificationP oldmod, AaModificationP newmod)
replaces all occurences of a modification by a new one
void removeNterAminoAcid()
std::vector< Aa >::const_reverse_iterator rend() const
virtual const ChemicalFormula getChemicalFormulaCharge(unsigned int charge) const override
std::vector< unsigned int > getModificationPositionList(AaModificationP mod) const
get modification positions
NoConstPeptideSp makeNoConstPeptideSp() const
virtual int getNumberOfIsotope(Enums::Isotope isotope) const override
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
virtual bool isPalindrome() const override
tells if the peptide sequence is a palindrome
std::vector< Aa >::const_reverse_iterator rbegin() const
AaModificationP getCleavageCterModification() const
const QString getLiAbsoluteString() const
get all sequence string with modifications and converting Leucine to Isoleucine
void removeCterAminoAcid()
void setGlobalModification(Enums::Isotope isotope_kind)
apply 100% isotope replacement
void setCleavageCterModification(AaModificationP mod)
void setCterModification(AaModificationP mod)
AaModificationP m_NterMod
virtual const ChemicalFormula getChemicalFormula() const override
void replaceAaModificationOnAminoAcid(Enums::AminoAcidChar aa, pappso::AaModificationP oldmod, pappso::AaModificationP newmod)
replaces all occurences of a modification by a new one on a specific amino acid
AaModificationP m_cleavageNterMod
const QString toAbsoluteString() const
print all modifications
AaModificationP getNterModification() const
unsigned int getNumberOfModification(AaModificationP mod) const
count modification occurence
std::vector< double > getMassIonSerie(unsigned int charge, pappso::Enums::PeptideIon ion_type) const
get complete serie of product masses for a given charge and ion type
const QString toString() const
print modification except internal modifications
std::vector< double > getRawMassArray() const
get raw mass array of the amino acid sequence
QString toProForma() const
get the peptide model in ProForma notation https://github.com/HUPO-PSI/ProForma/blob/master/README....
AaModificationP getCleavageNterModification() const
void removeAaModification(AaModificationP mod)
removes all occurences of a modification
unsigned int size() const override
virtual int getNumberOfAtom(Enums::AtomIsotopeSurvey atom) const override
get the number of atom C, O, N, H in the molecule
void setCleavageNterModification(AaModificationP mod)
Aa & getAa(unsigned int position)
void addAaModificationOnAllAminoAcid(AaModificationP aaModification, Enums::AminoAcidChar amino_acid)
adds a modification to all amino acid of the sequence
std::vector< unsigned int > getAaPositionList(char aa) const
get positions of one amino acid in peptide
std::vector< Aa >::iterator begin()
const QString getSequence() const override
print amino acid sequence without modifications
void addAaModification(AaModificationP aaModification, unsigned int position)
adds a modification to amino acid sequence
std::vector< Aa >::iterator end()
AaModificationP m_CterMod
std::vector< Aa > m_aaVec
unsigned int countModificationOnAa(AaModificationP mod, const std::vector< char > &aa_list) const
count modification occurence
const Aa & getConstAa(unsigned int position) const
static QString toString(specglob::SpectralAlignmentType type)
Convenience function to return a string describing the specglob alingment type.
PeptideIon
Enums::PeptideIon enum defines all types of ions (Nter or Cter).
@ ystar
Cter amino ions + NH3 loss.
@ yo
Cter amino ions + H2O loss.
@ bstar
Nter acylium ions + NH3 loss.
@ ao
Nter aldimine ions + H2O loss.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
bool peptideIonTypeIsComplement(Enums::PeptideIon ion_type_ref, Enums::PeptideIon ion_type)
tells if an ion type is the complement ion of the other
bool operator<(Aa const &l, Aa const &r)
std::shared_ptr< const Peptide > PeptideSp
const AaModification * AaModificationP
const pappso_double MHPLUS(1.007276466879)
double pappso_double
A type definition for doubles.
PeptideDirection getPeptideIonDirection(Enums::PeptideIon ion_type)
get the direction of a peptide ion
const pappso_double MASSH2O((MPROTIUM *2)+MASSOXYGEN)
bool peptideIonIsNter(Enums::PeptideIon ion_type)
tells if an ion is Nter
bool operator==(Aa const &l, Aa const &r)
std::shared_ptr< Peptide > NoConstPeptideSp