]> git.donarmstrong.com Git - mothur.git/blobdiff - pipelinepdscommand.cpp
done testing 1.14.0
[mothur.git] / pipelinepdscommand.cpp
index a747aa752389ccb3dd0339c0b33df5d1c8bd37ef..a174cce11a3b4c928c3b08a817d534ad149822bb 100644 (file)
@@ -238,6 +238,8 @@ int PipelineCommand::execute(){
        try {
                if (abort == true) { return 0; }
                
+               int start = time(NULL);
+               
                if (pipeFilename == "") { 
                        createPatsPipeline(); 
                        
@@ -279,6 +281,8 @@ int PipelineCommand::execute(){
                
                if (m->control_pressed) { return 0; }
                
+               m->mothurOut("It took " + toString(time(NULL) - start) + " secs to run the pipeline analysis."); m->mothurOutEndLine(); m->mothurOutEndLine();
+               
                m->mothurOutEndLine();
                m->mothurOut("Output File Names: "); m->mothurOutEndLine();
                for (int i = 0; i < outputNames.size(); i++) {  m->mothurOut(outputNames[i]); m->mothurOutEndLine();    }
@@ -351,10 +355,14 @@ bool PipelineCommand::parseCommand(string nextCommand, string& name, string& opt
 
 bool PipelineCommand::checkForValidAndRequiredParameters(string name, string options, map<string, vector<string> >& mothurMadeFiles){
        try {
+                               
+               if (name == "system") { return false; }
+               
+               if (name == "system") { return false; }
                
                //get shell of the command so we can check to make sure its valid without running it
                Command* command = cFactory->getCommand(name);
-               
+                       
                //check to make sure all parameters are valid for command
                vector<string> validParameters = command->getValidParameters();
                
@@ -366,17 +374,21 @@ bool PipelineCommand::checkForValidAndRequiredParameters(string name, string opt
                map<string, vector<string> >::iterator itMade;
                        
                for (it = parameters.begin(); it != parameters.end(); it++) { 
+                       
                        if (validParameter.isValidParameter(it->first, validParameters, it->second) != true) {  return true;  } // not valid
                        if (it->second == "mothurmade") {
                                itMade = mothurMadeFiles.find(it->first);
                                
                                if (itMade == mothurMadeFiles.end()) {  
-                                       m->mothurOut("You have the " + it->first + " listed as a mothurmade file for the " + name + " command, but it seems mothur will not make that file in your current pipeline, please correct."); m->mothurOutEndLine();
-                                       return true;
+                                       if ((name == "align.seqs") && (it->first == "candidate")) {} //do nothing about candidate
+                                       else {
+                                               m->mothurOut("You have the " + it->first + " listed as a mothurmade file for the " + name + " command, but it seems mothur will not make that file in your current pipeline, please correct."); m->mothurOutEndLine();
+                                               return true;
+                                       }
                                }
                        }
                }
-               
+                       
                //is the command missing any required
                vector<string> requiredParameters = command->getRequiredParameters();
                
@@ -395,7 +407,7 @@ bool PipelineCommand::checkForValidAndRequiredParameters(string name, string opt
                                if (!hasOr) { m->mothurOut(name + " requires the " + requiredParameters[i] + " parameter, please correct."); m->mothurOutEndLine(); }
                        }
                }
-               
+                       
                // if all are needed and not all are found
                if ((!hasOr) && (numFound != requiredParameters.size())) { return true; }
                //if one is needed and none are found
@@ -406,7 +418,7 @@ bool PipelineCommand::checkForValidAndRequiredParameters(string name, string opt
                for (itMade = thisCommandsFile.begin(); itMade != thisCommandsFile.end(); itMade++) { 
                        mothurMadeFiles[itMade->first] = itMade->second; //adds any new types
                }
-               
+                       
                return false;
        }
        catch(exception& e) {
@@ -431,8 +443,8 @@ int PipelineCommand::runUsersPipeline(){
                                CommandOptionParser parser(nextCommand);
                                string commandName = parser.getCommandString();
                                string options = parser.getOptionString();
-                               
-                               if (options != "") {
+                                       
+                               if ((options != "") && (commandName != "system")) {
                                        bool error = fillInMothurMade(options, mothurMadeFiles);
                                        if (error) { in.close(); return 0; }
                                }
@@ -521,8 +533,9 @@ int PipelineCommand::runUsersPipeline(){
        }
 }
 //**********************************************************************************************************************
-bool PipelineCommand::fillInMothurMade(string& options, map<string, vector<string> > mothurMadeFiles){
+bool PipelineCommand::fillInMothurMade(string& options, map<string, vector<string> >& mothurMadeFiles){
        try {
+               
                OptionParser parser(options);
                map<string, string> parameters = parser.getParameters(); 
                map<string, string>::iterator it;
@@ -532,21 +545,28 @@ bool PipelineCommand::fillInMothurMade(string& options, map<string, vector<strin
                
                //fill in mothurmade filenames
                for (it = parameters.begin(); it != parameters.end(); it++) { 
-                       if (it->second == "mothurmade") {
-                               itMade = mothurMadeFiles.find(it->first);
+                       string paraType = it->first;
+                       string tempOption = it->second;
+                       
+                       if (tempOption == "mothurmade") {
+                               
+                               if (it->first == "candidate") { paraType = "fasta"; }
+                       
+                               itMade = mothurMadeFiles.find(paraType);
                                
                                if (itMade == mothurMadeFiles.end()) { 
-                                       m->mothurOut("Looking for a mothurmade " + it->first + " file, but it seems mothur has not made that file type in your current pipeline, please correct."); m->mothurOutEndLine();
+                                       m->mothurOut("Looking for a mothurmade " + paraType + " file, but it seems mothur has not made that file type in your current pipeline, please correct."); m->mothurOutEndLine();
                                        return true;
                                }else{
                                        vector<string> temp = itMade->second;
                                        
                                        if (temp.size() > 1) {
                                                //ask user which file to use
-                                               m->mothurOut("More than one file has been created for the " + it->first + " parameter. "); m->mothurOutEndLine();
+                                               m->mothurOut("More than one file has been created for the " + paraType + " parameter. "); m->mothurOutEndLine();
                                                for (int i = 0; i < temp.size(); i++) {
                                                        m->mothurOut(toString(i) + " - " + temp[i]); m->mothurOutEndLine();
                                                }
+                                               
                                                m->mothurOut("Please select the number of the file you would like to use: ");
                                                int num = 0;
                                                cin >> num;
@@ -554,23 +574,43 @@ bool PipelineCommand::fillInMothurMade(string& options, map<string, vector<strin
                                                
                                                if ((num < 0) || (num > (temp.size()-1))) { m->mothurOut("Not a valid response, quitting."); m->mothurOutEndLine(); return true; }
                                                else {
-                                                       parameters[it->first] = temp[num];
+                                                       tempOption = temp[num];
                                                }
                                
                                                //clears buffer so next command doesn't have error
                                                string s;       
                                                getline(cin, s);
                                                
+                                               vector<string> newTemp;
+                                               for (int i = 0; i < temp.size(); i++) {
+                                                       if (i == num) { newTemp.push_back(temp[i]); }
+                                                       else {
+                                                               m->mothurOut("Would you like to remove " + temp[i] + " as an option for " + paraType + ", (y/n): "); m->mothurOutEndLine();
+                                                               string response;
+                                                               cin >> response;
+                                                               m->mothurOutJustToLog(response); m->mothurOutEndLine();
+                                                       
+                                                               if (response == "n") {  newTemp.push_back(temp[i]); }
+                                                       
+                                                               //clears buffer so next command doesn't have error
+                                                               string s;       
+                                                               getline(cin, s);
+                                                       }
+                                               }
+                                               
+                                               mothurMadeFiles[paraType] = newTemp;
+                                               
+                                               
                                        }else if (temp.size() == 0){
-                                               m->mothurOut("Sorry, we seem to think you created a " + it->first + " file, but it seems mothur doesn't have a filename."); m->mothurOutEndLine();
+                                               m->mothurOut("Sorry, we seem to think you created a " + paraType + " file, but it seems mothur doesn't have a filename."); m->mothurOutEndLine();
                                                return true;
                                        }else{
-                                               parameters[it->first] = temp[0];
+                                               tempOption = temp[0];
                                        }
                                }
                        }
                        
-                       options += it->first + "=" + parameters[it->first] + ", ";
+                       options += it->first + "=" + tempOption + ", ";
                }
                
                //rip off extra comma