X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=treemap.cpp;h=c228162aab1d511af3fc5318aaf3e5eb5b39610c;hb=36a6b02cf7f09d2bc34376b588944a9ca73429c5;hp=e472570895414a4ec535e10c5f02bee10dfea982;hpb=219104a887d4725af80487729f4c34a030fe4358;p=mothur.git diff --git a/treemap.cpp b/treemap.cpp index e472570..c228162 100644 --- a/treemap.cpp +++ b/treemap.cpp @@ -12,36 +12,99 @@ /************************************************************/ TreeMap::TreeMap(string filename) { + m = MothurOut::getInstance(); groupFileName = filename; - openInputFile(filename, fileHandle); + m->openInputFile(filename, fileHandle); } /************************************************************/ TreeMap::~TreeMap(){} +/************************************************************/ +int TreeMap::readMap(string gf) { + + groupFileName = gf; + m->openInputFile(gf, fileHandle); + + 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); + + map::iterator itCheck = treemap.find(seqName); + if (itCheck != treemap.end()) { error = 1; m->mothurOut("[WARNING]: Your groupfile contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); } + else { + namesOfSeqs.push_back(seqName); + treemap[seqName].groupname = seqGroup; //store data in map + + it2 = seqsPerGroup.find(seqGroup); + if (it2 == seqsPerGroup.end()) { //if it's a new group + seqsPerGroup[seqGroup] = 1; + }else {//it's a group we already have + seqsPerGroup[seqGroup]++; + } + } + + m->gobble(fileHandle); + } + fileHandle.close(); + + return error; +} /************************************************************/ -void TreeMap::readMap() { +int TreeMap::readMap() { 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 - namesOfSeqs.push_back(seqName); - setNamesOfGroups(seqGroup); - - treemap[seqName].groupname = seqGroup; //store data in map + if (m->control_pressed) { fileHandle.close(); return 1; } - it2 = seqsPerGroup.find(seqGroup); - if (it2 == seqsPerGroup.end()) { //if it's a new group - seqsPerGroup[seqGroup] = 1; - }else {//it's a group we already have - seqsPerGroup[seqGroup]++; + setNamesOfGroups(seqGroup); + + map::iterator itCheck = treemap.find(seqName); + if (itCheck != treemap.end()) { error = 1; m->mothurOut("[WARNING]: Your groupfile contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine(); } + else { + namesOfSeqs.push_back(seqName); + treemap[seqName].groupname = seqGroup; //store data in map + + it2 = seqsPerGroup.find(seqGroup); + if (it2 == seqsPerGroup.end()) { //if it's a new group + seqsPerGroup[seqGroup] = 1; + }else {//it's a group we already have + seqsPerGroup[seqGroup]++; + } } - - gobble(fileHandle); + + m->gobble(fileHandle); } fileHandle.close(); + + + return error; +} +/************************************************************/ +void TreeMap::addSeq(string seqName, string seqGroup) { + + namesOfSeqs.push_back(seqName); + setNamesOfGroups(seqGroup); + + treemap[seqName].groupname = seqGroup; //store data in map + + it2 = seqsPerGroup.find(seqGroup); + if (it2 == seqsPerGroup.end()) { //if it's a new group + seqsPerGroup[seqGroup] = 1; + }else {//it's a group we already have + seqsPerGroup[seqGroup]++; + } } /************************************************************/ void TreeMap::removeSeq(string seqName) { @@ -49,7 +112,7 @@ void TreeMap::removeSeq(string seqName) { //erase name from namesOfSeqs for (int i = 0; i < namesOfSeqs.size(); i++) { if (namesOfSeqs[i] == seqName) { - namesOfSeqs.erase (namesOfSeqs.begin()+i); + namesOfSeqs.erase(namesOfSeqs.begin()+i); break; } } @@ -61,8 +124,6 @@ void TreeMap::removeSeq(string seqName) { //remove seq from treemap it = treemap.find(seqName); treemap.erase(it); - - } /************************************************************/ @@ -137,7 +198,7 @@ bool TreeMap::isValidGroup(string groupname) { return false; } catch(exception& e) { - errorOut(e, "TreeMap", "isValidGroup"); + m->errorOut(e, "TreeMap", "isValidGroup"); exit(1); } } @@ -151,19 +212,19 @@ void TreeMap::print(ostream& output){ } } catch(exception& e) { - errorOut(e, "TreeMap", "print"); + m->errorOut(e, "TreeMap", "print"); exit(1); } } /************************************************************/ -void TreeMap::makeSim(GroupMap* groupmap) { +void TreeMap::makeSim(vector ThisnamesOfGroups) { try { //set names of groups - namesOfGroups = groupmap->namesOfGroups; + namesOfGroups = ThisnamesOfGroups; //set names of seqs to names of groups - namesOfSeqs = groupmap->namesOfGroups; + namesOfSeqs = ThisnamesOfGroups; // make map where key and value are both the group name since that what the tree.shared command wants for (int i = 0; i < namesOfGroups.size(); i++) { @@ -175,7 +236,7 @@ void TreeMap::makeSim(GroupMap* groupmap) { } catch(exception& e) { - errorOut(e, "TreeMap", "makeSim"); + m->errorOut(e, "TreeMap", "makeSim"); exit(1); } } @@ -201,7 +262,61 @@ void TreeMap::makeSim(ListVector* list) { } catch(exception& e) { - errorOut(e, "TreeMap", "makeSim"); + m->errorOut(e, "TreeMap", "makeSim"); + exit(1); + } +} +/************************************************************/ +int TreeMap::getCopy(TreeMap& copy){ + try { + + namesOfGroups = copy.getNamesOfGroups(); + numGroups = copy.getNumGroups(); + namesOfSeqs = copy.namesOfSeqs; + seqsPerGroup = copy.seqsPerGroup; + treemap = copy.treemap; + + return 0; + } + catch(exception& e) { + m->errorOut(e, "TreeMap", "getCopy"); + exit(1); + } +} +/************************************************************/ +vector TreeMap::getNamesSeqs(){ + try { + + vector names; + + for(it = treemap.begin(); it != treemap.end(); it++){ + names.push_back(it->first); + } + + return names; + } + catch(exception& e) { + m->errorOut(e, "TreeMap", "getNamesSeqs"); + exit(1); + } +} +/************************************************************/ +vector TreeMap::getNamesSeqs(vector picked){ + try { + + vector names; + + for(it = treemap.begin(); it != treemap.end(); it++){ + //if you are belong to one the the groups in the picked vector add you + if (m->inUsersGroups(it->second.groupname, picked)) { + names.push_back(it->first); + } + } + + return names; + } + catch(exception& e) { + m->errorOut(e, "TreeMap", "getNamesSeqs"); exit(1); } }