From 0ad05745610f76d9ff7a3ff2b10c9a0ee05dffa9 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Wed, 3 Oct 2018 19:23:02 +0200
Subject: [PATCH] fix adding modification at position -1 in pwiz reader

---
 src/input/identificationpwizreader.cpp | 29 ++++++++++++++++++++++----
 src/input/mascot/mascotdatparser.cpp   | 14 +++++--------
 2 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/input/identificationpwizreader.cpp b/src/input/identificationpwizreader.cpp
index 088b4db08..c3afa93b4 100644
--- a/src/input/identificationpwizreader.cpp
+++ b/src/input/identificationpwizreader.cpp
@@ -247,7 +247,8 @@ getQVariantDoubleParam(pwiz::data::ParamContainer *item, pwiz::cv::CVID param)
 
 void
 IdentificationPwizReader::read(
-  IdentificationDataSource *p_identification_data_source, Project *p_project,
+  IdentificationDataSource *p_identification_data_source,
+  Project *p_project,
   IdentificationGroup *p_identification_group)
 {
   qDebug() << "IdentificationPwizReader::read begin";
@@ -314,9 +315,29 @@ IdentificationPwizReader::read(
               pappso::pappso_double mass_delta =
                 mod_ptr.get()->monoisotopicMassDelta;
 
-              peptide.addAaModification(
-                Utils::guessAaModificationPbyMonoisotopicMassDelta(mass_delta),
-                location - 1);
+              if(location > 0)
+                {
+                  location = location - 1;
+                }
+
+              try
+                {
+                  peptide.addAaModification(
+                    Utils::guessAaModificationPbyMonoisotopicMassDelta(
+                      mass_delta),
+                    location);
+                }
+              catch(pappso::PappsoException &error)
+                {
+                  throw pappso::PappsoException(
+                    QObject::tr("ERROR adding modification mass delta %1 to "
+                                "peptide %2 at "
+                                "position %3 :\n %4")
+                      .arg(mass_delta)
+                      .arg(peptide.toAbsoluteString())
+                      .arg(location)
+                      .arg(error.qwhat()));
+                }
               // std::vector<CVParam> cvParams;
               for(const pwiz::data::CVParam &param : mod_ptr.get()->cvParams)
                 {
diff --git a/src/input/mascot/mascotdatparser.cpp b/src/input/mascot/mascotdatparser.cpp
index 5f8140792..2751237a0 100644
--- a/src/input/mascot/mascotdatparser.cpp
+++ b/src/input/mascot/mascotdatparser.cpp
@@ -911,16 +911,12 @@ MascotDatParser::setVariableModifications(PeptideXtpSp &peptide_sp,
             [variable_modifications_string.mid(i, 1).toUInt() - 1];
           try
             {
-              if(i == 0)
+              if(i > 0)
                 {
-                  peptide_sp.get()->addAaModification(
-                    mascot_modification.modification, 0);
-                }
-              else
-                {
-                  peptide_sp.get()->addAaModification(
-                    mascot_modification.modification, i - 1);
+                  i = i - 1;
                 }
+              peptide_sp.get()->addAaModification(
+                mascot_modification.modification, i);
             }
           catch(pappso::PappsoException &error)
             {
@@ -929,7 +925,7 @@ MascotDatParser::setVariableModifications(PeptideXtpSp &peptide_sp,
                             "position %3 :\n %4")
                   .arg(mascot_modification.modification->getAccession())
                   .arg(peptide_sp.get()->toAbsoluteString())
-                  .arg(i - 1)
+                  .arg(i)
                   .arg(error.qwhat()));
             }
         }
-- 
GitLab