]> git.donarmstrong.com Git - mothur.git/blobdiff - tree.cpp
working on readtree
[mothur.git] / tree.cpp
index 642c6658739dd5252b2d61083ce6af2b872785ec..e34253d8cf90fc17b5ca72b0465a6d16a502da4b 100644 (file)
--- a/tree.cpp
+++ b/tree.cpp
@@ -26,8 +26,6 @@ Tree::Tree() {
                        if (i <= (numLeaves-1)) {
                                tree[i].setName(globaldata->gTreemap->namesOfSeqs[i]);
                                tree[i].setGroup(globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i]));
-                               //the node knows its index
-                               tree[i].setIndex(i);
                                //set pcount and pGroup for groupname to 1.
                                tree[i].pcount[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
                                tree[i].pGroups[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
@@ -38,8 +36,6 @@ Tree::Tree() {
                        }else if (i > (numLeaves-1)) {
                                tree[i].setName("");
                                tree[i].setGroup("");
-                               //the node knows its index
-                               tree[i].setIndex(i);
                        }
                }
        }
@@ -54,7 +50,43 @@ Tree::Tree() {
 }
 
 /*****************************************************************/
+void Tree::resetTree(){
+try {
+               numLeaves = globaldata->gTreemap->getNumSeqs();
+               numNodes = 2*numLeaves - 1;
+               
+               tree.resize(numNodes);
 
+               //initialize tree with correct number of nodes, name and group info.
+               for (int i = 0; i < numNodes; i++) {
+                       //initialize leaf nodes
+                       if (i <= (numLeaves-1)) {
+                               tree[i].setName(globaldata->gTreemap->namesOfSeqs[i]);
+                               tree[i].setGroup(globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i]));
+                               //set pcount and pGroup for groupname to 1.
+                               tree[i].pcount[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
+                               tree[i].pGroups[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
+                               //Treemap knows name, group and index to speed up search
+                               globaldata->gTreemap->setIndex(globaldata->gTreemap->namesOfSeqs[i], i);
+       
+                       //intialize non leaf nodes
+                       }else if (i > (numLeaves-1)) {
+                               tree[i].setName("");
+                               tree[i].setGroup("");
+                       }
+               }
+       }
+       catch(exception& e) {
+               cout << "Standard Error: " << e.what() << " has occurred in the Tree class Function resetTree. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }
+       catch(...) {
+               cout << "An unknown error has occurred in the Tree class function resetTree. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               exit(1);
+       }               
+
+}
+/*****************************************************************/
 int Tree::getIndex(string searchName) {
        try {
                //Treemap knows name, group and index to speed up search
@@ -157,7 +189,7 @@ map<string, int> Tree::mergeGroups(int i) {
        try {
                int lc = tree[i].getLChild();
                int rc = tree[i].getRChild();
-               
+cout << i << lc << rc << endl;
                //set parsimony groups to left child
                map<string,int> parsimony = tree[lc].pGroups;