From 0f0e4d5e89a012f70134d1a12170c6cb7f6f08cc Mon Sep 17 00:00:00 2001 From: Olivier Langella <Olivier.Langella@moulon.inra.fr> Date: Thu, 27 Jul 2017 09:23:19 +0200 Subject: [PATCH] ptm position list for each ptm peptide --- src/grouping/ptm/ptmgroupingexperiment.cpp | 26 +++++++++++++++---- src/grouping/ptm/ptmgroupingexperiment.h | 3 +++ src/grouping/ptm/ptmsamplescan.cpp | 7 ++++- src/grouping/ptm/ptmsamplescan.h | 5 +++- .../ptmislandlistwindow.cpp | 4 +++ .../ptmislandlistwindow.h | 1 + .../ptmpeptidelistwindow.cpp | 2 +- .../ptmpeptidetablemodel.cpp | 16 +++++++++--- .../ptmpeptidetablemodel.h | 3 ++- 9 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/grouping/ptm/ptmgroupingexperiment.cpp b/src/grouping/ptm/ptmgroupingexperiment.cpp index 5b157218f..8cbf7bb02 100644 --- a/src/grouping/ptm/ptmgroupingexperiment.cpp +++ b/src/grouping/ptm/ptmgroupingexperiment.cpp @@ -28,6 +28,7 @@ ******************************************************************************/ #include "ptmgroupingexperiment.h" +#include "../../grouping/ptm/ptmgroupingexperiment.h" PtmGroupingExperiment::PtmGroupingExperiment() { @@ -162,23 +163,38 @@ unsigned int PtmGroupingExperiment::countPeptideMatchPtm(const PeptideMatch* p_p } return number; } -std::vector<unsigned int> PtmGroupingExperiment::getPtmPositions(const ProteinMatch * protein_match) const { + +std::vector<unsigned int> PtmGroupingExperiment::getPtmPositions(const PeptideMatch * p_peptide_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 (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); + position_list.push_back(position); } } else { for (unsigned int position : p_peptide_match->getPeptideXtpSp().get()->getModificationPositionList(modification.modification, modification.aa_list)) { - position_list.push_back(start+position); + position_list.push_back(position); } } } + + std::sort(position_list.begin(), position_list.end()); + auto last = std::unique(position_list.begin(), position_list.end()); + position_list.erase(last, position_list.end()); + return position_list; +} + +std::vector<unsigned int> PtmGroupingExperiment::getPtmPositions(const ProteinMatch * protein_match) const { + std::vector<unsigned int> position_list; + + for (const PeptideMatch * p_peptide_match: protein_match->getPeptideMatchList(_peptide_validation_state)) { + unsigned int start = p_peptide_match->getStart(); + std::vector<unsigned int> positionb_list = this->getPtmPositions(p_peptide_match); + for (unsigned int position: positionb_list) { + position_list.push_back(start+position); + } } std::sort(position_list.begin(), position_list.end()); auto last = std::unique(position_list.begin(), position_list.end()); diff --git a/src/grouping/ptm/ptmgroupingexperiment.h b/src/grouping/ptm/ptmgroupingexperiment.h index 852ec8f31..a96a52587 100644 --- a/src/grouping/ptm/ptmgroupingexperiment.h +++ b/src/grouping/ptm/ptmgroupingexperiment.h @@ -35,6 +35,7 @@ #include "ptmisland.h" #include "ptmislandsubgroup.h" #include "ptmislandgroup.h" +class PtmSampleScan; struct ModificationAndAa { pappso::AaModificationP modification; @@ -43,6 +44,7 @@ struct ModificationAndAa { class PtmGroupingExperiment { + friend PtmSampleScan; public: PtmGroupingExperiment(); ~PtmGroupingExperiment(); @@ -60,6 +62,7 @@ public: private: std::vector<unsigned int> getPtmPositions(const ProteinMatch * protein_match) const; + std::vector<unsigned int> getPtmPositions(const PeptideMatch * p_peptide_match) const; std::vector< PtmIslandSp > mergePeptideMatchPtmIslandList(vector< PtmIslandSp > ptm_island_list); void addPtmIsland(PtmIslandSp ptm_island); diff --git a/src/grouping/ptm/ptmsamplescan.cpp b/src/grouping/ptm/ptmsamplescan.cpp index 195649f2e..6e2d347b6 100644 --- a/src/grouping/ptm/ptmsamplescan.cpp +++ b/src/grouping/ptm/ptmsamplescan.cpp @@ -28,6 +28,7 @@ ******************************************************************************/ #include "ptmsamplescan.h" +#include "../../grouping/ptm/ptmgroupingexperiment.h" PtmSampleScan::PtmSampleScan(const PeptideMatch * p_peptide_match) { _peptide_match_list.push_back(p_peptide_match); @@ -61,7 +62,11 @@ bool PtmSampleScan::add(const PeptideMatch * p_peptide_match) { return true; } - std::vector<unsigned int> PtmSampleScan::getBestPtmPositionList() const { + std::vector<unsigned int> PtmSampleScan::getBestPtmPositionList(const PtmGroupingExperiment * p_ptm_grouping_experiment) const { + return p_ptm_grouping_experiment->getPtmPositions(getRepresentativePeptideMatch()); + } + + std::vector<unsigned int> PtmSampleScan::getObservedPtmPositionList(const PtmGroupingExperiment * p_ptm_grouping_experiment) const { std::vector<unsigned int> list; return list; diff --git a/src/grouping/ptm/ptmsamplescan.h b/src/grouping/ptm/ptmsamplescan.h index b03cd0177..9036a2768 100644 --- a/src/grouping/ptm/ptmsamplescan.h +++ b/src/grouping/ptm/ptmsamplescan.h @@ -33,6 +33,7 @@ #include <memory> #include "../../core/peptidematch.h" +class PtmGroupingExperiment; class PtmSampleScan; /** \brief shared pointer on a PtmSampleScan object @@ -49,7 +50,9 @@ public: const PeptideMatch * getRepresentativePeptideMatch() const; bool add(const PeptideMatch * p_peptide_match); - std::vector<unsigned int> getBestPtmPositionList() const; + std::vector<unsigned int> getBestPtmPositionList(const PtmGroupingExperiment * p_ptm_grouping_experiment) const; + std::vector<unsigned int> getObservedPtmPositionList(const PtmGroupingExperiment * p_ptm_grouping_experiment) const; + private: std::vector<const PeptideMatch *> _peptide_match_list; diff --git a/src/gui/ptm_island_list_view/ptmislandlistwindow.cpp b/src/gui/ptm_island_list_view/ptmislandlistwindow.cpp index e2ad12ad0..23c23804a 100644 --- a/src/gui/ptm_island_list_view/ptmislandlistwindow.cpp +++ b/src/gui/ptm_island_list_view/ptmislandlistwindow.cpp @@ -150,3 +150,7 @@ void PtmIslandListWindow::askViewPtmPeptideList(PtmIsland * ptm_island) { _p_current_ptm_peptide_list_window->show(); } + + const IdentificationGroup * PtmIslandListWindow::getIdentificationGroup() const { + return _p_identification_group; + } diff --git a/src/gui/ptm_island_list_view/ptmislandlistwindow.h b/src/gui/ptm_island_list_view/ptmislandlistwindow.h index 868fdb7fb..e454e9834 100644 --- a/src/gui/ptm_island_list_view/ptmislandlistwindow.h +++ b/src/gui/ptm_island_list_view/ptmislandlistwindow.h @@ -50,6 +50,7 @@ public: ~PtmIslandListWindow(); void setIdentificationGroup(IdentificationGroup * p_identification_group); void resizeColumnsToContents(); + const IdentificationGroup * getIdentificationGroup() const; public slots: diff --git a/src/gui/ptm_peptide_list_view/ptmpeptidelistwindow.cpp b/src/gui/ptm_peptide_list_view/ptmpeptidelistwindow.cpp index 4b1bd7019..15ec5d135 100644 --- a/src/gui/ptm_peptide_list_view/ptmpeptidelistwindow.cpp +++ b/src/gui/ptm_peptide_list_view/ptmpeptidelistwindow.cpp @@ -72,5 +72,5 @@ PtmPeptideListWindow::~PtmPeptideListWindow() { } void PtmPeptideListWindow::setPtmIsland(PtmIsland * p_ptm_island) { _p_ptm_island = p_ptm_island; - _ptm_table_model_p->setPtmIsland(_p_ptm_island); + _ptm_table_model_p->setPtmIsland(_p_ptm_island_list_window->getIdentificationGroup()->getPtmGroupingExperiment(), _p_ptm_island); } diff --git a/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.cpp b/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.cpp index 225405c54..9a7a17818 100644 --- a/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.cpp +++ b/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.cpp @@ -29,6 +29,7 @@ #include "ptmpeptidetablemodel.h" #include "ptmpeptidelistwindow.h" #include <QDebug> +#include <QStringList> PtmPeptideTableModel::PtmPeptideTableModel(PtmPeptideListWindow * p_ptm_peptide_list_window) { } @@ -153,7 +154,7 @@ int PtmPeptideTableModel::rowCount(const QModelIndex &parent ) const { } int PtmPeptideTableModel::columnCount(const QModelIndex &parent ) const { //qDebug() << "ProteinTableModel::columnCount begin "; - return 12; + return 15; } QVariant PtmPeptideTableModel::headerData(int section, Qt::Orientation orientation, int role) const { @@ -175,6 +176,7 @@ QVariant PtmPeptideTableModel::data(const QModelIndex &index, int role ) const { // generate a log message when this method gets called int row = index.row(); int col = index.column(); + QStringList position_list; if (row >= _ptm_sample_scan_list.size()) return QVariant(); switch(role) { @@ -221,10 +223,17 @@ QVariant PtmPeptideTableModel::data(const QModelIndex &index, int role ) const { return _ptm_sample_scan_list.at(row).get()->getRepresentativePeptideMatch()->getParam(PeptideMatchParam::tandem_hyperscore); break; case (std::int8_t)PtmPeptideListColumn::bestposition: - //return _ptm_sample_scan_list.at(row).get()->getBestPtmPositionList(); + for (unsigned int position :_ptm_sample_scan_list.at(row).get()->getBestPtmPositionList(_p_ptm_grouping_experiment)) { + position_list << QString("%1").arg(position+1); + } + return QVariant(position_list.join(" ")); break; case (std::int8_t)PtmPeptideListColumn::allobservedposition: //return _ptm_sample_scan_list.at(row).get()->getObservedPtmPositionList(); + for (unsigned int position :_ptm_sample_scan_list.at(row).get()->getObservedPtmPositionList(_p_ptm_grouping_experiment)) { + position_list << QString("%1").arg(position+1); + } + return QVariant(position_list.join(" ")); break; } @@ -232,10 +241,11 @@ QVariant PtmPeptideTableModel::data(const QModelIndex &index, int role ) const { return QVariant(); } -void PtmPeptideTableModel::setPtmIsland(PtmIsland * ptm_island) { +void PtmPeptideTableModel::setPtmIsland(const PtmGroupingExperiment * p_ptm_grouping_experiment, PtmIsland * ptm_island) { qDebug() << "tmPeptideTableModel::setPtmIsland begin "; beginResetModel(); + _p_ptm_grouping_experiment = p_ptm_grouping_experiment; _p_ptm_island = ptm_island; _ptm_sample_scan_list = ptm_island->getPtmSampleScanSpList(); //emit headerDataChanged(Qt::Horizontal, 0,11); diff --git a/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.h b/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.h index d16270d49..603d5346c 100644 --- a/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.h +++ b/src/gui/ptm_peptide_list_view/ptmpeptidetablemodel.h @@ -73,7 +73,7 @@ public: static const QString getDescription(PtmPeptideListColumn column); ~PtmPeptideTableModel(); - void setPtmIsland(PtmIsland * ptm_island); + void setPtmIsland(const PtmGroupingExperiment * p_ptm_grouping_experiment, PtmIsland * ptm_island); private : static const QString getTitle(std::int8_t column); @@ -82,6 +82,7 @@ private : private: std::vector<PtmSampleScanSp> _ptm_sample_scan_list; const PtmIsland * _p_ptm_island; + const PtmGroupingExperiment * _p_ptm_grouping_experiment; }; #endif // PTMPEPTIDETABLEMODEL_H -- GitLab