diff --git a/src/input/identificationpwizreader.cpp b/src/input/identificationpwizreader.cpp index ba02347f684bb57fbec4a417c4a5d3364d8d9971..638d279ff880347e146e1234d11b7088cb9e8a61 100644 --- a/src/input/identificationpwizreader.cpp +++ b/src/input/identificationpwizreader.cpp @@ -44,6 +44,7 @@ #include <locale> #include "../core/proteinxtp.h" #include "../core/peptidextp.h" +#include "../utils/utils.h" pwiz::identdata::IdentDataFile * getPwizIdentDataFile(const QString & filename); @@ -102,7 +103,7 @@ IdentificationEngine IdentificationPwizReader::getIdentificationEngine() const { */ IdentificationEngine identification_engine = IdentificationEngine::peptider; for (pwiz::identdata::AnalysisSoftwarePtr software_ptr :_pwiz_ident_data_file->analysisSoftwareList) { - // qDebug() << "IdentificationPwizReader::getIdentificationEngine " << QString::fromStdString(software_ptr.get()->cvParam(param).name); + // qDebug() << "IdentificationPwizReader::getIdentificationEngine " << QString::fromStdString(software_ptr.get()->cvParam(param).name); if (software_ptr.get()->softwareName.hasCVParam(pwiz::cv::MS_X_Tandem)) { identification_engine = IdentificationEngine::XTandem; @@ -162,13 +163,16 @@ void IdentificationPwizReader::read( for (pwiz::identdata::PeptidePtr seq_ptr :_pwiz_ident_data_file->sequenceCollection.peptides) { pwiz::identdata::Peptide * peptide_pwiz = seq_ptr.get(); PeptideXtp peptide(QString::fromStdString( peptide_pwiz->peptideSequence)); - - + + //<Modification monoisotopicMassDelta="42.01056468" location="1"> // <cvParam accession="MOD:00394" cvRef="PSI-MOD" name="acetylated residue"/> //</Modification> for (pwiz::identdata::ModificationPtr mod_ptr :peptide_pwiz->modification) { unsigned int location = mod_ptr.get()->location; + pappso::pappso_double mass_delta = mod_ptr.get()->monoisotopicMassDelta; + + peptide.addAaModification(Utils::guessAaModificationPbyMonoisotopicMassDelta(mass_delta), location-1); //std::vector<CVParam> cvParams; for (const pwiz::data::CVParam & param: mod_ptr.get()->cvParams) { qDebug() << "IdentificationPwizReader::read param " << QString::fromStdString(param.name()); @@ -180,12 +184,12 @@ void IdentificationPwizReader::read( } */ } - + for (const pwiz::data::UserParam & param: mod_ptr.get()->userParams) { - qDebug() << "IdentificationPwizReader::read UserParams " << QString::fromStdString(param.name); + qDebug() << "IdentificationPwizReader::read UserParams " << QString::fromStdString(param.name); } } - + PeptideXtpSp peptide_sp(peptide.makePeptideXtpSp()); peptide_sp = peptide_store.getInstance(peptide_sp); map_id2peptide.insert(std::pair<QString, PeptideXtpSp>(QString::fromStdString( peptide_pwiz->id), peptide_sp)); diff --git a/src/input/xtandemsaxhandler.cpp b/src/input/xtandemsaxhandler.cpp index ee79ad8482612160fb2308008cdad66d08bd2a9b..2226d76e4e1b3616969b87ef17a2d9b42386e71c 100644 --- a/src/input/xtandemsaxhandler.cpp +++ b/src/input/xtandemsaxhandler.cpp @@ -35,6 +35,8 @@ #include "../utils/peptidestore.h" #include "../utils/proteinstore.h" #include "../files/fastafile.h" +#include "../utils/utils.h" + XtandemSaxHandler::XtandemSaxHandler(Project * p_project, IdentificationGroup * p_identification_group, IdentificationDataSource * p_identification_data_source):_p_project(p_project) @@ -314,7 +316,7 @@ bool XtandemSaxHandler::startElement_aa(QXmlAttributes attributes) { //<aa type="M" at="624" modified="15.99491" /> bool is_ok = true; //qDebug() << "startElement_aa "; - pappso::AaModificationP modif = getAaModificationP(attributes.value("modified").simplified().toDouble()); + pappso::AaModificationP modif = Utils::guessAaModificationPbyMonoisotopicMassDelta(attributes.value("modified").simplified().toDouble()); unsigned int position_in_prot = attributes.value("at").simplified().toUInt()-1; _current_peptide_sp.get()->addAaModification(modif, position_in_prot-_p_peptide_match->getStart()); //qDebug() << "startElement_aa end" ; @@ -540,56 +542,3 @@ bool XtandemSaxHandler::characters(const QString &str) { return true; } - -pappso::AaModificationP XtandemSaxHandler::getAaModificationP(pappso::mz mass) const { - pappso::PrecisionP precision = pappso::Precision::getDaltonInstance(0.01); - - pappso::AaModificationP oxidation = pappso::AaModification::getInstance("MOD:00719"); - if (pappso::MassRange(oxidation->getMass(),precision).contains(mass)) { - return oxidation; - } - pappso::AaModificationP iodoacetamide = pappso::AaModification::getInstance("MOD:00397"); - if (pappso::MassRange(iodoacetamide->getMass(),precision).contains(mass)) { - return iodoacetamide; - } - pappso::AaModificationP acetylated = pappso::AaModification::getInstance("MOD:00408"); - if (pappso::MassRange(acetylated->getMass(),precision).contains(mass)) { - return acetylated; - } - pappso::AaModificationP phosphorylated = pappso::AaModification::getInstance("MOD:00696"); - if (pappso::MassRange(phosphorylated->getMass(),precision).contains(mass)) { - return phosphorylated; - } - pappso::AaModificationP ammonia = pappso::AaModification::getInstance("MOD:01160"); - if (pappso::MassRange(ammonia->getMass(),precision).contains(mass)) { - return ammonia; - } - pappso::AaModificationP dehydrated = pappso::AaModification::getInstance("MOD:00704"); - if (pappso::MassRange(dehydrated->getMass(),precision).contains(mass)) { - return dehydrated; - } - pappso::AaModificationP dimethylated = pappso::AaModification::getInstance("MOD:00429"); - if (pappso::MassRange(dimethylated->getMass(),precision).contains(mass)) { - return dimethylated; - } - - pappso::AaModificationP dimethylated_medium = pappso::AaModification::getInstance("MOD:00552"); - if (pappso::MassRange(dimethylated_medium->getMass(),precision).contains(mass)) { - return dimethylated_medium; - } - - pappso::AaModificationP dimethylated_heavy = pappso::AaModification::getInstance("MOD:00638"); - if (pappso::MassRange(dimethylated_heavy->getMass(),precision).contains(mass)) { - return dimethylated_heavy; - } - pappso::AaModificationP DimethylpyrroleAdduct = pappso::AaModification::getInstance("MOD:00628"); - if (pappso::MassRange(DimethylpyrroleAdduct->getMass(),precision).contains(mass)) { - return DimethylpyrroleAdduct; - } - - // modification not found, creating customized mod : - return pappso::AaModification::getInstanceCustomizedMod(mass); - - throw pappso::ExceptionNotFound(QObject::tr("XpipSaxHandler::getAaModificationP => modification not found for mass %1").arg(mass)); -} - diff --git a/src/input/xtandemsaxhandler.h b/src/input/xtandemsaxhandler.h index be0448349bc08e80aceea0393fb5f58f75c1573e..0e0a27ce6c8809db769605857cc4b449c99eda6f 100644 --- a/src/input/xtandemsaxhandler.h +++ b/src/input/xtandemsaxhandler.h @@ -75,8 +75,6 @@ private: bool endElement_domain(); bool endElement_note(); - pappso::AaModificationP getAaModificationP(pappso::mz mass) const; - private: std::vector<QString> _tag_stack; QString _errorStr; diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp index d3c583be7e22953b682eab6c71639b3fc57e4565..e75b6836a49bb797d005c4676358f9365db342a0 100644 --- a/src/utils/utils.cpp +++ b/src/utils/utils.cpp @@ -1,4 +1,6 @@ #include "utils.h" +#include <pappsomspp/exception/exceptionnotfound.h> +#include <pappsomspp/mass_range.h> const QUrl Utils::getOlsUrl(QString psimod_accession) { @@ -33,3 +35,56 @@ const QString Utils::getDatabaseName(ExternalDatabase database) { } return database_name; } + + +pappso::AaModificationP Utils::guessAaModificationPbyMonoisotopicMassDelta(pappso::mz mass) { + pappso::PrecisionP precision = pappso::Precision::getDaltonInstance(0.01); + + pappso::AaModificationP oxidation = pappso::AaModification::getInstance("MOD:00719"); + if (pappso::MassRange(oxidation->getMass(),precision).contains(mass)) { + return oxidation; + } + pappso::AaModificationP iodoacetamide = pappso::AaModification::getInstance("MOD:00397"); + if (pappso::MassRange(iodoacetamide->getMass(),precision).contains(mass)) { + return iodoacetamide; + } + pappso::AaModificationP acetylated = pappso::AaModification::getInstance("MOD:00408"); + if (pappso::MassRange(acetylated->getMass(),precision).contains(mass)) { + return acetylated; + } + pappso::AaModificationP phosphorylated = pappso::AaModification::getInstance("MOD:00696"); + if (pappso::MassRange(phosphorylated->getMass(),precision).contains(mass)) { + return phosphorylated; + } + pappso::AaModificationP ammonia = pappso::AaModification::getInstance("MOD:01160"); + if (pappso::MassRange(ammonia->getMass(),precision).contains(mass)) { + return ammonia; + } + pappso::AaModificationP dehydrated = pappso::AaModification::getInstance("MOD:00704"); + if (pappso::MassRange(dehydrated->getMass(),precision).contains(mass)) { + return dehydrated; + } + pappso::AaModificationP dimethylated = pappso::AaModification::getInstance("MOD:00429"); + if (pappso::MassRange(dimethylated->getMass(),precision).contains(mass)) { + return dimethylated; + } + + pappso::AaModificationP dimethylated_medium = pappso::AaModification::getInstance("MOD:00552"); + if (pappso::MassRange(dimethylated_medium->getMass(),precision).contains(mass)) { + return dimethylated_medium; + } + + pappso::AaModificationP dimethylated_heavy = pappso::AaModification::getInstance("MOD:00638"); + if (pappso::MassRange(dimethylated_heavy->getMass(),precision).contains(mass)) { + return dimethylated_heavy; + } + pappso::AaModificationP DimethylpyrroleAdduct = pappso::AaModification::getInstance("MOD:00628"); + if (pappso::MassRange(DimethylpyrroleAdduct->getMass(),precision).contains(mass)) { + return DimethylpyrroleAdduct; + } + + // modification not found, creating customized mod : + return pappso::AaModification::getInstanceCustomizedMod(mass); + + throw pappso::ExceptionNotFound(QObject::tr("Utils::guessAaModificationPbyMonoisotopicMassDelta => modification not found for mass %1").arg(mass)); +} diff --git a/src/utils/utils.h b/src/utils/utils.h index 5b5581f0f00a80c12223f29e355e2b714447b215..7f5c1ae5557ccab6ad8f4a44eed69c53400e324a 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -24,6 +24,7 @@ #include <QString> #include "types.h" #include <pappsomspp/types.h> +#include <pappsomspp/amino_acid/aamodification.h> #ifndef XTPUTILS_H #define XTPUTILS_H @@ -33,6 +34,8 @@ public: static const QUrl getOlsUrl(QString modification); static const QString getDatabaseName(ExternalDatabase database); static const QString getXmlDouble(pappso::pappso_double number); + static pappso::AaModificationP guessAaModificationPbyMonoisotopicMassDelta(pappso::mz mass); + }; #endif // XTPUTILS_H