From 5654a80333d793a61c20e1928de30d0dbaf728a9 Mon Sep 17 00:00:00 2001
From: Olivier Langella <Olivier.Langella@moulon.inra.fr>
Date: Tue, 13 Jun 2017 22:15:22 +0200
Subject: [PATCH] build ptm island with specific modifications on specific
 amino acids

---
 src/CMakeLists.txt                         |  8 ++---
 src/grouping/ptm/ptmgroupingexperiment.cpp | 34 +++++++++++++++-------
 src/grouping/ptm/ptmgroupingexperiment.h   |  7 ++++-
 3 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f2b16461..2367b510 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -27,11 +27,11 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Xml_EXECUTABLE_COMPILE_FLAGS} ${Qt5
 
 
 #sudo apt-get install libpappsomspp-dev
-FIND_PACKAGE( Pappsomspp REQUIRED )
-# SET (PAPPSOMSPP_DIR  "/home/olivier/eclipse/git/pappsomspp")
+#FIND_PACKAGE( Pappsomspp REQUIRED )
+ SET (PAPPSOMSPP_DIR  "/home/olivier/eclipse/git/pappsomspp")
 # SET (PAPPSOMSPP_DIR  "/home/langella/developpement/git/pappsomspp")
-# SET (PAPPSOMSPP_INCLUDE_DIR "${PAPPSOMSPP_DIR}/src")
-# SET (PAPPSOMSPP_QT4_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt4.so")
+ SET (PAPPSOMSPP_INCLUDE_DIR "${PAPPSOMSPP_DIR}/src")
+ SET (PAPPSOMSPP_QT4_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt4.so")
 
 
 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules)
diff --git a/src/grouping/ptm/ptmgroupingexperiment.cpp b/src/grouping/ptm/ptmgroupingexperiment.cpp
index b92db88d..5b157218 100644
--- a/src/grouping/ptm/ptmgroupingexperiment.cpp
+++ b/src/grouping/ptm/ptmgroupingexperiment.cpp
@@ -63,8 +63,8 @@ PtmGroupingExperiment::PtmGroupingExperiment()
     */
 
 //phospho :
-    _modification_list.push_back(pappso::AaModification::getInstance("MOD:00696"));
-    _modification_list.push_back(pappso::AaModification::getInstance("MOD:00704"));
+    _modification_list.push_back({pappso::AaModification::getInstance("MOD:00696"), {}});
+    _modification_list.push_back({pappso::AaModification::getInstance("MOD:00704"), {'S','T'}});
 }
 
 PtmGroupingExperiment::~PtmGroupingExperiment()
@@ -73,7 +73,7 @@ PtmGroupingExperiment::~PtmGroupingExperiment()
 }
 
 const std::vector<PtmIslandSp> & PtmGroupingExperiment::getPtmIslandList() const {
-  return _ptm_island_list;
+    return _ptm_island_list;
 }
 
 void PtmGroupingExperiment::numbering() {
@@ -150,21 +150,33 @@ std::vector< PtmIslandSp > PtmGroupingExperiment::mergePeptideMatchPtmIslandList
 
 }
 
-    unsigned int PtmGroupingExperiment::countPeptideMatchPtm(const PeptideMatch* p_peptide_match)const {
-        unsigned int number=0;
-        for (pappso::AaModificationP modification: _modification_list) {
-            number +=  p_peptide_match->getPeptideXtpSp().get()->getNumberOfModification(modification);
+unsigned int PtmGroupingExperiment::countPeptideMatchPtm(const PeptideMatch* p_peptide_match)const {
+    unsigned int number=0;
+    for (const ModificationAndAa & modification: _modification_list) {
+        if (modification.aa_list.size() == 0) {
+            number +=  p_peptide_match->getPeptideXtpSp().get()->getNumberOfModification(modification.modification);
+        }
+        else {
+            number +=  p_peptide_match->getPeptideXtpSp().get()->countModificationOnAa(modification.modification, modification.aa_list);
         }
-        return number;
     }
+    return number;
+}
 std::vector<unsigned int> PtmGroupingExperiment::getPtmPositions(const ProteinMatch * protein_match) const {
     std::vector<unsigned int> position_list;
 
     for (PeptideMatch * p_peptide_match: protein_match->getPeptideMatchList(_peptide_validation_state)) {
         unsigned int start = p_peptide_match->getStart();
-        for (pappso::AaModificationP modification: _modification_list) {
-            for (unsigned int position : p_peptide_match->getPeptideXtpSp().get()->getModificationPositionList(modification)) {
-                position_list.push_back(start+position);
+        for (const ModificationAndAa & modification: _modification_list) {
+            if (modification.aa_list.size() == 0) {
+                for (unsigned int position : p_peptide_match->getPeptideXtpSp().get()->getModificationPositionList(modification.modification)) {
+                    position_list.push_back(start+position);
+                }
+            }
+            else {
+                for (unsigned int position : p_peptide_match->getPeptideXtpSp().get()->getModificationPositionList(modification.modification, modification.aa_list)) {
+                    position_list.push_back(start+position);
+                }
             }
         }
     }
diff --git a/src/grouping/ptm/ptmgroupingexperiment.h b/src/grouping/ptm/ptmgroupingexperiment.h
index a8002b37..bcc97954 100644
--- a/src/grouping/ptm/ptmgroupingexperiment.h
+++ b/src/grouping/ptm/ptmgroupingexperiment.h
@@ -36,6 +36,11 @@
 #include "ptmislandsubgroup.h"
 #include "ptmislandgroup.h"
 
+struct ModificationAndAa {
+    pappso::AaModificationP modification;
+    std::vector<char> aa_list;
+};
+
 class PtmGroupingExperiment
 {
 public:
@@ -58,7 +63,7 @@ private:
     void addPtmIsland(PtmIslandSp ptm_island);
     void numbering();
 private:
-    std::list<pappso::AaModificationP> _modification_list;
+    std::list<ModificationAndAa> _modification_list;
     ValidationState _peptide_validation_state = ValidationState::validAndChecked;
     std::vector<PtmIslandSp> _ptm_island_list;
     std::vector<PtmIslandSubgroupSp> _ptm_island_subgroup_list;
-- 
GitLab