]> git.donarmstrong.com Git - mothur.git/blobdiff - sharedordervector.h
Revert to previous commit
[mothur.git] / sharedordervector.h
diff --git a/sharedordervector.h b/sharedordervector.h
new file mode 100644 (file)
index 0000000..7d383ac
--- /dev/null
@@ -0,0 +1,94 @@
+#ifndef SHAREDORDER_H
+#define SHAREDORDER_H
+/*
+ *  sharedorder.h
+ *  Mothur
+ *
+ *  Created by Sarah Westcott on 12/9/08.
+ *  Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
+ *
+ */
+ /* This class is a child to datavector.  It represents OTU information at a certain distance. 
+       It is similiar to an order vector except each member of data knows which group it belongs to.
+       Each member of the internal container "data" represents is an individual which knows the OTU from which it came, 
+       the group it is in and the abundance is equal to the OTU number.  */
+
+
+#include "datavector.hpp"
+
+struct individual {
+               string group;
+               int bin;
+               int abundance;
+               bool operator()(const individual& i1, const individual& i2) {
+               return (i1.abundance > i2.abundance);
+               }
+       individual() {  group = ""; bin = 0; abundance = 0; }
+};
+
+struct individualFloat {
+               string group;
+               int bin;
+               float abundance;
+               bool operator()(const individual& i1, const individual& i2) {
+               return (i1.abundance > i2.abundance);
+               }
+       individualFloat() { group = ""; bin = 0; abundance = 0.0; }
+};
+
+
+#include "sabundvector.hpp"
+#include "rabundvector.hpp"
+#include "sharedrabundvector.h"
+#include "sharedsabundvector.h"
+#include "groupmap.h"
+
+class SharedOrderVector : public DataVector {
+       
+public:
+       SharedOrderVector();
+//     SharedOrderVector(int ns, int nb=0, int mr=0)   : DataVector(), data(ns, -1), maxRank(0), numBins(0), numSeqs(0) {};
+       SharedOrderVector(const SharedOrderVector& ov)  : DataVector(ov.label), data(ov.data), maxRank(ov.maxRank), numBins(ov.numBins), numSeqs(ov.numSeqs), needToUpdate(ov.needToUpdate) {if(needToUpdate == 1){     updateStats();}};
+
+       SharedOrderVector(string, vector<individual>);
+       SharedOrderVector(ifstream&);
+       ~SharedOrderVector(){};
+       
+       
+       individual get(int);
+       void resize(int);
+       int size();
+       void print(ostream&);
+       vector<individual>::iterator begin();
+       vector<individual>::iterator end();
+       void push_back(int, int, string);  //OTU, abundance, group  MUST CALL UPDATE STATS AFTER PUSHBACK!!!
+       void updateStats();
+       void clear();
+
+       int getNumBins();
+       int getNumSeqs();
+       int getMaxRank();
+               
+       RAbundVector getRAbundVector();
+       SAbundVector getSAbundVector();
+       OrderVector getOrderVector(map<string,int>*);
+       SharedOrderVector getSharedOrderVector();
+       SharedRAbundVector getSharedRAbundVector(string);  //get the sharedRabundvector for a sepecific group
+       SharedSAbundVector getSharedSAbundVector(string);       //get the sharedSabundvector for a sepecific group
+       vector<SharedRAbundVector*> getSharedRAbundVector(); //returns sharedRabundVectors for all the users groups
+       
+private:
+       GroupMap* groupmap;
+       vector<individual>  data; 
+       map< int, vector<individual> >::iterator it;
+       int maxRank;
+       int numBins;
+       int numSeqs;
+       bool needToUpdate;
+       void set(int, int, int, string);        //index, OTU, abundance, group
+       
+};
+
+#endif
+