diff --git a/src/core/identificationgroup.cpp b/src/core/identificationgroup.cpp index 1dbc4b558b17608716b18764c73265e34a1f6649..287f581519b43641f9900f00ecda8003986ad321 100644 --- a/src/core/identificationgroup.cpp +++ b/src/core/identificationgroup.cpp @@ -150,13 +150,13 @@ bool IdentificationGroup::contains (const MsRun * p_msrun) const { return false; } - void IdentificationGroup::addIdentificationDataSourceP(IdentificationDataSource * p_identification_source) { - addMsRunSp(p_identification_source->getMsRunSp()); - auto it = std::find (_id_source_list.begin() ,_id_source_list.end(),p_identification_source); +void IdentificationGroup::addIdentificationDataSourceP(IdentificationDataSource * p_identification_source) { + addMsRunSp(p_identification_source->getMsRunSp()); + auto it = std::find (_id_source_list.begin() ,_id_source_list.end(),p_identification_source); if (it == _id_source_list.end()) { _id_source_list.push_back(p_identification_source); } - } +} void IdentificationGroup::addMsRunSp(MsRunSp ms_run_sp) { auto it = std::find (_ms_run_list.begin() ,_ms_run_list.end(),ms_run_sp); if (it == _ms_run_list.end()) { @@ -209,6 +209,22 @@ void IdentificationGroup::startGrouping (const GroupingType & grouping_type) { qDebug() << "IdentificationGroup::startGrouping end "; } +void IdentificationGroup::startPtmGrouping () { + qDebug() << "IdentificationGroup::startPtmGrouping begin "; + if (_p_grp_ptm_experiment != nullptr) { + delete _p_grp_ptm_experiment; + } + _p_grp_ptm_experiment = new PtmGroupingExperiment(); + _p_grp_ptm_experiment->setValidationState(ValidationState::grouped); + for (ProteinMatch * p_protein_match : _protein_match_list) { + _p_grp_ptm_experiment->addProteinMatch(p_protein_match); + } + + _p_grp_ptm_experiment->startGrouping(); + + qDebug() << "IdentificationGroup::startPtmGrouping end "; +} + const QString IdentificationGroup::getTabName() const { return _ms_run_list[0]->getFilename(); } diff --git a/src/core/identificationgroup.h b/src/core/identificationgroup.h index 1ed50884c364801da693f9194edf01ec83ffa66f..56ea6baa9b7f3e28b1255d98b045e34749d92760 100644 --- a/src/core/identificationgroup.h +++ b/src/core/identificationgroup.h @@ -26,6 +26,7 @@ #include "msrun.h" #include "grouping/groupingexperiment.h" +#include "grouping/ptm/ptmgroupingexperiment.h" #include "../utils/types.h" #ifndef IDENTIFICATIONGROUP_H @@ -91,6 +92,9 @@ public: void updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters); void startGrouping (const GroupingType & grouping_type); + /** @brief creates a new PTM grouping experiment + * */ + void startPtmGrouping (); const std::vector<MsRunSp> & getMsRunSpList() const; const std::vector<IdentificationDataSource *> & getIdentificationDataSourceList() const; @@ -107,6 +111,7 @@ private : void addMsRunSp(MsRunSp ms_run_sp); private : GroupingExperiment * _p_grp_experiment= nullptr; + PtmGroupingExperiment * _p_grp_ptm_experiment= nullptr; Project * _p_project; diff --git a/src/grouping/ptm/ptmgroupingexperiment.cpp b/src/grouping/ptm/ptmgroupingexperiment.cpp index 193b53b5fba3009ed94be780552d2d9620fd6fad..69676cf3e0f6df9e2e8ec912d9a657625aaabc09 100644 --- a/src/grouping/ptm/ptmgroupingexperiment.cpp +++ b/src/grouping/ptm/ptmgroupingexperiment.cpp @@ -29,7 +29,7 @@ #include "ptmgroupingexperiment.h" -PtmGroupingExperiment::PtmGroupingExperiment(const PtmGroupingExperiment& other) +PtmGroupingExperiment::PtmGroupingExperiment() { /* * accession MOD:00696 @@ -73,16 +73,16 @@ PtmGroupingExperiment::~PtmGroupingExperiment() } void PtmGroupingExperiment::numbering() { - std::sort(_ptm_island_group_list.begin(), _ptm_island_group_list.end(),[](const PtmIslandGroupSp a, const PtmIslandGroupSp b) - { - return *(a.get()) < *(b.get()); - }); - - unsigned int number=0; - for (PtmIslandGroupSp ptm_island_group:_ptm_island_group_list) { - number ++; - ptm_island_group.get()->setGroupNumber(number); - } + std::sort(_ptm_island_group_list.begin(), _ptm_island_group_list.end(),[](const PtmIslandGroupSp a, const PtmIslandGroupSp b) + { + return *(a.get()) < *(b.get()); + }); + + unsigned int number=0; + for (PtmIslandGroupSp ptm_island_group:_ptm_island_group_list) { + number ++; + ptm_island_group.get()->setGroupNumber(number); + } } void PtmGroupingExperiment::startGrouping() { //we have a list of ptm island subgroups to group : @@ -97,6 +97,7 @@ void PtmGroupingExperiment::startGrouping() { numbering(); } void PtmGroupingExperiment::addPtmIsland(PtmIslandSp ptm_island_sp) { + _ptm_island_list.push_back(ptm_island_sp); if (std::none_of(_ptm_island_subgroup_list.begin(), _ptm_island_subgroup_list.end(), [ptm_island_sp](PtmIslandSubgroupSp element) { return element.get()->mergePtmIslandSp(ptm_island_sp); })) { diff --git a/src/grouping/ptm/ptmgroupingexperiment.h b/src/grouping/ptm/ptmgroupingexperiment.h index e7fabb0bf97a111d97850fc91e3a1f57561d492c..ea80af13a4966465aefe8afdc50fe074f992c0dd 100644 --- a/src/grouping/ptm/ptmgroupingexperiment.h +++ b/src/grouping/ptm/ptmgroupingexperiment.h @@ -39,22 +39,23 @@ class PtmGroupingExperiment { public: - PtmGroupingExperiment(const PtmGroupingExperiment& other); + PtmGroupingExperiment(); ~PtmGroupingExperiment(); - + void setValidationState(ValidationState validation_state); void addProteinMatch(const ProteinMatch* p_protein_match); void startGrouping(); private: std::vector<unsigned int> getPtmPositions(const ProteinMatch * protein_match) const; - + std::vector< PtmIslandSp > mergePeptideMatchPtmIslandList(vector< PtmIslandSp > ptm_island_list); void addPtmIsland(PtmIslandSp ptm_island); void numbering(); private: std::list<pappso::AaModificationP> _modification_list; ValidationState _peptide_validation_state = ValidationState::validAndChecked; + std::vector<PtmIslandSp> _ptm_island_list; std::vector<PtmIslandSubgroupSp> _ptm_island_subgroup_list; std::vector<PtmIslandGroupSp> _ptm_island_group_list; }; diff --git a/src/grouping/ptm/ptmisland.cpp b/src/grouping/ptm/ptmisland.cpp index acd224f40ab4ec27d077ce23a62424a980d83fe0..0603f9fba323823301659a6cac9d9575d0c9ca6e 100644 --- a/src/grouping/ptm/ptmisland.cpp +++ b/src/grouping/ptm/ptmisland.cpp @@ -30,6 +30,8 @@ #include "ptmisland.h" #include <pappsomspp/pappsoexception.h> #include "ptmislandsubgroup.h" +#include "ptmislandgroup.h" +#include <pappsomspp/utils.h> PtmIsland::PtmIsland(const ProteinMatch* p_protein_match, unsigned int position):_protein_match_p(p_protein_match) { @@ -45,6 +47,19 @@ PtmIsland::~PtmIsland() } +const QString PtmIsland::getGroupingId() const { + if(_prot_number==0) { + return ""; + } + return QString("ptm%1%2%3").arg(pappso::Utils::getLexicalOrderedString(_ptm_island_subgroup_p->getPtmIslandGroup()->getGroupNumber())) + .arg(pappso::Utils::getLexicalOrderedString(_ptm_island_subgroup_p->getSubgroupNumber())).arg(pappso::Utils::getLexicalOrderedString(_prot_number)); +} +void PtmIsland::setPtmIslandSubgroup(PtmIslandSubgroup* p_ptm_island_subgroup) { + _ptm_island_subgroup_p = p_ptm_island_subgroup; +} +void PtmIsland::setProteinNumber(unsigned int prot_number) { + _prot_number = prot_number; +} const ProteinMatch * PtmIsland::getProteinMatch() const { return _protein_match_p; } diff --git a/src/grouping/ptm/ptmisland.h b/src/grouping/ptm/ptmisland.h index cb9be5b1329f0d9607972a3acc396fee8e5b912a..62f13ac63b5c4b6c42ed0459408bcd503fdada9c 100644 --- a/src/grouping/ptm/ptmisland.h +++ b/src/grouping/ptm/ptmisland.h @@ -58,6 +58,11 @@ public: 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; private: const ProteinMatch * _protein_match_p; @@ -66,6 +71,7 @@ private: std::vector<unsigned int> _position_list; unsigned int _protein_stop=0; unsigned int _protein_start=0; + unsigned int _prot_number=0; PtmIslandSubgroup * _ptm_island_subgroup_p = nullptr; }; diff --git a/src/grouping/ptm/ptmislandgroup.cpp b/src/grouping/ptm/ptmislandgroup.cpp index b4abe62f9c51aed727ffe831abb79b1e0ba1743b..c7cc921d3a7a7603e00d4a30c1e0d508db6a84b3 100644 --- a/src/grouping/ptm/ptmislandgroup.cpp +++ b/src/grouping/ptm/ptmislandgroup.cpp @@ -57,6 +57,9 @@ QString PtmIslandGroup::getFirstAccession() const { return accession_list[0]; } +unsigned int PtmIslandGroup::getGroupNumber() const { + return _group_number; +} void PtmIslandGroup::setGroupNumber(unsigned int number) { _group_number = number; for (PtmIslandSubgroupSp ptm_island_subgroup:_ptm_island_subgroup_list) { diff --git a/src/grouping/ptm/ptmislandgroup.h b/src/grouping/ptm/ptmislandgroup.h index 18038220e5f610a00a68fbdeb4893d90af4028b6..bb3702d1ffdd0c03aee4dad15f74e9014fdd2f37 100644 --- a/src/grouping/ptm/ptmislandgroup.h +++ b/src/grouping/ptm/ptmislandgroup.h @@ -54,6 +54,7 @@ public: unsigned int maxCountSampleScan() const; QString getFirstAccession() const; void setGroupNumber(unsigned int number); + unsigned int getGroupNumber() const; private : std::vector<PtmIslandSubgroupSp> _ptm_island_subgroup_list; diff --git a/src/grouping/ptm/ptmislandsubgroup.cpp b/src/grouping/ptm/ptmislandsubgroup.cpp index 6a0d99e5f53e1605cfffcfee3a59ba8162952f83..f1df0c12361c5cfad670f748f0d935fd3d5416d8 100644 --- a/src/grouping/ptm/ptmislandsubgroup.cpp +++ b/src/grouping/ptm/ptmislandsubgroup.cpp @@ -50,8 +50,29 @@ const PtmIsland * PtmIslandSubgroup::getFirstPtmIsland() const { return _ptm_island_list.begin()->get(); } +const PtmIslandGroup * PtmIslandSubgroup::getPtmIslandGroup() const { + return _ptm_island_group_p; +} + +unsigned int PtmIslandSubgroup::getSubgroupNumber() const { + return _subgroup_number; +} void PtmIslandSubgroup::setSubgroupNumber(unsigned int number) { _subgroup_number = number; + + for (PtmIslandSp ptm_island:_ptm_island_list) { + ptm_island.get()->setPtmIslandSubgroup(this); + } + std::sort(_ptm_island_list.begin(), _ptm_island_list.end(), [](const PtmIslandSp& a, const PtmIslandSp& b) + { + return (a.get()->getProteinMatch()->getProteinXtpSp().get()->getAccession() < b.get()->getProteinMatch()->getProteinXtpSp().get()->getAccession()); + }); + + unsigned int prot_number=0; + for (PtmIslandSp ptm_island:_ptm_island_list) { + prot_number ++; + ptm_island.get()->setProteinNumber(prot_number); + } } void PtmIslandSubgroup::setPtmIslandGroup(PtmIslandGroup * p_ptm_island_group) { _ptm_island_group_p = p_ptm_island_group; diff --git a/src/grouping/ptm/ptmislandsubgroup.h b/src/grouping/ptm/ptmislandsubgroup.h index 4148fa31f83c5a55c8ec51a7888bab9b11f4bc6a..0f83c6df713ca9de89ebc80ca36667e85adaf9d9 100644 --- a/src/grouping/ptm/ptmislandsubgroup.h +++ b/src/grouping/ptm/ptmislandsubgroup.h @@ -60,7 +60,9 @@ public: void setPtmIslandGroup(PtmIslandGroup * p_ptm_island_group); const PtmIsland * getFirstPtmIsland() const; + unsigned int getSubgroupNumber() const; void setSubgroupNumber(unsigned int number); + const PtmIslandGroup * getPtmIslandGroup() const; private: std::vector< PtmIslandSp > _ptm_island_list; diff --git a/src/gui/ptm_island_list_view/ptm_island_list_view.ui b/src/gui/ptm_island_list_view/ptm_island_list_view.ui index c000cdcdf01f4374b6f570b53c4d7e05d816faae..f30486e35f46fa4bf7ea5962fd5ebd8787e00cb9 100644 --- a/src/gui/ptm_island_list_view/ptm_island_list_view.ui +++ b/src/gui/ptm_island_list_view/ptm_island_list_view.ui @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>PtmIslandListView</class> + <class>ptm_island_list_window</class> <widget class="QMainWindow" name="ptm_island_list_window"> <property name="geometry"> <rect> @@ -54,7 +54,7 @@ </layout> </item> <item> - <widget class="QTableView" name="tableView"> + <widget class="QTableView" name="ptm_island_tableview"> <property name="contextMenuPolicy"> <enum>Qt::DefaultContextMenu</enum> </property> @@ -111,95 +111,14 @@ <x>0</x> <y>0</y> <width>826</width> - <height>25</height> + <height>23</height> </rect> </property> </widget> <widget class="QStatusBar" name="statusbar"/> </widget> <resources/> - <connections> - <connection> - <sender>hideNotValidCheckBox</sender> - <signal>toggled(bool)</signal> - <receiver>ProteinView</receiver> - <slot>doNotValidHide(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>245</x> - <y>53</y> - </hint> - <hint type="destinationlabel"> - <x>839</x> - <y>171</y> - </hint> - </hints> - </connection> - <connection> - <sender>hideNotCheckedCheckBox</sender> - <signal>toggled(bool)</signal> - <receiver>ProteinView</receiver> - <slot>doNotCheckedHide(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>482</x> - <y>47</y> - </hint> - <hint type="destinationlabel"> - <x>920</x> - <y>269</y> - </hint> - </hints> - </connection> - <connection> - <sender>hideNotGroupedCheckBox</sender> - <signal>toggled(bool)</signal> - <receiver>ProteinView</receiver> - <slot>doNotGroupedHide(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>688</x> - <y>57</y> - </hint> - <hint type="destinationlabel"> - <x>1079</x> - <y>360</y> - </hint> - </hints> - </connection> - <connection> - <sender>protein_search_edit</sender> - <signal>textChanged(QString)</signal> - <receiver>ProteinView</receiver> - <slot>onProteinSearchEdit(QString)</slot> - <hints> - <hint type="sourcelabel"> - <x>352</x> - <y>363</y> - </hint> - <hint type="destinationlabel"> - <x>879</x> - <y>391</y> - </hint> - </hints> - </connection> - <connection> - <sender>search_combobox</sender> - <signal>activated(QString)</signal> - <receiver>ProteinView</receiver> - <slot>doSearchOn(QString)</slot> - <hints> - <hint type="sourcelabel"> - <x>121</x> - <y>354</y> - </hint> - <hint type="destinationlabel"> - <x>867</x> - <y>386</y> - </hint> - </hints> - </connection> - </connections> + <connections/> <slots> <slot>doNotValidHide(bool)</slot> <slot>doNotCheckedHide(bool)</slot>