- //if yes, add your childrens tempTotals
- if ((nodePcountSize[lc] != 0) && (nodePcountSize[rc] != 0)) {
- sum += tempTotals[lc] + tempTotals[rc];
-
- //cout << "added to total " << tempTotals[lc] << '\t' << tempTotals[rc] << endl;
- if (t->tree[index].getBranchLength() != -1) {
- tempTotals[index] = abs(t->tree[index].getBranchLength());
- }else {
- tempTotals[index] = 0.0;
+ //am I the root for this grouping? if so I want to stop "early"
+ //does my sibling have descendants from the users groups?
+ int lc = t->tree[parent].getLChild();
+ int rc = t->tree[parent].getRChild();
+
+ int sib = lc;
+ if (lc == index) { sib = rc; }
+
+ map<string, int>::iterator itGroup;
+ int pcountSize = 0;
+ itGroup = t->tree[sib].pcount.find(groupA);
+ if (itGroup != t->tree[sib].pcount.end()) { pcountSize++; }
+ itGroup = t->tree[sib].pcount.find(groupB);
+ if (itGroup != t->tree[sib].pcount.end()) { pcountSize++; }
+
+ //if yes, I am not the root so add me
+ if (pcountSize != 0) {
+ if (t->tree[index].getBranchLength() != -1) {
+ sum += abs(t->tree[index].getBranchLength()) + tempTotal;
+ tempTotal = 0.0;
+ }else {
+ sum += tempTotal;
+ tempTotal = 0.0;
+ }
+ rootForGrouping[grouping].clear();
+ rootForGrouping[grouping].insert(parent);
+ }else { //if no, I may be the root so add my br to tempTotal until I am proven innocent
+ if (t->tree[index].getBranchLength() != -1) {
+ tempTotal += abs(t->tree[index].getBranchLength());
+ }