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

sorting and numbering ptm islands

parent 94466aed
No related branches found
No related tags found
No related merge requests found
......@@ -75,8 +75,14 @@ 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();
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 :
......
......@@ -76,6 +76,10 @@ void PtmIsland::addPeptideMatch(const PeptideMatch* p_peptide_match) {
}
}
unsigned int PtmIsland::getProteinStartPosition() const {
return _protein_start;
}
bool PtmIsland::merge(PtmIslandSp ptm_island_sp) {
if (std::none_of(_peptide_match_list.begin(), _peptide_match_list.end(), [ptm_island_sp](const PeptideMatch* element) {
return ptm_island_sp.get()->containsPeptideMatch(element);
......
......@@ -56,6 +56,8 @@ public:
bool containsPeptideMatch(const PeptideMatch* element) const;
std::vector<std::size_t> getSampleScanSet() const;
const ProteinMatch * getProteinMatch() const;
unsigned int getProteinStartPosition() const;
private:
const ProteinMatch * _protein_match_p;
std::vector<const PeptideMatch *> _peptide_match_list;
......
......@@ -44,6 +44,35 @@ PtmIslandGroup::~PtmIslandGroup()
}
QString PtmIslandGroup::getFirstAccession() const {
if (_ptm_island_subgroup_list.size() == 0) return QString();
QStringList accession_list;
for (PtmIslandSubgroupSp ptm_island_subgroup:_ptm_island_subgroup_list) {
for (PtmIslandSp ptm_island: ptm_island_subgroup.get()->getPtmIslandList()) {
accession_list << ptm_island.get()->getProteinMatch()->getProteinXtpSp().get()->getAccession();
}
}
accession_list.sort();
return accession_list[0];
}
void PtmIslandGroup::setGroupNumber(unsigned int number) {
_group_number = number;
for (PtmIslandSubgroupSp ptm_island_subgroup:_ptm_island_subgroup_list) {
ptm_island_subgroup.get()->setPtmIslandGroup(this);
}
std::sort(_ptm_island_subgroup_list.begin(), _ptm_island_subgroup_list.end(), [](const PtmIslandSubgroupSp& a, const PtmIslandSubgroupSp& b)
{
return (a.get()->getFirstPtmIsland()->getProteinStartPosition() < b.get()->getFirstPtmIsland()->getProteinStartPosition());
});
unsigned int sg_number=0;
for (PtmIslandSubgroupSp ptm_island_subgroup:_ptm_island_subgroup_list) {
sg_number ++;
ptm_island_subgroup.get()->setSubgroupNumber(sg_number);
}
}
bool PtmIslandGroup::operator<(const PtmIslandGroup& other) const {
if (_ptm_island_subgroup_list.size() == other._ptm_island_subgroup_list.size()) {
if (maxCountSampleScan() == other.maxCountSampleScan()) {
......@@ -57,7 +86,13 @@ bool PtmIslandGroup::operator<(const PtmIslandGroup& other) const {
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)
{
return (a.get()->countSampleScan() < b.get()->countSampleScan());
});
return it_result->get()->countSampleScan();
}
bool PtmIslandGroup::mergePtmIslandSubgroupSp(PtmIslandSubgroupSp ptm_island_subgroup_sp) {
......
......@@ -46,9 +46,14 @@ public:
PtmIslandGroup(PtmIslandSubgroupSp ptm_island_subgroup_sp);
PtmIslandGroup(const PtmIslandGroup& other);
~PtmIslandGroup();
bool operator<(const PtmIslandGroup& other) const;
/** @brief merge with the given ptm island subgroup if at least one protein is shared
* */
bool mergePtmIslandSubgroupSp(PtmIslandSubgroupSp ptm_island_subgroup_sp);
unsigned int maxCountSampleScan() const;
QString getFirstAccession() const;
void setGroupNumber(unsigned int number);
private :
std::vector<PtmIslandSubgroupSp> _ptm_island_subgroup_list;
......
......@@ -46,17 +46,35 @@ PtmIslandSubgroup::~PtmIslandSubgroup()
{
}
const PtmIsland * PtmIslandSubgroup::getFirstPtmIsland() const {
return _ptm_island_list.begin()->get();
}
void PtmIslandSubgroup::setSubgroupNumber(unsigned int number) {
_subgroup_number = number;
}
void PtmIslandSubgroup::setPtmIslandGroup(PtmIslandGroup * p_ptm_island_group) {
_ptm_island_group_p = p_ptm_island_group;
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());
});
}
const std::vector< PtmIslandSp > & PtmIslandSubgroup::getPtmIslandList() const {
return _ptm_island_list;
}
unsigned int PtmIslandSubgroup::countSampleScan() const {
return _sample_scan_set.size();
}
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) {
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;
}
return false;
}
bool PtmIslandSubgroup::mergePtmIslandSp(PtmIslandSp ptm_island_sp) {
......
......@@ -39,6 +39,7 @@ class PtmIslandSubgroup;
*/
typedef std::shared_ptr<PtmIslandSubgroup> PtmIslandSubgroupSp;
class PtmIslandGroup;
class PtmIslandSubgroup
{
......@@ -51,10 +52,21 @@ public:
* */
bool mergePtmIslandSp(PtmIslandSp ptm_island_sp);
bool containsProteinMatchFrom(PtmIslandSubgroup* ptm_island_subgroup_p);
unsigned int countSampleScan() const;
const std::vector< PtmIslandSp > & getPtmIslandList() const;
void setPtmIslandGroup(PtmIslandGroup * p_ptm_island_group);
const PtmIsland * getFirstPtmIsland() const;
void setSubgroupNumber(unsigned int number);
private:
std::vector< PtmIslandSp > _ptm_island_list;
std::vector<std::size_t> _sample_scan_set;
PtmIslandGroup * _ptm_island_group_p = nullptr;
unsigned int _subgroup_number;
};
......
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