X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=phylotypecommand.cpp;h=d04c9604170cf0d5c0f440132d25747b9193ba4c;hp=1828eb193c0a6e0dcc625df9cc36ef7fb78f931c;hb=a688f253166590ee0b256f02e02f47c9cae44fd1;hpb=cd9dbd8b53bbe32af3e9c6bead4aa6d796a278a5 diff --git a/phylotypecommand.cpp b/phylotypecommand.cpp index 1828eb1..d04c960 100644 --- a/phylotypecommand.cpp +++ b/phylotypecommand.cpp @@ -24,7 +24,7 @@ PhylotypeCommand::PhylotypeCommand(string option) { else { //valid paramters for this command - string AlignArray[] = {"taxonomy","cutoff","label","outputdir","inputdir"}; + string AlignArray[] = {"taxonomy","cutoff","label","name","outputdir","inputdir"}; vector myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string))); OptionParser parser(option); @@ -50,6 +50,14 @@ PhylotypeCommand::PhylotypeCommand(string option) { //if the user has not given a path then, add inputdir. else leave path alone. if (path == "") { parameters["taxonomy"] = inputDir + it->second; } } + + it = parameters.find("name"); + //user has given a template file + if(it != parameters.end()){ + path = hasPath(it->second); + //if the user has not given a path then, add inputdir. else leave path alone. + if (path == "") { parameters["name"] = inputDir + it->second; } + } } taxonomyFileName = validParameter.validFile(parameters, "taxonomy", true); @@ -59,6 +67,11 @@ PhylotypeCommand::PhylotypeCommand(string option) { abort = true; }else if (taxonomyFileName == "not open") { abort = true; } + namefile = validParameter.validFile(parameters, "name", true); + if (namefile == "not open") { abort = true; } + else if (namefile == "not found") { namefile = ""; } + else { readNamesFile(); } + //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"){ outputDir = ""; @@ -187,7 +200,15 @@ int PhylotypeCommand::execute(){ //make the names compatable with listvector string name = ""; - for (int i = 0; i < names.size(); i++) { name += names[i] + ","; } + 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] + ","; } + } name = name.substr(0, name.length()-1); //rip off extra ',' //add bin to list vector @@ -244,4 +265,32 @@ int PhylotypeCommand::execute(){ exit(1); } } +/*****************************************************************/ +int PhylotypeCommand::readNamesFile() { + try { + + ifstream in; + openInputFile(namefile, in); + + string first, second; + map::iterator itNames; + + while(!in.eof()) { + in >> first >> second; gobble(in); + + itNames = namemap.find(first); + if (itNames == namemap.end()) { + namemap[first] = second; + }else { m->mothurOut(first + " has already been seen in namefile, disregarding names file."); m->mothurOutEndLine(); in.close(); namemap.clear(); namefile = ""; return 1; } + } + in.close(); + + return 0; + } + catch(exception& e) { + m->errorOut(e, "PhylotypeCommand", "readNamesFile"); + exit(1); + } +} + /**********************************************************************************************************************/