]> git.donarmstrong.com Git - mothur.git/blobdiff - weighted.cpp
fixed bug in unifrac commands with unrooted trees
[mothur.git] / weighted.cpp
index 1ce6230df933eab46bee132a76ec32c2c4e9a666..a0d593c803f691821afdb680e79be80f179b0afa 100644 (file)
@@ -73,7 +73,6 @@ EstOutput Weighted::createProcesses(Tree* t, vector< vector<string> > namesOfGro
        try {
 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                int process = 1;
-               int num = 0;
                vector<int> processIDS;
                
                EstOutput results;
@@ -204,9 +203,7 @@ EstOutput Weighted::driver(Tree* t, vector< vector<string> > namesOfGroupCombos,
                for (int h = start; h < (start+num); h++) {     
                        //report progress
                        m->mothurOut("Processing combo: " + toString(h)); m->mothurOutEndLine();
-                       
-                       int numLeaves = t->getNumLeaves();
-                       
+                                               
                        string groupA = namesOfGroupCombos[h][0]; 
                        string groupB = namesOfGroupCombos[h][1];
                        
@@ -234,10 +231,13 @@ EstOutput Weighted::driver(Tree* t, vector< vector<string> > namesOfGroupCombos,
                                
                                //if this is not the root then add it
                                if (rootForGrouping[namesOfGroupCombos[h]].count(i) == 0) {
-                                       u = abs(u * t->tree[i].getBranchLength());
-                                       WScore[(groupA+groupB)] += u; 
+                                       if (t->tree[i].getBranchLength() != -1) {
+                                               u = abs(u * t->tree[i].getBranchLength());
+                                               WScore[(groupA+groupB)] += u; 
+                                       }
                                }
                                
+                               
                        }
                }
                
@@ -247,7 +247,6 @@ EstOutput Weighted::driver(Tree* t, vector< vector<string> > namesOfGroupCombos,
                count = 0;
                for (int h = start; h < (start+num); h++) {
                        UN = (WScore[namesOfGroupCombos[h][0]+namesOfGroupCombos[h][1]] / D[count]);
-               
                        if (isnan(UN) || isinf(UN)) { UN = 0; } 
                        results.push_back(UN);
                        count++;
@@ -297,9 +296,7 @@ EstOutput Weighted::getValues(Tree* t, string groupA, string groupB) {
                
                        D += weightedSum;
                }
-               
-               int numLeaves = t->getNumLeaves();
-               
+                               
                //calculate u for the group comb 
                for(int i=0;i<t->getNumNodes();i++){
                 
@@ -324,12 +321,14 @@ EstOutput Weighted::getValues(Tree* t, string groupA, string groupB) {
                        
                        //if this is not the root then add it
                        if (rootForGrouping[groups].count(i) == 0) {
-                               u = abs(u * t->tree[i].getBranchLength());
-                               WScore[(groupA+groupB)] += u; 
+                               if (t->tree[i].getBranchLength() != -1) {
+                                       u = abs(u * t->tree[i].getBranchLength());
+                                       WScore[(groupA+groupB)] += u;
+                               }
                        }
                }               
                /********************************************************/
-               
+        
                //calculate weighted score for the group combination
                double UN;      
                UN = (WScore[(groupA+groupB)] / D);