31#include <QRegularExpression>
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;
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
int getNumberOfIsotope(Enums::Isotope isotope) const override final
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
std::map< Enums::Isotope, int > m_mapIsotope
void setDiffFormula(const pappso::ChemicalFormula &diff_formula)
static AaModificationP createInstance(const QString &saccession)
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)
pappso_double getMass() const
int getNumberOfAtom(Enums::AtomIsotopeSurvey atom) const override final
get the number of atom C, O, N, H in the molecule
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
std::map< Enums::AtomIsotopeSurvey, int > m_atomCount
int getNumberOfAtom(Enums::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 PrecisionBase * PrecisionPtr
const pappso_double DIFFN14N15(15.0001088982 - MASSNITROGEN)
const pappso_double DIFFC12C13(1.0033548378)
const pappso_double DIFFH1H2(2.0141017778 - MPROTIUM)