]> git.donarmstrong.com Git - mothur.git/blobdiff - unifracunweightedcommand.cpp
fixed get.lienage and remove.lineage bug with confidence scores that are floats....
[mothur.git] / unifracunweightedcommand.cpp
index b80a3abb4bb76bd0a5da3afa5548df0771797e45..5c0d5839c355e28c7a51e4a0433a840bd35a545f 100644 (file)
@@ -12,7 +12,7 @@
 //**********************************************************************************************************************
 vector<string> UnifracUnweightedCommand::getValidParameters(){ 
        try {
-               string Array[] =  {"groups","iters","distance","random", "processors","outputdir","inputdir"};
+               string Array[] =  {"groups","iters","distance","random","root", "processors","outputdir","inputdir"};
                vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
                return myArray;
        }
@@ -25,8 +25,7 @@ vector<string> UnifracUnweightedCommand::getValidParameters(){
 UnifracUnweightedCommand::UnifracUnweightedCommand(){  
        try {
                globaldata = GlobalData::getInstance();
-               abort = true;
-               //initialize outputTypes
+               abort = true; calledHelp = true; 
                vector<string> tempOutNames;
                outputTypes["unweighted"] = tempOutNames;
                outputTypes["uwsummary"] = tempOutNames;
@@ -66,15 +65,15 @@ vector<string> UnifracUnweightedCommand::getRequiredFiles(){
 UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
        try {
                globaldata = GlobalData::getInstance();
-               abort = false;
+               abort = false; calledHelp = false;   
                Groups.clear();
                        
                //allow user to run help
-               if(option == "help") { help(); abort = true; }
+               if(option == "help") { help(); abort = true; calledHelp = true; }
                
                else {
                        //valid paramters for this command
-                       string Array[] =  {"groups","iters","distance","random", "processors","outputdir","inputdir"};
+                       string Array[] =  {"groups","iters","distance","random","root", "processors","outputdir","inputdir"};
                        vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
                        
                        OptionParser parser(option);
@@ -125,6 +124,9 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                        temp = validParameter.validFile(parameters, "random", false);                                   if (temp == "not found") { temp = "f"; }
                        random = m->isTrue(temp);
                        
+                       temp = validParameter.validFile(parameters, "root", false);                                     if (temp == "not found") { temp = "F"; }
+                       includeRoot = m->isTrue(temp);
+                       
                        temp = validParameter.validFile(parameters, "processors", false);       if (temp == "not found"){       temp = "1";                             }
                        convert(temp, processors); 
                        
@@ -150,7 +152,7 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
                                
                                if (numGroups == 1) { numComp++; groupComb.push_back(allGroups); }
                                
-                               unweighted = new Unweighted(tmap);
+                               unweighted = new Unweighted(tmap, includeRoot);
                                
                        }
                        
@@ -168,11 +170,12 @@ UnifracUnweightedCommand::UnifracUnweightedCommand(string option)  {
 void UnifracUnweightedCommand::help(){
        try {
                m->mothurOut("The unifrac.unweighted command can only be executed after a successful read.tree command.\n");
-               m->mothurOut("The unifrac.unweighted command parameters are groups, iters, distance, processors and random.  No parameters are required.\n");
+               m->mothurOut("The unifrac.unweighted command parameters are groups, iters, distance, processors, root and random.  No parameters are required.\n");
                m->mothurOut("The groups parameter allows you to specify which of the groups in your groupfile you would like analyzed.  You must enter at least 1 valid group.\n");
                m->mothurOut("The group names are separated by dashes.  The iters parameter allows you to specify how many random trees you would like compared to your tree.\n");
                m->mothurOut("The distance parameter allows you to create a distance file from the results. The default is false. You may set distance to lt, square or column.\n");
                m->mothurOut("The random parameter allows you to shut off the comparison to random trees. The default is false, meaning compare don't your trees with randomly generated trees.\n");
+               m->mothurOut("The root parameter allows you to include the entire root in your calculations. The default is false, meaning stop at the root for this comparision instead of the root of the entire tree.\n");
                m->mothurOut("The processors parameter allows you to specify the number of processors to use. The default is 1.\n");
                m->mothurOut("The unifrac.unweighted command should be in the following format: unifrac.unweighted(groups=yourGroups, iters=yourIters).\n");
                m->mothurOut("Example unifrac.unweighted(groups=A-B-C, iters=500).\n");
@@ -191,7 +194,7 @@ void UnifracUnweightedCommand::help(){
 int UnifracUnweightedCommand::execute() {
        try {
                
-               if (abort == true) { return 0; }
+               if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
                
                int start = time(NULL);
                
@@ -199,6 +202,8 @@ int UnifracUnweightedCommand::execute() {
                randomData.resize(numComp,0); //data[0] = unweightedscore
                //create new tree with same num nodes and leaves as users
                
+               if (numComp < processors) { processors = numComp;  }
+               
                outSum << "Tree#" << '\t' << "Groups" << '\t'  <<  "UWScore" <<'\t' << "UWSig" <<  endl;
                m->mothurOut("Tree#\tGroups\tUWScore\tUWSig"); m->mothurOutEndLine();
                
@@ -260,7 +265,7 @@ int UnifracUnweightedCommand::execute() {
                                }
                                
                                //report progress
-                               m->mothurOut("Iter: " + toString(j+1)); m->mothurOutEndLine();  
+//                             m->mothurOut("Iter: " + toString(j+1)); m->mothurOutEndLine();  
                        }
        
                        for(int a = 0; a < numComp; a++) {
@@ -302,6 +307,19 @@ int UnifracUnweightedCommand::execute() {
                
                m->mothurOut("It took " + toString(time(NULL) - start) + " secs to run unifrac.unweighted."); m->mothurOutEndLine();
                
+               //set phylip file as new current phylipfile
+               string current = "";
+               itTypes = outputTypes.find("phylip");
+               if (itTypes != outputTypes.end()) {
+                       if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setPhylipFile(current); }
+               }
+               
+               //set column file as new current columnfile
+               itTypes = outputTypes.find("column");
+               if (itTypes != outputTypes.end()) {
+                       if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setColumnFile(current); }
+               }
+               
                m->mothurOutEndLine();
                m->mothurOut("Output File Names: "); m->mothurOutEndLine();
                for (int i = 0; i < outputNames.size(); i++) {  m->mothurOut(outputNames[i]); m->mothurOutEndLine();    }
@@ -406,7 +424,7 @@ void UnifracUnweightedCommand::createPhylipFile(int i) {
                //flip it so you can print it
                int count = 0;
                for (int r=0; r<globaldata->Groups.size(); r++) { 
-                       for (int l = r+1; l < globaldata->Groups.size(); l++) {
+                       for (int l = 0; l < r; l++) {
                                dists[r][l] = utreeScores[count][0];
                                dists[l][r] = utreeScores[count][0];
                                count++;
@@ -431,7 +449,7 @@ void UnifracUnweightedCommand::createPhylipFile(int i) {
                                out << name << '\t';
                                
                                //output distances
-                               for (int l = 0; l < globaldata->Groups.size(); l++) {   out  << dists[r][l] << '\t';  }
+                               for (int l = 0; l < globaldata->Groups.size(); l++) {   out << dists[r][l] << '\t';  }
                                out << endl;
                        }else{
                                //output distances