]> git.donarmstrong.com Git - mothur.git/blobdiff - tree.cpp
fixed how seq.dists divides the matrix for multiple processors
[mothur.git] / tree.cpp
index 6aa1b829c91d59bcee681b906c6c31ab07f1c168..30df40927b7cb79b811c6d4ddfdaeb0264bd81d0 100644 (file)
--- a/tree.cpp
+++ b/tree.cpp
@@ -453,6 +453,38 @@ void Tree::randomTopology() {
                exit(1);
        }               
 }
+/*****************************************************************/
+void Tree::print(ostream& out) {
+       try {
+               int root = findRoot();
+               printBranch(root, out, "branch");
+               out << ";" << endl;
+       }
+       catch(exception& e) {
+               cout << "Standard Error: " << e.what() << " has occurred in the Tree class Function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }
+       catch(...) {
+               cout << "An unknown error has occurred in the Tree class function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }               
+}
+/*****************************************************************/
+void Tree::printForBoot(ostream& out) {
+       try {
+               int root = findRoot();
+               printBranch(root, out, "boot");
+               out << ";" << endl;
+       }
+       catch(exception& e) {
+               cout << "Standard Error: " << e.what() << " has occurred in the Tree class Function printForBoot. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }
+       catch(...) {
+               cout << "An unknown error has occurred in the Tree class function printForBoot. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }               
+}
 
 /*****************************************************************/
 // This prints out the tree in Newick form.
@@ -463,7 +495,7 @@ void Tree::createNewickFile(string f) {
                filename = f;
                openOutputFile(filename, out);
                
-               printBranch(root);
+               printBranch(root, out, "branch");
                
                // you are at the end of the tree
                out << ";" << endl;
@@ -486,7 +518,9 @@ int Tree::findRoot() {
        try {
                for (int i = 0; i < numNodes; i++) {
                        //you found the root
-                       if (tree[i].getParent() == -1) { return i; }  
+                       if (tree[i].getParent() == -1) { return i; }
+                       //cout << "i = " << i << endl;
+                       //cout << "i's parent = " << tree[i].getParent() << endl;  
                }
                return -1;
        }
@@ -501,18 +535,40 @@ int Tree::findRoot() {
 }
 
 /*****************************************************************/
-void Tree::printBranch(int node) {
+void Tree::printBranch(int node, ostream& out, string mode) {
        try {
                
                // you are not a leaf
                if (tree[node].getLChild() != -1) {
                        out << "(";
-                       printBranch(tree[node].getLChild());
+                       printBranch(tree[node].getLChild(), out, mode);
                        out << ",";
-                       printBranch(tree[node].getRChild());
+                       printBranch(tree[node].getRChild(), out, mode);
                        out << ")";
+                       if (mode == "branch") {
+                               //if there is a branch length then print it
+                               if (tree[node].getBranchLength() != -1) {
+                                       out << ":" << tree[node].getBranchLength();
+                               }
+                       }else if (mode == "boot") {
+                               //if there is a label then print it
+                               if (tree[node].getLabel() != -1) {
+                                       out << tree[node].getLabel();
+                               }
+                       }
                }else { //you are a leaf
-                       out << tree[node].getGroup() << ":" << tree[node].getBranchLength();
+                       out << tree[node].getGroup(); 
+                       if (mode == "branch") {
+                               //if there is a branch length then print it
+                               if (tree[node].getBranchLength() != -1) {
+                                       out << ":" << tree[node].getBranchLength();
+                               }
+                       }else if (mode == "boot") {
+                               //if there is a label then print it
+                               if (tree[node].getLabel() != -1) {
+                                       out << tree[node].getLabel();
+                               }
+                       }
                }
                
        }