]> git.donarmstrong.com Git - mothur.git/blobdiff - parsimonycommand.cpp
worked on trim.seqs - added in the groupfiles for allfiles=t, cleaned up the outputNa...
[mothur.git] / parsimonycommand.cpp
index b879395b528b845805c622acd107e637e3af74f8..c0de504f32f379651d15fc95767821ec9abd56c7 100644 (file)
@@ -12,7 +12,7 @@
 //**********************************************************************************************************************
 vector<string> ParsimonyCommand::getValidParameters(){ 
        try {
-               string Array[] =  {"random","groups","iters","outputdir","inputdir"};
+               string Array[] =  {"random","groups","iters","processors","outputdir","inputdir"};
                vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
                return myArray;
        }
@@ -24,7 +24,7 @@ vector<string> ParsimonyCommand::getValidParameters(){
 //**********************************************************************************************************************
 ParsimonyCommand::ParsimonyCommand(){  
        try {
-               //initialize outputTypes
+               abort = true; calledHelp = true; 
                vector<string> tempOutNames;
                outputTypes["parsimony"] = tempOutNames;
                outputTypes["psummary"] = tempOutNames;
@@ -60,15 +60,15 @@ vector<string> ParsimonyCommand::getRequiredFiles(){
 ParsimonyCommand::ParsimonyCommand(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[] =  {"random","groups","iters","outputdir","inputdir"};
+                       string Array[] =  {"random","groups","processors","iters","outputdir","inputdir"};
                        vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
                        
                        OptionParser parser(option);
@@ -95,7 +95,7 @@ ParsimonyCommand::ParsimonyCommand(string option)  {
                        }
                        
                        //if the user changes the output directory command factory will send this info to us in the output parameter 
-                       string outputDir = validParameter.validFile(parameters, "outputdir", false);            if (outputDir == "not found"){  outputDir = ""; }
+                       string outputDir = validParameter.validFile(parameters, "outputdir", false);            if (outputDir == "not found"){  outputDir = ""; if (randomtree == "")  { outputDir += m->hasPath(globaldata->inputFileName); } }
                        
                        //check for optional parameter and set defaults
                        // ...at some point should added some additional type checking...
@@ -108,6 +108,9 @@ ParsimonyCommand::ParsimonyCommand(string option)  {
                                
                        itersString = validParameter.validFile(parameters, "iters", false);                     if (itersString == "not found") { itersString = "1000"; }
                        convert(itersString, iters); 
+                       
+                       string temp = validParameter.validFile(parameters, "processors", false);        if (temp == "not found"){       temp = "1";                             }
+                       convert(temp, processors); 
                                                
                        if (abort == false) {
                                //randomtree will tell us if user had their own treefile or if they just want the random distribution
@@ -161,10 +164,11 @@ ParsimonyCommand::ParsimonyCommand(string option)  {
 void ParsimonyCommand::help(){
        try {
                m->mothurOut("The parsimony command can only be executed after a successful read.tree command, unless you use the random parameter.\n");
-               m->mothurOut("The parsimony command parameters are random, groups and iters.  No parameters are required.\n");
+               m->mothurOut("The parsimony command parameters are random, groups, processors and iters.  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 parsimony command should be in the following format: parsimony(random=yourOutputFilename, groups=yourGroups, iters=yourIters).\n");
+               m->mothurOut("The processors parameter allows you to specify the number of processors to use. The default is 1.\n");
                m->mothurOut("Example parsimony(random=out, iters=500).\n");
                m->mothurOut("The default value for random is "" (meaning you want to use the trees in your inputfile, randomtree=out means you just want the random distribution of trees outputted to out.rd_parsimony),\n");
                m->mothurOut("and iters is 1000.  The parsimony command output two files: .parsimony and .psummary their descriptions are in the manual.\n");
@@ -181,7 +185,7 @@ void ParsimonyCommand::help(){
 int ParsimonyCommand::execute() {
        try {
        
-               if (abort == true) { return 0; }
+               if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
        
                Progress* reading;
                reading = new Progress("Comparing to random:", iters);
@@ -208,7 +212,7 @@ int ParsimonyCommand::execute() {
                if (randomtree == "") {
                        //get pscores for users trees
                        for (int i = 0; i < T.size(); i++) {
-                               userData = pars->getValues(T[i]);  //data = AB, AC, BC, ABC.
+                               userData = pars->getValues(T[i], processors, outputDir);  //data = AB, AC, BC, ABC.
                                
                                if (m->control_pressed) { 
                                        delete reading; delete pars; delete util; delete output;
@@ -246,7 +250,7 @@ int ParsimonyCommand::execute() {
                                randT->assembleRandomTree();
 
                                //get pscore of random tree
-                               randomData = pars->getValues(randT);
+                               randomData = pars->getValues(randT, processors, outputDir);
                                
                                if (m->control_pressed) { 
                                        delete reading; delete pars; delete util; delete output; delete randT;
@@ -295,7 +299,7 @@ int ParsimonyCommand::execute() {
 
 
                                //get pscore of random tree
-                               randomData = pars->getValues(randT);
+                               randomData = pars->getValues(randT, processors, outputDir);
                                
                                if (m->control_pressed) { 
                                        delete reading; delete pars; delete util; delete output; delete randT;