X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=globaldata.cpp;h=ae1b0e2ebbb463fefc32a2f8ad3fd1816b01109d;hb=3117b1c3109121dff476997d3c5db5b47a77729b;hp=da81879f48fff6fbe87ac67ba950afd84c03a69e;hpb=f20505bcd9f07e0b5f967be0e8d414076d9a5678;p=mothur.git diff --git a/globaldata.cpp b/globaldata.cpp index da81879..ae1b0e2 100644 --- a/globaldata.cpp +++ b/globaldata.cpp @@ -1,9 +1,6 @@ #include "globaldata.hpp" -#include "sparsematrix.hpp" #include "tree.h" -#include "rabundvector.hpp" -#include "sabundvector.hpp" -#include "listvector.hpp" +#include "sparsematrix.hpp" /*******************************************************/ @@ -30,6 +27,7 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ clear(); gGroupmap = NULL; gTree.clear(); + Treenames.clear(); labels.clear(); lines.clear(); groups.clear(); allLines = 1; } @@ -44,6 +42,9 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ cutoff = "1.0"; } + //set default value for cutoff + if (commandName == "distance") { cutoff = "1.0"; } + string key, value; //reads in parameters and values if((optionText != "") && (commandName != "help")){ @@ -56,7 +57,9 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ if (key == "list" ) { listfile = value; inputFileName = value; fileroot = value; format = "list"; } if (key == "rabund" ) { rabundfile = value; inputFileName = value; fileroot = value; format = "rabund"; } if (key == "sabund" ) { sabundfile = value; inputFileName = value; fileroot = value; format = "sabund"; } - if (key == "fasta" ) { fastafile = value; inputFileName = value; fileroot = value; format = "fasta"; } + if (key == "fasta" ) { fastafile = value; inputFileName = value; fileroot = value; format = "fasta"; } + if (key == "nexus" ) { nexusfile = value; inputFileName = value; fileroot = value; format = "nexus"; } + if (key == "clustal" ) { clustalfile = value; inputFileName = value; fileroot = value; format = "clustal"; } if (key == "tree" ) { treefile = value; inputFileName = value; fileroot = value; format = "tree"; } if (key == "shared" ) { sharedfile = value; inputFileName = value; fileroot = value; format = "sharedfile"; } if (key == "name" ) { namefile = value; } @@ -75,6 +78,15 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ if (key == "step") { step = value; } if (key == "form") { form = value; } if (key == "sorted") { sorted = value; } + if (key == "vertical") { vertical = value; } + if (key == "trump") { trump = value; } + if (key == "filter") { filter = value; } + if (key == "soft") { soft = value; } + if (key == "scale") { scale = value; } + if (key == "ends" ) { ends = value; } + if (key == "processors" ) { processors = value; } + + @@ -112,6 +124,8 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ if (key == "rabund" ) { rabundfile = value; inputFileName = value; fileroot = value; format = "rabund"; } if (key == "sabund" ) { sabundfile = value; inputFileName = value; fileroot = value; format = "sabund"; } if (key == "fasta" ) { fastafile = value; inputFileName = value; fileroot = value; format = "fasta"; } + if (key == "nexus" ) { nexusfile = value; inputFileName = value; fileroot = value; format = "nexus"; } + if (key == "clustal" ) { clustalfile = value; inputFileName = value; fileroot = value; format = "clustal"; } if (key == "tree" ) { treefile = value; inputFileName = value; fileroot = value; format = "tree"; } if (key == "shared" ) { sharedfile = value; inputFileName = value; fileroot = value; format = "sharedfile"; } if (key == "name" ) { namefile = value; } @@ -130,6 +144,14 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ if (key == "step") { step = value; } if (key == "form") { form = value; } if (key == "sorted") { sorted = value; } + if (key == "vertical") { vertical = value; } + if (key == "trump") { trump = value; } + if (key == "filter") { filter = value; } + if (key == "soft") { soft = value; } + if (key == "scale") { scale = value; } + if (key == "ends" ) { ends = value; } + if (key == "processors" ) { processors = value; } + if (key == "line") {//stores lines to be used in a vector lines.clear(); @@ -139,6 +161,7 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ if (line != "all") { splitAtDash(value, lines); allLines = 0; } else { allLines = 1; } } + if (key == "label") {//stores lines to be used in a vector labels.clear(); lines.clear(); @@ -161,7 +184,8 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ //input defaults for calculators if (commandName == "collect.single") { - if ((calc == "default") || (calc == "")) { calc = "sobs-chao-ace-jack-bootstrap-shannon-npshannon-simpson-geom-qstat-logsd-bergerparker-bstick"; } + + if ((calc == "default") || (calc == "")) { calc = "sobs-chao-ace-jack-shannon-npshannon-simpson"; } Estimators.clear(); splitAtDash(calc, Estimators); } @@ -171,17 +195,18 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ splitAtDash(calc, Estimators); } if (commandName == "collect.shared") { - if ((calc == "default") || (calc == "")) { calc = "sharedsobs-sharedchao-sharedace-sharedjabund-sharedsorensonabund-sharedjclass-sharedsorclass-sharedjest-sharedsorest-sharedthetayc-sharedthetan-sharedkstest-sharedbdiversity"; } + + if ((calc == "default") || (calc == "")) { calc = "sharedsobs-sharedchao-sharedace-jabund-sorabund-jclass-sorclass-jest-sorest-thetayc-thetan"; } Estimators.clear(); splitAtDash(calc, Estimators); } if (commandName == "summary.single") { - if ((calc == "default") || (calc == "")) { calc = "sobs-chao-ace-jack-bootstrap-shannon-npshannon-simpson-geom-logsd-qstat-bergerparker-bstick"; } + if ((calc == "default") || (calc == "")) { calc = "sobs-chao-ace-jack-shannon-npshannon-simpson"; } Estimators.clear(); splitAtDash(calc, Estimators); } if (commandName == "summary.shared") { - if ((calc == "default") || (calc == "")) { calc = "sharedsobs-sharedchao-sharedace-sharedjabund-sharedsorensonabund-sharedjclass-sharedsorclass-sharedjest-sharedsorest-sharedthetayc-sharedthetan-sharedkstest-sharedbdiversity"; } + if ((calc == "default") || (calc == "")) { calc = "sharedsobs-sharedchao-sharedace-jabund-sorabund-jclass-sorclass-jest-sorest-thetayc-thetan"; } Estimators.clear(); splitAtDash(calc, Estimators); } @@ -190,6 +215,11 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ Estimators.clear(); splitAtDash(calc, Estimators); } + if (commandName == "distance") { + if ((calc == "default") || (calc == "")) { calc = "onegap"; } + Estimators.clear(); + splitAtDash(calc, Estimators); + } if (commandName == "venn") { if ((calc == "default") || (calc == "")) { if (format == "list") { calc = "sobs"; } @@ -198,6 +228,13 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ Estimators.clear(); splitAtDash(calc, Estimators); } + if ((commandName == "tree.shared") || (commandName == "bootstrap.shared")) { + if (calc != "") { + Estimators.clear(); + splitAtDash(calc, Estimators); + }else { cout << "You have not specified any calculators." << endl; } + } + //if you have done a read.otu with a groupfile but don't want to use it anymore because you want to do single commands if ((commandName == "collect.single") || (commandName == "rarefaction.single") || (commandName == "summary.single")) { @@ -230,6 +267,8 @@ string GlobalData::getOrderFile() { return orderfile; } string GlobalData::getTreeFile() { return treefile; } string GlobalData::getSharedFile() { return sharedfile; } string GlobalData::getFastaFile() { return fastafile; } +string GlobalData::getNexusFile() { return nexusfile; } +string GlobalData::getClustalFile() { return clustalfile; } string GlobalData::getCutOff() { return cutoff; } string GlobalData::getFormat() { return format; } string GlobalData::getPrecision() { return precision; } @@ -244,6 +283,13 @@ string GlobalData::getGroups() { return groups; } string GlobalData::getStep() { return step; } string GlobalData::getForm() { return form; } string GlobalData::getSorted() { return sorted; } +string GlobalData::getTrump() { return trump; } +string GlobalData::getSoft() { return soft; } +string GlobalData::getFilter() { return filter; } +string GlobalData::getScale() { return scale; } +string GlobalData::getEnds() { return ends; } +string GlobalData::getProcessors() { return processors; } + void GlobalData::setListFile(string file) { listfile = file; inputFileName = file;} void GlobalData::setRabundFile(string file) { rabundfile = file; inputFileName = file;} void GlobalData::setSabundFile(string file) { sabundfile = file; inputFileName = file;} @@ -254,6 +300,9 @@ void GlobalData::setFormat(string Format) { format = Format; } void GlobalData::setRandomTree(string Random) { randomtree = Random; } void GlobalData::setGroups(string g) { groups = g; } void GlobalData::setCalc(string Calc) { calc = Calc; } +void GlobalData::setEnds(string e) { ends = e; } +void GlobalData::setProcessors(string p) { processors = p; } + /*******************************************************/ @@ -262,6 +311,8 @@ GlobalData::GlobalData() { //option definitions should go here... helpRequest = ""; clear(); + gListVector == NULL; + gSparseMatrix == NULL; } /*******************************************************/ @@ -277,6 +328,8 @@ void GlobalData::clear() { groupfile = ""; orderfile = ""; fastafile = ""; + nexusfile = ""; + clustalfile = ""; treefile = ""; sharedfile = ""; cutoff = "10.00"; @@ -294,7 +347,15 @@ void GlobalData::clear() { abund = "10"; step = "0.01"; form = "integral"; - sorted = "1"; //0 means don't sort, 1 means sort. + sorted = "T"; //F means don't sort, T means sort. + vertical = ""; + trump = ""; + filter = ""; + soft = ""; + scale = "log10"; + ends = "T"; //yes + processors = "1"; + } //*******************************************************/ @@ -306,7 +367,7 @@ void GlobalData::reset() { iters = "1000"; groups = ""; jumble = "1"; //0 means don't jumble, 1 means jumble. - sorted = "1"; //0 means don't sort, 1 means sort. + sorted = "T"; //F means don't sort, T means sort. randomtree = ""; //"" means user will enter some user trees, "outputfile" means they just want the random tree distribution to be outputted to outputfile. freq = "100"; method = "furthest"; @@ -314,6 +375,8 @@ void GlobalData::reset() { abund = "10"; step = "0.01"; form = "integral"; + ends = "T"; + processors = "1"; } /*******************************************************/ @@ -325,3 +388,144 @@ GlobalData::~GlobalData() { if(gorder != NULL) { delete gorder; } } /*******************************************************/ + +/*******************************************************/ +void GlobalData::parseTreeFile() { + //only takes names from the first tree and assumes that all trees use the same names. + try { + string filename = treefile; + ifstream filehandle; + openInputFile(filename, filehandle); + int c, comment; + comment = 0; + + //if you are not a nexus file + if ((c = filehandle.peek()) != '#') { + while((c = filehandle.peek()) != ';') { + while ((c = filehandle.peek()) != ';') { + // get past comments + if(c == '[') { + comment = 1; + } + if(c == ']'){ + comment = 0; + } + if((c == '(') && (comment != 1)){ break; } + filehandle.get(); + } + + readTreeString(filehandle); + } + //if you are a nexus file + }else if ((c = filehandle.peek()) == '#') { + string holder = ""; + + // get past comments + while(holder != "translate" && holder != "Translate"){ + if(holder == "[" || holder == "[!"){ + comment = 1; + } + if(holder == "]"){ + comment = 0; + } + filehandle >> holder; + + //if there is no translate then you must read tree string otherwise use translate to get names + if(holder == "tree" && comment != 1){ + //pass over the "tree rep.6878900 = " + while (((c = filehandle.get()) != '(') && ((c = filehandle.peek()) != EOF) ) {;} + + if (c == EOF ) { break; } + filehandle.putback(c); //put back first ( of tree. + readTreeString(filehandle); + break; + } + } + + //use nexus translation rather than parsing tree to save time + if ((holder == "translate") || (holder == "Translate")) { + + string number, name, h; + h = ""; // so it enters the loop the first time + while((h != ";") && (number != ";")) { + filehandle >> number; + filehandle >> name; + + //c = , until done with translation then c = ; + h = name.substr(name.length()-1, name.length()); + name.erase(name.end()-1); //erase the comma + Treenames.push_back(number); + } + if (number == ";") { Treenames.pop_back(); } //in case ';' from translation is on next line instead of next to last name + } + } + + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function parseTreeFile. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the GlobalData class function parseTreeFile. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} +/*******************************************************/ + +/*******************************************************/ +void GlobalData::readTreeString(ifstream& filehandle) { + try { + int c; + string name; //k + + while((c = filehandle.peek()) != ';') { + //if you are a name + if ((c != '(') && (c != ')') && (c != ',') && (c != ':') && (c != '\n') && (c != '\t') && (c != 32)) { //32 is space + name = ""; + c = filehandle.get(); + // k = c; +//cout << k << endl; + while ((c != '(') && (c != ')') && (c != ',') && (c != ':') && (c != '\n') && (c != 32) && (c != '\t')) { + name += c; + c = filehandle.get(); + // k = c; +//cout << " in name while " << k << endl; + } + +//cout << "name = " << name << endl; + Treenames.push_back(name); + filehandle.putback(c); +//k = c; +//cout << " after putback" << k << endl; + } + + if (c == ':') { //read until you reach the end of the branch length + while ((c != '(') && (c != ')') && (c != ',') && (c != ';') && (c != '\n') && (c != '\t') && (c != 32)) { + c = filehandle.get(); + // k = c; + //cout << " in branch while " << k << endl; + } + filehandle.putback(c); + } + c = filehandle.get(); + if (c == ';') { break; } + // k = c; +//cout << k << endl; + + } + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function parseTreeFile. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the GlobalData class function parseTreeFile. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} + +/*******************************************************/ + +/*******************************************************/ + +