37 #include "../pappsoexception.h"
38 #include "../mzrange.h"
39 #include "../peptide/peptide.h"
40 #include "../obo/filterobopsimodsink.h"
41 #include "../obo/filterobopsimodtermaccession.h"
42 #include "../exception/exceptionnotfound.h"
57 : m_mass(mass), m_accession(accession)
77 : m_mass(toCopy.m_mass),
78 m_atomCount(std::move(toCopy.m_atomCount)),
79 m_mapIsotope(toCopy.m_mapIsotope),
80 m_accession(toCopy.m_accession)
93 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
103 MapAccessionModifications ret;
124 if(accession ==
"internal:Nter_hydrolytic_cleavage_H")
130 term.
m_name =
"Nter hydrolytic cleavage H+";
133 if(accession ==
"internal:Cter_hydrolytic_cleavage_HO")
139 term.
m_name =
"Cter hydrolytic cleavage HO";
142 if(accession.startsWith(
"MUTATION:"))
144 QRegExp regexp_mutation(
"^MUTATION:([A-Z])=>([A-Z])$");
145 if(regexp_mutation.exactMatch(accession))
147 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__ <<
" "
148 << regexp_mutation.capturedTexts()[1].at(0) <<
" "
149 << regexp_mutation.capturedTexts()[2].at(0);
152 regexp_mutation.capturedTexts()[1].toStdString().c_str()[0]);
153 Aa aa_to(regexp_mutation.capturedTexts()[2].toStdString().c_str()[0]);
156 return instance_mutation;
188 QRegExp rx(
"(^|\\s)([C,H,O,N,H,S])\\s([-]{0,1}\\d+)");
191 while((pos = rx.indexIn(diff_formula, pos)) != -1)
193 qDebug() << rx.cap(2) <<
" " << rx.cap(3);
198 else if(rx.cap(2) ==
"H")
202 else if(rx.cap(2) ==
"N")
206 else if(rx.cap(2) ==
"O")
210 else if(rx.cap(2) ==
"S")
214 pos += rx.matchedLength();
218 rx.setPattern(
"\\(([-]{0,1}\\d+)\\)([C,H,O,N,H,S])\\s([-]{0,1}\\d+)");
221 while((pos = rx.indexIn(diff_formula, pos)) != -1)
223 qDebug() << rx.cap(1) <<
" " << rx.cap(2) <<
" " << rx.cap(3);
224 int number_of_isotopes = rx.cap(3).toInt();
227 if(rx.cap(1) ==
"13")
233 else if(rx.cap(2) ==
"H")
241 else if(rx.cap(2) ==
"N")
243 if(rx.cap(1) ==
"15")
249 else if(rx.cap(2) ==
"O")
251 if(rx.cap(1) ==
"17")
255 else if(rx.cap(1) ==
"18")
261 else if(rx.cap(2) ==
"S")
263 if(rx.cap(1) ==
"33")
267 else if(rx.cap(1) ==
"34")
271 else if(rx.cap(1) ==
"36")
277 pos += rx.matchedLength();
289 std::map<AtomIsotopeSurvey, int>::const_iterator it_atom =
293 theoreticalm_mass +=
MASSCARBON * (it_atom->second);
298 theoreticalm_mass +=
MPROTIUM * (it_atom->second);
304 theoreticalm_mass +=
MASSOXYGEN * (it_atom->second);
315 theoreticalm_mass +=
MASSSULFUR * (it_atom->second);
318 qDebug() << theoreticalm_mass;
333 m_mass = theoreticalm_mass;
334 qDebug() <<
"AaModification::calculateMassFromChemicalComponents "
340 <<
"ERROR in AaModification::calculateMassFromChemicalComponents theo="
341 << theoreticalm_mass <<
" m=" <<
m_mass <<
" diff=" << diff
349 QString accession = QString(
"%1").arg(modificationMass);
350 qDebug() <<
"AaModification::getInstanceCustomizedMod " << accession;
372 MapAccessionModifications::iterator it =
378 std::pair<MapAccessionModifications::iterator, bool> insert_res =
380 std::pair<QString, AaModificationP>(
382 it = insert_res.first;
393 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2")
403 catch(std::exception &e)
416 MapAccessionModifications::iterator it =
421 std::pair<MapAccessionModifications::iterator, bool> insert_res =
424 it = insert_res.first;
438 unsigned int position)
507 if(peptide_sp.get()->size() == (position + 1))
511 if((position == 0) || isCter)
530 QObject::tr(
"tandem modification not found : %1 %2 %3 %4")
533 .arg(peptide_sp.get()->getSequence())
560 catch(std::exception &e)
563 QObject::tr(
"ERROR in AaModification::getNumberOfIsotope %2")
599 instance_mutation->
m_name = QString(
"mutation from %1 to %2")
602 return instance_mutation;
609 QString accession(QString(
"MUTATION:%1=>%2").arg(mut_from).arg(mut_to));
613 MapAccessionModifications::iterator it =
617 Aa aa_from(mut_from.toLatin1());
618 Aa aa_to(mut_to.toLatin1());
622 std::pair<MapAccessionModifications::iterator, bool> insert_res =
624 std::pair<QString, AaModificationP>(accession,
626 it = insert_res.first;
637 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2")
647 catch(std::exception &e)
amino acid modification model
virtual const char & getLetter() const
const QString & getName() const
static AaModificationP getInstanceMutation(const QChar &mut_from, const QChar &mut_to)
get a fake modification coding a mutation from an amino acid to an other
static AaModificationP createInstance(const QString &saccession)
AaModification(const QString &accession, pappso_double mass)
std::map< Isotope, int > m_mapIsotope
const QString & getAccession() const
static AaModificationP getInstanceXtandemMod(const QString &type, pappso_double mass, const PeptideSp &peptide_sp, unsigned int position)
std::map< AtomIsotopeSurvey, int > m_atomCount
int getNumberOfAtom(AtomIsotopeSurvey atom) const override final
get the number of atom C, O, N, H in the molecule
pappso_double getMass() const
void setXrefOrigin(const QString &origin)
set list of amino acid on which this modification takes place
std::map< QString, AaModificationP > MapAccessionModifications
static AaModificationP getInstance(const QString &accession)
static AaModificationP getInstanceCustomizedMod(pappso_double modificationMass)
const QString m_accession
void setDiffFormula(const QString &diff_formula)
static AaModificationP createInstanceMutation(const Aa &aa_from, const Aa &aa_to)
void calculateMassFromChemicalComponents()
static MapAccessionModifications m_mapAccessionModifications
int getNumberOfIsotope(Isotope isotope) const override final
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
int getNumberOfAtom(AtomIsotopeSurvey atom) const override final
get the number of atom C, O, N, H in the molecule
pappso_double getMass() const override
const OboPsiModTerm & getOne()
virtual const QString & qwhat() const
const char * what() const noexcept override
static PrecisionPtr getDaltonInstance(pappso_double value)
get a Dalton precision pointer
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
const pappso_double DIFFS32S33(32.9714589101 - MASSSULFUR)
const pappso_double DIFFS32S34(33.9678670300 - MASSSULFUR)
const pappso_double DIFFO16O17(16.99913150 - MASSOXYGEN)
const pappso_double MASSCARBON(12)
const pappso_double MASSSULFUR(31.9720711741)
std::shared_ptr< const Peptide > PeptideSp
const pappso_double DIFFS32S36(35.9670812000 - MASSSULFUR)
const AaModification * AaModificationP
double pappso_double
A type definition for doubles.
const pappso_double MPROTIUM(1.007825032241)
const pappso_double MASSNITROGEN(14.0030740048)
const pappso_double MASSOXYGEN(15.99491461956)
const pappso_double DIFFO16O18(17.9991610 - MASSOXYGEN)
const pappso_double DIFFN14N15(15.0001088982 - MASSNITROGEN)
const pappso_double DIFFC12C13(1.0033548378)
const pappso_double DIFFH1H2(2.0141017778 - MPROTIUM)