temp = validParameter.validFile(parameters, "dereplicate", false);
- if (temp == "not found") {
- if (groupfile != "") { temp = "false"; }
- else { temp = "true"; }
- }
+ if (temp == "not found") { temp = "false"; }
dups = m->isTrue(temp);
if (hasName && (templatefile != "self")) { m->mothurOut("You have provided a namefile and the reference parameter is not set to self. I am not sure what reference you are trying to use, aborting."); m->mothurOutEndLine(); abort=true; }
+ if (hasCount && (templatefile != "self")) { m->mothurOut("You have provided a countfile and the reference parameter is not set to self. I am not sure what reference you are trying to use, aborting."); m->mothurOutEndLine(); abort=true; }
if (hasGroup && (templatefile != "self")) { m->mothurOut("You have provided a group file and the reference parameter is not set to self. I am not sure what reference you are trying to use, aborting."); m->mothurOutEndLine(); abort=true; }
//look for uchime exe
int error;
if (hasCount) {
CountTable ct;
- ct.readTable(nameFile);
+ ct.readTable(nameFile, true, false);
for(map<string, string>::iterator it = seqs.begin(); it != seqs.end(); it++) {
int num = ct.getNumSeqs(it->first);
if (num == 0) { error = 1; }
if(processors == 1) { totalSeqs = driverGroups(outputFileName, newFasta, accnosFileName, alnsFileName, newCountFile, 0, groups.size(), groups);
if (hasCount && dups) {
- CountTable c; c.readTable(nameFile);
+ CountTable c; c.readTable(nameFile, true, false);
if (!m->isBlank(newCountFile)) {
ifstream in2;
m->openInputFile(newCountFile, in2);
if (hasCount) {
set<string> doNotRemove;
- CountTable c; c.readTable(newCountFile);
+ CountTable c; c.readTable(newCountFile, true, true);
vector<string> namesInTable = c.getNamesOfSeqs();
for (int i = 0; i < namesInTable.size(); i++) {
int temp = c.getNumSeqs(namesInTable[i]);
int num = 0;
CountTable newCount;
- if (hasCount && dups) { newCount.readTable(nameFile); }
+ if (hasCount && dups) { newCount.readTable(nameFile, true, false); }
//sanity check
if (groups.size() < processors) { processors = groups.size(); }
//divide the groups between the processors
vector<linePair> lines;
- int numGroupsPerProcessor = groups.size() / processors;
- for (int i = 0; i < processors; i++) {
- int startIndex = i * numGroupsPerProcessor;
- int endIndex = (i+1) * numGroupsPerProcessor;
- if(i == (processors - 1)){ endIndex = groups.size(); }
- lines.push_back(linePair(startIndex, endIndex));
- }
-
+ int remainingPairs = groups.size();
+ int startIndex = 0;
+ for (int remainingProcessors = processors; remainingProcessors > 0; remainingProcessors--) {
+ int numPairs = remainingPairs; //case for last processor
+ if (remainingProcessors != 1) { numPairs = ceil(remainingPairs / remainingProcessors); }
+ lines.push_back(linePair(startIndex, (startIndex+numPairs))); //startIndex, endIndex
+ startIndex = startIndex + numPairs;
+ remainingPairs = remainingPairs - numPairs;
+ }
+
#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
//loop through and create all the processes you want