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 else if(accession ==
"internal:Cter_hydrolytic_cleavage_HO")
189 term.
m_name =
"Cter hydrolytic cleavage HO";
192 else if(accession ==
"USER:2-Ethynylbenzaldehyde")
198 term.
m_name =
"2-Ethynylbenzaldehyde";
205 else if(accession.startsWith(
"MUTATION:"))
207 QRegularExpression regexp_mutation(
"^MUTATION:([A-Z])=>([A-Z])$");
208 QRegularExpressionMatch match = regexp_mutation.match(accession);
211 qDebug() << match.capturedTexts()[1].at(0) <<
" " << match.capturedTexts()[2].at(0);
213 Aa aa_from(match.capturedTexts()[1].toStdString().c_str()[0]);
214 Aa aa_to(match.capturedTexts()[2].toStdString().c_str()[0]);
216 return instance_mutation;
220 else if(accession.startsWith(
"C13N15:"))
222 QRegularExpression regexp_label(
"^C13N15:([A-Z])$");
223 QRegularExpressionMatch match = regexp_label.match(accession);
226 char labelled_aa(match.capturedTexts()[1].toStdString().c_str()[0]);
232 return instance_labelled_aa_p;
267 QObject::tr(
"modification not found : [%1]\n%2").arg(accession).arg(e.
qwhat()));
285 std::map<Enums::AtomIsotopeSurvey, int>::const_iterator it_atom =
289 theoreticalm_mass +=
MASSCARBON * (it_atom->second);
294 theoreticalm_mass +=
MPROTIUM * (it_atom->second);
300 theoreticalm_mass +=
MASSOXYGEN * (it_atom->second);
311 theoreticalm_mass +=
MASSSULFUR * (it_atom->second);
314 qDebug() << theoreticalm_mass;
328 m_mass = theoreticalm_mass;
335 m_mass = theoreticalm_mass;
340 qDebug() <<
"ERROR in AaModification::calculateMassFromChemicalComponents "
342 << theoreticalm_mass <<
" m=" <<
m_mass <<
" diff=" << diff
351 QString accession = QString(
"%1").arg(modificationMass);
352 qDebug() << accession;
378 std::pair<MapAccessionModifications::iterator, bool> insert_res =
381 it = insert_res.first;
392 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2").arg(accession).arg(e.
qwhat()));
397 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
qwhat()));
399 catch(std::exception &e)
402 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
what()));
409 switch(amino_acid.toLatin1())
506 QObject::tr(
"ERROR getting removal accession instance of amino acid: "
516 switch(amino_acid.toLatin1())
622 QObject::tr(
"ERROR getting removal accession instance of amino acid: "
636 std::pair<MapAccessionModifications::iterator, bool> insert_res =
638 std::pair<QString, AaModificationP>(oboterm.
getAccession(),
nullptr));
640 if(!insert_res.second)
652 return insert_res.first->second;
660 unsigned int position)
729 if(peptide_sp.get()->size() == (position + 1))
733 if((position == 0) || isCter)
751 throw PappsoException(QObject::tr(
"tandem modification not found : %1 %2 %3 %4")
754 .arg(peptide_sp.get()->getSequence())
781 catch(std::exception &e)
784 QObject::tr(
"ERROR in AaModification::getNumberOfIsotope %2").arg(e.what()));
802 QString accession(QString(
"MUTATION:%1=>%2").arg(aa_from.
getLetter()).arg(aa_to.
getLetter()));
818 instance_mutation->
m_name =
820 return instance_mutation;
827 QString accession(QString(
"MUTATION:%1=>%2").arg(mut_from).arg(mut_to));
834 Aa aa_from(mut_from.toLatin1());
835 Aa aa_to(mut_to.toLatin1());
838 std::pair<MapAccessionModifications::iterator, bool> insert_res =
840 std::pair<QString, AaModificationP>(accession, instance_mutation));
841 it = insert_res.first;
852 QObject::tr(
"ERROR getting instance of : %1 NOT FOUND\n%2").arg(accession).arg(e.
qwhat()));
857 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
qwhat()));
859 catch(std::exception &e)
862 QObject::tr(
"ERROR getting instance of %1\n%2").arg(accession).arg(e.
what()));
869 switch(from_aa.toLatin1())
885 QString accession(QString(
"C13N15:%1").arg(from_aa));
889 QString diff_formula;
891 switch(from_aa.toLatin1())
894 diff_formula =
"(12)C -2 (13)C 2 (14)N -1 (15)N 1";
897 diff_formula =
"(12)C -3 (13)C 3 (14)N -1 (15)N 1";
900 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
903 diff_formula =
"(12)C -6 (13)C 6 (14)N -1 (15)N 1";
906 diff_formula =
"(12)C -6 (13)C 6 (14)N -1 (15)N 1";
909 diff_formula =
"(12)C -3 (13)C 3 (14)N -1 (15)N 1";
912 diff_formula =
"(12)C -4 (13)C 4 (14)N -1 (15)N 1";
915 diff_formula =
"(12)C -3 (13)C 3 (14)N -1 (15)N 1";
918 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
921 diff_formula =
"(12)C -4 (13)C 4 (14)N -1 (15)N 1";
924 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
927 diff_formula =
"(12)C -4 (13)C 4 (14)N -2 (15)N 2";
930 diff_formula =
"(12)C -5 (13)C 5 (14)N -2 (15)N 2";
933 diff_formula =
"(12)C -11 (13)C 11 (14)N -2 (15)N 2";
936 diff_formula =
"(12)C -9 (13)C 9 (14)N -1 (15)N 1";
939 diff_formula =
"(12)C -6 (13)C 6 (14)N -3 (15)N 3";
942 diff_formula =
"(12)C -5 (13)C 5 (14)N -1 (15)N 1";
946 QObject::tr(
"ERROR creating C13N15-labelled amino acid residue %1\n").arg(from_aa));
952 obo_psi_term.
m_name = QString(
"Fully C13N15-labelled %1").arg(from_aa);
955 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)