34#include "../pappsoexception.h"
35#include "../exception/exceptionoutofrange.h"
36#include "../exception/exceptionnotpossible.h"
46 std::swap(ion_type_ref, ion_type);
62 if((std::int8_t)ion_type < (std::int8_t)8)
82 QString::const_iterator it(pepstr.begin());
83 if(it != pepstr.end())
88 Aa nter_aa(it->toLatin1());
94 while(it != pepstr.end())
96 qDebug() << it->toLatin1();
102 m_aaVec.back().addAaModification(
105 qDebug() <<
"blabla " <<
m_aaVec.back().toString();
114 : m_aaVec(peptide.m_aaVec), m_proxyMass(peptide.m_proxyMass)
120 : m_aaVec(std::move(toCopy.m_aaVec)), m_proxyMass(toCopy.m_proxyMass)
128 return std::make_shared<const Peptide>(*
this);
134 return std::make_shared<Peptide>(*
this);
138std::vector<Aa>::iterator
144std::vector<Aa>::iterator
150std::vector<Aa>::const_iterator
156std::vector<Aa>::const_iterator
162std::vector<Aa>::const_reverse_iterator
168std::vector<Aa>::const_reverse_iterator
189 unsigned int position)
191 if(position >=
size())
194 QObject::tr(
"position (%1) > size (%2)").arg(position).arg(
size()));
197 qDebug() <<
"Peptide::addAaModification begin " << position;
198 std::vector<Aa>::iterator it =
m_aaVec.begin() + position;
199 it->addAaModification(aaModification);
201 qDebug() <<
"Peptide::addAaModification end";
209 for(
auto &aa : *
this)
211 if(aa.getAminoAcidChar() == amino_acid)
213 aa.addAaModification(aaModification);
226 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
229 seq += it->getLetter();
238 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
241 seq += it->toAbsoluteString();
251 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
254 seq += it->toAbsoluteString();
257 return seq.replace(
"L",
"I");
265 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
268 seq += it->toString();
277 qDebug() <<
"Aa::getMass() begin";
294 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
297 number += it->getNumberOfAtom(atom);
308 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
311 number += it->getNumberOfIsotope(isotope);
322 unsigned int number = 0;
323 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
326 number += it->getNumberOfModification(mod);
335 const std::vector<char> &aa_list)
const
337 unsigned int number = 0;
338 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
341 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) !=
344 number += it->getNumberOfModification(mod);
357 std::vector<Aa>::iterator it(
m_aaVec.begin());
360 it->replaceAaModification(oldmod, newmod);
369 std::vector<Aa>::iterator it(
m_aaVec.begin());
372 it->removeAaModification(mod);
380std::vector<unsigned int>
383 std::vector<unsigned int> position_list;
384 unsigned int position = 0;
385 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
388 unsigned int number = 0;
389 number += it->getNumberOfModification(mod);
390 for(
unsigned int j = 0; j < number; j++)
392 position_list.push_back(position);
398 return position_list;
401std::vector<unsigned int>
403 const std::vector<char> &aa_list)
const
405 std::vector<unsigned int> position_list;
406 unsigned int position = 0;
407 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
410 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) !=
413 unsigned int number = 0;
414 number += it->getNumberOfModification(mod);
415 for(
unsigned int j = 0; j < number; j++)
417 position_list.push_back(position);
424 return position_list;
427std::vector<unsigned int>
430 std::vector<unsigned int> position_list;
431 unsigned int number = 0;
432 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
435 if(it->getLetter() == aa)
436 position_list.push_back(number);
441 return position_list;
444std::vector<unsigned int>
447 std::vector<unsigned int> position_list;
448 unsigned int number = 0;
449 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
454 (std::find(list_aa.begin(), list_aa.end(), it->getLetter()) !=
458 position_list.push_back(number);
464 return position_list;
470 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
473 return it->getInternalNterModification();
481 std::vector<Aa>::const_iterator it(
m_aaVec.end());
485 return it->getInternalCterModification();
492 std::vector<Aa>::iterator it(
m_aaVec.begin());
496 it->removeInternalNterModification();
503 std::vector<Aa>::iterator it(
m_aaVec.end());
508 it->removeInternalCterModification();
520 std::vector<Aa>::iterator it(
m_aaVec.begin());
523 it->addAaModification(mod);
533 QObject::tr(
"modification is not an internal Nter modification : %1")
543 std::vector<Aa>::iterator it(
m_aaVec.end());
547 it->addAaModification(mod);
557 QObject::tr(
"modification is not an internal Cter modification : %1")
567 m_aaVec.begin()->removeInternalNterModification();
570 m_aaVec.begin()->addAaModification(modNter);
579 m_aaVec.begin()->removeInternalNterModification();
582 m_aaVec.begin()->addAaModification(modNter);
591 std::size_t k = (
size - 1);
592 for(std::size_t i = 0; i < (
size / 2); i++, k--)
608 QObject::tr(
"no AA at position %1").arg(position));
618 QObject::tr(
"no AA at position %1").arg(position));
628 std::vector<Aa>::iterator it(
m_aaVec.begin());
629 std::vector<Aa>::iterator itend(
m_aaVec.end());
630 for(; it != itend; it++)
632 it->replaceLeucineIsoleucine();
640 std::vector<Aa>::iterator it(
m_aaVec.begin());
645 if(nter_modification !=
nullptr)
647 m_aaVec.begin()->addAaModification(nter_modification);
663 std::vector<Aa>::iterator it(
m_aaVec.end());
669 if(cter_modification !=
nullptr)
673 it->addAaModification(cter_modification);
689 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
692 seq += it->toProForma();
const QString & getAccession() const
static AaModificationP getInstance(const QString &accession)
void addAaModification(AaModificationP aaModification)
void replaceLeucineIsoleucine()
PeptideSp makePeptideSp() const
Peptide(const QString &pepstr)
AaModificationP getInternalNterModification() const
virtual int getNumberOfIsotope(Isotope isotope) const override
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
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
std::vector< unsigned int > getModificationPositionList(AaModificationP mod) const
get modification positions
NoConstPeptideSp makeNoConstPeptideSp() const
virtual bool isPalindrome() const override
tells if the peptide sequence is a palindrome
std::vector< Aa >::const_reverse_iterator rbegin() const
const QString getLiAbsoluteString() const
get all sequence string with modifications and converting Leucine to Isoleucine
void removeCterAminoAcid()
void setInternalCterModification(AaModificationP mod)
const QString toAbsoluteString() const
print all modifications
pappso_double m_proxyMass
void removeInternalNterModification()
void setInternalNterModification(AaModificationP mod)
void removeInternalCterModification()
unsigned int getNumberOfModification(AaModificationP mod) const
count modification occurence
void addAaModificationOnAllAminoAcid(AaModificationP aaModification, AminoAcidChar amino_acid)
adds a modification to all amino acid of the sequence
const QString toString() const
print modification except internal modifications
AaModificationP getInternalCterModification() const
QString toProForma() const
get the peptide model in ProForma notation https://github.com/HUPO-PSI/ProForma/blob/master/README....
void removeAaModification(AaModificationP mod)
removes all occurences of a modification
unsigned int size() const override
Aa & getAa(unsigned int position)
virtual int getNumberOfAtom(AtomIsotopeSurvey atom) const override
get the number of atom C, O, N, H in the molecule
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()
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
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)
@ ystar
Cter amino ions + NH3 loss.
@ yo
Cter amino ions + H2O loss.
@ bstar
Nter acylium ions + NH3 loss.
@ ao
Nter aldimine ions + H2O loss.
PeptideDirection getPeptideIonDirection(PeptideIon ion_type)
get the direction of a peptide ion
std::shared_ptr< const Peptide > PeptideSp
double pappso_double
A type definition for doubles.
bool peptideIonTypeIsComplement(PeptideIon ion_type_ref, PeptideIon ion_type)
tells if an ion type is the complement ion of the other
bool peptideIonIsNter(PeptideIon ion_type)
tells if an ion is Nter
std::shared_ptr< Peptide > NoConstPeptideSp
peptide natural isotope model