]> git.donarmstrong.com Git - mothur.git/blobdiff - consensuscommand.cpp
modified chimera commands to process multiple fasta files and added checks to pintail...
[mothur.git] / consensuscommand.cpp
index 8c34068bba76f4347d8783b35c74af69979921ea..37cd39578c953e3d843c4cd0892b1be992511a88 100644 (file)
@@ -11,7 +11,7 @@
 
 //**********************************************************************************************************************
 
-ConcensusCommand::ConcensusCommand(string fileroot){
+ConcensusCommand::ConcensusCommand(string fileroot)  {
        try {
                globaldata = GlobalData::getInstance();
                abort = false;
@@ -22,7 +22,7 @@ ConcensusCommand::ConcensusCommand(string fileroot){
        
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "ConcensusCommand");
+               m->errorOut(e, "ConcensusCommand", "ConcensusCommand");
                exit(1);
        }
 }
@@ -31,17 +31,17 @@ ConcensusCommand::ConcensusCommand(string fileroot){
 
 void ConcensusCommand::help(){
        try {
-               mothurOut("The consensus command can only be executed after a successful read.tree command.\n");
-               mothurOut("The consensus command has no parameters.\n");
-               mothurOut("The consensus command should be in the following format: consensus().\n");
-               mothurOut("The consensus command output two files: .consensus.tre and .consensuspairs.\n");
-               mothurOut("The .consensus.tre file contains the consensus tree of the trees in your input file.\n");
-               mothurOut("The branch lengths are the percentage of trees in your input file that had the given pair.\n");
-               mothurOut("The .consensuspairs file contains a list of the internal nodes in your tree.  For each node, the pair that was used in the consensus tree \n");
-               mothurOut("is reported with its percentage, as well as the other pairs that were seen for that node but not used and their percentages.\n\n");          
+               m->mothurOut("The consensus command can only be executed after a successful read.tree command.\n");
+               m->mothurOut("The consensus command has no parameters.\n");
+               m->mothurOut("The consensus command should be in the following format: consensus().\n");
+               m->mothurOut("The consensus command output two files: .consensus.tre and .consensuspairs.\n");
+               m->mothurOut("The .consensus.tre file contains the consensus tree of the trees in your input file.\n");
+               m->mothurOut("The branch lengths are the percentage of trees in your input file that had the given pair.\n");
+               m->mothurOut("The .consensuspairs file contains a list of the internal nodes in your tree.  For each node, the pair that was used in the consensus tree \n");
+               m->mothurOut("is reported with its percentage, as well as the other pairs that were seen for that node but not used and their percentages.\n\n");               
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "help");
+               m->errorOut(e, "ConcensusCommand", "help");
                exit(1);
        }
 }
@@ -62,7 +62,9 @@ int ConcensusCommand::execute(){
                }
                
                //get the possible pairings
-               getSets();              
+               getSets();      
+               
+               if (m->control_pressed) { return 0; }
                
                //open file for pairing not included in the tree
                notIncluded = filename + ".cons.pairs";
@@ -82,8 +84,12 @@ int ConcensusCommand::execute(){
                
                buildConcensusTree(treeSet);
                
+               if (m->control_pressed) { delete consensusTree; return 0; }
+               
                consensusTree->assembleTree();
                
+               if (m->control_pressed) { delete consensusTree; return 0; }
+               
                //output species in order
                out2 << "Species in Order: " << endl << endl;
                for (int i = 0; i < treeSet.size(); i++) {  out2 << i+1 << ".  " << treeSet[i] << endl; }
@@ -91,8 +97,13 @@ int ConcensusCommand::execute(){
                //output sets included
                out2 << endl << "Sets included in the consensus tree:" << endl << endl;
                
+               if (m->control_pressed) { delete consensusTree; return 0; }
+               
                vector<string> temp;
                for (it2 = nodePairsInTree.begin(); it2 != nodePairsInTree.end(); it2++) {
+               
+                       if (m->control_pressed) { delete consensusTree; return 0; }
+                       
                        //only output pairs not leaves
                        if (it2->first.size() > 1) { 
                                temp.clear();
@@ -118,6 +129,9 @@ int ConcensusCommand::execute(){
                //output sets not included
                out2 << endl << "Sets NOT included in the consensus tree:" << endl << endl;
                for (it2 = nodePairs.begin(); it2 != nodePairs.end(); it2++) {
+               
+                       if (m->control_pressed) { delete consensusTree; return 0; }
+                       
                        temp.clear();
                        //initialize temp to all "."
                        temp.resize(treeSet.size(), ".");
@@ -148,7 +162,7 @@ int ConcensusCommand::execute(){
                return 0;
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "execute");
+               m->errorOut(e, "ConcensusCommand", "execute");
                exit(1);
        }
 }
@@ -159,6 +173,8 @@ int ConcensusCommand::buildConcensusTree(vector<string> nodeSet) {
                vector<string> leftChildSet;
                vector<string> rightChildSet;
                
+               if (m->control_pressed) { return 1; }
+               
                //if you are at a leaf
                if (nodeSet.size() == 1) {
                        //return the vector index of the leaf you are at
@@ -180,13 +196,13 @@ int ConcensusCommand::buildConcensusTree(vector<string> nodeSet) {
        
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "buildConcensusTree");
+               m->errorOut(e, "ConcensusCommand", "buildConcensusTree");
                exit(1);
        }
 }
 
 //**********************************************************************************************************************
-void ConcensusCommand::getSets() {
+int ConcensusCommand::getSets() {
        try {
                vector<string> temp;
                treeSet.clear();
@@ -196,6 +212,9 @@ void ConcensusCommand::getSets() {
                        
                        //for each non-leaf node get descendant info.
                        for (int j = numLeaves; j < numNodes; j++) {
+                               
+                               if (m->control_pressed) { return 1; }
+                               
                                temp.clear();
                                //go through pcounts and pull out descendants
                                for (it = t[i]->tree[j].pcount.begin(); it != t[i]->tree[j].pcount.end(); it++) {
@@ -219,6 +238,8 @@ void ConcensusCommand::getSets() {
                //you want the leaves in there but with insignifigant sightings value so it is added last
                //for each leaf node get descendant info.
                for (int j = 0; j < numLeaves; j++) {
+               
+                       if (m->control_pressed) { return 1; }
                        
                        //only need the first one since leaves have no descendants but themselves
                        it = t[0]->tree[j].pcount.begin(); 
@@ -239,6 +260,7 @@ void ConcensusCommand::getSets() {
                
                //set initial rating on pairs to sightings + subgroup sightings
                while (nodePairsCopy.size() != 0) {
+                       if (m->control_pressed) { return 1; }
                
                        vector<string> small = getSmallest(nodePairsCopy);
                        
@@ -249,9 +271,10 @@ void ConcensusCommand::getSets() {
                        nodePairsCopy.erase(small);
                }
                
+               return 0;
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "getSets");
+               m->errorOut(e, "ConcensusCommand", "getSets");
                exit(1);
        }
 }
@@ -268,7 +291,7 @@ vector<string> ConcensusCommand::getSmallest(map< vector<string>, int> nodes) {
                return smallest;
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "getSmallest");
+               m->errorOut(e, "ConcensusCommand", "getSmallest");
                exit(1);
        }
 }
@@ -306,7 +329,7 @@ vector<string> ConcensusCommand::getNextAvailableSet(vector<string> bigset, vect
        
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "getNextAvailableSet");
+               m->errorOut(e, "ConcensusCommand", "getNextAvailableSet");
                exit(1);
        }
 }
@@ -373,7 +396,7 @@ int ConcensusCommand::getSubgroupRating(vector<string> group) {
                return rate;
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "getSubgroupRating");
+               m->errorOut(e, "ConcensusCommand", "getSubgroupRating");
                exit(1);
        }
 }
@@ -397,7 +420,7 @@ vector<string> ConcensusCommand::getRestSet(vector<string> bigset, vector<string
        
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "getRestSet");
+               m->errorOut(e, "ConcensusCommand", "getRestSet");
                exit(1);
        }
 }
@@ -424,7 +447,7 @@ bool ConcensusCommand::isSubset(vector<string> bigset, vector<string> subset) {
        
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "isSubset");
+               m->errorOut(e, "ConcensusCommand", "isSubset");
                exit(1);
        }
 }
@@ -442,7 +465,7 @@ int ConcensusCommand::findSpot(string node) {
        
        }
        catch(exception& e) {
-               errorOut(e, "ConcensusCommand", "findSpot");
+               m->errorOut(e, "ConcensusCommand", "findSpot");
                exit(1);
        }
 }