X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=rarefactcommand.cpp;h=1775944ad1b53c6e9677fe5c2b1280a9171432da;hb=60928795782d8f8648ec373d6a96b53032a77429;hp=0fdd0798e2cdda014a6cc568d3a1c895362c3158;hpb=050e1297eaf24fabbbe0e9b76c3a5acfb90eed7d;p=mothur.git diff --git a/rarefactcommand.cpp b/rarefactcommand.cpp index 0fdd079..1775944 100644 --- a/rarefactcommand.cpp +++ b/rarefactcommand.cpp @@ -23,24 +23,26 @@ #include "shannon.h" #include "jackknife.h" #include "coverage.h" +#include "shannonrange.h" //********************************************************************************************************************** vector RareFactCommand::setParameters(){ try { - CommandParameter plist("list", "InputTypes", "", "", "LRSS", "LRSS", "none",false,false); parameters.push_back(plist); - CommandParameter prabund("rabund", "InputTypes", "", "", "LRSS", "LRSS", "none",false,false); parameters.push_back(prabund); - CommandParameter psabund("sabund", "InputTypes", "", "", "LRSS", "LRSS", "none",false,false); parameters.push_back(psabund); - CommandParameter pshared("shared", "InputTypes", "", "", "LRSS", "LRSS", "none",false,false); parameters.push_back(pshared); - CommandParameter plabel("label", "String", "", "", "", "", "",false,false); parameters.push_back(plabel); - CommandParameter pfreq("freq", "Number", "", "100", "", "", "",false,false); parameters.push_back(pfreq); - CommandParameter piters("iters", "Number", "", "1000", "", "", "",false,false); parameters.push_back(piters); - CommandParameter pcalc("calc", "Multiple", "sobs-chao-nseqs-coverage-ace-jack-shannon-shannoneven-npshannon-heip-smithwilson-simpson-simpsoneven-invsimpson-bootstrap", "sobs", "", "", "",true,false); parameters.push_back(pcalc); - CommandParameter pabund("abund", "Number", "", "10", "", "", "",false,false); parameters.push_back(pabund); - CommandParameter pprocessors("processors", "Number", "", "1", "", "", "",false,false); parameters.push_back(pprocessors); - CommandParameter pgroupmode("groupmode", "Boolean", "", "T", "", "", "",false,false); parameters.push_back(pgroupmode); - CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir); - CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir); + CommandParameter plist("list", "InputTypes", "", "", "LRSS", "LRSS", "none","",false,false,true); parameters.push_back(plist); + CommandParameter prabund("rabund", "InputTypes", "", "", "LRSS", "LRSS", "none","",false,false); parameters.push_back(prabund); + CommandParameter psabund("sabund", "InputTypes", "", "", "LRSS", "LRSS", "none","",false,false); parameters.push_back(psabund); + CommandParameter pshared("shared", "InputTypes", "", "", "LRSS", "LRSS", "none","",false,false,true); parameters.push_back(pshared); + CommandParameter plabel("label", "String", "", "", "", "", "","",false,false); parameters.push_back(plabel); + CommandParameter pfreq("freq", "Number", "", "100", "", "", "","",false,false); parameters.push_back(pfreq); + CommandParameter piters("iters", "Number", "", "1000", "", "", "","",false,false); parameters.push_back(piters); + CommandParameter pcalc("calc", "Multiple", "sobs-chao-nseqs-coverage-ace-jack-shannon-shannoneven-npshannon-heip-smithwilson-simpson-simpsoneven-invsimpson-bootstrap-shannonrange", "sobs", "", "", "","",true,false,true); parameters.push_back(pcalc); + CommandParameter pabund("abund", "Number", "", "10", "", "", "","",false,false); parameters.push_back(pabund); + CommandParameter palpha("alpha", "Multiple", "0-1-2", "1", "", "", "","",false,false,true); parameters.push_back(palpha); + CommandParameter pprocessors("processors", "Number", "", "1", "", "", "","",false,false,true); parameters.push_back(pprocessors); + CommandParameter pgroupmode("groupmode", "Boolean", "", "T", "", "", "","",false,false); parameters.push_back(pgroupmode); + 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); } @@ -56,13 +58,14 @@ string RareFactCommand::getHelpString(){ try { ValidCalculators validCalculator; string helpString = ""; - helpString += "The rarefaction.single command parameters are list, sabund, rabund, shared, label, iters, freq, calc, processors and abund. list, sabund, rabund or shared is required unless you have a valid current file. \n"; + helpString += "The rarefaction.single command parameters are list, sabund, rabund, shared, label, iters, freq, calc, processors, groupmode and abund. list, sabund, rabund or shared is required unless you have a valid current file. \n"; helpString += "The freq parameter is used indicate when to output your data, by default it is set to 100. But you can set it to a percentage of the number of sequence. For example freq=0.10, means 10%. \n"; helpString += "The processors parameter allows you to specify the number of processors to use. The default is 1.\n"; helpString += "The rarefaction.single command should be in the following format: \n"; helpString += "rarefaction.single(label=yourLabel, iters=yourIters, freq=yourFreq, calc=yourEstimators).\n"; helpString += "Example rarefaction.single(label=unique-.01-.03, iters=10000, freq=10, calc=sobs-rchao-race-rjack-rbootstrap-rshannon-rnpshannon-rsimpson).\n"; helpString += "The default values for iters is 1000, freq is 100, and calc is rarefaction which calculates the rarefaction curve for the observed richness.\n"; + helpString += "The alpha parameter is used to set the alpha value for the shannonrange calculator.\n"; validCalculator.printCalc("rarefaction"); helpString += "If you are running rarefaction.single with a shared file and would like your results collated in one file, set groupmode=t. (Default=true).\n"; helpString += "The label parameter is used to analyze specific labels in your input.\n"; @@ -74,7 +77,35 @@ string RareFactCommand::getHelpString(){ exit(1); } } - +//********************************************************************************************************************** +string RareFactCommand::getOutputPattern(string type) { + try { + string pattern = ""; + if (type == "rarefaction") { pattern = "[filename],rarefaction"; } + else if (type == "r_chao") { pattern = "[filename],r_chao"; } + else if (type == "r_ace") { pattern = "[filename],r_ace"; } + else if (type == "r_jack") { pattern = "[filename],r_jack"; } + else if (type == "r_shannon") { pattern = "[filename],r_shannon"; } + else if (type == "r_shannoneven") { pattern = "[filename],r_shannoneven"; } + else if (type == "r_smithwilson") { pattern = "[filename],r_smithwilson"; } + else if (type == "r_npshannon") { pattern = "[filename],r_npshannon"; } + else if (type == "r_shannonrange"){ pattern = "[filename],r_shannonrange"; } + else if (type == "r_simpson") { pattern = "[filename],r_simpson"; } + else if (type == "r_simpsoneven") { pattern = "[filename],r_simpsoneven"; } + else if (type == "r_invsimpson") { pattern = "[filename],r_invsimpson"; } + else if (type == "r_bootstrap") { pattern = "[filename],r_bootstrap"; } + else if (type == "r_coverage") { pattern = "[filename],r_coverage"; } + else if (type == "r_nseqs") { pattern = "[filename],r_nseqs"; } + else if (type == "r_heip") { pattern = "[filename],r_heip"; } + else { m->mothurOut("[ERROR]: No definition for type " + type + " output pattern.\n"); m->control_pressed = true; } + + return pattern; + } + catch(exception& e) { + m->errorOut(e, "RareFactCommand", "getOutputPattern"); + exit(1); + } +} //********************************************************************************************************************** RareFactCommand::RareFactCommand(){ try { @@ -87,6 +118,7 @@ RareFactCommand::RareFactCommand(){ outputTypes["r_jack"] = tempOutNames; outputTypes["r_shannon"] = tempOutNames; outputTypes["r_shannoneven"] = tempOutNames; + outputTypes["r_shannonrange"] = tempOutNames; outputTypes["r_heip"] = tempOutNames; outputTypes["r_smithwilson"] = tempOutNames; outputTypes["r_npshannon"] = tempOutNames; @@ -134,6 +166,7 @@ RareFactCommand::RareFactCommand(string option) { outputTypes["r_jack"] = tempOutNames; outputTypes["r_shannon"] = tempOutNames; outputTypes["r_shannoneven"] = tempOutNames; + outputTypes["r_shannonrange"] = tempOutNames; outputTypes["r_heip"] = tempOutNames; outputTypes["r_smithwilson"] = tempOutNames; outputTypes["r_npshannon"] = tempOutNames; @@ -264,6 +297,11 @@ RareFactCommand::RareFactCommand(string option) { temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found"){ temp = m->getProcessors(); } m->setProcessors(temp); m->mothurConvert(temp, processors); + + temp = validParameter.validFile(parameters, "alpha", false); if (temp == "not found") { temp = "1"; } + m->mothurConvert(temp, alpha); + + if ((alpha != 0) && (alpha != 1) && (alpha != 2)) { m->mothurOut("[ERROR]: Not a valid alpha value. Valid values are 0, 1 and 2."); m->mothurOutEndLine(); abort=true; } temp = validParameter.validFile(parameters, "groupmode", false); if (temp == "not found") { temp = "T"; } groupMode = m->isTrue(temp); @@ -301,56 +339,61 @@ int RareFactCommand::execute(){ int i; ValidCalculators validCalculator; + map variables; + variables["[filename]"] = fileNameRoot; for (i=0; i 1) { file2Group[outputNames.size()-1] = groups[p]; } } @@ -527,6 +570,7 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map typesFiles[extension] = temp; } if (!(m->inUsersGroups(file2Group[i], groupNames))) { groupNames.push_back(file2Group[i]); } + } //for each type create a combo file @@ -605,9 +649,8 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map for (int k = 1; k < fileLabels[combineFileName].size(); k++) { //each chunk //grab data for each group - for (map > > >::iterator itFileNameGroup = files.begin(); itFileNameGroup != files.end(); itFileNameGroup++) { - - string group = itFileNameGroup->first; + for (int n = 0; n < groupNames.size(); n++) { + string group = groupNames[n]; map > >::iterator itLine = files[group].find(*itNumSampled); if (itLine != files[group].end()) {