diff --git a/src/grouping/ptm/ptmgroupingexperiment.cpp b/src/grouping/ptm/ptmgroupingexperiment.cpp index cf62c0ed6fbcec67414feb62a66818ea93e3fde1..b92db88d57ea4e62e992d9a39c6fa432825879d4 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 e51e27cba46b73ad2133a83aa718aa72300fc8a0..a8002b377b7006bbd1a01389d943fd73a19b16bd 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 6d588704ea6116da97470134e10726ab72f969b6..732c69e2653c974554d4ac3287e6283db4d560a7 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 a06a6f17c0ecb8e3e7639ac842680d52bf6dcced..f811f016e0d7aa270a57487ba6e4f19ddfbda754 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 8a7d41767cc75e9876d2c49dbaad83166e4ffb97..680c540207cdf882fd93cfd35d2d3003ae8a6520 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 43ed0b6de2b373d875c6855550b904885fc99da0..97102a3a9261ed9b5d30d4dfbb40e142a422c021 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 7cb1ca9307bb42f887daf6b7d9833219d3f403aa..808cca8d593ffc74c8a49653fb9a3161e7e52cce 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 a3934d2f62e045586653df77df377fe60f67f54f..38491498fdea23ae9979d9955e40313ebf177c3c 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_ */