]> git.donarmstrong.com Git - mothur.git/blobdiff - tree.cpp
changes to blastdb to make filenames given to blast unique, changes to split.abund...
[mothur.git] / tree.cpp
index 731eb64d93f95b485f8607308e3e88345138813c..400a72ae388a88c5b94aa2b8a717471f600b33ed 100644 (file)
--- a/tree.cpp
+++ b/tree.cpp
@@ -14,6 +14,7 @@
 Tree::Tree() {
        try {
                globaldata = GlobalData::getInstance();
+               m = MothurOut::getInstance();
                
                if (globaldata->runParse == true) {  parseTreeFile();  globaldata->runParse = false;  }
 //for(int i = 0; i <   globaldata->Treenames.size(); i++) { cout << i << '\t' << globaldata->Treenames[i] << endl;  }  
@@ -44,7 +45,7 @@ Tree::Tree() {
                }
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "Tree");
+               m->errorOut(e, "Tree", "Tree");
                exit(1);
        }
 }
@@ -69,11 +70,12 @@ void Tree::addNamesToCounts() {
                                
                //go through each leaf and update its pcounts and pgroups
                for (int i = 0; i < numLeaves; i++) {
+
                        string name = tree[i].getName();
-                       
+               
                        map<string, string>::iterator itNames = globaldata->names.find(name);
-                       
-                       if (itNames == globaldata->names.end()) { mothurOut(name + " is not in your name file, please correct."); mothurOutEndLine(); exit(1);  }
+               
+                       if (itNames == globaldata->names.end()) { m->mothurOut(name + " is not in your name file, please correct."); m->mothurOutEndLine(); exit(1);  }
                        else {
                                vector<string> dupNames;
                                splitAtComma(globaldata->names[name], dupNames);
@@ -130,11 +132,10 @@ void Tree::addNamesToCounts() {
                                tree[i].setGroup(nodeGroups);
                                
                        }//end else
-               }//end for
-                               
+               }//end for                                      
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "addNamesToCounts");
+               m->errorOut(e, "Tree", "addNamesToCounts");
                exit(1);
        }
 }
@@ -148,7 +149,7 @@ int Tree::getIndex(string searchName) {
                
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "getIndex");
+               m->errorOut(e, "Tree", "getIndex");
                exit(1);
        }
 }
@@ -160,12 +161,12 @@ void Tree::setIndex(string searchName, int index) {
                globaldata->gTreemap->setIndex(searchName, index);
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "setIndex");
+               m->errorOut(e, "Tree", "setIndex");
                exit(1);
        }
 }
 /*****************************************************************/
-void Tree::assembleTree() {
+int Tree::assembleTree() {
        try {
        
                //if user has given a names file we want to include that info in the pgroups and pcount info.
@@ -173,12 +174,16 @@ void Tree::assembleTree() {
                
                //build the pGroups in non leaf nodes to be used in the parsimony calcs.
                for (int i = numLeaves; i < numNodes; i++) {
+                       if (m->control_pressed) { return 1; }
+
                        tree[i].pGroups = (mergeGroups(i));
                        tree[i].pcount = (mergeGcounts(i));
                }
+               
+               return 0;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "assembleTree");
+               m->errorOut(e, "Tree", "assembleTree");
                exit(1);
        }
 }
@@ -216,7 +221,7 @@ void Tree::getCopy(Tree* copy) {
                
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "getCopy");
+               m->errorOut(e, "Tree", "getCopy");
                exit(1);
        }
 }
@@ -269,7 +274,7 @@ map<string, int> Tree::mergeGroups(int i) {
                return parsimony;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "mergeGroups");
+               m->errorOut(e, "Tree", "mergeGroups");
                exit(1);
        }
 }
@@ -335,7 +340,7 @@ map<string, int> Tree::mergeUserGroups(int i, vector<string> g) {
                return parsimony;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "mergeUserGroups");
+               m->errorOut(e, "Tree", "mergeUserGroups");
                exit(1);
        }
 }
@@ -358,7 +363,7 @@ map<string,int> Tree::mergeGcounts(int position) {
                return sum;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "mergeGcounts");
+               m->errorOut(e, "Tree", "mergeGcounts");
                exit(1);
        }
 }
@@ -400,7 +405,7 @@ void Tree::randomLabels(vector<string> g) {
                }
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "randomLabels");
+               m->errorOut(e, "Tree", "randomLabels");
                exit(1);
        }
 }
@@ -430,7 +435,7 @@ void Tree::randomLabels(string groupA, string groupB) {
                }
        }               
        catch(exception& e) {
-               errorOut(e, "Tree", "randomLabels");
+               m->errorOut(e, "Tree", "randomLabels");
                exit(1);
        }
 }
@@ -446,7 +451,7 @@ void Tree::randomBlengths()  {
                }
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "randomBlengths");
+               m->errorOut(e, "Tree", "randomBlengths");
                exit(1);
        }
 }
@@ -503,7 +508,7 @@ void Tree::randomTopology() {
                }
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "randomTopology");
+               m->errorOut(e, "Tree", "randomTopology");
                exit(1);
        }
 }
@@ -515,7 +520,7 @@ void Tree::print(ostream& out) {
                out << ";" << endl;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "print");
+               m->errorOut(e, "Tree", "print");
                exit(1);
        }
 }
@@ -527,7 +532,7 @@ void Tree::printForBoot(ostream& out) {
                out << ";" << endl;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "printForBoot");
+               m->errorOut(e, "Tree", "printForBoot");
                exit(1);
        }
 }
@@ -549,7 +554,7 @@ void Tree::createNewickFile(string f) {
                out.close();
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "createNewickFile");
+               m->errorOut(e, "Tree", "createNewickFile");
                exit(1);
        }
 }
@@ -568,7 +573,7 @@ int Tree::findRoot() {
                return -1;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "findRoot");
+               m->errorOut(e, "Tree", "findRoot");
                exit(1);
        }
 }
@@ -614,7 +619,7 @@ void Tree::printBranch(int node, ostream& out, string mode) {
                
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "printBranch");
+               m->errorOut(e, "Tree", "printBranch");
                exit(1);
        }
 }
@@ -708,9 +713,13 @@ void Tree::parseTreeFile() {
                        }
                }
                filehandle.close();
+               
+               //for (int i = 0; i < globaldata->Treenames.size(); i++) {
+//cout << globaldata->Treenames[i] << endl; }
+//cout << globaldata->Treenames.size() << endl;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "parseTreeFile");
+               m->errorOut(e, "Tree", "parseTreeFile");
                exit(1);
        }
 }
@@ -727,39 +736,20 @@ int Tree::readTreeString(ifstream& filehandle)    {
 //cout << " at beginning of while " <<  k << endl;                     
                        if(c == ')')  {    
                                //to pass over labels in trees
-                               c=filehandle.get();
-                               while((c!=',') && (c != -1) && (c!= ':') && (c!=';')){ c=filehandle.get(); }
-                               filehandle.putback(c);
+                               string label = readLabel(filehandle);
                        }
+                       
                        if(c == ';') { return 0; }
                        if(c == -1) { return 0; }
+                       
                        //if you are a name
                        if((c != '(') && (c != ')') && (c != ',') && (c != ':') && (c != '\n') && (c != '\t') && (c != 32)) { //32 is space
-                               name = "";
-                               c = filehandle.get();
-                       //k = c;
-//cout << k << endl;
-                               while ((c != '(') && (c != ')') && (c != ',') && (c != ':') && (c != '\n') && (c != 32) && (c != '\t')) {                       
-                                       name += c;
-                                       c = filehandle.get();
-                       //k = c;
-//cout << " in name while " << k << endl;
-                               }
-                               
-//cout << "name = " << name << endl;
+                               name = readName(filehandle);
                                globaldata->Treenames.push_back(name);
-                               filehandle.putback(c);
-//k = c;
-//cout << " after putback" <<  k << endl;
                        } 
                        
                        if(c  == ':') { //read until you reach the end of the branch length
-                               while ((c != '(') && (c != ')') && (c != ',') && (c != ';') && (c != '\n') && (c != '\t') && (c != 32)) {
-                                       c = filehandle.get();
-       //k = c;
-       //cout << " in branch while " << k << endl;
-                               }
-                               filehandle.putback(c);
+                               string bl = readBranchLength(filehandle);
                        }
                
                        c = filehandle.get();
@@ -774,12 +764,74 @@ int Tree::readTreeString(ifstream& filehandle)    {
                return 0;
        }
        catch(exception& e) {
-               errorOut(e, "Tree", "readTreeString");
+               m->errorOut(e, "Tree", "readTreeString");
                exit(1);
        }
 }      
 
 /*******************************************************/
+string Tree::readLabel(ifstream& filehandle)   {
+       try {
+               
+               string label = "";
+               
+               //to pass over labels in trees
+               int c=filehandle.get();
+               while((c!=',') && (c != -1) && (c!= ':') && (c!=';')){ label += c; c=filehandle.get(); }
+               filehandle.putback(c);
+               
+               return label;
+               
+       }
+       catch(exception& e) {
+               m->errorOut(e, "Tree", "readLabel");
+               exit(1);
+       }
+}      
+/*******************************************************/
+string Tree::readName(ifstream& filehandle)    {
+       try {
+               
+               string name = "";
+               int c = filehandle.get();
+               
+               while ((c != '(') && (c != ')') && (c != ',') && (c != ':') && (c != '\n') && (c != 32) && (c != '\t')) {                       
+                       name += c;
+                       c = filehandle.get();
+               }
+                               
+//cout << "name = " << name << endl;
+               filehandle.putback(c);
+               
+               return name;
+               
+       }
+       catch(exception& e) {
+               m->errorOut(e, "Tree", "readName");
+               exit(1);
+       }
+}      
+/*******************************************************/
+string Tree::readBranchLength(ifstream& filehandle)    {
+       try {
+               
+               string br = "";
+               int c;
+               while ((c != '(') && (c != ')') && (c != ',') && (c != ';') && (c != '\n') && (c != '\t') && (c != 32)) {
+                       br += c;
+                       c = filehandle.get();
+               }
+               filehandle.putback(c);
+               
+               return br;
+               
+       }
+       catch(exception& e) {
+               m->errorOut(e, "Tree", "readBranchLength");
+               exit(1);
+       }
+}      
 
 /*******************************************************/
+/*******************************************************/