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"
43#include "../obo/filterobopsimodmap.h"
44#include "../obo/obounimod.h"
59 : m_accession(accession), m_mass(mass)
80 : m_accession(toCopy.m_accession),
81 m_name(toCopy.m_name),
82 m_mass(toCopy.m_mass),
83 m_atomCount(std::move(toCopy.m_atomCount)),
84 m_mapIsotope(toCopy.m_mapIsotope)
118 QStringList aa_list =
m_accession.mid(9).split(
"=>");
120 return QString(
"%1][%2")
127 return QString(
"+%1").arg(QString::number(
m_mass,
'f', 4));
131 return QString(
"%1").arg(QString::number(
m_mass,
'f', 4));
149 MapAccessionModifications ret;
167 qDebug() << new_mod->
m_mass;
174 if(accession ==
"internal:Nter_hydrolytic_cleavage_H")
180 term.
m_name =
"Nter hydrolytic cleavage H+";
183 if(accession ==
"internal:Cter_hydrolytic_cleavage_HO")
189 term.
m_name =
"Cter hydrolytic cleavage HO";
192 if(accession.startsWith(
"MUTATION:"))
194 QRegularExpression regexp_mutation(
"^MUTATION:([A-Z])=>([A-Z])$");
195 QRegularExpressionMatch match = regexp_mutation.match(accession);
198 qDebug() << match.capturedTexts()[1].at(0) <<
" " << match.capturedTexts()[2].at(0);
200 Aa aa_from(match.capturedTexts()[1].toStdString().c_str()[0]);
201 Aa aa_to(match.capturedTexts()[2].toStdString().c_str()[0]);
203 return instance_mutation;
207 if(accession.startsWith(
"C13N15:"))
209 QRegularExpression regexp_label(
"^C13N15:([A-Z])$");
210 QRegularExpressionMatch match = regexp_label.match(accession);
213 char labelled_aa(match.capturedTexts()[1].toStdString().c_str()[0]);
219 return instance_labelled_aa_p;
254 QObject::tr(
"modification not found : [%1]\n%2").arg(accession).arg(e.
qwhat()));
275 theoreticalm_mass +=
MASSCARBON * (it_atom->second);
280 theoreticalm_mass +=
MPROTIUM * (it_atom->second);
286 theoreticalm_mass +=
MASSOXYGEN * (it_atom->second);
297 theoreticalm_mass +=
MASSSULFUR * (it_atom->second);
300 qDebug() << theoreticalm_mass;
314 m_mass = theoreticalm_mass;
321 m_mass = theoreticalm_mass;
326 qDebug() <<
"ERROR in AaModification::calculateMassFromChemicalComponents "
328 << theoreticalm_mass <<
" m=" <<
m_mass <<
" diff=" << diff
337 QString accession = QString(
"%1").arg(modificationMass);
338 qDebug() << accession;
364 std::pair<MapAccessionModifications::iterator, bool> insert_res =
367 it = insert_res.first;
378 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2").arg(accession).arg(e.
qwhat()));
383 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
qwhat()));
385 catch(std::exception &e)
388 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
what()));
395 switch(amino_acid.toLatin1())
492 QObject::tr(
"ERROR getting removal accession instance of amino acid: "
502 switch(amino_acid.toLatin1())
608 QObject::tr(
"ERROR getting removal accession instance of amino acid: "
622 std::pair<MapAccessionModifications::iterator, bool> insert_res =
624 std::pair<QString, AaModificationP>(oboterm.
getAccession(),
nullptr));
626 if(!insert_res.second)
638 return insert_res.first->second;
646 unsigned int position)
715 if(peptide_sp.get()->size() == (position + 1))
719 if((position == 0) || isCter)
737 throw PappsoException(QObject::tr(
"tandem modification not found : %1 %2 %3 %4")
740 .arg(peptide_sp.get()->getSequence())
767 catch(std::exception &e)
770 QObject::tr(
"ERROR in AaModification::getNumberOfIsotope %2").arg(e.what()));
788 QString accession(QString(
"MUTATION:%1=>%2").arg(aa_from.
getLetter()).arg(aa_to.
getLetter()));
804 instance_mutation->
m_name =
806 return instance_mutation;
813 QString accession(QString(
"MUTATION:%1=>%2").arg(mut_from).arg(mut_to));
820 Aa aa_from(mut_from.toLatin1());
821 Aa aa_to(mut_to.toLatin1());
824 std::pair<MapAccessionModifications::iterator, bool> insert_res =
826 std::pair<QString, AaModificationP>(accession, instance_mutation));
827 it = insert_res.first;
838 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2").arg(accession).arg(e.
qwhat()));
843 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
qwhat()));
845 catch(std::exception &e)
848 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
what()));
855 switch(from_aa.toLatin1())
871 QString accession(QString(
"C13N15:%1").arg(from_aa));
875 QString diff_formula;
877 switch(from_aa.toLatin1())
880 diff_formula =
"(12)C -2 (13)C 2 (14)N -1 (15)N 1";
883 diff_formula =
"(12)C -3 (13)C 3 (14)N -1 (15)N 1";
886 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
889 diff_formula =
"(12)C -6 (13)C 6 (14)N -1 (15)N 1";
892 diff_formula =
"(12)C -6 (13)C 6 (14)N -1 (15)N 1";
895 diff_formula =
"(12)C -3 (13)C 3 (14)N -1 (15)N 1";
898 diff_formula =
"(12)C -4 (13)C 4 (14)N -1 (15)N 1";
901 diff_formula =
"(12)C -3 (13)C 3 (14)N -1 (15)N 1";
904 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
907 diff_formula =
"(12)C -4 (13)C 4 (14)N -1 (15)N 1";
910 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
913 diff_formula =
"(12)C -4 (13)C 4 (14)N -2 (15)N 2";
916 diff_formula =
"(12)C -5 (13)C 5 (14)N -2 (15)N 2";
919 diff_formula =
"(12)C -11 (13)C 11 (14)N -2 (15)N 2";
922 diff_formula =
"(12)C -9 (13)C 9 (14)N -1 (15)N 1";
925 diff_formula =
"(12)C -6 (13)C 6 (14)N -3 (15)N 3";
928 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
932 QObject::tr(
"ERROR creating C13N15-labelled amino acid residue %1\n").arg(from_aa));
938 obo_psi_term.
m_name = QString(
"Fully C13N15-labelled %1").arg(from_aa);
941 qDebug() <<
"obo_psi_term.m_diffFormula: " << obo_psi_term.
m_diffFormula;
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
void setDiffFormula(const pappso::ChemicalFormula &diff_formula)
static AaModificationP createInstance(const QString &saccession)
std::map< Isotope, int > m_mapIsotope
const QString & getAccession() const
const QString & getXrefOrigin() const
get list of amino acid on which this modification takes place
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 getInstanceRemovalAccessionByAaLetter(const QChar &amino_acid)
get a PSI MOD instance corresponding to the removal of the given amino acid find the modifications th...
static AaModificationP createInstanceC13N15LabelledAminoAcid(const QChar &aa_from)
get heavy amino acid modification C13 N15
static AaModificationP getInstanceCustomizedMod(pappso_double modificationMass)
const QString toProForma() const
get the amino acid in ProForma notation https://github.com/HUPO-PSI/ProForma/blob/master/README....
static AaModificationP getInstanceInsertionAccessionByAaLetter(const QChar &amino_acid)
get a PSI MOD instance corresponding to the insertion of the given amino acid find the modifications.
const QString m_accession
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 & getOboPsiModTermWithAccession(const QString &accession) const
const OboPsiModTerm & getOboPsiModTermWithName(const QString &name) const
get the first occurence of term with this name
const OboPsiModTerm & getOne()
void setAccession(const QString &accession)
const QString & getAccession() const
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)