From 29591281c1cb5c2ccda5d709acf888d292f8e8cf Mon Sep 17 00:00:00 2001 From: Olivier Langella <olivier.langella@u-psud.fr> Date: Thu, 21 Mar 2019 16:03:02 +0100 Subject: [PATCH] mutation support --- src/input/xtandemsaxhandler.cpp | 70 ++++++++++++++++++++++----------- src/utils/peptidestore.cpp | 17 +++++--- 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/input/xtandemsaxhandler.cpp b/src/input/xtandemsaxhandler.cpp index 57b17071..dfb409b7 100644 --- a/src/input/xtandemsaxhandler.cpp +++ b/src/input/xtandemsaxhandler.cpp @@ -40,7 +40,8 @@ XtandemSaxHandler::XtandemSaxHandler( - Project *p_project, IdentificationGroup *p_identification_group, + Project *p_project, + IdentificationGroup *p_identification_group, IdentificationDataSource *p_identification_data_source) : _p_project(p_project) { @@ -57,7 +58,8 @@ XtandemSaxHandler::~XtandemSaxHandler() bool XtandemSaxHandler::startElement(const QString &namespaceURI, - const QString &localName, const QString &qName, + const QString &localName, + const QString &qName, const QXmlAttributes &attributes) { // qDebug() << namespaceURI << " " << localName << " " << qName ; @@ -96,8 +98,9 @@ XtandemSaxHandler::startElement(const QString &namespaceURI, } catch(pappso::PappsoException &exception_pappso) { - _errorStr = QObject::tr("ERROR in XtandemSaxHandler::startElement tag " - "%1, PAPPSO exception:\n%2") + _errorStr = QObject::tr( + "ERROR in XtandemSaxHandler::startElement tag " + "%1, PAPPSO exception:\n%2") .arg(qName) .arg(exception_pappso.qwhat()); return false; @@ -116,7 +119,8 @@ XtandemSaxHandler::startElement(const QString &namespaceURI, bool XtandemSaxHandler::endElement(const QString &namespaceURI, - const QString &localName, const QString &qName) + const QString &localName, + const QString &qName) { bool is_ok = true; @@ -138,8 +142,9 @@ XtandemSaxHandler::endElement(const QString &namespaceURI, } catch(pappso::PappsoException &exception_pappso) { - _errorStr = QObject::tr("ERROR in XtandemSaxHandler::endElement tag %1, " - "PAPPSO exception:\n%2") + _errorStr = QObject::tr( + "ERROR in XtandemSaxHandler::endElement tag %1, " + "PAPPSO exception:\n%2") .arg(qName) .arg(exception_pappso.qwhat()); return false; @@ -219,9 +224,10 @@ XtandemSaxHandler::startElement_file(QXmlAttributes attributes) // attrs.getValue("URL"))); if(_p_protein_match == nullptr) { - throw pappso::PappsoException("ERROR in " - "XtandemSaxHandler::startElement_file " - ": _p_protein_match == nullptr"); + throw pappso::PappsoException( + "ERROR in " + "XtandemSaxHandler::startElement_file " + ": _p_protein_match == nullptr"); } _p_protein_match->getProteinXtpSp().get()->setFastaFileP( _p_project->getFastaFileStore() @@ -251,9 +257,10 @@ XtandemSaxHandler::startElement_domain(QXmlAttributes attributes) //"")); if(_p_protein_match == nullptr) { - throw pappso::PappsoException("ERROR in " - "XtandemSaxHandler::startElement_" - "domain : _p_protein_match == nullptr"); + throw pappso::PappsoException( + "ERROR in " + "XtandemSaxHandler::startElement_" + "domain : _p_protein_match == nullptr"); } _p_protein_match->getProteinXtpSp().get()->setSequence(_current_text); @@ -387,11 +394,25 @@ bool XtandemSaxHandler::startElement_aa(QXmlAttributes attributes) { //<aa type="M" at="624" modified="15.99491" /> + bool is_ok = true; // qDebug() << "startElement_aa "; - pappso::AaModificationP modif = - Utils::guessAaModificationPbyMonoisotopicMassDelta( - attributes.value("modified").simplified().toDouble()); + pappso::AaModificationP modif = nullptr; + if(attributes.value("pm").isEmpty()) + { + + modif = Utils::guessAaModificationPbyMonoisotopicMassDelta( + attributes.value("modified").simplified().toDouble()); + } + else + { + //<aa type="P" at="59" modified="31.98983" pm="E" /> + //<aa type="C" at="64" modified="-15.97716" pm="S" /> + // point mutation + QChar mut_from(attributes.value("type")[0]); + QChar mut_to(attributes.value("pm")[0]); + modif = pappso::AaModification::getInstanceMutation(mut_from, mut_to); + } unsigned int position_in_prot = attributes.value("at").simplified().toUInt() - 1; _current_peptide_sp.get()->addAaModification( @@ -415,9 +436,10 @@ XtandemSaxHandler::endElement_domain() .getInstance(_p_peptide_evidence)); if(_p_protein_match == nullptr) { - throw pappso::PappsoException("ERROR in " - "XtandemSaxHandler::endElement_domain : " - "_p_protein_match == nullptr"); + throw pappso::PappsoException( + "ERROR in " + "XtandemSaxHandler::endElement_domain : " + "_p_protein_match == nullptr"); } _p_protein_match->addPeptideMatch(_current_peptide_match); @@ -713,8 +735,9 @@ XtandemSaxHandler::endElement_note() bool XtandemSaxHandler::error(const QXmlParseException &exception) { - _errorStr = QObject::tr("Parse error at line %1, column %2 :\n" - "%3") + _errorStr = QObject::tr( + "Parse error at line %1, column %2 :\n" + "%3") .arg(exception.lineNumber()) .arg(exception.columnNumber()) .arg(exception.message()); @@ -726,8 +749,9 @@ XtandemSaxHandler::error(const QXmlParseException &exception) bool XtandemSaxHandler::fatalError(const QXmlParseException &exception) { - _errorStr = QObject::tr("Parse error at line %1, column %2 :\n" - "%3") + _errorStr = QObject::tr( + "Parse error at line %1, column %2 :\n" + "%3") .arg(exception.lineNumber()) .arg(exception.columnNumber()) .arg(exception.message()); diff --git a/src/utils/peptidestore.cpp b/src/utils/peptidestore.cpp index 6001f002..c99aa05d 100644 --- a/src/utils/peptidestore.cpp +++ b/src/utils/peptidestore.cpp @@ -113,11 +113,18 @@ PeptideStore::checkPsimodCompliance() const } else { - throw pappso::PappsoException( - QObject::tr("Modification %1 is not a PSIMOD accession. Please " - "go into the edit=>modifications menu to replace " - "modifications masses by PSIMOD accessions") - .arg(modification->getAccession())); + if(modification->getAccession().startsWith("MUTATION:")) + { + } + else + { + throw pappso::PappsoException( + QObject::tr( + "Modification %1 is not a PSIMOD accession. Please " + "go into the edit=>modifications menu to replace " + "modifications masses by PSIMOD accessions") + .arg(modification->getAccession())); + } } } } -- GitLab