]> git.donarmstrong.com Git - mothur.git/blobdiff - summarysharedcommand.cpp
added name option to read.tree for use in unifrac and parimony commands
[mothur.git] / summarysharedcommand.cpp
index ef0485c61886e6f14ae3135f908bf8317855130f..081f5ef027dc04c30da1eba77647d67288bbfb44 100644 (file)
@@ -48,7 +48,7 @@ SummarySharedCommand::SummarySharedCommand(string option){
                
                else {
                        //valid paramters for this command
-                       string Array[] =  {"label","calc","groups"};
+                       string Array[] =  {"label","calc","groups","all","outputdir","inputdir"};
                        vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
                        
                        OptionParser parser(option);
@@ -66,6 +66,12 @@ SummarySharedCommand::SummarySharedCommand(string option){
                                 mothurOut("You must read a list and a group, or a shared before you can use the summary.shared command."); mothurOutEndLine(); abort = true; 
                        }
                        
+                       //if the user changes the output directory command factory will send this info to us in the output parameter 
+                       outputDir = validParameter.validFile(parameters, "outputdir", false);           if (outputDir == "not found"){  
+                               outputDir = ""; 
+                               outputDir += hasPath(globaldata->getSharedFile()); //if user entered a file with a path then preserve it        
+                       }
+
                        //check for optional parameter and set defaults
                        // ...at some point should added some additional type checking...
                        label = validParameter.validFile(parameters, "label", false);                   
@@ -95,6 +101,9 @@ SummarySharedCommand::SummarySharedCommand(string option){
                                globaldata->Groups = Groups;
                        }
                        
+                       string temp = validParameter.validFile(parameters, "all", false);                               if (temp == "not found") { temp = "false"; }
+                       all = isTrue(temp);
+                       
                        if (abort == false) {
                        
                                validCalculator = new ValidCalculators();
@@ -148,7 +157,7 @@ SummarySharedCommand::SummarySharedCommand(string option){
                                        }
                                }
                                
-                               outputFileName = ((getRootName(globaldata->inputFileName)) + "shared.summary");
+                               outputFileName = outputDir + getRootName(getSimpleName(globaldata->inputFileName)) + "shared.summary";
                                openOutputFile(outputFileName, outputFileHandle);
                                mult = false;
                        }
@@ -165,7 +174,7 @@ SummarySharedCommand::SummarySharedCommand(string option){
 void SummarySharedCommand::help(){
        try {
                mothurOut("The summary.shared command can only be executed after a successful read.otu command.\n");
-               mothurOut("The summary.shared command parameters are label and calc.  No parameters are required.\n");
+               mothurOut("The summary.shared command parameters are label, calc and all.  No parameters are required.\n");
                mothurOut("The summary.shared command should be in the following format: \n");
                mothurOut("summary.shared(label=yourLabel, calc=yourEstimators, groups=yourGroups).\n");
                mothurOut("Example summary.shared(label=unique-.01-.03, groups=B-C, calc=sharedchao-sharedace-jabund-sorensonabund-jclass-sorclass-jest-sorest-thetayc-thetan).\n");
@@ -173,6 +182,8 @@ void SummarySharedCommand::help(){
                mothurOut("The default value for calc is sharedsobs-sharedchao-sharedace-jabund-sorensonabund-jclass-sorclass-jest-sorest-thetayc-thetan\n");
                mothurOut("The default value for groups is all the groups in your groupfile.\n");
                mothurOut("The label parameter is used to analyze specific labels in your input.\n");
+               mothurOut("The all parameter is used to specify if you want the estimate of all your groups together.  This estimate can only be made for sharedsobs and sharedchao calculators. The default is false.\n");
+               mothurOut("If you use sharedchao and run into memory issues, set all to false. \n");
                mothurOut("The groups parameter allows you to specify which of the groups in your groupfile you would like analyzed.  You must enter at least 2 valid groups.\n");
                mothurOut("Note: No spaces between parameter labels (i.e. label), '=' and parameters (i.e.yourLabel).\n\n");
        }
@@ -202,8 +213,10 @@ int SummarySharedCommand::execute(){
                if (sumCalculators.size() == 0) { return 0; }
                //check if any calcs can do multiples
                else{
-                       for (int i = 0; i < sumCalculators.size(); i++) {
-                               if (sumCalculators[i]->getMultiple() == true) { mult = true; }
+                       if (all){ 
+                               for (int i = 0; i < sumCalculators.size(); i++) {
+                                       if (sumCalculators[i]->getMultiple() == true) { mult = true; }
+                               }
                        }
                }
                
@@ -267,6 +280,8 @@ int SummarySharedCommand::execute(){
                        }
                        
                        if ((anyLabelsToProcess(lookup[0]->getLabel(), userLabels, "") == true) && (processedLabels.count(lastLabel) != 1)) {
+                                       string saveLabel = lookup[0]->getLabel();
+                                       
                                        for (int i = 0; i < lookup.size(); i++) {  delete lookup[i];  } 
                                        lookup = input->getSharedRAbundVectors(lastLabel);
 
@@ -275,9 +290,10 @@ int SummarySharedCommand::execute(){
                                        
                                        processedLabels.insert(lookup[0]->getLabel());
                                        userLabels.erase(lookup[0]->getLabel());
+                                       
+                                       //restore real lastlabel to save below
+                                       lookup[0]->setLabel(saveLabel);
                        }
-
-               
                        
                        lastLabel = lookup[0]->getLabel();