X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=groupmap.cpp;h=92a43e965044c06c2fdcaca78d50779440b301ab;hb=2c97dd48b8e27ee0a6a86c7a082f4c504c3357c6;hp=598e301648978ab642274edb69ffa41bbea6f205;hpb=315e38cf393c82be238da5b32574f225a020d25c;p=mothur.git diff --git a/groupmap.cpp b/groupmap.cpp index 598e301..92a43e9 100644 --- a/groupmap.cpp +++ b/groupmap.cpp @@ -12,8 +12,9 @@ /************************************************************/ GroupMap::GroupMap(string filename) { + m = MothurOut::getInstance(); groupFileName = filename; - openInputFile(filename, fileHandle); + m->openInputFile(filename, fileHandle); index = 0; } @@ -24,26 +25,84 @@ int GroupMap::readMap() { string seqName, seqGroup; int error = 0; + + while(fileHandle){ + fileHandle >> seqName; m->gobble(fileHandle); //read from first column + fileHandle >> seqGroup; //read from second column + + if (m->control_pressed) { fileHandle.close(); return 1; } + setNamesOfGroups(seqGroup); + + it = groupmap.find(seqName); + + if (it != groupmap.end()) { error = 1; m->mothurOut("Your groupfile contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); } + else { + groupmap[seqName] = seqGroup; //store data in map + seqsPerGroup[seqGroup]++; //increment number of seqs in that group + } + m->gobble(fileHandle); + } + fileHandle.close(); + m->setAllGroups(namesOfGroups); + return error; +} +/************************************************************/ +int GroupMap::readDesignMap() { + string seqName, seqGroup; + int error = 0; + while(fileHandle){ - fileHandle >> seqName; //read from first column + fileHandle >> seqName; m->gobble(fileHandle); //read from first column fileHandle >> seqGroup; //read from second column + if (m->control_pressed) { fileHandle.close(); return 1; } + setNamesOfGroups(seqGroup); it = groupmap.find(seqName); - if (it != groupmap.end()) { error = 1; mothurOut("Your groupfile contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); mothurOutEndLine(); } + if (it != groupmap.end()) { error = 1; m->mothurOut("Your designfile contains more than 1 group named " + seqName + ", group names must be unique. Please correct."); m->mothurOutEndLine(); } else { groupmap[seqName] = seqGroup; //store data in map seqsPerGroup[seqGroup]++; //increment number of seqs in that group } - gobble(fileHandle); + m->gobble(fileHandle); } fileHandle.close(); + m->setAllGroups(namesOfGroups); return error; } /************************************************************/ +int GroupMap::readDesignMap(string filename) { + groupFileName = filename; + m->openInputFile(filename, fileHandle); + index = 0; + string seqName, seqGroup; + int error = 0; + + while(fileHandle){ + fileHandle >> seqName; m->gobble(fileHandle); //read from first column + fileHandle >> seqGroup; //read from second column + + if (m->control_pressed) { fileHandle.close(); return 1; } + + setNamesOfGroups(seqGroup); + + it = groupmap.find(seqName); + + if (it != groupmap.end()) { error = 1; m->mothurOut("Your designfile contains more than 1 group named " + seqName + ", group names must be unique. Please correct."); m->mothurOutEndLine(); } + else { + groupmap[seqName] = seqGroup; //store data in map + seqsPerGroup[seqGroup]++; //increment number of seqs in that group + } + m->gobble(fileHandle); + } + fileHandle.close(); + m->setAllGroups(namesOfGroups); + return error; +} +/************************************************************/ int GroupMap::getNumGroups() { return namesOfGroups.size(); } /************************************************************/ @@ -58,26 +117,36 @@ string GroupMap::getGroup(string sequenceName) { } /************************************************************/ + void GroupMap::setGroup(string sequenceName, string groupN) { - groupmap[sequenceName] = groupN; + setNamesOfGroups(groupN); + + it = groupmap.find(sequenceName); + + if (it != groupmap.end()) { m->mothurOut("Your groupfile contains more than 1 sequence named " + sequenceName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); } + else { + groupmap[sequenceName] = groupN; //store data in map + seqsPerGroup[groupN]++; //increment number of seqs in that group + } } + /************************************************************/ void GroupMap::setNamesOfGroups(string seqGroup) { - int i, count; - count = 0; - for (i=0; ierrorOut(e, "GroupMap", "isValidGroup"); exit(1); } } @@ -107,7 +176,7 @@ int GroupMap::getNumSeqs(string group) { } catch(exception& e) { - errorOut(e, "GroupMap", "getNumSeqs"); + m->errorOut(e, "GroupMap", "getNumSeqs"); exit(1); } } @@ -125,9 +194,30 @@ vector GroupMap::getNamesSeqs(){ return names; } catch(exception& e) { - errorOut(e, "GroupMap", "getNamesSeqs"); + m->errorOut(e, "GroupMap", "getNamesSeqs"); exit(1); } } /************************************************************/ +vector GroupMap::getNamesSeqs(vector picked){ + try { + + vector names; + + for (it = groupmap.begin(); it != groupmap.end(); it++) { + //if you are belong to one the the groups in the picked vector add you + if (m->inUsersGroups(it->second, picked)) { + names.push_back(it->first); + } + } + + return names; + } + catch(exception& e) { + m->errorOut(e, "GroupMap", "getNamesSeqs"); + exit(1); + } +} + +/************************************************************/