-
- //numComp+1 for AB, AC, BC, ABC
- data.resize(numComp+1,0);
-
- int count = 0;
- for (int a=0; a<numGroups; a++) {
- for (int l = a+1; l < numGroups; l++) {
- UniqueBL=0.0000; //a branch length is unique if it's chidren are from the same group
- totalBL = 0.00; //all branch lengths
- UW = 0.00; //Unweighted Value = UniqueBL / totalBL;
- copyIpcount.clear();
-
- //copy random tree passed in
- copyTree->getCopy(t);
-
- //groups in this combo
- groups.push_back(globaldata->Groups[a]); groups.push_back(globaldata->Groups[l]);
-
- //swap labels in the groups you want to compare
- copyTree->assembleRandomUnifracTree(groups[0], groups[1]);
-
- //copyTree->createNewickFile("random"+groupA+toString(count));
-
- for(int i=copyTree->getNumLeaves();i<copyTree->getNumNodes();i++){
-
- int lc = copyTree->tree[i].getLChild(); //lc = vector index of left child
- int rc = copyTree->tree[i].getRChild(); //rc = vector index of right child
-
- /**********************************************************************/
- //This section adds in all lengths that are non leaf
- copyIpcount = copyTree->tree[i].pcount;
- for (it = copyIpcount.begin(); it != copyIpcount.end();) {
- if (inUsersGroups(it->first, groups) != true) {
- copyIpcount.erase(it++);
- }else { it++; }
- }
-
- //if i's children are from the same group then i's pcount size will be 1
- //if copyIpcount.size() = 0 they are from a branch that is entirely from a group the user doesn't want
- if (copyIpcount.size() == 0) { }
- else if ((copyTree->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += abs(copyTree->tree[i].getBranchLength()); }
-
- //add i's BL to total if it is from the groups the user wants
- if ((copyTree->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
- totalBL += abs(copyTree->tree[i].getBranchLength());
- }
-
- /**********************************************************************/
- //This section adds in all lengths that are leaf
-
- //if i's chidren are leaves
- if (copyTree->tree[rc].getRChild() == -1) {
- //if rc is a valid group and rc has a BL
- if ((inUsersGroups(copyTree->tree[rc].getGroup(), groups) == true) && (copyTree->tree[rc].getBranchLength() != -1)) {
- UniqueBL += abs(copyTree->tree[rc].getBranchLength());
- totalBL += abs(copyTree->tree[rc].getBranchLength());
- }
- }
-
- if (copyTree->tree[lc].getLChild() == -1) {
- //if lc is a valid group and lc has a BL
- if ((inUsersGroups(copyTree->tree[lc].getGroup(), groups) == true) && (copyTree->tree[lc].getBranchLength() != -1)) {
- UniqueBL += abs(copyTree->tree[lc].getBranchLength());
- totalBL += abs(copyTree->tree[lc].getBranchLength());
- }
- }
-
- /**********************************************************************/
- }
-
- UW = (UniqueBL / totalBL);
-
- if (isnan(UW) || isinf(UW)) { UW = 0; }
-
- data[count] = UW;
- count++;
- groups.clear();
- }
- }
-