X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=collectdisplay.h;h=7e40ad7359c7553a033ee03645ad6eb2421012ae;hb=ec453945974b5c72af0bea042e3517312566d592;hp=71275737d24a437f09a97eefa528e7f30ed4a134;hpb=20a2d0350a737a434c89f303662d64a8eeea7b05;p=mothur.git diff --git a/collectdisplay.h b/collectdisplay.h index 7127573..7e40ad7 100644 --- a/collectdisplay.h +++ b/collectdisplay.h @@ -6,7 +6,7 @@ #include "calculator.h" #include "fileoutput.h" #include "display.h" -#include + using namespace std; @@ -23,32 +23,69 @@ public: 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 the jumble parameter randomizes the order we need to put the results in the correct column in the output file + int group1Index, group2Index, pos; + group1Index = shared[0]->getGroupIndex(); + group2Index = shared[1]->getGroupIndex(); + + 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) { + 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(); }; + bool isCalcMultiple() { return estimate->getMultiple(); } private: Calculator* estimate; FileOutput* output; - int nSeqs, timesCalled; + int nSeqs, timesCalled, numGroupComb; vector data; vector groupData; }; /***********************************************************************/ -#endif \ No newline at end of file +#endif