From a688f253166590ee0b256f02e02f47c9cae44fd1 Mon Sep 17 00:00:00 2001 From: westcott Date: Tue, 27 Apr 2010 18:53:09 +0000 Subject: [PATCH] added name parameter to phylotype command --- phylosummary.cpp | 4 ++-- phylotypecommand.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++-- phylotypecommand.h | 5 ++++- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/phylosummary.cpp b/phylosummary.cpp index 1e8d1bc..a5f67c0 100644 --- a/phylosummary.cpp +++ b/phylosummary.cpp @@ -126,8 +126,8 @@ int PhyloSummary::addSeqToTree(string seqName, string seqTaxonomy){ tree[currentNode].total++; currentNode = childPointer->second; - }else{ //otherwise, create it - m->mothurOut("Error: cannot find taxonomy in tree for " + seqName + "."); m->mothurOutEndLine(); + }else{ //otherwise, error + m->mothurOut("Warning: cannot find taxon " + taxon + " in reference taxonomy tree at level " + toString(tree[currentNode].level) + " for " + seqName + ". This may cause totals of daughter levels not to add up in summary file."); m->mothurOutEndLine(); seqTaxonomy = ""; } 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); + } +} + /**********************************************************************************************************************/ diff --git a/phylotypecommand.h b/phylotypecommand.h index b61c039..c5aea71 100644 --- a/phylotypecommand.h +++ b/phylotypecommand.h @@ -26,13 +26,16 @@ public: private: bool abort, allLines; - string taxonomyFileName, label, outputDir; + string taxonomyFileName, label, outputDir, namefile; set labels; //holds labels to be used int cutoff; + map namemap; map currentNodes; map parentNodes; map::iterator itCurrent; + + int readNamesFile(); }; -- 2.39.2