X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=counttable.cpp;h=376bd73487b4031077f7dd26b1c58b648d9ff04d;hb=01f8d2c7d982a6209211f5abbcf2a086fdf60d0a;hp=a664228b17c35fff4ce48ca0ea5255b5b99bb1f3;hpb=5a4ac4f954c4b4445bcee272f1f8220ddcc9c1e4;p=mothur.git diff --git a/counttable.cpp b/counttable.cpp index a664228..376bd73 100644 --- a/counttable.cpp +++ b/counttable.cpp @@ -8,7 +8,23 @@ #include "counttable.h" - +/************************************************************/ +bool CountTable::testGroups(string file) { + try { + m = MothurOut::getInstance(); hasGroups = false; total = 0; + ifstream in; + m->openInputFile(file, in); + + string headers = m->getline(in); m->gobble(in); + vector columnHeaders = m->splitWhiteSpace(headers); + if (columnHeaders.size() > 2) { hasGroups = true; } + return hasGroups; + } + catch(exception& e) { + m->errorOut(e, "CountTable", "readTable"); + exit(1); + } +} /************************************************************/ int CountTable::readTable(string file) { try { @@ -174,6 +190,75 @@ int CountTable::get(string seqName) { exit(1); } } +/************************************************************/ +//add seqeunce without group info +int CountTable::push_back(string seqName) { + try { + map::iterator it = indexNameMap.find(seqName); + if (it == indexNameMap.end()) { + if (hasGroups) { m->mothurOut("[ERROR]: Your count table has groups and I have no group information for " + seqName + "."); m->mothurOutEndLine(); m->control_pressed = true; } + indexNameMap[seqName] = uniques; + totals.push_back(1); + total++; + uniques++; + }else { + m->mothurOut("[ERROR]: Your count table contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); m->control_pressed = true; + } + + return 0; + } + catch(exception& e) { + m->errorOut(e, "CountTable", "push_back"); + exit(1); + } +} +/************************************************************/ +//add seqeunce without group info +int CountTable::push_back(string seqName, int thisTotal) { + try { + map::iterator it = indexNameMap.find(seqName); + if (it == indexNameMap.end()) { + if (hasGroups) { m->mothurOut("[ERROR]: Your count table has groups and I have no group information for " + seqName + "."); m->mothurOutEndLine(); m->control_pressed = true; } + indexNameMap[seqName] = uniques; + totals.push_back(thisTotal); + total+=thisTotal; + uniques++; + }else { + m->mothurOut("[ERROR]: Your count table contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); m->control_pressed = true; + } + + return 0; + } + catch(exception& e) { + m->errorOut(e, "CountTable", "push_back"); + exit(1); + } +} +/************************************************************/ +//add sequence with group info +int CountTable::push_back(string seqName, vector groupCounts) { + try { + map::iterator it = indexNameMap.find(seqName); + if (it == indexNameMap.end()) { + if ((hasGroups) && (groupCounts.size() != getNumGroups())) { m->mothurOut("[ERROR]: Your count table has a " + toString(getNumGroups()) + " groups and " + seqName + " has " + toString(groupCounts.size()) + ", please correct."); m->mothurOutEndLine(); m->control_pressed = true; } + int thisTotal = 0; + for (int i = 0; i < getNumGroups(); i++) { totalGroups[i] += groupCounts[i]; thisTotal += groupCounts[i]; } + indexNameMap[seqName] = uniques; + totals.push_back(thisTotal); + total+= thisTotal; + uniques++; + }else { + m->mothurOut("[ERROR]: Your count table contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); m->control_pressed = true; + } + + return 0; + } + catch(exception& e) { + m->errorOut(e, "CountTable", "push_back"); + exit(1); + } +} + /************************************************************/ //create ListVector from uniques ListVector CountTable::getListVector() {