X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=globaldata.cpp;h=67c49bd28c942d5c432538b6f965406c0b592ae6;hb=2e5ec5cbbd23637ed20da9bdd544d178a3b5d949;hp=da81879f48fff6fbe87ac67ba950afd84c03a69e;hpb=d0939d3ab83988cc068f9ebe60596cf5decb65e5;p=mothur.git diff --git a/globaldata.cpp b/globaldata.cpp index da81879..67c49bd 100644 --- a/globaldata.cpp +++ b/globaldata.cpp @@ -30,6 +30,7 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ clear(); gGroupmap = NULL; gTree.clear(); + Treenames.clear(); labels.clear(); lines.clear(); groups.clear(); allLines = 1; } @@ -325,3 +326,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")) { +cout << "there is a translate " << endl; + 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); + } +} + +/*******************************************************/ + +/*******************************************************/ + +