X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=globaldata.cpp;h=6138e2cc1b8f4fc70b8febc1105fcecca0448306;hb=4f4070ac3fbb5da75f834b48062e9123364b006e;hp=6d67d0da0fd41c2978a073a5f377746331b0d9a6;hpb=67b6343929b6dbed97c4b26c3bb849725d573f6d;p=mothur.git diff --git a/globaldata.cpp b/globaldata.cpp index 6d67d0d..6138e2c 100644 --- a/globaldata.cpp +++ b/globaldata.cpp @@ -1,19 +1,6 @@ -#include -#include -#include -#include -#include -#include - -using namespace std; - #include "globaldata.hpp" +#include "tree.h" #include "sparsematrix.hpp" -#include "rabundvector.hpp" -#include "sabundvector.hpp" -#include "listvector.hpp" -#include -#include /*******************************************************/ @@ -26,62 +13,25 @@ GlobalData* GlobalData::getInstance() { } /*******************************************************/ -/******************************************************/ - -ListVector* GlobalData::getListVector() { return gListVector; } -/*******************************************************/ - -/******************************************************/ -void GlobalData::setListVector(ListVector* lv){ - try { - if(gListVector != NULL){ delete gListVector; } - gListVector = new ListVector(*lv); - } - catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function setListVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the GlobalData class function setListVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } -} - -/*******************************************************/ - -/******************************************************/ - -SparseMatrix* GlobalData::getSparseMatrix() { return gSparseMatrix; } -/*******************************************************/ - -/******************************************************/ -void GlobalData::setSparseMatrix(SparseMatrix* sm){ - try{ - if(gSparseMatrix != NULL){ delete gSparseMatrix; } - gSparseMatrix = new SparseMatrix(*sm); - } - catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function setSparseMatrix. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the GlobalData class function setSparseMatrix. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - -} -/*******************************************************/ - /******************************************************/ //This function parses through the option string of the command to remove its parameters void GlobalData::parseGlobalData(string commandString, string optionText){ try { - allLines = 1; commandName = commandString; //save command name to be used by other classes + //set all non filename paramters to default + reset(); + //clears out data from previous read - if ((commandName == "read.dist") || (commandName == "read.otu") || (commandName == "read.list")) { + if ((commandName == "read.dist") || (commandName == "read.otu") || (commandName == "read.tree")) { clear(); + gGroupmap = NULL; + gListVector = NULL; + gSparseMatrix = NULL; + gTree.clear(); + Treenames.clear(); + labels.clear(); lines.clear(); Groups.clear(); + allLines = 1; } //saves help request @@ -89,6 +39,14 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ helpRequest = optionText; } + if (commandName == "libshuff") { + iters = "10000"; + cutoff = "1.0"; + } + + //set default value for cutoff + if (commandName == "dist.seqs") { cutoff = "1.0"; } + string key, value; //reads in parameters and values if((optionText != "") && (commandName != "help")){ @@ -96,154 +54,226 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ splitAtComma(value, optionText); splitAtEquals(key, value); - if (key == "phylipfile" ) { phylipfile = value; inputFileName = value; fileroot = value; format = "phylip";} - if (key == "columnfile" ) { columnfile = value; inputFileName = value; fileroot = value; format = "column";} - if (key == "listfile" ) { listfile = value; inputFileName = value; fileroot = value; format = "list"; } - if (key == "rabundfile" ) { rabundfile = value; inputFileName = value; fileroot = value; format = "rabund"; } - if (key == "sabundfile" ) { sabundfile = value; inputFileName = value; fileroot = value; format = "sabund"; } - if (key == "fastafile" ) { fastafile = value; inputFileName = value; fileroot = value; format = "fasta"; } - if (key == "namefile" ) { namefile = value; } - if (key == "orderfile" ) { orderfile = value; } - if (key == "groupfile" ) { groupfile = value; } - if (key == "cutoff" ) { cutoff = value; } - if (key == "precision" ) { precision = value; } - if (key == "iters" ) { iters = value; } - if (key == "jumble" ) { jumble = value; } - if (key == "freq" ) { freq = value; } - if (key == "method" ) { method = value; } - if (key == "fileroot" ) { fileroot = value; } + if (key == "phylip" ) { phylipfile = value; inputFileName = value; fileroot = value; format = "phylip"; } + if (key == "column" ) { columnfile = value; inputFileName = value; fileroot = value; format = "column"; } + 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 == "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; } + if (key == "order" ) { orderfile = value; } + if (key == "group" ) { groupfile = value; } + if (key == "cutoff" ) { cutoff = value; } + if (key == "precision" ) { precision = value; } + if (key == "iters" ) { iters = value; } + if (key == "jumble" ) { jumble = value; } + if (key == "freq" ) { freq = value; } + if (key == "method" ) { method = value; } + if (key == "fileroot" ) { fileroot = value; } + if (key == "abund" ) { abund = value; } + if (key == "random" ) { randomtree = value; } + if (key == "calc") { calc = value; } + 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 == "hard") { hard = value; } + if (key == "soft") { soft = value; } + if (key == "scale") { scale = value; } + if (key == "countends" ) { countends = value; } + if (key == "processors" ) { processors = value; } + if (key == "size" ) { size = value; } + if (key == "candidate") { candidatefile = value; } + if (key == "search") { search = value; } + if (key == "ksize") { ksize = value; } + if (key == "align") { align = value; } + if (key == "match") { match = value; } + if (key == "mismatch") { mismatch = value; } + if (key == "gapopen") { gapopen = value; } + if (key == "gapextend" ) { gapextend = value; } + if (key == "start" ) { startPos = value; } + if (key == "end" ) { endPos = value; } + if (key == "maxambig" ) { maxAmbig = value; } + if (key == "maxhomop" ) { maxHomoPolymer = value; } + if (key == "minlength" ) { minLength = value; } + if (key == "maxlength" ) { maxLength = value; } - if (key == "single") {//stores estimators in a vector - singleEstimators.clear(); //clears out old values - if (value == "default") { value = "sobs-chao-ace-jack-bootstrap-shannon-npshannon-simpson-rarefraction"; } - splitAtDash(value, singleEstimators); - } - if (key == "rarefaction") {//stores estimators in a vector - rareEstimators.clear(); //clears out old values - if (value == "default") { value = "rarefraction"; } - splitAtDash(value, rareEstimators); - } - if (key == "shared") {//stores estimators in a vector - sharedEstimators.clear(); //clears out old values - if (value == "default") { value = "sharedChao-sharedAce-sharedJabund-sharedSorensonAbund-sharedJclass-sharedSorClass-sharedJest-sharedSorEst-SharedThetaYC-SharedThetaN"; } - splitAtDash(value, sharedEstimators); - } - if (key == "summary") { //stores summaries to be used in a vector - summaryEstimators.clear(); - if (value == "default") { value = "summary-chao-ace-jack-bootstrap-shannon-npshannon-simpson"; } - splitAtDash(value, summaryEstimators); - } - if (key == "sharedsummary") { //stores sharedSummaries to be used in a vector - sharedSummaryEstimators.clear(); - if (value == "default") { value = "sharedChao-sharedAce-sharedJabund-sharedSorensonAbund-sharedJclass-sharedSorClass-sharedJest-sharedSorEst-SharedThetaYC-SharedThetaN"; } - splitAtDash(value, sharedSummaryEstimators); - } - if (key == "sharedrarefaction") { //stores sharedrarefaction to be used in a vector - sharedRareEstimators.clear(); - if (value == "default") { value = "sharedobserved"; } - splitAtDash(value, sharedRareEstimators); - } if (key == "line") {//stores lines to be used in a vector lines.clear(); + labels.clear(); line = value; - splitAtDash(value, lines); - allLines = 0; + label = ""; + 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(); label = value; - splitAtDash(value, labels); - allLines = 0; + line = ""; + if (label != "all") { splitAtDash(value, labels); allLines = 0; } + else { allLines = 1; } + } + + if (key == "groups") {//stores groups to be used in a vector + Groups.clear(); + groups = value; + splitAtDash(value, Groups); } + } //saves the last parameter value = optionText; splitAtEquals(key, value); - if (key == "phylipfile" ) { phylipfile = value; inputFileName = value; fileroot = value; format = "phylip"; } - if (key == "columnfile" ) { columnfile = value; inputFileName = value; fileroot = value; format = "column"; } - if (key == "listfile" ) { listfile = value; inputFileName = value; fileroot = value; format = "list"; } - if (key == "rabundfile" ) { rabundfile = value; inputFileName = value; fileroot = value; format = "rabund"; } - if (key == "sabundfile" ) { sabundfile = value; inputFileName = value; fileroot = value; format = "sabund"; } - if (key == "fastafile" ) { fastafile = value; inputFileName = value; fileroot = value; format = "fasta"; } - if (key == "namefile" ) { namefile = value; } - if (key == "orderfile" ) { orderfile = value; } - if (key == "groupfile" ) { groupfile = value; } - if (key == "cutoff" ) { cutoff = value; } - if (key == "precision" ) { precision = value; } - if (key == "iters" ) { iters = value; } - if (key == "jumble" ) { jumble = value; } - if (key == "freq" ) { freq = value; } - if (key == "method" ) { method = value; } - if (key == "fileroot" ) { fileroot = value; } + if (key == "phylip" ) { phylipfile = value; inputFileName = value; fileroot = value; format = "phylip"; } + if (key == "column" ) { columnfile = value; inputFileName = value; fileroot = value; format = "column"; } + 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 == "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; } + if (key == "order" ) { orderfile = value; } + if (key == "group" ) { groupfile = value; } + if (key == "cutoff" ) { cutoff = value; } + if (key == "precision" ) { precision = value; } + if (key == "iters" ) { iters = value; } + if (key == "jumble" ) { jumble = value; } + if (key == "freq" ) { freq = value; } + if (key == "method" ) { method = value; } + if (key == "fileroot" ) { fileroot = value; } + if (key == "abund" ) { abund = value; } + if (key == "random" ) { randomtree = value; } + if (key == "calc") { calc = value; } + 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 == "hard") { hard = value; } + if (key == "soft") { soft = value; } + if (key == "scale") { scale = value; } + if (key == "countends" ) { countends = value; } + if (key == "processors" ) { processors = value; } + if (key == "size" ) { size = value; } + if (key == "candidate") { candidatefile = value; } + if (key == "search") { search = value; } + if (key == "ksize") { ksize = value; } + if (key == "align") { align = value; } + if (key == "match") { match = value; } + if (key == "mismatch") { mismatch = value; } + if (key == "gapopen") { gapopen = value; } + if (key == "gapextend" ) { gapextend = value; } + if (key == "start" ) { startPos = value; } + if (key == "end" ) { endPos = value; } + if (key == "maxambig" ) { maxAmbig = value; } + if (key == "maxhomop" ) { maxHomoPolymer = value; } + if (key == "minlength" ) { minLength = value; } + if (key == "maxlength" ) { maxLength = value; } + - if (key == "single") {//stores estimators in a vector - singleEstimators.clear(); //clears out old values - if (value == "default") { value = "sobs-chao-ace-jack-bootstrap-shannon-npshannon-simpson-rarefraction"; } - splitAtDash(value, singleEstimators); - } - if (key == "rarefaction") {//stores estimators in a vector - rareEstimators.clear(); //clears out old values - if (value == "default") { value = "rarefraction"; } - splitAtDash(value, rareEstimators); - } - if (key == "shared") {//stores estimators in a vector - sharedEstimators.clear(); //clears out old values - if (value == "default") { value = "sharedChao-sharedAce-sharedJabund-sharedSorensonAbund-sharedJclass-sharedSorClass-sharedJest-sharedSorEst-SharedThetaYC-SharedThetaN"; } - splitAtDash(value, sharedEstimators); - } - if (key == "summary") { //stores summaries to be used in a vector - summaryEstimators.clear(); - if (value == "default") { value = "summary-chao-ace-jack-bootstrap-shannon-npshannon-simpson"; } - splitAtDash(value, summaryEstimators); - } - if (key == "sharedsummary") { //stores sharedSummaries to be used in a vector - sharedSummaryEstimators.clear(); - if (value == "default") { value = "sharedChao-sharedAce-sharedJabund-sharedSorensonAbund-sharedJclass-sharedSorClass-sharedJest-sharedSorEst-SharedThetaYC-SharedThetaN"; } - splitAtDash(value, sharedSummaryEstimators); - } - if (key == "sharedrarefaction") { //stores sharedrarefaction to be used in a vector - sharedRareEstimators.clear(); - if (value == "default") { value = "sharedobserved"; } - splitAtDash(value, sharedRareEstimators); - } - if (key == "line") {//stores lines to be used in a vector lines.clear(); + labels.clear(); line = value; - splitAtDash(value, lines); - allLines = 0; + label = ""; + 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(); label = value; - splitAtDash(value, labels); - allLines = 0; + line = ""; + if (label != "all") { splitAtDash(value, labels); allLines = 0; } + else { allLines = 1; } + } + + if (key == "groups") {//stores groups to be used in a vector + Groups.clear(); + groups = value; + splitAtDash(value, Groups); } } + //set format for shared + if ((listfile != "") && (groupfile != "")) { format = "shared"; } + if ((phylipfile != "") && (groupfile != "")) { format = "matrix"; } - //input defaults - if (commandString == "collect.single") { - if (singleEstimators.size() == 0) { splitAtDash(single, singleEstimators); } + //input defaults for calculators + if (commandName == "collect.single") { + + if ((calc == "default") || (calc == "")) { calc = "sobs-chao-ace-jack-shannon-npshannon-simpson"; } + Estimators.clear(); + splitAtDash(calc, Estimators); + } + if (commandName == "rarefaction.single") { + if ((calc == "default") || (calc == "")) { calc = "sobs"; } + Estimators.clear(); + splitAtDash(calc, Estimators); } - if (commandString == "rarefaction.single") { - if (rareEstimators.size() == 0) { splitAtDash(rarefaction, rareEstimators); } + if (commandName == "collect.shared") { + if ((calc == "default") || (calc == "")) { calc = "sharedsobs-sharedchao-sharedace-jabund-sorabund-jclass-sorclass-jest-sorest-thetayc-thetan"; } + Estimators.clear(); + splitAtDash(calc, Estimators); } - if (commandString == "collect.shared") { - if (sharedEstimators.size() == 0) { splitAtDash(shared, sharedEstimators); } + if (commandName == "summary.single") { + if ((calc == "default") || (calc == "")) { calc = "sobs-chao-ace-jack-shannon-npshannon-simpson"; } + Estimators.clear(); + splitAtDash(calc, Estimators); } - if (commandString == "summary.single") { - if (summaryEstimators.size() == 0) { splitAtDash(summary, summaryEstimators); } + if (commandName == "summary.shared") { + if ((calc == "default") || (calc == "")) { calc = "sharedsobs-sharedchao-sharedace-jabund-sorabund-jclass-sorclass-jest-sorest-thetayc-thetan"; } + Estimators.clear(); + splitAtDash(calc, Estimators); } - if (commandString == "summary.shared") { - if (sharedSummaryEstimators.size() == 0) { splitAtDash(sharedsummary, sharedSummaryEstimators); } + if (commandName == "rarefaction.shared") { + if ((calc == "default") || (calc == "")) { calc = "sharedobserved"; } + Estimators.clear(); + splitAtDash(calc, Estimators); } - if (commandString == "rarefaction.shared") { - if (sharedRareEstimators.size() == 0) { splitAtDash(sharedrarefaction, sharedRareEstimators); } + if (commandName == "dist.seqs") { + if ((calc == "default") || (calc == "")) { calc = "onegap"; } + if (countends == "") { countends = "T"; } + Estimators.clear(); + splitAtDash(calc, Estimators); } + if (commandName == "venn") { + if ((calc == "default") || (calc == "")) { + if (format == "list") { calc = "sobs"; } + else { calc = "sharedsobs"; } + } + Estimators.clear(); + splitAtDash(calc, Estimators); + } + if ((commandName == "tree.shared") || (commandName == "bootstrap.shared") || (commandName == "dist.shared")) { + if ((calc == "default") || (calc == "")) { + calc = "jclass-thetayc"; + } + Estimators.clear(); + splitAtDash(calc, Estimators); + } + + if(commandName == "filter.seqs"){ + if(trump == "" && vertical == "" && hard == "" && soft == ""){ + trump = '.'; + } - + } + + //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")) { + if (listfile != "") { format = "list"; } + else if (sabundfile != "") { format = "sabund"; } + else if (rabundfile != "") { format = "rabund"; } + } } catch(exception& e) { cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function parseGlobalData. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; @@ -253,7 +283,6 @@ void GlobalData::parseGlobalData(string commandString, string optionText){ cout << "An unknown error has occurred in the GlobalData class function parseGlobalData. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; exit(1); } - } /*******************************************************/ @@ -267,6 +296,8 @@ string GlobalData::getSabundFile() { return sabundfile; } string GlobalData::getNameFile() { return namefile; } string GlobalData::getGroupFile() { return groupfile; } string GlobalData::getOrderFile() { return orderfile; } +string GlobalData::getTreeFile() { return treefile; } +string GlobalData::getSharedFile() { return sharedfile; } string GlobalData::getFastaFile() { return fastafile; } string GlobalData::getCutOff() { return cutoff; } string GlobalData::getFormat() { return format; } @@ -276,29 +307,65 @@ string GlobalData::getFileRoot() { return fileroot; } string GlobalData::getIters() { return iters; } string GlobalData::getJumble() { return jumble; } string GlobalData::getFreq() { return freq; } -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;} -void GlobalData::setPhylipFile(string file) { phylipfile = file; inputFileName = file;} -void GlobalData::setColumnFile(string file) { columnfile = file; inputFileName = file;} -//void GlobalData::setGroupFile(string file) { groupfile = file; } -void GlobalData::setNameFile(string file) { namefile = file; } -void GlobalData::setFormat(string Format) { format = Format; } +string GlobalData::getAbund() { return abund; } +string GlobalData::getRandomTree() { return randomtree; } +string GlobalData::getGroups() { return groups; } +string GlobalData::getStep() { return step; } +string GlobalData::getForm() { return form; } +string GlobalData::getSorted() { return sorted; } +string GlobalData::getVertical() { return vertical; } +string GlobalData::getTrump() { return trump; } +string GlobalData::getSoft() { return soft; } +string GlobalData::getHard() { return hard; } +string GlobalData::getScale() { return scale; } +string GlobalData::getCountEnds() { return countends; } +string GlobalData::getProcessors() { return processors; } +string GlobalData::getSize() { return size; } +string GlobalData::getCandidateFile() { return candidatefile;} +string GlobalData::getSearch() { return search; } +string GlobalData::getKSize() { return ksize; } +string GlobalData::getAlign() { return align; } +string GlobalData::getMatch() { return match; } +string GlobalData::getMismatch() { return mismatch; } +string GlobalData::getGapopen() { return gapopen; } +string GlobalData::getGapextend() { return gapextend; } +string GlobalData::getStartPos() { return startPos; } +string GlobalData::getEndPos() { return endPos; } +string GlobalData::getMaxAmbig() { return maxAmbig; } +string GlobalData::getMaxHomoPolymer() { return maxHomoPolymer; } +string GlobalData::getMinLength() { return minLength; } +string GlobalData::getMaxLength() { return maxLength; } + + +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; } +void GlobalData::setPhylipFile(string file) { phylipfile = file; inputFileName = file; } +void GlobalData::setColumnFile(string file) { columnfile = file; inputFileName = file; } +void GlobalData::setGroupFile(string file) { groupfile = file; } +void GlobalData::setSharedFile(string file) { sharedfile = file; inputFileName = file; fileroot = file; } +void GlobalData::setNameFile(string file) { namefile = file; } +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::setCountEnds(string e) { countends = e; } +void GlobalData::setProcessors(string p) { processors = p; } /*******************************************************/ /******************************************************/ - GlobalData::GlobalData() { //option definitions should go here... helpRequest = ""; clear(); + gListVector = NULL; + gSparseMatrix = NULL; } /*******************************************************/ /******************************************************/ - void GlobalData::clear() { //option definitions should go here... phylipfile = ""; @@ -310,27 +377,93 @@ void GlobalData::clear() { groupfile = ""; orderfile = ""; fastafile = ""; + treefile = ""; + sharedfile = ""; + candidatefile = ""; cutoff = "10.00"; format = ""; precision = "100"; iters = "1000"; line = ""; label = ""; - jumble = "0"; + groups = ""; + jumble = "1"; //0 means don't jumble, 1 means jumble. + 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"; fileroot = ""; - single = "sobs-chao-ace-jack-bootstrap-shannon-npshannon-simpson-rarefraction"; - rarefaction = "rarefaction"; - shared = "sharedChao-sharedAce-sharedJabund-sharedSorensonAbund-sharedJclass-sharedSorClass-sharedJest-sharedSorEst-SharedThetaYC-SharedThetaN"; - sharedsummary = "sharedChao-sharedAce-sharedJabund-sharedSorensonAbund-sharedJclass-sharedSorClass-sharedJest-sharedSorEst-SharedThetaYC-SharedThetaN"; - summary = "summary-chao-ace-jack-bootstrap-shannon-npshannon-simpson"; - sharedrarefaction = "sharedobserved"; + abund = "10"; + step = "0.01"; + form = "integral"; + sorted = "T"; //F means don't sort, T means sort. + vertical = "F"; + trump = ""; + hard = ""; + soft = ""; + scale = "log10"; + countends = "T"; //yes + processors = "1"; + size = "0"; + search = "kmer"; + ksize = "8"; + align = "needleman"; + match = "1.0"; + mismatch = "-1.0"; + gapopen = "-1.0"; + gapextend = "-2.0"; + startPos = "-1"; + endPos = "-1"; + maxAmbig = "-1"; + maxHomoPolymer = "-1"; + minLength = "-1"; + maxLength = "-1"; + } -/*******************************************************/ + +//*******************************************************/ /******************************************************/ +void GlobalData::reset() { + label = ""; + line = ""; + cutoff = "10.00"; + precision = "100"; + iters = "1000"; + groups = ""; + jumble = "1"; //0 means don't jumble, 1 means jumble. + 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"; + calc = ""; + abund = "10"; + step = "0.01"; + form = "integral"; + countends = "T"; + processors = "1"; + size = "0"; + search = "kmer"; + ksize = "8"; + align = "needleman"; + match = "1.0"; + mismatch = "-1.0"; + gapopen = "-1.0"; + gapextend = "-2.0"; + vertical = ""; + trump = ""; + hard = ""; + soft = ""; + startPos = "-1"; + endPos = "-1"; + maxAmbig = "-1"; + maxHomoPolymer = "-1"; + minLength = "-1"; + maxLength = "-1"; + +} +/*******************************************************/ +/******************************************************/ GlobalData::~GlobalData() { _uniqueInstance = 0; if(gListVector != NULL) { delete gListVector; } @@ -339,139 +472,145 @@ GlobalData::~GlobalData() { } /*******************************************************/ -/******************************************************/ -//This function parses the estimator options and puts them in a vector -void GlobalData::splitAtDash(string& estim, vector& container) { - try { - string individual; - - while (estim.find_first_of('-') != -1) { - individual = estim.substr(0,estim.find_first_of('-')); - if ((estim.find_first_of('-')+1) <= estim.length()) { //checks to make sure you don't have dash at end of string - estim = estim.substr(estim.find_first_of('-')+1, estim.length()); - container.push_back(individual); - } - } - //get last one - container.push_back(estim); - } - catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function splitAtDash. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the GlobalData class function splitAtDash. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - -} /*******************************************************/ - -/******************************************************/ -//This function parses the label options and puts them in a set -void GlobalData::splitAtDash(string& estim, set& container) { +void GlobalData::parseTreeFile() { + //Why is THIS in GlobalData??? - PDS + + //only takes names from the first tree and assumes that all trees use the same names. try { - string individual; + string filename = treefile; + ifstream filehandle; + openInputFile(filename, filehandle); + int c, comment; + comment = 0; - while (estim.find_first_of('-') != -1) { - individual = estim.substr(0,estim.find_first_of('-')); - if ((estim.find_first_of('-')+1) <= estim.length()) { //checks to make sure you don't have dash at end of string - estim = estim.substr(estim.find_first_of('-')+1, estim.length()); - container.insert(individual); + //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 } } - //get last one - container.insert(estim); + } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function splitAtDash. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + 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 splitAtDash. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + cout << "An unknown error has occurred in the GlobalData class function parseTreeFile. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; exit(1); - } - + } } /*******************************************************/ -/******************************************************/ -//This function parses the line options and puts them in a set -void GlobalData::splitAtDash(string& estim, set& container) { +/*******************************************************/ +void GlobalData::readTreeString(ifstream& filehandle) { try { - string individual; - int lineNum; + int c; + string name; //k - while (estim.find_first_of('-') != -1) { - individual = estim.substr(0,estim.find_first_of('-')); - if ((estim.find_first_of('-')+1) <= estim.length()) { //checks to make sure you don't have dash at end of string - estim = estim.substr(estim.find_first_of('-')+1, estim.length()); - convert(individual, lineNum); //convert the string to int - container.insert(lineNum); + 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); } - } - //get last one - convert(estim, lineNum); //convert the string to int - container.insert(lineNum); - } - catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function splitAtDash. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the GlobalData class function splitAtDash. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } + c = filehandle.get(); + if (c == ';') { break; } + // k = c; +//cout << k << endl; -} -/*******************************************************/ - -/******************************************************/ - -//This function splits up the various option parameters -void GlobalData::splitAtComma(string& prefix, string& suffix){ - try { - prefix = suffix.substr(0,suffix.find_first_of(',')); - if ((suffix.find_first_of(',')+2) <= suffix.length()) { //checks to make sure you don't have comma at end of string - suffix = suffix.substr(suffix.find_first_of(',')+2, suffix.length()); } } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function splitAtComma. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + 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 splitAtComma. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + cout << "An unknown error has occurred in the GlobalData class function parseTreeFile. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; exit(1); - } + } +} -} /*******************************************************/ -/******************************************************/ -//This function separates the key value from the option value i.e. distfile = "96_..." -void GlobalData::splitAtEquals(string& key, string& value){ - try { - if(value.find_first_of('=') != -1){ - key = value.substr(0,value.find_first_of('=')); - if ((value.find_first_of('=')+1) <= value.length()) { - value = value.substr(value.find_first_of('=')+1, value.length()); - } - }else{ - key = value; - value = 1; - } - } - catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the GlobalData class Function splitAtEquals. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the GlobalData class function splitAtEquals. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - -} /*******************************************************/ -/******************************************************/ +