X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=catchallcommand.cpp;h=857f68431c54b8a0076577ae74b70ecfba6e9773;hb=2bb9267aa4b4ecdf8488b06605cc9f3f36fa4332;hp=ace1b00dc0b45e9500d6ba9aa8657fc44b854042;hpb=264c8a3c759d9a999c485236e98dac98d4f0db5f;p=mothur.git diff --git a/catchallcommand.cpp b/catchallcommand.cpp index ace1b00..857f684 100644 --- a/catchallcommand.cpp +++ b/catchallcommand.cpp @@ -8,71 +8,74 @@ */ #include "catchallcommand.h" -#include "globaldata.hpp" //********************************************************************************************************************** -vector CatchAllCommand::getValidParameters(){ +vector CatchAllCommand::setParameters(){ try { - string AlignArray[] = {"sabund","shared","label","inputdir","outputdir"}; - vector myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string))); + CommandParameter plabel("label", "String", "", "", "", "", "",false,false); parameters.push_back(plabel); + //can choose shared or sabund not both, so put them in the same chooseOnlyOneGroup + CommandParameter pshared("shared", "InputTypes", "", "", "catchallInputs", "catchallInputs", "none",false,false); parameters.push_back(pshared); + CommandParameter psabund("sabund", "InputTypes", "", "", "catchallInputs", "catchallInputs", "none",false,false); parameters.push_back(psabund); + CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir); + CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir); + + vector myArray; + for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } return myArray; } catch(exception& e) { - m->errorOut(e, "CatchAllCommand", "getValidParameters"); + m->errorOut(e, "CatchAllCommand", "setParameters"); exit(1); } } //********************************************************************************************************************** -CatchAllCommand::CatchAllCommand(){ +string CatchAllCommand::getHelpString(){ try { - abort = true; calledHelp = true; - //initialize outputTypes - vector tempOutNames; - outputTypes["csv"] = tempOutNames; - outputTypes["summary"] = tempOutNames; + string helpString = ""; + helpString += "The catchall command interfaces mothur with the catchall program written by Linda Woodard, Sean Connolly and John Bunge.\n"; + helpString += "For more information about catchall refer to http://www.northeastern.edu/catchall/index.html \n"; + helpString += "The catchall executable must be in the same folder as your mothur executable. \n"; + helpString += "If you are a MAC or Linux user you must also have installed mono, a link to mono is on the webpage. \n"; + helpString += "The catchall command parameters are shared, sabund and label. shared or sabund is required. \n"; + helpString += "The label parameter is used to analyze specific labels in your input.\n"; + helpString += "The catchall command should be in the following format: \n"; + helpString += "catchall(sabund=yourSabundFile) \n"; + helpString += "Example: catchall(sabund=abrecovery.fn.sabund) \n"; + return helpString; } catch(exception& e) { - m->errorOut(e, "CatchAllCommand", "CatchAllCommand"); + m->errorOut(e, "CatchAllCommand", "getHelpString"); exit(1); } } //********************************************************************************************************************** -vector CatchAllCommand::getRequiredParameters(){ - try { - string AlignArray[] = {"sabund","shared","or"}; - vector myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string))); - return myArray; - } - catch(exception& e) { - m->errorOut(e, "CatchAllCommand", "getRequiredParameters"); - exit(1); - } -} -//********************************************************************************************************************** -vector CatchAllCommand::getRequiredFiles(){ +CatchAllCommand::CatchAllCommand(){ try { - vector myArray; - return myArray; + abort = true; calledHelp = true; + setParameters(); + //initialize outputTypes + vector tempOutNames; + outputTypes["csv"] = tempOutNames; + outputTypes["summary"] = tempOutNames; } catch(exception& e) { - m->errorOut(e, "CatchAllCommand", "getRequiredFiles"); + m->errorOut(e, "CatchAllCommand", "CatchAllCommand"); exit(1); } } /**************************************************************************************/ CatchAllCommand::CatchAllCommand(string option) { try { - globaldata = GlobalData::getInstance(); + abort = false; calledHelp = false; allLines = 1; //allow user to run help if(option == "help") { help(); abort = true; calledHelp = true; } + else if(option == "citation") { citation(); abort = true; calledHelp = true;} else { - //valid paramters for this command - string Array[] = {"shared","sabund","label","inputdir","outputdir"}; - vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + vector myArray = setParameters(); OptionParser parser(option); map parameters = parser.getParameters(); @@ -116,16 +119,12 @@ CatchAllCommand::CatchAllCommand(string option) { sabundfile = validParameter.validFile(parameters, "sabund", true); if (sabundfile == "not open") { sabundfile = ""; abort = true; } else if (sabundfile == "not found") { sabundfile = ""; } - else { globaldata->setSabundFile(sabundfile); globaldata->setFormat("sabund"); } + else { m->setSabundFile(sabundfile); } sharedfile = validParameter.validFile(parameters, "shared", true); if (sharedfile == "not open") { sharedfile = ""; abort = true; } else if (sharedfile == "not found") { sharedfile = ""; } - - //check for shared file loaded during read.otu - if (sharedfile == "") { - if (globaldata->getSharedFile() != "") { sharedfile = globaldata->getSharedFile(); } - } + else { m->setSharedFile(sharedfile); } string label = validParameter.validFile(parameters, "label", false); if (label == "not found") { label = ""; } @@ -134,8 +133,22 @@ CatchAllCommand::CatchAllCommand(string option) { else { allLines = 1; } } - if ((sharedfile == "") && (sabundfile == "")) { m->mothurOut("You must provide a sabund or shared file for the catchall command."); m->mothurOutEndLine(); abort=true; } - + if ((sharedfile == "") && (sabundfile == "")) { + //is there are current file available for either of these? + //give priority to shared, then sabund + //if there is a current shared file, use it + sharedfile = m->getSharedFile(); + if (sharedfile != "") { m->mothurOut("Using " + sharedfile + " as input file for the shared parameter."); m->mothurOutEndLine(); } + else { + sabundfile = m->getSabundFile(); + if (sabundfile != "") { m->mothurOut("Using " + sabundfile + " as input file for the sabund parameter."); m->mothurOutEndLine(); } + else { + m->mothurOut("No valid current files. You must provide a sabund or shared file before you can use the catchall command."); m->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"){ @@ -150,26 +163,6 @@ CatchAllCommand::CatchAllCommand(string option) { exit(1); } } -//********************************************************************************************************************** - -void CatchAllCommand::help(){ - try { - m->mothurOut("The catchall command interfaces mothur with the catchall program written by Linda Woodard, Sean Connolly and John Bunge.\n"); - m->mothurOut("For more information about catchall refer to http://www.northeastern.edu/catchall/index.html \n"); - m->mothurOut("The catchall executable must be in the same folder as your mothur executable. \n"); - m->mothurOut("If you are a MAC or Linux user you must also have installed mono, a link to mono is on the webpage. \n"); - m->mothurOut("The catchall command parameters are shared, sabund and label. shared or sabund is required. \n"); - m->mothurOut("The label parameter is used to analyze specific labels in your input.\n"); - m->mothurOut("The catchall command should be in the following format: \n"); - m->mothurOut("catchall(sabund=yourSabundFile) \n"); - m->mothurOut("Example: catchall(sabund=abrecovery.fn.sabund) \n"); - } - catch(exception& e) { - m->errorOut(e, "CatchAllCommand", "help"); - exit(1); - } -} - /**************************************************************************************/ int CatchAllCommand::execute() { try { @@ -177,8 +170,7 @@ int CatchAllCommand::execute() { if (abort == true) { if (calledHelp) { return 0; } return 2; } //get location of catchall - GlobalData* globaldata = GlobalData::getInstance(); - path = globaldata->argv; + path = m->argv; path = path.substr(0, (path.find_last_of("othur")-5)); path = m->getFullPathName(path); @@ -196,7 +188,7 @@ int CatchAllCommand::execute() { outputDir = m->getFullPathName(outputDir); vector inputFileNames; - if (sharedfile != "") { inputFileNames = parseSharedFile(sharedfile); globaldata->setFormat("sabund"); } + if (sharedfile != "") { inputFileNames = parseSharedFile(sharedfile); } else { inputFileNames.push_back(sabundfile); } for (int p = 0; p < inputFileNames.size(); p++) { @@ -221,7 +213,7 @@ int CatchAllCommand::execute() { //for each label the user selected while((sabund != NULL) && ((allLines == 1) || (userLabels.size() != 0))) { - + if(allLines == 1 || labels.count(sabund->getLabel()) == 1){ m->mothurOut(sabund->getLabel()); m->mothurOutEndLine(); @@ -229,7 +221,7 @@ int CatchAllCommand::execute() { //create catchall input file from mothur's inputfile string filename = process(sabund, inputFileNames[p]); string outputPath = m->getPathName(filename); - + //create system command string catchAllCommand = ""; #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) @@ -244,7 +236,7 @@ int CatchAllCommand::execute() { //run catchall system(catchAllCommand.c_str()); - remove(filename.c_str()); + m->mothurRemove(filename); filename = m->getRootName(filename); filename = filename.substr(0, filename.length()-1); //rip off extra . if (savedOutputDir == "") { filename = m->getSimpleName(filename); } @@ -256,7 +248,7 @@ int CatchAllCommand::execute() { createSummaryFile(filename + "_BestModelsAnalysis.csv", sabund->getLabel(), out); - if (m->control_pressed) { out.close(); for (int i = 0; i < outputNames.size(); i++) {remove(outputNames[i].c_str()); } delete input; delete sabund; return 0; } + if (m->control_pressed) { out.close(); for (int i = 0; i < outputNames.size(); i++) {m->mothurRemove(outputNames[i]); } delete input; delete sabund; return 0; } processedLabels.insert(sabund->getLabel()); userLabels.erase(sabund->getLabel()); @@ -274,7 +266,7 @@ int CatchAllCommand::execute() { //create catchall input file from mothur's inputfile string filename = process(sabund, inputFileNames[p]); string outputPath = m->getPathName(filename); - + //create system command string catchAllCommand = ""; #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) @@ -288,7 +280,7 @@ int CatchAllCommand::execute() { //run catchall system(catchAllCommand.c_str()); - remove(filename.c_str()); + m->mothurRemove(filename); filename = m->getRootName(filename); filename = filename.substr(0, filename.length()-1); //rip off extra . if (savedOutputDir == "") { filename = m->getSimpleName(filename); } @@ -300,7 +292,7 @@ int CatchAllCommand::execute() { createSummaryFile(filename + "_BestModelsAnalysis.csv", sabund->getLabel(), out); - if (m->control_pressed) { out.close(); for (int i = 0; i < outputNames.size(); i++) {remove(outputNames[i].c_str()); } delete input; delete sabund; return 0; } + if (m->control_pressed) { out.close(); for (int i = 0; i < outputNames.size(); i++) {m->mothurRemove(outputNames[i]); } delete input; delete sabund; return 0; } processedLabels.insert(sabund->getLabel()); userLabels.erase(sabund->getLabel()); @@ -353,7 +345,7 @@ int CatchAllCommand::execute() { //run catchall system(catchAllCommand.c_str()); - remove(filename.c_str()); + m->mothurRemove(filename); filename = m->getRootName(filename); filename = filename.substr(0, filename.length()-1); //rip off extra . if (savedOutputDir == "") { filename = m->getSimpleName(filename); } @@ -371,7 +363,7 @@ int CatchAllCommand::execute() { out.close(); delete input; - if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) {remove(outputNames[i].c_str()); } return 0; } + if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) {m->mothurRemove(outputNames[i]); } return 0; } } @@ -386,8 +378,6 @@ int CatchAllCommand::execute() { } string summaryfilename = combineSummmary(sumNames); outputNames.push_back(summaryfilename); outputTypes["summary"].push_back(summaryfilename); - - globaldata->setSharedFile(sharedfile); globaldata->setFormat("sharedfile"); } m->mothurOutEndLine(); @@ -481,7 +471,7 @@ string CatchAllCommand::combineSummmary(vector& outputNames) { numLines = thisFilesLines.size(); temp.close(); - remove(outputNames[i].c_str()); + m->mothurRemove(outputNames[i]); } //for each label @@ -589,7 +579,7 @@ vector CatchAllCommand::parseSharedFile(string filename) { //clears file before we start to write to it below for (int i=0; igetGroup() + ".sabund").c_str()); + m->mothurRemove((sharedFileRoot + lookup[i]->getGroup() + ".sabund")); filenames.push_back((sharedFileRoot + lookup[i]->getGroup() + ".sabund")); groups.push_back(lookup[i]->getGroup()); }