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())
101 m_aaVec.back().addAaModification(
104 qDebug() <<
"blabla " <<
m_aaVec.back().toString();
113 : m_aaVec(peptide.m_aaVec), m_proxyMass(peptide.m_proxyMass)
119 : m_aaVec(std::move(toCopy.m_aaVec)), m_proxyMass(toCopy.m_proxyMass)
127 return std::make_shared<const Peptide>(*
this);
133 return std::make_shared<Peptide>(*
this);
137std::vector<Aa>::iterator
143std::vector<Aa>::iterator
149std::vector<Aa>::const_iterator
155std::vector<Aa>::const_iterator
161std::vector<Aa>::const_reverse_iterator
167std::vector<Aa>::const_reverse_iterator
188 unsigned int position)
190 if(position >=
size())
193 QObject::tr(
"position (%1) > size (%2)").arg(position).arg(
size()));
196 qDebug() <<
"Peptide::addAaModification begin " << position;
197 std::vector<Aa>::iterator it =
m_aaVec.begin() + position;
198 it->addAaModification(aaModification);
200 qDebug() <<
"Peptide::addAaModification end";
208 for(
auto &aa : *
this)
210 if(aa.getAminoAcidChar() == amino_acid)
212 aa.addAaModification(aaModification);
225 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
228 seq += it->getLetter();
237 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
240 seq += it->toAbsoluteString();
250 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
253 seq += it->toAbsoluteString();
256 return seq.replace(
"L",
"I");
264 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
267 seq += it->toString();
276 qDebug() <<
"Aa::getMass() begin";
293 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
296 number += it->getNumberOfAtom(atom);
307 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
310 number += it->getNumberOfIsotope(isotope);
321 unsigned int number = 0;
322 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
325 number += it->getNumberOfModification(mod);
334 const std::vector<char> &aa_list)
const
336 unsigned int number = 0;
337 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
340 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) !=
343 number += it->getNumberOfModification(mod);
356 std::vector<Aa>::iterator it(
m_aaVec.begin());
359 it->replaceAaModification(oldmod, newmod);
368 std::vector<Aa>::iterator it(
m_aaVec.begin());
371 it->removeAaModification(mod);
379std::vector<unsigned int>
382 std::vector<unsigned int> position_list;
383 unsigned int position = 0;
384 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
387 unsigned int number = 0;
388 number += it->getNumberOfModification(mod);
389 for(
unsigned int j = 0; j < number; j++)
391 position_list.push_back(position);
397 return position_list;
400std::vector<unsigned int>
402 const std::vector<char> &aa_list)
const
404 std::vector<unsigned int> position_list;
405 unsigned int position = 0;
406 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
409 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) !=
412 unsigned int number = 0;
413 number += it->getNumberOfModification(mod);
414 for(
unsigned int j = 0; j < number; j++)
416 position_list.push_back(position);
423 return position_list;
426std::vector<unsigned int>
429 std::vector<unsigned int> position_list;
430 unsigned int number = 0;
431 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
434 if(it->getLetter() == aa)
435 position_list.push_back(number);
440 return position_list;
443std::vector<unsigned int>
446 std::vector<unsigned int> position_list;
447 unsigned int number = 0;
448 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
453 (std::find(list_aa.begin(), list_aa.end(), it->getLetter()) !=
457 position_list.push_back(number);
463 return position_list;
469 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
472 return it->getInternalNterModification();
480 std::vector<Aa>::const_iterator it(
m_aaVec.end());
484 return it->getInternalCterModification();
491 std::vector<Aa>::iterator it(
m_aaVec.begin());
495 it->removeInternalNterModification();
502 std::vector<Aa>::iterator it(
m_aaVec.end());
507 it->removeInternalCterModification();
519 std::vector<Aa>::iterator it(
m_aaVec.begin());
522 it->addAaModification(mod);
532 QObject::tr(
"modification is not an internal Nter modification : %1")
542 std::vector<Aa>::iterator it(
m_aaVec.end());
546 it->addAaModification(mod);
556 QObject::tr(
"modification is not an internal Cter modification : %1")
566 m_aaVec.begin()->removeInternalNterModification();
569 m_aaVec.begin()->addAaModification(modNter);
578 m_aaVec.begin()->removeInternalNterModification();
581 m_aaVec.begin()->addAaModification(modNter);
590 std::size_t k = (
size - 1);
591 for(std::size_t i = 0; i < (
size / 2); i++, k--)
607 QObject::tr(
"no AA at position %1").arg(position));
617 QObject::tr(
"no AA at position %1").arg(position));
627 std::vector<Aa>::iterator it(
m_aaVec.begin());
628 std::vector<Aa>::iterator itend(
m_aaVec.end());
629 for(; it != itend; it++)
631 it->replaceLeucineIsoleucine();
639 std::vector<Aa>::iterator it(
m_aaVec.begin());
644 if(nter_modification !=
nullptr)
646 m_aaVec.begin()->addAaModification(nter_modification);
662 std::vector<Aa>::iterator it(
m_aaVec.end());
668 if(cter_modification !=
nullptr)
672 it->addAaModification(cter_modification);
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
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