31#include <QRegularExpression>
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_accession(accession), m_mass(mass)
77 : m_accession(toCopy.m_accession),
78 m_name(toCopy.m_name),
79 m_mass(toCopy.m_mass),
80 m_atomCount(std::move(toCopy.m_atomCount)),
81 m_mapIsotope(toCopy.m_mapIsotope)
106 MapAccessionModifications ret;
127 if(accession ==
"internal:Nter_hydrolytic_cleavage_H")
133 term.
m_name =
"Nter hydrolytic cleavage H+";
136 if(accession ==
"internal:Cter_hydrolytic_cleavage_HO")
142 term.
m_name =
"Cter hydrolytic cleavage HO";
145 if(accession.startsWith(
"MUTATION:"))
147 QRegularExpression regexp_mutation(
"^MUTATION:([A-Z])=>([A-Z])$");
148 QRegularExpressionMatch match = regexp_mutation.match(accession);
151 qDebug() << match.capturedTexts()[1].at(0) <<
" "
152 << match.capturedTexts()[2].at(0);
154 Aa aa_from(match.capturedTexts()[1].toStdString().c_str()[0]);
155 Aa aa_to(match.capturedTexts()[2].toStdString().c_str()[0]);
158 return instance_mutation;
190 QRegularExpression rx(
"(^|\\s)([C,H,O,N,H,S])\\s([-]{0,1}\\d+)");
191 QRegularExpressionMatchIterator i = rx.globalMatch(diff_formula);
195 QRegularExpressionMatch match = i.next();
197 qDebug() << match.captured(2) <<
" " << match.captured(2) <<
" "
198 << match.captured(3);
200 if(match.captured(2) ==
"C")
204 else if(match.captured(2) ==
"H")
208 else if(match.captured(2) ==
"N")
212 else if(match.captured(2) ==
"O")
216 else if(match.captured(2) ==
"S")
223 rx.setPattern(
"\\(([-]{0,1}\\d+)\\)([C,H,O,N,H,S])\\s([-]{0,1}\\d+)");
225 i = rx.globalMatch(diff_formula);
229 QRegularExpressionMatch match = i.next();
231 qDebug() << match.captured(1) <<
" " << match.captured(2) <<
" "
232 << match.captured(3);
234 int number_of_isotopes = match.captured(3).toInt();
236 if(match.captured(2) ==
"C")
238 if(match.captured(1) ==
"13")
244 else if(match.captured(2) ==
"H")
246 if(match.captured(1) ==
"2")
252 else if(match.captured(2) ==
"N")
254 if(match.captured(1) ==
"15")
260 else if(match.captured(2) ==
"O")
262 if(match.captured(1) ==
"17")
266 else if(match.captured(1) ==
"18")
272 else if(match.captured(2) ==
"S")
274 if(match.captured(1) ==
"33")
278 else if(match.captured(1) ==
"34")
282 else if(match.captured(1) ==
"36")
298 std::map<AtomIsotopeSurvey, int>::const_iterator it_atom =
302 theoreticalm_mass +=
MASSCARBON * (it_atom->second);
307 theoreticalm_mass +=
MPROTIUM * (it_atom->second);
313 theoreticalm_mass +=
MASSOXYGEN * (it_atom->second);
324 theoreticalm_mass +=
MASSSULFUR * (it_atom->second);
327 qDebug() << theoreticalm_mass;
342 m_mass = theoreticalm_mass;
348 <<
"ERROR in AaModification::calculateMassFromChemicalComponents theo="
349 << theoreticalm_mass <<
" m=" <<
m_mass <<
" diff=" << diff
357 QString accession = QString(
"%1").arg(modificationMass);
358 qDebug() << accession;
380 MapAccessionModifications::iterator it =
386 std::pair<MapAccessionModifications::iterator, bool> insert_res =
388 std::pair<QString, AaModificationP>(
390 it = insert_res.first;
401 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2")
411 catch(std::exception &e)
424 MapAccessionModifications::iterator it =
429 std::pair<MapAccessionModifications::iterator, bool> insert_res =
432 it = insert_res.first;
446 unsigned int position)
515 if(peptide_sp.get()->size() == (position + 1))
519 if((position == 0) || isCter)
538 QObject::tr(
"tandem modification not found : %1 %2 %3 %4")
541 .arg(peptide_sp.get()->getSequence())
568 catch(std::exception &e)
571 QObject::tr(
"ERROR in AaModification::getNumberOfIsotope %2")
607 instance_mutation->
m_name = QString(
"mutation from %1 to %2")
610 return instance_mutation;
617 QString accession(QString(
"MUTATION:%1=>%2").arg(mut_from).arg(mut_to));
621 MapAccessionModifications::iterator it =
625 Aa aa_from(mut_from.toLatin1());
626 Aa aa_to(mut_to.toLatin1());
630 std::pair<MapAccessionModifications::iterator, bool> insert_res =
632 std::pair<QString, AaModificationP>(accession,
634 it = insert_res.first;
645 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2")
655 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)
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)
AaModification(AaModification &&toCopy)
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()
const char * what() const noexcept override
virtual const QString & qwhat() const
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)