34 #include "../pappsoexception.h"
35 #include "../exception/exceptionoutofrange.h"
36 #include "../exception/exceptionnotpossible.h"
46 if((std::int8_t)ion_type < (std::int8_t)8)
66 QString::const_iterator it(pepstr.begin());
67 if(it != pepstr.end())
72 Aa nter_aa(it->toLatin1());
78 while(it != pepstr.end())
85 m_aaVec.back().addAaModification(
88 qDebug() <<
"blabla " <<
m_aaVec.back().toString();
97 : m_aaVec(peptide.m_aaVec), m_proxyMass(peptide.m_proxyMass)
103 : m_aaVec(std::move(toCopy.m_aaVec)), m_proxyMass(toCopy.m_proxyMass)
111 return std::make_shared<const Peptide>(*
this);
117 return std::make_shared<Peptide>(*
this);
122 unsigned int position)
124 if(position >=
size())
127 QObject::tr(
"position (%1) > size (%2)").arg(position).arg(
size()));
130 qDebug() <<
"Peptide::addAaModification begin " << position;
131 std::vector<Aa>::iterator it =
m_aaVec.begin() + position;
132 it->addAaModification(aaModification);
134 qDebug() <<
"Peptide::addAaModification end";
142 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
145 seq += it->getLetter();
154 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
157 seq += it->toAbsoluteString();
167 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
170 seq += it->toAbsoluteString();
173 return seq.replace(
"L",
"I");
181 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
184 seq += it->toString();
193 qDebug() <<
"Aa::getMass() begin";
210 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
213 number += it->getNumberOfAtom(atom);
224 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
227 number += it->getNumberOfIsotope(isotope);
238 unsigned int number = 0;
239 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
242 number += it->getNumberOfModification(mod);
251 const std::vector<char> &aa_list)
const
253 unsigned int number = 0;
254 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
257 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) !=
260 number += it->getNumberOfModification(mod);
273 std::vector<Aa>::iterator it(
m_aaVec.begin());
276 it->replaceAaModification(oldmod, newmod);
285 std::vector<Aa>::iterator it(
m_aaVec.begin());
288 it->removeAaModification(mod);
296 std::vector<unsigned int>
299 std::vector<unsigned int> position_list;
300 unsigned int position = 0;
301 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
304 unsigned int number = 0;
305 number += it->getNumberOfModification(mod);
306 for(
unsigned int j = 0; j < number; j++)
308 position_list.push_back(position);
314 return position_list;
317 std::vector<unsigned int>
319 const std::vector<char> &aa_list)
const
321 std::vector<unsigned int> position_list;
322 unsigned int position = 0;
323 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
326 if(std::find(aa_list.begin(), aa_list.end(), it->getLetter()) !=
329 unsigned int number = 0;
330 number += it->getNumberOfModification(mod);
331 for(
unsigned int j = 0; j < number; j++)
333 position_list.push_back(position);
340 return position_list;
343 std::vector<unsigned int>
346 std::vector<unsigned int> position_list;
347 unsigned int number = 0;
348 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
351 if(it->getLetter() == aa)
352 position_list.push_back(number);
357 return position_list;
360 std::vector<unsigned int>
363 std::vector<unsigned int> position_list;
364 unsigned int number = 0;
365 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
370 (std::find(list_aa.begin(), list_aa.end(), it->getLetter()) !=
374 position_list.push_back(number);
380 return position_list;
386 std::vector<Aa>::const_iterator it(
m_aaVec.begin());
389 return it->getInternalNterModification();
397 std::vector<Aa>::const_iterator it(
m_aaVec.end());
401 return it->getInternalCterModification();
408 std::vector<Aa>::iterator it(
m_aaVec.begin());
412 it->removeInternalNterModification();
419 std::vector<Aa>::iterator it(
m_aaVec.end());
424 it->removeInternalCterModification();
436 std::vector<Aa>::iterator it(
m_aaVec.begin());
439 it->addAaModification(mod);
449 QObject::tr(
"modification is not an internal Nter modification : %1")
459 std::vector<Aa>::iterator it(
m_aaVec.end());
463 it->addAaModification(mod);
473 QObject::tr(
"modification is not an internal Cter modification : %1")
483 m_aaVec.begin()->removeInternalNterModification();
486 m_aaVec.begin()->addAaModification(modNter);
495 m_aaVec.begin()->removeInternalNterModification();
498 m_aaVec.begin()->addAaModification(modNter);
507 std::size_t k = (
size - 1);
508 for(std::size_t i = 0; i < (
size / 2); i++, k--)
524 QObject::tr(
"no AA at position %1").arg(position));
534 QObject::tr(
"no AA at position %1").arg(position));
544 std::vector<Aa>::iterator it(
m_aaVec.begin());
545 std::vector<Aa>::iterator itend(
m_aaVec.end());
546 for(; it != itend; it++)
548 it->replaceLeucineIsoleucine();
556 std::vector<Aa>::iterator it(
m_aaVec.begin());
561 if(nter_modification !=
nullptr)
563 m_aaVec.begin()->addAaModification(nter_modification);
579 std::vector<Aa>::iterator it(
m_aaVec.end());
585 if(cter_modification !=
nullptr)
589 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< 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
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
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
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 > 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)
std::shared_ptr< const Peptide > PeptideSp
double pappso_double
A type definition for doubles.
PeptideDirection getPeptideIonDirection(PeptideIon ion_type)
get the direction of a peptide ion
bool peptideIonIsNter(PeptideIon ion_type)
tells if an ion is Nter
std::shared_ptr< Peptide > NoConstPeptideSp
peptide natural isotope model