X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=catchallcommand.cpp;h=3effaf4eaafe09659252e6f93fa81f31dcc4e1db;hb=ca9ac1d80c62f57270b0dcd49410ebe08a8aecd6;hp=b0e5eff6652a9defaa887eb7d21bb9bfe9e372a6;hpb=995238e9aa4455e3b59053e3dfe497b89caed79e;p=mothur.git diff --git a/catchallcommand.cpp b/catchallcommand.cpp index b0e5eff..3effaf4 100644 --- a/catchallcommand.cpp +++ b/catchallcommand.cpp @@ -11,67 +11,71 @@ #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"); - exit(1); - } -} -//********************************************************************************************************************** -CatchAllCommand::CatchAllCommand(){ - try { - //initialize outputTypes - vector tempOutNames; - outputTypes["csv"] = tempOutNames; - outputTypes["summary"] = tempOutNames; - } - catch(exception& e) { - m->errorOut(e, "CatchAllCommand", "CatchAllCommand"); + m->errorOut(e, "CatchAllCommand", "setParameters"); exit(1); } } //********************************************************************************************************************** -vector CatchAllCommand::getRequiredParameters(){ +string CatchAllCommand::getHelpString(){ try { - string AlignArray[] = {"sabund","shared","or"}; - vector myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string))); - return myArray; + 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", "getRequiredParameters"); + m->errorOut(e, "CatchAllCommand", "getHelpString"); 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; + + abort = false; calledHelp = false; allLines = 1; //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[] = {"shared","sabund","label","inputdir","outputdir"}; - vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + vector myArray = setParameters(); OptionParser parser(option); map parameters = parser.getParameters(); @@ -115,17 +119,11 @@ 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"); } 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(); } - } - string label = validParameter.validFile(parameters, "label", false); if (label == "not found") { label = ""; } else { @@ -133,8 +131,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"){ @@ -149,50 +161,32 @@ 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 { - if (abort == true) { return 0; } - - //prepare full output directory - outputDir = m->getFullPathName(outputDir); + if (abort == true) { if (calledHelp) { return 0; } return 2; } //get location of catchall - GlobalData* globaldata = GlobalData::getInstance(); - path = globaldata->argv; - path = path.substr(0, (path.find_last_of('m'))); + path = m->argv; + path = path.substr(0, (path.find_last_of("othur")-5)); path = m->getFullPathName(path); - + + savedOutputDir = outputDir; string catchAllCommandExe = ""; #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) catchAllCommandExe += "mono " + path + "CatchAllcmdL.exe "; + if (outputDir == "") { outputDir = "./"; } //force full pathname to be created for catchall, this is necessary because if catchall is in the path it will look for input file whereever the exe is and not the cwd. #else catchAllCommandExe += "\"" + path + "CatchAllcmdW.exe\"" + " "; + if (outputDir == "") { outputDir = ".\\"; } //force full pathname to be created for catchall, this is necessary because if catchall is in the path it will look for input file whereever the exe is and not the cwd. #endif + //prepare full output directory + 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++) { @@ -236,12 +230,14 @@ int CatchAllCommand::execute() { //wrap entire string in "" catchAllCommand = "\"" + catchAllCommand + "\""; #endif - //run catchall + + //run catchall system(catchAllCommand.c_str()); remove(filename.c_str()); filename = m->getRootName(filename); filename = filename.substr(0, filename.length()-1); //rip off extra . + if (savedOutputDir == "") { filename = m->getSimpleName(filename); } outputNames.push_back(filename + "_Analysis.csv"); outputTypes["csv"].push_back(filename + "_Analysis.csv"); outputNames.push_back(filename + "_BestModelsAnalysis.csv"); outputTypes["csv"].push_back(filename + "_BestModelsAnalysis.csv"); @@ -285,6 +281,7 @@ int CatchAllCommand::execute() { remove(filename.c_str()); filename = m->getRootName(filename); filename = filename.substr(0, filename.length()-1); //rip off extra . + if (savedOutputDir == "") { filename = m->getSimpleName(filename); } outputNames.push_back(filename + "_Analysis.csv"); outputTypes["csv"].push_back(filename + "_Analysis.csv"); outputNames.push_back(filename + "_BestModelsAnalysis.csv"); outputTypes["csv"].push_back(filename + "_BestModelsAnalysis.csv"); @@ -349,6 +346,7 @@ int CatchAllCommand::execute() { remove(filename.c_str()); filename = m->getRootName(filename); filename = filename.substr(0, filename.length()-1); //rip off extra . + if (savedOutputDir == "") { filename = m->getSimpleName(filename); } outputNames.push_back(filename + "_Analysis.csv"); outputTypes["csv"].push_back(filename + "_Analysis.csv"); outputNames.push_back(filename + "_BestModelsAnalysis.csv"); outputTypes["csv"].push_back(filename + "_BestModelsAnalysis.csv"); @@ -368,7 +366,7 @@ int CatchAllCommand::execute() { } if (sharedfile == "") { - string summaryfilename = outputDir + m->getRootName(m->getSimpleName(inputFileNames[0])) + "catchall.summary"; + string summaryfilename = savedOutputDir + m->getRootName(m->getSimpleName(inputFileNames[0])) + "catchall.summary"; summaryfilename = m->getFullPathName(summaryfilename); outputNames.push_back(summaryfilename); outputTypes["summary"].push_back(summaryfilename); }else { //combine summaries @@ -424,7 +422,7 @@ string CatchAllCommand::combineSummmary(vector& outputNames) { try { ofstream out; - string combineFileName = outputDir + m->getRootName(m->getSimpleName(sharedfile)) + "catchall.summary"; + string combineFileName = savedOutputDir + m->getRootName(m->getSimpleName(sharedfile)) + "catchall.summary"; //open combined file m->openOutputFile(combineFileName, out);