]> git.donarmstrong.com Git - mothur.git/blobdiff - collectdisplay.h
Revert to previous commit
[mothur.git] / collectdisplay.h
diff --git a/collectdisplay.h b/collectdisplay.h
new file mode 100644 (file)
index 0000000..781cea1
--- /dev/null
@@ -0,0 +1,110 @@
+#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