diff --git a/src/grouping/ptm/ptmisland.cpp b/src/grouping/ptm/ptmisland.cpp index 732c69e2653c974554d4ac3287e6283db4d560a7..215df8a89631f13f6c6a31d3cf65712e774fa3b8 100644 --- a/src/grouping/ptm/ptmisland.cpp +++ b/src/grouping/ptm/ptmisland.cpp @@ -48,6 +48,12 @@ PtmIsland::~PtmIsland() { } +unsigned int PtmIsland::getStart() const { + return _protein_start; +} +unsigned int PtmIsland::size() const { + return _protein_stop - _protein_start; +} unsigned int PtmIsland::countSampleScanMultiPtm(const PtmGroupingExperiment * p_ptm_grouping_experiment) const { std::set<std::size_t> sample_scan_list; @@ -110,7 +116,16 @@ void PtmIsland::addPeptideMatch(const PeptideMatch* p_peptide_match) { if (_position_list.size()==1) { unsigned int position = _position_list[0]; if (p_peptide_match->containsPosition(position)) { + if (_peptide_match_list.size() == 0) { + _protein_start = p_peptide_match->getStart(); + } _peptide_match_list.push_back(p_peptide_match); + if (p_peptide_match->getStart() < _protein_start) { + _protein_start = p_peptide_match->getStart(); + } + if (p_peptide_match->getStop() > _protein_stop) { + _protein_stop = p_peptide_match->getStop(); + } } } else { diff --git a/src/grouping/ptm/ptmisland.h b/src/grouping/ptm/ptmisland.h index f811f016e0d7aa270a57487ba6e4f19ddfbda754..2c29d0383b69591da4a12b62bb51912feda1b9b2 100644 --- a/src/grouping/ptm/ptmisland.h +++ b/src/grouping/ptm/ptmisland.h @@ -50,25 +50,28 @@ public: PtmIsland(const PtmIsland & other); ~PtmIsland(); void addPeptideMatch(const PeptideMatch* p_peptide_match); - + /** @brief merge with the given ptm island if there is at least one common peptide match * */ bool merge(PtmIslandSp ptm_island_sp); - + bool containsPeptideMatch(const PeptideMatch* element) const; std::vector<std::size_t> getSampleScanSet() const; const ProteinMatch * getProteinMatch() const; unsigned int getProteinStartPosition() const; void setPtmIslandSubgroup(PtmIslandSubgroup* p_ptm_island_subgroup); void setProteinNumber(unsigned int prot_number); - - + + 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; - + + unsigned int getStart() const; + unsigned int size() const; + private: const ProteinMatch * _protein_match_p; std::vector<const PeptideMatch *> _peptide_match_list; diff --git a/src/grouping/ptm/ptmislandgroup.cpp b/src/grouping/ptm/ptmislandgroup.cpp index c7cc921d3a7a7603e00d4a30c1e0d508db6a84b3..cf79ed89d7249fa83658a3bcec6ff0d13ea543ae 100644 --- a/src/grouping/ptm/ptmislandgroup.cpp +++ b/src/grouping/ptm/ptmislandgroup.cpp @@ -77,17 +77,17 @@ void PtmIslandGroup::setGroupNumber(unsigned int number) { } } bool PtmIslandGroup::operator<(const PtmIslandGroup& other) const { - if (_ptm_island_subgroup_list.size() == other._ptm_island_subgroup_list.size()) { - if (maxCountSampleScan() == other.maxCountSampleScan()) { - return (getFirstAccession() < other.getFirstAccession()); - } - else { - return (maxCountSampleScan() < other.maxCountSampleScan()); - } + //if (_ptm_island_subgroup_list.size() == other._ptm_island_subgroup_list.size()) { + if (maxCountSampleScan() == other.maxCountSampleScan()) { + return (getFirstAccession() < other.getFirstAccession()); } else { - return (_ptm_island_subgroup_list.size() < other._ptm_island_subgroup_list.size()); + return (maxCountSampleScan() > other.maxCountSampleScan()); } + //} + //else { + // return (_ptm_island_subgroup_list.size() < other._ptm_island_subgroup_list.size()); + //} } unsigned int PtmIslandGroup::maxCountSampleScan() const { std::vector<PtmIslandSubgroupSp>::const_iterator it_result = std::max_element(_ptm_island_subgroup_list.begin(), _ptm_island_subgroup_list.end(), [](const PtmIslandSubgroupSp & a, const PtmIslandSubgroupSp & b) diff --git a/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp b/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp index 97102a3a9261ed9b5d30d4dfbb40e142a422c021..52259a14f27fbdd3e2e18c89aab74b9ed877921f 100644 --- a/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp +++ b/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp @@ -39,7 +39,9 @@ PtmIslandTableModel::columnMap PtmIslandTableModel::_column_assignment = { (std::int8_t)PtmIslandListColumn::spectrum, (std::int8_t)PtmIslandListColumn::sequence, (std::int8_t)PtmIslandListColumn::ptm_position_list, - (std::int8_t)PtmIslandListColumn::multiptm + (std::int8_t)PtmIslandListColumn::multiptm, + (std::int8_t)PtmIslandListColumn::ptm_island_start, + (std::int8_t)PtmIslandListColumn::ptm_island_length }; @@ -54,30 +56,36 @@ 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"; - - } + + 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"; + break; + case (std::int8_t) PtmIslandListColumn::ptm_island_start: + return "start"; + break; + case (std::int8_t) PtmIslandListColumn::ptm_island_length: + return "length"; + + } return ""; } void PtmIslandTableModel::setIdentificationGroup(IdentificationGroup * p_identification_group) { @@ -91,9 +99,10 @@ void PtmIslandTableModel::setIdentificationGroup(IdentificationGroup * p_identif endResetModel(); } const PtmGroupingExperiment * PtmIslandTableModel::getPtmGroupingExperiment() const { - if (_p_identification_group == nullptr) {return nullptr; - } - return _p_identification_group->getPtmGroupingExperiment(); + if (_p_identification_group == nullptr) { + return nullptr; + } + return _p_identification_group->getPtmGroupingExperiment(); } int PtmIslandTableModel::rowCount(const QModelIndex &parent ) const { //qDebug() << "ProteinTableModel::rowCount begin "; @@ -106,7 +115,7 @@ int PtmIslandTableModel::rowCount(const QModelIndex &parent ) const { int PtmIslandTableModel::columnCount(const QModelIndex &parent ) const { //qDebug() << "ProteinTableModel::columnCount begin "; if (getPtmGroupingExperiment() != nullptr) { - return 7; + return 9; } return 0; } @@ -116,9 +125,9 @@ QVariant PtmIslandTableModel::headerData(int section, Qt::Orientation orientatio if (orientation == Qt::Horizontal) { if (role == Qt::DisplayRole) - { - return QVariant(getTitle(_column_assignment [section])); - } + { + return QVariant(getTitle(_column_assignment [section])); + } } return QVariant(); } @@ -127,39 +136,45 @@ QVariant PtmIslandTableModel::data(const QModelIndex &index, int role ) const { if (getPtmGroupingExperiment() == nullptr) return QVariant(); int row = index.row(); int col = index.column(); - switch(role) { - case Qt::DisplayRole: + switch(role) { + case Qt::DisplayRole: if (_p_identification_group == nullptr) { 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: + 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: + 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: + 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; - case (std::int8_t) PtmIslandListColumn::accession: + break; + case (std::int8_t) PtmIslandListColumn::accession: return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getProteinMatch()->getProteinXtpSp().get()->getAccession()); - break; - case (std::int8_t) PtmIslandListColumn::ptm_position_list: - QStringList position_list; - for (unsigned int position :getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getPositionList()) { - position_list << QString("%1").arg(position+1); - } + break; + case (std::int8_t) PtmIslandListColumn::ptm_island_start: + return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getStart()); + break; + case (std::int8_t) PtmIslandListColumn::ptm_island_length: + return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->size()); + break; + case (std::int8_t) PtmIslandListColumn::ptm_position_list: + QStringList position_list; + for (unsigned int position :getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getPositionList()) { + position_list << QString("%1").arg(position+1); + } return QVariant(position_list.join(" ")); - } + } } return QVariant(); } diff --git a/src/gui/ptm_island_list_view/ptmislandtablemodel.h b/src/gui/ptm_island_list_view/ptmislandtablemodel.h index 808cca8d593ffc74c8a49653fb9a3161e7e52cce..c6eeda9b84df1bf86c2e4a1fa55e1af7a8b2ecc9 100644 --- a/src/gui/ptm_island_list_view/ptmislandtablemodel.h +++ b/src/gui/ptm_island_list_view/ptmislandtablemodel.h @@ -33,7 +33,26 @@ #include <QAbstractTableModel> #include "../../core/identificationgroup.h" #include "../../grouping/ptm/ptmgroupingexperiment.h" -#include "../../utils/types.h" + + + +/** \def PtmIslandListColumn list of available fields to display in ptm island list + * + */ + +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 + ptm_island_start, ///< start position of the ptm island on the protein + ptm_island_length, ///< length of the ptm island + +}; + class PtmIslandListWindow; class PtmIslandTableModel: public QAbstractTableModel diff --git a/src/utils/types.h b/src/utils/types.h index 38491498fdea23ae9979d9955e40313ebf177c3c..9bf617565658a83712b894d44a73cc3ed75252ad 100644 --- a/src/utils/types.h +++ b/src/utils/types.h @@ -113,20 +113,4 @@ enum class ProteinListColumn { pai, ///< PAI }; - -/** \def PtmIslandListColumn list of available fields to display in ptm island list - * - */ - -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_ */