X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=groupmap.cpp;fp=groupmap.cpp;h=481fd1decfc4516eb5e1cf618c6b4d40cffbc8a9;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/groupmap.cpp b/groupmap.cpp new file mode 100644 index 0000000..481fd1d --- /dev/null +++ b/groupmap.cpp @@ -0,0 +1,195 @@ +/* + * groupmap.cpp + * Dotur + * + * Created by Sarah Westcott on 12/1/08. + * Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved. + * + */ + +#include "groupmap.h" + +/************************************************************/ + + GroupMap::GroupMap(string filename) { + m = MothurOut::getInstance(); + groupFileName = filename; + m->openInputFile(filename, fileHandle); + index = 0; +} + +/************************************************************/ + GroupMap::~GroupMap(){} + +/************************************************************/ +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; 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(); } +/************************************************************/ + +string GroupMap::getGroup(string sequenceName) { + + it = groupmap.find(sequenceName); + if (it != groupmap.end()) { //sequence name was in group file + return it->second; + }else { + return "not found"; + } +} + +/************************************************************/ + +void GroupMap::setGroup(string sequenceName, string 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); + } +} +/************************************************************/ +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); + } +} +/************************************************************/ +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); + } +} + +/************************************************************/ +