X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=counttable.cpp;h=d5720acd386c36cf8cd713dcbc6d1bd5e507609b;hp=48b52d98e76e6da585c862682c3906bdf4ad0f67;hb=b206f634aae1b4ce13978d203247fb64757d5482;hpb=79ca496859f48f1c38803c0f7c603faac348fe4c diff --git a/counttable.cpp b/counttable.cpp index 48b52d9..d5720ac 100644 --- a/counttable.cpp +++ b/counttable.cpp @@ -211,7 +211,7 @@ int CountTable::createTable(string namefile, string groupfile, bool createGroup) } } /************************************************************/ -int CountTable::readTable(string file) { +int CountTable::readTable(string file, bool readGroups, bool mothurRunning) { try { filename = file; ifstream in; @@ -227,7 +227,7 @@ int CountTable::readTable(string file) { indexNameMap.clear(); counts.clear(); map originalGroupIndexes; - if (columnHeaders.size() > 2) { hasGroups = true; numGroups = columnHeaders.size() - 2; } + if ((columnHeaders.size() > 2) && readGroups) { hasGroups = true; numGroups = columnHeaders.size() - 2; } for (int i = 2; i < columnHeaders.size(); i++) { groups.push_back(columnHeaders[i]); originalGroupIndexes[i-2] = columnHeaders[i]; totalGroups.push_back(0); } //sort groups to keep consistent with how we store the groups in groupmap sort(groups.begin(), groups.end()); @@ -246,9 +246,18 @@ int CountTable::readTable(string file) { in >> name; m->gobble(in); in >> thisTotal; m->gobble(in); if (m->debug) { m->mothurOut("[DEBUG]: " + name + '\t' + toString(thisTotal) + "\n"); } + if ((thisTotal == 0) && !mothurRunning) { error=true; m->mothurOut("[ERROR]: Your count table contains a sequence named " + name + " with a total=0. Please correct."); m->mothurOutEndLine(); + } + //if group info, then read it vector groupCounts; groupCounts.resize(numGroups, 0); - for (int i = 0; i < numGroups; i++) { int thisIndex = indexGroupMap[originalGroupIndexes[i]]; in >> groupCounts[thisIndex]; m->gobble(in); totalGroups[thisIndex] += groupCounts[thisIndex]; } + if (columnHeaders.size() > 2) { //file contains groups + if (readGroups) { //user wants to save them + for (int i = 0; i < numGroups; i++) { int thisIndex = indexGroupMap[originalGroupIndexes[i]]; in >> groupCounts[thisIndex]; m->gobble(in); totalGroups[thisIndex] += groupCounts[thisIndex]; } + }else { //read and discard + m->getline(in); m->gobble(in); + } + } map::iterator it = indexNameMap.find(name); if (it == indexNameMap.end()) {