From 3674e012f27748aca8d8713eebc359e7ff0f1925 Mon Sep 17 00:00:00 2001 From: Olivier Langella <Olivier.Langella@moulon.inra.fr> Date: Tue, 30 May 2017 23:21:04 +0200 Subject: [PATCH] new columns and titles --- src/grouping/ptm/ptmgroupingexperiment.cpp | 7 +++ src/grouping/ptm/ptmgroupingexperiment.h | 3 + src/grouping/ptm/ptmisland.cpp | 27 ++++++++- src/grouping/ptm/ptmisland.h | 4 ++ .../protein_list_view/proteintablemodel.cpp | 2 +- .../ptmislandtablemodel.cpp | 58 +++++++++++++++++-- .../ptmislandtablemodel.h | 4 ++ src/utils/types.h | 14 +++-- 8 files changed, 106 insertions(+), 13 deletions(-) diff --git a/src/grouping/ptm/ptmgroupingexperiment.cpp b/src/grouping/ptm/ptmgroupingexperiment.cpp index cf62c0ed6..b92db88d5 100644 --- a/src/grouping/ptm/ptmgroupingexperiment.cpp +++ b/src/grouping/ptm/ptmgroupingexperiment.cpp @@ -150,6 +150,13 @@ 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); + } + return number; + } std::vector<unsigned int> PtmGroupingExperiment::getPtmPositions(const ProteinMatch * protein_match) const { std::vector<unsigned int> position_list; diff --git a/src/grouping/ptm/ptmgroupingexperiment.h b/src/grouping/ptm/ptmgroupingexperiment.h index e51e27cba..a8002b377 100644 --- a/src/grouping/ptm/ptmgroupingexperiment.h +++ b/src/grouping/ptm/ptmgroupingexperiment.h @@ -47,6 +47,9 @@ public: void startGrouping(); const std::vector<PtmIslandSp> & getPtmIslandList() const; + /** @brief count number of modifications in a PeptideMatch + * */ + unsigned int countPeptideMatchPtm(const PeptideMatch* p_peptide_match)const; private: std::vector<unsigned int> getPtmPositions(const ProteinMatch * protein_match) const; diff --git a/src/grouping/ptm/ptmisland.cpp b/src/grouping/ptm/ptmisland.cpp index 6d588704e..732c69e26 100644 --- a/src/grouping/ptm/ptmisland.cpp +++ b/src/grouping/ptm/ptmisland.cpp @@ -31,7 +31,9 @@ #include <pappsomspp/pappsoexception.h> #include "ptmislandsubgroup.h" #include "ptmislandgroup.h" +#include "ptmgroupingexperiment.h" #include <pappsomspp/utils.h> +#include <set> PtmIsland::PtmIsland(const ProteinMatch* p_protein_match, unsigned int position):_protein_match_p(p_protein_match) { @@ -47,9 +49,30 @@ PtmIsland::~PtmIsland() } - const std::vector<unsigned int> & PtmIsland::getPositionList() const { - return _position_list; +unsigned int PtmIsland::countSampleScanMultiPtm(const PtmGroupingExperiment * p_ptm_grouping_experiment) const { + std::set<std::size_t> sample_scan_list; + for (auto & p_peptide_match : _peptide_match_list) { + if (p_ptm_grouping_experiment->countPeptideMatchPtm(p_peptide_match) > 1) { + sample_scan_list.insert(p_peptide_match->getHashSampleScan()); + } + } + return sample_scan_list.size(); +} + +unsigned int PtmIsland::countSequence() const { + std::set<QString> sequence_list; + for (auto & p_peptide_match : _peptide_match_list) { + sequence_list.insert(p_peptide_match->getPeptideXtpSp().get()->getSequence()); } + //qDebug() <<"ProteinMatch::countValidAndCheckedPeptide end " << sequence_list.size(); + return sequence_list.size(); +} +const PtmIslandSubgroup * PtmIsland::getPtmIslandSubroup() const { + return _ptm_island_subgroup_p; +} +const std::vector<unsigned int> & PtmIsland::getPositionList() const { + return _position_list; +} const QString PtmIsland::getGroupingId() const { if(_prot_number==0) { return ""; diff --git a/src/grouping/ptm/ptmisland.h b/src/grouping/ptm/ptmisland.h index a06a6f17c..f811f016e 100644 --- a/src/grouping/ptm/ptmisland.h +++ b/src/grouping/ptm/ptmisland.h @@ -34,6 +34,7 @@ #include "../../core/peptidematch.h" #include <memory> +class PtmGroupingExperiment; class PtmIslandSubgroup; class PtmIsland; @@ -64,6 +65,9 @@ public: const QString getGroupingId() const; const std::vector<unsigned int> & getPositionList() const; + const PtmIslandSubgroup * getPtmIslandSubroup() const; + unsigned int countSequence() const; + unsigned int countSampleScanMultiPtm(const PtmGroupingExperiment * p_ptm_grouping_experiment) const; private: const ProteinMatch * _protein_match_p; diff --git a/src/gui/protein_list_view/proteintablemodel.cpp b/src/gui/protein_list_view/proteintablemodel.cpp index 8a7d41767..680c54020 100644 --- a/src/gui/protein_list_view/proteintablemodel.cpp +++ b/src/gui/protein_list_view/proteintablemodel.cpp @@ -170,7 +170,7 @@ QVariant ProteinTableModel::data(const QModelIndex &index, int role ) const { return QVariant ((qreal)_p_identification_group->getProteinMatchList().at(row)->getLogEvalue()); } if (_column_assignment[col] == (std::int8_t) ProteinListColumn::spectrum ) { - return QVariant ((qreal) _p_identification_group->getProteinMatchList().at(row)->countPeptideMatch(ValidationState::validAndChecked)); + return QVariant ((qreal) _p_identification_group->getProteinMatchList().at(row)->countSampleScan(ValidationState::validAndChecked)); } if (_column_assignment[col] == (std::int8_t) ProteinListColumn::specific_spectrum ) { diff --git a/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp b/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp index 43ed0b6de..97102a3a9 100644 --- a/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp +++ b/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp @@ -30,13 +30,16 @@ #include "ptmislandtablemodel.h" #include "ptmislandlistwindow.h" -#include "../../utils/types.h" PtmIslandTableModel::columnMap PtmIslandTableModel::_column_assignment = { (std::int8_t)PtmIslandListColumn::ptm_island_id, (std::int8_t)PtmIslandListColumn::accession, - (std::int8_t)PtmIslandListColumn::ptm_position_list + (std::int8_t)PtmIslandListColumn::description, + (std::int8_t)PtmIslandListColumn::spectrum, + (std::int8_t)PtmIslandListColumn::sequence, + (std::int8_t)PtmIslandListColumn::ptm_position_list, + (std::int8_t)PtmIslandListColumn::multiptm }; @@ -48,6 +51,34 @@ PtmIslandTableModel::PtmIslandTableModel(PtmIslandListWindow * p_ptm_island_list PtmIslandTableModel::~PtmIslandTableModel() { +} +const QString PtmIslandTableModel::getTitle(std::int8_t column) const { + switch (column) { + + case (std::int8_t) PtmIslandListColumn::spectrum: + return "spectrum"; + break; + + case (std::int8_t) PtmIslandListColumn::description: + return "description"; + break; + case (std::int8_t) PtmIslandListColumn::multiptm: + return "multi PTM"; + break; + case (std::int8_t) PtmIslandListColumn::sequence: + return "sequence"; + break; + case (std::int8_t) PtmIslandListColumn::ptm_island_id: + return "PTM island ID"; + break; + case (std::int8_t) PtmIslandListColumn::accession: + return "accession"; + break; + case (std::int8_t) PtmIslandListColumn::ptm_position_list: + return "ptm positions"; + + } + return ""; } void PtmIslandTableModel::setIdentificationGroup(IdentificationGroup * p_identification_group) { qDebug() << "PtmIslandTableModel::setIdentificationGroup begin "; @@ -75,7 +106,7 @@ int PtmIslandTableModel::rowCount(const QModelIndex &parent ) const { int PtmIslandTableModel::columnCount(const QModelIndex &parent ) const { //qDebug() << "ProteinTableModel::columnCount begin "; if (getPtmGroupingExperiment() != nullptr) { - return 3; + return 7; } return 0; } @@ -84,6 +115,10 @@ QVariant PtmIslandTableModel::headerData(int section, Qt::Orientation orientatio if (getPtmGroupingExperiment() == nullptr) return QVariant(); if (orientation == Qt::Horizontal) { + if (role == Qt::DisplayRole) + { + return QVariant(getTitle(_column_assignment [section])); + } } return QVariant(); } @@ -98,6 +133,20 @@ QVariant PtmIslandTableModel::data(const QModelIndex &index, int role ) const { return QVariant(); } switch (_column_assignment [col]) { + + case (std::int8_t) PtmIslandListColumn::spectrum: + return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getPtmIslandSubroup()->countSampleScan()); + break; + + case (std::int8_t) PtmIslandListColumn::description: + return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getProteinMatch()->getProteinXtpSp().get()->getDescription()); + break; + case (std::int8_t) PtmIslandListColumn::multiptm: + return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->countSampleScanMultiPtm(getPtmGroupingExperiment())); + break; + case (std::int8_t) PtmIslandListColumn::sequence: + return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->countSequence()); + break; case (std::int8_t) PtmIslandListColumn::ptm_island_id: return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getGroupingId()); break; @@ -110,7 +159,6 @@ QVariant PtmIslandTableModel::data(const QModelIndex &index, int role ) const { position_list << QString("%1").arg(position+1); } return QVariant(position_list.join(" ")); - break; } } return QVariant(); @@ -121,4 +169,4 @@ void PtmIslandTableModel::onPtmIslandDataChanged() { qDebug() << "PtmIslandTableModel::onPtmIslandDataChanged begin " << rowCount(); emit layoutAboutToBeChanged(); emit layoutChanged(); -} \ No newline at end of file +} diff --git a/src/gui/ptm_island_list_view/ptmislandtablemodel.h b/src/gui/ptm_island_list_view/ptmislandtablemodel.h index 7cb1ca930..808cca8d5 100644 --- a/src/gui/ptm_island_list_view/ptmislandtablemodel.h +++ b/src/gui/ptm_island_list_view/ptmislandtablemodel.h @@ -33,6 +33,7 @@ #include <QAbstractTableModel> #include "../../core/identificationgroup.h" #include "../../grouping/ptm/ptmgroupingexperiment.h" +#include "../../utils/types.h" class PtmIslandListWindow; class PtmIslandTableModel: public QAbstractTableModel @@ -50,6 +51,9 @@ public: virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + const QString getTitle(std::int8_t column) const; + + using columnMap = std::int8_t[20]; public slots: diff --git a/src/utils/types.h b/src/utils/types.h index a3934d2f6..38491498f 100644 --- a/src/utils/types.h +++ b/src/utils/types.h @@ -118,11 +118,15 @@ enum class ProteinListColumn { * */ -enum class PtmIslandListColumn: std::int8_t { - ptm_island_id=0, ///< ptm_island_id - accession=1, ///< protein accession - description=2, ///< protein description - ptm_position_list=3, ///< protein description +enum class PtmIslandListColumn { + ptm_island_id, ///< ptm_island_id + accession, ///< protein accession + description, ///< protein description + ptm_position_list, ///< ptm position list + spectrum, ///< count sample scans + sequence, ///< unique sequence count + multiptm, ///< count multi ptm peptide match + }; #endif /* _TYPES_H_ */ -- GitLab