]> git.donarmstrong.com Git - mothur.git/blobdiff - phylosummary.cpp
changed random forest output filename
[mothur.git] / phylosummary.cpp
index ab6bb831dfae73bb56c75eb8b144963701dc02be..a9d501e2190a9f68ed79edc8586b4dba2cb03342 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include "phylosummary.h"
+#include "referencedb.h"
 /**************************************************************************************************/
 
 PhyloSummary::PhyloSummary(string refTfile, CountTable* c){
@@ -21,6 +22,7 @@ PhyloSummary::PhyloSummary(string refTfile, CountTable* c){
         groupmap = NULL;
         
                //check for necessary files
+        if (refTfile == "saved") { ReferenceDB* rdb = ReferenceDB::getInstance(); refTfile = rdb->getSavedTaxonomy(); }
                string taxFileNameTest = m->getFullPathName((refTfile.substr(0,refTfile.find_last_of(".")+1) + "tree.sum"));
                ifstream FileTest(taxFileNameTest.c_str());
                
@@ -72,6 +74,7 @@ PhyloSummary::PhyloSummary(string refTfile, GroupMap* g){
         ct = NULL;
                                
                //check for necessary files
+        if (refTfile == "saved") { ReferenceDB* rdb = ReferenceDB::getInstance(); refTfile = rdb->getSavedTaxonomy(); }
                string taxFileNameTest = m->getFullPathName((refTfile.substr(0,refTfile.find_last_of(".")+1) + "tree.sum"));
                ifstream FileTest(taxFileNameTest.c_str());
                
@@ -451,7 +454,61 @@ void PhyloSummary::print(ofstream& out){
                exit(1);
        }
 }
+/**************************************************************************************************/
 
+void PhyloSummary::print(ofstream& out, bool relabund){
+       try {
+               
+               if (ignore) { assignRank(0); }
+       
+               int totalChildrenInTree = 0;
+               map<string, int>::iterator itGroup;
+               
+               map<string,int>::iterator it;
+               for(it=tree[0].children.begin();it!=tree[0].children.end();it++){
+                       if (tree[it->second].total != 0)  {
+                               totalChildrenInTree++;
+                               tree[0].total += tree[it->second].total;
+                               
+                               if (groupmap != NULL) {
+                    vector<string> mGroups = groupmap->getNamesOfGroups();
+                                       for (int i = 0; i < mGroups.size(); i++) { tree[0].groupCount[mGroups[i]] += tree[it->second].groupCount[mGroups[i]]; }
+                               }else if ( ct != NULL) {
+                    vector<string> mGroups = ct->getNamesOfGroups();
+                    if (ct->hasGroupInfo()) { for (int i = 0; i < mGroups.size(); i++) { tree[0].groupCount[mGroups[i]] += tree[it->second].groupCount[mGroups[i]]; } }
+                }
+                       }
+               }
+               
+               //print root
+               out << tree[0].name << "\t" << "1.0000" << "\t"; //root relative abundance is 1, everyone classifies to root
+               
+               /*
+               if (groupmap != NULL) {
+                       for (int i = 0; i < mGroups.size(); i++) {  out << tree[0].groupCount[mGroups[i]] << '\t'; }
+        }else if ( ct != NULL) {
+            if (ct->hasGroupInfo()) { for (int i = 0; i < mGroups.size(); i++) {  out << tree[0].groupCount[mGroups[i]] << '\t'; } }
+        }*/
+        
+        if (groupmap != NULL) {
+            vector<string> mGroups = groupmap->getNamesOfGroups();
+                       for (int i = 0; i < mGroups.size(); i++) {  out << "1.0000" << '\t'; }
+        }else if ( ct != NULL) {
+            vector<string> mGroups = ct->getNamesOfGroups();
+            if (ct->hasGroupInfo()) { for (int i = 0; i < mGroups.size(); i++) {  out << "1.0000" << '\t'; } }
+        }
+        
+               out << endl;
+               
+               //print rest
+               print(0, out, relabund);
+               
+       }
+       catch(exception& e) {
+               m->errorOut(e, "PhyloSummary", "print");
+               exit(1);
+       }
+}
 /**************************************************************************************************/
 
 void PhyloSummary::print(int i, ofstream& out){
@@ -460,14 +517,14 @@ void PhyloSummary::print(int i, ofstream& out){
                for(it=tree[i].children.begin();it!=tree[i].children.end();it++){
                        
                        if (tree[it->second].total != 0)  {
-                       
+                
                                int totalChildrenInTree = 0;
-               
+                
                                map<string,int>::iterator it2;
-                               for(it2=tree[it->second].children.begin();it2!=tree[it->second].children.end();it2++){   
+                               for(it2=tree[it->second].children.begin();it2!=tree[it->second].children.end();it2++){
                                        if (tree[it2->second].total != 0)  {   totalChildrenInTree++; }
                                }
-                       
+                
                                out << tree[it->second].level << "\t" << tree[it->second].rank << "\t" << tree[it->second].name << "\t" << totalChildrenInTree << "\t" << tree[it->second].total << "\t";
                                
                                map<string, int>::iterator itGroup;
@@ -476,11 +533,11 @@ void PhyloSummary::print(int i, ofstream& out){
                                        //      out << itGroup->second << '\t';
                                        //}
                                        vector<string> mGroups = groupmap->getNamesOfGroups();
-                                       for (int i = 0; i < mGroups.size(); i++) {  out << tree[it->second].groupCount[mGroups[i]] << '\t'; } 
+                                       for (int i = 0; i < mGroups.size(); i++) {  out << tree[it->second].groupCount[mGroups[i]] << '\t'; }
                                }else if (ct != NULL) {
                     if (ct->hasGroupInfo()) {
                         vector<string> mGroups = ct->getNamesOfGroups();
-                        for (int i = 0; i < mGroups.size(); i++) {  out << tree[it->second].groupCount[mGroups[i]] << '\t'; } 
+                        for (int i = 0; i < mGroups.size(); i++) {  out << tree[it->second].groupCount[mGroups[i]] << '\t'; }
                     }
                 }
                                out << endl;
@@ -495,6 +552,64 @@ void PhyloSummary::print(int i, ofstream& out){
                exit(1);
        }
 }
+
+/**************************************************************************************************/
+
+void PhyloSummary::print(int i, ofstream& out, bool relabund){
+       try {
+               map<string,int>::iterator it;
+               for(it=tree[i].children.begin();it!=tree[i].children.end();it++){
+                       
+                       if (tree[it->second].total != 0)  {
+                       
+                               int totalChildrenInTree = 0;
+               
+                               map<string,int>::iterator it2;
+                               for(it2=tree[it->second].children.begin();it2!=tree[it->second].children.end();it2++){   
+                                       if (tree[it2->second].total != 0)  {   totalChildrenInTree++; }
+                               }
+                
+                string nodeName = "";
+                int thisNode = it->second;
+                while (tree[thisNode].rank != "0") { //while you are not at top
+                    if (m->control_pressed) { break; }
+                    nodeName = tree[thisNode].name + "|" + nodeName;
+                    thisNode = tree[thisNode].parent;
+                }
+                if (nodeName != "") { nodeName = nodeName.substr(0, nodeName.length()-1); }
+                
+                               out << nodeName << "\t" << (tree[it->second].total / (float)tree[i].total) << "\t";
+                               
+                               map<string, int>::iterator itGroup;
+                               if (groupmap != NULL) {
+                                       vector<string> mGroups = groupmap->getNamesOfGroups();
+                                       for (int j = 0; j < mGroups.size(); j++) {
+                        if (tree[i].groupCount[mGroups[j]] == 0) {
+                            out << 0 << '\t';
+                        }else { out << (tree[it->second].groupCount[mGroups[j]] / (float)tree[i].groupCount[mGroups[j]]) << '\t'; }
+                    }
+                               }else if (ct != NULL) {
+                    if (ct->hasGroupInfo()) {
+                        vector<string> mGroups = ct->getNamesOfGroups();
+                        for (int j = 0; j < mGroups.size(); j++) {
+                            if (tree[i].groupCount[mGroups[j]] == 0) {
+                                out << 0 << '\t';
+                            }else { out << (tree[it->second].groupCount[mGroups[j]] / (float)tree[i].groupCount[mGroups[j]]) << '\t'; }
+                        }
+                    }
+                }
+                               out << endl;
+                               
+                       }
+                       
+                       print(it->second, out, relabund);
+               }
+       }
+       catch(exception& e) {
+               m->errorOut(e, "PhyloSummary", "print");
+               exit(1);
+       }
+}
 /**************************************************************************************************/
 void PhyloSummary::readTreeStruct(ifstream& in){
        try {