X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=collectdisplay.h;h=781cea1824dc77cb445819c94aed3173786baa94;hp=367a188dfb8de90c2e464cb70cc4a7b1b826ccfe;hb=050a3ff02473a3d4c0980964e1a9ebe52e55d6b8;hpb=58cf1d08fee8c64334979075fa57bcafb035a2ed diff --git a/collectdisplay.h b/collectdisplay.h index 367a188..781cea1 100644 --- a/collectdisplay.h +++ b/collectdisplay.h @@ -6,9 +6,7 @@ #include "calculator.h" #include "fileoutput.h" #include "display.h" -#include -using namespace std; /***********************************************************************/ @@ -17,36 +15,94 @@ class CollectDisplay : public Display { public: CollectDisplay(Calculator* calc, FileOutput* file) : estimate(calc), output(file) {timesCalled = 0;}; ~CollectDisplay() { delete estimate; delete output; } + + void update(SAbundVector* rank){ nSeqs=rank->getNumSeqs(); data = estimate->getValues(rank); output->output(nSeqs, data); }; - void update(SharedRAbundVector* shared1, SharedRAbundVector* shared2, int numSeqs, int numGroupComb){ + void update(vector shared, int numSeqs, int numGroups){ timesCalled++; - data = estimate->getValues(shared1, shared2); //passes estimators a shared vector from each group to be compared - //fills groupdata with datas info - for (int i = 0; i < data.size(); i++) { - groupData.push_back(data[i]); + data = estimate->getValues(shared); //passes estimators a shared vector from each group to be compared + + //figure out what groups are being compared in getValues + //because we randomizes the order we need to put the results in the correct column in the output file + int group1Index, group2Index, pos; + + vector mGroups = m->getGroups(); + for (int i = 0; i < mGroups.size(); i++) { + if (shared[0]->getGroup() == mGroups[i]) { group1Index = i; } + if (shared[1]->getGroup() == mGroups[i]) { group2Index = i; } + } + + numGroupComb = 0; + int n = 1; + for (int i = 0; i < (numGroups - 1); i++) { + for (int l = n; l < numGroups; l++) { + if ((group1Index == i) && (group2Index == l)) { + pos = numGroupComb; //pos tells you which column in the output file you are in + }else if ((group1Index == l) && (group2Index == i)) { + pos = numGroupComb; + } + numGroupComb++; + } + n++; } + + if ((estimate->getMultiple() == true) && all) { + numGroupComb++; + groupData.resize((numGroupComb*data.size()), 0); + //is this the time its called with all values + if ((timesCalled % numGroupComb) == 0) { + //last spot + pos = ((groupData.size()-1) * data.size()); + } + //fills groupdata with datas info + for (int i = 0; i < data.size(); i++) { + groupData[pos+i] = data[i]; + } + }else { + groupData.resize((numGroupComb*data.size()), 0); + //fills groupdata with datas info + for (int i = 0; i < data.size(); i++) { + groupData[pos+i] = data[i]; + } + } + //when you get all your groups info then output if ((timesCalled % numGroupComb) == 0) { output->output(numSeqs, groupData); - groupData.clear(); } }; - + void init(string s) { output->initFile(s); }; void reset() { output->resetFile(); }; void close() { output->resetFile(); }; + void setAll(bool a) { all = a; } + bool getAll() { return all; } + + + bool isCalcMultiple() { return estimate->getMultiple(); } + bool calcNeedsAll() { return estimate->getNeedsAll(); } + bool hasLciHci() { + if (estimate->getCols() == 3) { return true; } + else{ return false; } + } + + string getName() { return estimate->getName(); } + private: + Calculator* estimate; FileOutput* output; - int nSeqs, timesCalled; + int nSeqs, timesCalled, numGroupComb; vector data; vector groupData; + bool all; + }; /***********************************************************************/