--- /dev/null
+#ifndef COLLECTDISPLAY_H
+#define COLLECTDISPLAY_H
+
+#include "sabundvector.hpp"
+#include "sharedsabundvector.h"
+#include "calculator.h"
+#include "fileoutput.h"
+#include "display.h"
+
+
+/***********************************************************************/
+
+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(vector<SharedRAbundVector*> shared, int numSeqs, int numGroups){
+ timesCalled++;
+ 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<string> 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);
+ }
+ };
+
+ 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, numGroupComb;
+ vector<double> data;
+ vector<double> groupData;
+ bool all;
+
+};
+
+/***********************************************************************/
+
+#endif