X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=phylotypecommand.cpp;h=2d2db08a40ea5e1aa8712902dcd419ddb1ad757a;hb=ee8403d4eb5760187d62b42a9cf4272de8fc0ec4;hp=c3aee4719859a4921ece77b25e7cf5dfe69d9aec;hpb=348de0f8b17d84ede77081dcf67bd6ef43496677;p=mothur.git diff --git a/phylotypecommand.cpp b/phylotypecommand.cpp index c3aee47..2d2db08 100644 --- a/phylotypecommand.cpp +++ b/phylotypecommand.cpp @@ -14,51 +14,58 @@ #include "sabundvector.hpp" //********************************************************************************************************************** -vector PhylotypeCommand::getValidParameters(){ +vector PhylotypeCommand::setParameters(){ try { - string Array[] = {"taxonomy","cutoff","label","name","outputdir","inputdir"}; - vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + CommandParameter ptaxonomy("taxonomy", "InputTypes", "", "", "none", "none", "none",false,true); parameters.push_back(ptaxonomy); + CommandParameter pname("name", "InputTypes", "", "", "none", "none", "none",false,false); parameters.push_back(pname); + CommandParameter pcutoff("cutoff", "Number", "", "-1", "", "", "",false,false); parameters.push_back(pcutoff); + CommandParameter plabel("label", "String", "", "", "", "", "",false,false); parameters.push_back(plabel); + 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, "PhylotypeCommand", "getValidParameters"); - exit(1); - } -} -//********************************************************************************************************************** -PhylotypeCommand::PhylotypeCommand(){ - try { - abort = true; calledHelp = true; - vector tempOutNames; - outputTypes["list"] = tempOutNames; - outputTypes["sabund"] = tempOutNames; - outputTypes["rabund"] = tempOutNames; - } - catch(exception& e) { - m->errorOut(e, "PhylotypeCommand", "PhylotypeCommand"); + m->errorOut(e, "PhylotypeCommand", "setParameters"); exit(1); } } //********************************************************************************************************************** -vector PhylotypeCommand::getRequiredParameters(){ +string PhylotypeCommand::getHelpString(){ try { - string Array[] = {"taxonomy"}; - vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); - return myArray; + string helpString = ""; + helpString += "The phylotype command reads a taxonomy file and outputs a .list, .rabund and .sabund file. \n"; + helpString += "The phylotype command parameter options are taxonomy, cutoff and label. The taxonomy parameter is required.\n"; + helpString += "The cutoff parameter allows you to specify the level you want to stop at. The default is the highest level in your taxonomy file. \n"; + helpString += "For example: taxonomy = Bacteria;Bacteroidetes-Chlorobi;Bacteroidetes; - cutoff=2, would truncate the taxonomy to Bacteria;Bacteroidetes-Chlorobi; \n"; + helpString += "For the cutoff parameter levels count up from the root of the phylotree. This enables you to look at the grouping down to a specific resolution, say the genus level.\n"; + helpString += "The label parameter allows you to specify which level you would like, and are separated by dashes. The default all levels in your taxonomy file. \n"; + helpString += "For the label parameter, levels count down from the root to keep the output similiar to mothur's other commands which report information from finer resolution to coarser resolutions.\n"; + helpString += "The phylotype command should be in the following format: \n"; + helpString += "phylotype(taxonomy=yourTaxonomyFile, cutoff=yourCutoff, label=yourLabels) \n"; + helpString += "Eaxample: phylotype(taxonomy=amazon.taxonomy, cutoff=5, label=1-3-5).\n"; + return helpString; } catch(exception& e) { - m->errorOut(e, "PhylotypeCommand", "getRequiredParameters"); + m->errorOut(e, "PhylotypeCommand", "getHelpString"); exit(1); } } + //********************************************************************************************************************** -vector PhylotypeCommand::getRequiredFiles(){ +PhylotypeCommand::PhylotypeCommand(){ try { - vector myArray; - return myArray; + abort = true; calledHelp = true; + setParameters(); + vector tempOutNames; + outputTypes["list"] = tempOutNames; + outputTypes["sabund"] = tempOutNames; + outputTypes["rabund"] = tempOutNames; } catch(exception& e) { - m->errorOut(e, "PhylotypeCommand", "getRequiredFiles"); + m->errorOut(e, "PhylotypeCommand", "PhylotypeCommand"); exit(1); } } @@ -69,12 +76,10 @@ PhylotypeCommand::PhylotypeCommand(string option) { //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 AlignArray[] = {"taxonomy","cutoff","label","name","outputdir","inputdir"}; - vector myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string))); + vector myArray = setParameters(); OptionParser parser(option); map parameters = parser.getParameters(); @@ -117,15 +122,19 @@ PhylotypeCommand::PhylotypeCommand(string option) { taxonomyFileName = validParameter.validFile(parameters, "taxonomy", true); if (taxonomyFileName == "not found") { - m->mothurOut("taxonomy is a required parameter for the phylotype command."); - m->mothurOutEndLine(); - abort = true; - }else if (taxonomyFileName == "not open") { abort = true; } + taxonomyFileName = m->getTaxonomyFile(); + if (taxonomyFileName != "") { m->mothurOut("Using " + taxonomyFileName + " as input file for the taxonomy parameter."); m->mothurOutEndLine(); } + else { + m->mothurOut("No valid current files. taxonomy is a required parameter."); m->mothurOutEndLine(); + abort = true; + } + }else if (taxonomyFileName == "not open") { taxonomyFileName = ""; abort = true; } + else { m->setTaxonomyFile(taxonomyFileName); } namefile = validParameter.validFile(parameters, "name", true); - if (namefile == "not open") { abort = true; } + if (namefile == "not open") { namefile = ""; abort = true; } else if (namefile == "not found") { namefile = ""; } - else { readNamesFile(); } + else { readNamesFile(); m->setNameFile(namefile); } //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"){ @@ -135,7 +144,7 @@ PhylotypeCommand::PhylotypeCommand(string option) { string temp = validParameter.validFile(parameters, "cutoff", false); if (temp == "not found") { temp = "-1"; } - convert(temp, cutoff); + m->mothurConvert(temp, cutoff); label = validParameter.validFile(parameters, "label", false); if (label == "not found") { label = ""; allLines = 1; } @@ -144,6 +153,11 @@ PhylotypeCommand::PhylotypeCommand(string option) { else { allLines = 1; } } + if (namefile == "") { + vector files; files.push_back(taxonomyFileName); + parser.getNameFile(files); + } + } } catch(exception& e) { @@ -153,30 +167,6 @@ PhylotypeCommand::PhylotypeCommand(string option) { } /**********************************************************************************************************************/ -void PhylotypeCommand::help(){ - try { - m->mothurOut("The phylotype command reads a taxonomy file and outputs a .list, .rabund and .sabund file. \n"); - m->mothurOut("The phylotype command parameter options are taxonomy, cutoff and label. The taxonomy parameter is required.\n"); - m->mothurOut("The cutoff parameter allows you to specify the level you want to stop at. The default is the highest level in your taxonomy file. \n"); - m->mothurOut("For example: taxonomy = Bacteria;Bacteroidetes-Chlorobi;Bacteroidetes; - cutoff=2, would truncate the taxonomy to Bacteria;Bacteroidetes-Chlorobi; \n"); - m->mothurOut("For the cutoff parameter levels count up from the root of the phylotree. This enables you to look at the grouping down to a specific resolution, say the genus level.\n"); - m->mothurOut("The label parameter allows you to specify which level you would like, and are separated by dashes. The default all levels in your taxonomy file. \n"); - m->mothurOut("For the label parameter, levels count down from the root to keep the output similiar to mothur's other commands which report information from finer resolution to coarser resolutions.\n"); - m->mothurOut("The phylotype command should be in the following format: \n"); - m->mothurOut("phylotype(taxonomy=yourTaxonomyFile, cutoff=yourCutoff, label=yourLabels) \n"); - m->mothurOut("Eaxample: phylotype(taxonomy=amazon.taxonomy, cutoff=5, label=1-3-5).\n\n"); - } - catch(exception& e) { - m->errorOut(e, "PhylotypeCommand", "help"); - exit(1); - } -} -/**********************************************************************************************************************/ - -PhylotypeCommand::~PhylotypeCommand(){} - -/**********************************************************************************************************************/ - int PhylotypeCommand::execute(){ try { @@ -230,7 +220,7 @@ int PhylotypeCommand::execute(){ if (m->control_pressed) { outRabund.close(); outSabund.close(); outList.close(); - for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + for (int i = 0; i < outputNames.size(); i++) { m->mothurRemove(outputNames[i]); } delete tree; return 0; } @@ -242,6 +232,7 @@ int PhylotypeCommand::execute(){ ListVector list; list.setLabel(level); + //go through nodes and build listvector for (itCurrent = currentNodes.begin(); itCurrent != currentNodes.end(); itCurrent++) { @@ -254,18 +245,20 @@ int PhylotypeCommand::execute(){ //make the names compatable with listvector string name = ""; for (int i = 0; i < names.size(); i++) { - if (namefile != "") { - map::iterator itNames = namemap.find(names[i]); //make sure this name is in namefile - - if (itNames != namemap.end()) { name += namemap[names[i]] + ","; } //you found it in namefile - else { m->mothurOut(names[i] + " is not in your namefile, please correct."); m->mothurOutEndLine(); exit(1); } - - }else{ name += names[i] + ","; } + + if (names[i] != "unknown") { + if (namefile != "") { + map::iterator itNames = namemap.find(names[i]); //make sure this name is in namefile + + if (itNames != namemap.end()) { name += namemap[names[i]] + ","; } //you found it in namefile + else { m->mothurOut(names[i] + " is not in your namefile, please correct."); m->mothurOutEndLine(); exit(1); } + + }else{ name += names[i] + ","; } + } } name = name.substr(0, name.length()-1); //rip off extra ',' - //add bin to list vector - list.push_back(name); + if (name != "") { list.push_back(name); } //caused by unknown } //print listvector @@ -301,7 +294,7 @@ int PhylotypeCommand::execute(){ delete tree; if (m->control_pressed) { - for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + for (int i = 0; i < outputNames.size(); i++) { m->mothurRemove(outputNames[i]); } return 0; }