Skip to content
Snippets Groups Projects
Commit 94466aed authored by Olivier Langella's avatar Olivier Langella
Browse files

ptm group ok. trying to sort it

parent ff39eb29
No related branches found
No related tags found
No related merge requests found
......@@ -72,7 +72,23 @@ 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();
});
}
void PtmGroupingExperiment::startGrouping() {
//we have a list of ptm island subgroups to group :
for (PtmIslandSubgroupSp ptm_island_subgroup:_ptm_island_subgroup_list) {
if (std::none_of(_ptm_island_group_list.begin(), _ptm_island_group_list.end(), [ptm_island_subgroup](PtmIslandGroupSp element) {
return element.get()->mergePtmIslandSubgroupSp(ptm_island_subgroup);
})) {
//create a new group
_ptm_island_group_list.push_back(std::make_shared<PtmIslandGroup>(ptm_island_subgroup));
}
}
numbering();
}
void PtmGroupingExperiment::addPtmIsland(PtmIslandSp ptm_island_sp) {
if (std::none_of(_ptm_island_subgroup_list.begin(), _ptm_island_subgroup_list.end(), [ptm_island_sp](PtmIslandSubgroupSp element) {
......
......@@ -50,6 +50,7 @@ private:
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;
......
......@@ -44,6 +44,9 @@ PtmIsland::~PtmIsland()
}
const ProteinMatch * PtmIsland::getProteinMatch() const {
return _protein_match_p;
}
std::vector<std::size_t> PtmIsland::getSampleScanSet() const {
std::vector<std::size_t> sample_scan_set;
for (const PeptideMatch * p_peptide_match:_peptide_match_list) {
......
......@@ -55,6 +55,7 @@ public:
bool containsPeptideMatch(const PeptideMatch* element) const;
std::vector<std::size_t> getSampleScanSet() const;
const ProteinMatch * getProteinMatch() const;
private:
const ProteinMatch * _protein_match_p;
std::vector<const PeptideMatch *> _peptide_match_list;
......
......@@ -29,17 +29,45 @@
#include "ptmislandgroup.h"
PtmIslandGroup::PtmIslandGroup()
PtmIslandGroup::PtmIslandGroup(PtmIslandSubgroupSp ptm_island_subgroup_sp)
{
_ptm_island_subgroup_list.push_back(ptm_island_subgroup_sp);
}
PtmIslandGroup::PtmIslandGroup(const PtmIslandGroup& other)
{
_ptm_island_subgroup_list = other._ptm_island_subgroup_list;
}
PtmIslandGroup::~PtmIslandGroup()
{
}
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());
}
}
else {
return (_ptm_island_subgroup_list.size() < other._ptm_island_subgroup_list.size());
}
}
bool PtmIslandGroup::mergePtmIslandSubgroupSp(PtmIslandSubgroupSp ptm_island_subgroup_sp) {
//http://en.cppreference.com/w/cpp/algorithm/all_any_none_of
if (std::any_of(_ptm_island_subgroup_list.begin(), _ptm_island_subgroup_list.end(), [ptm_island_subgroup_sp](PtmIslandSubgroupSp element) {
return element.get()->containsProteinMatchFrom( ptm_island_subgroup_sp.get());
})) {
//accept this subgroup
_ptm_island_subgroup_list.push_back(ptm_island_subgroup_sp);
return true;
}
return false;
}
......@@ -31,6 +31,7 @@
#define PTMISLANDGROUP_H
#include <memory>
#include "ptmislandsubgroup.h"
class PtmIslandGroup;
......@@ -42,9 +43,16 @@ typedef std::shared_ptr<PtmIslandGroup> PtmIslandGroupSp;
class PtmIslandGroup
{
public:
PtmIslandGroup();
PtmIslandGroup(PtmIslandSubgroupSp ptm_island_subgroup_sp);
PtmIslandGroup(const PtmIslandGroup& other);
~PtmIslandGroup();
/** @brief merge with the given ptm island subgroup if at least one protein is shared
* */
bool mergePtmIslandSubgroupSp(PtmIslandSubgroupSp ptm_island_subgroup_sp);
private :
std::vector<PtmIslandSubgroupSp> _ptm_island_subgroup_list;
unsigned int _group_number;
};
#endif // PTMISLANDGROUP_H
......@@ -47,6 +47,18 @@ PtmIslandSubgroup::~PtmIslandSubgroup()
}
bool PtmIslandSubgroup::containsProteinMatchFrom(PtmIslandSubgroup* ptm_island_subgroup_p) {
for (PtmIslandSp ptm_island_sp :_ptm_island_list) {
if (std::any_of(ptm_island_subgroup_p->_ptm_island_list.begin(), ptm_island_subgroup_p->_ptm_island_list.end(), [ptm_island_sp](PtmIslandSp element) {
return (element.get()->getProteinMatch() == ptm_island_sp.get()->getProteinMatch());
})) {
return true;
}
}
return false;
}
bool PtmIslandSubgroup::mergePtmIslandSp(PtmIslandSp ptm_island_sp) {
if (_sample_scan_set == ptm_island_sp.get()->getSampleScanSet()) {
//merge
......
......@@ -50,6 +50,7 @@ public:
/** @brief merge with the given ptm island if all sample scans are shared
* */
bool mergePtmIslandSp(PtmIslandSp ptm_island_sp);
bool containsProteinMatchFrom(PtmIslandSubgroup* ptm_island_subgroup_p);
private:
std::vector< PtmIslandSp > _ptm_island_list;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment