X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=groupmap.cpp;h=d57646e3e3dad937d3ca0fa81b26f402cfa1ad4d;hb=a8367302932de9be5434e77f6e5829d7609e2aec;hp=27302dbce43f02a008fa54aaeb5e84bda8a8b003;hpb=44c1323a88b2a697c7047df1b3bb8c59eadd15b1;p=mothur.git diff --git a/groupmap.cpp b/groupmap.cpp index 27302db..d57646e 100644 --- a/groupmap.cpp +++ b/groupmap.cpp @@ -12,37 +12,42 @@ /************************************************************/ GroupMap::GroupMap(string filename) { + m = MothurOut::getInstance(); groupFileName = filename; openInputFile(filename, fileHandle); index = 0; } /************************************************************/ - GroupMap::~GroupMap(){}; + GroupMap::~GroupMap(){} /************************************************************/ -void GroupMap::readMap() { +int GroupMap::readMap() { string seqName, seqGroup; - + int error = 0; + while(fileHandle){ - fileHandle >> seqName; //read from first column + fileHandle >> seqName; gobble(fileHandle); //read from first column fileHandle >> seqGroup; //read from second column + if (m->control_pressed) { fileHandle.close(); return 1; } + setNamesOfGroups(seqGroup); - - groupmap[seqName] = seqGroup; //store data in map - + + 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 + } gobble(fileHandle); } fileHandle.close(); + return error; } /************************************************************/ - -int GroupMap::getNumGroups() { - - return namesOfGroups.size(); - -} +int GroupMap::getNumGroups() { return namesOfGroups.size(); } /************************************************************/ string GroupMap::getGroup(string sequenceName) { @@ -53,11 +58,13 @@ string GroupMap::getGroup(string sequenceName) { }else { return "not found"; } - } /************************************************************/ - +void GroupMap::setGroup(string sequenceName, string groupN) { + groupmap[sequenceName] = groupN; +} +/************************************************************/ void GroupMap::setNamesOfGroups(string seqGroup) { int i, count; count = 0; @@ -70,7 +77,60 @@ void GroupMap::setNamesOfGroups(string seqGroup) { } if (count == namesOfGroups.size()) { namesOfGroups.push_back(seqGroup); //new group + seqsPerGroup[seqGroup] = 0; groupIndex[seqGroup] = index; index++; } } +/************************************************************/ +bool GroupMap::isValidGroup(string groupname) { + try { + for (int i = 0; i < namesOfGroups.size(); i++) { + if (groupname == namesOfGroups[i]) { return true; } + } + + return false; + } + catch(exception& e) { + m->errorOut(e, "GroupMap", "isValidGroup"); + exit(1); + } +} +/************************************************************/ +int GroupMap::getNumSeqs(string group) { + try { + + map::iterator itNum; + + itNum = seqsPerGroup.find(group); + + if (itNum == seqsPerGroup.end()) { return 0; } + + return seqsPerGroup[group]; + + } + catch(exception& e) { + m->errorOut(e, "GroupMap", "getNumSeqs"); + exit(1); + } +} + +/************************************************************/ +vector GroupMap::getNamesSeqs(){ + try { + + vector names; + + for (it = groupmap.begin(); it != groupmap.end(); it++) { + names.push_back(it->first); + } + + return names; + } + catch(exception& e) { + m->errorOut(e, "GroupMap", "getNamesSeqs"); + exit(1); + } +} +/************************************************************/ +