X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=cluster.hpp;h=dff55e61fcf7b571da5c0b895a5f46910f58f8c6;hp=208ccbfe1ba45ba70d152ba4c5ff12b50182d4dc;hb=a8e2df1b96a57f5f29576b08361b86a96a8eff4f;hpb=bfbc55964f1977da72c2cea984288a427d370a59 diff --git a/cluster.hpp b/cluster.hpp index 208ccbf..dff55e6 100644 --- a/cluster.hpp +++ b/cluster.hpp @@ -1,76 +1,106 @@ #ifndef CLUSTER_H #define CLUSTER_H -using namespace std; + #include "mothur.h" -#include "utilities.hpp" -#include "sparsematrix.hpp" -#include "rabundvector.hpp" +#include "sparsedistancematrix.h" +#include "mothurout.h" class RAbundVector; class ListVector; -class SparseMatrix; - -typedef list::iterator MatData; class Cluster { public: - Cluster(RAbundVector*, ListVector*, SparseMatrix*); - virtual void update() = 0; - -protected: - void getRowColCells(); + Cluster(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + virtual ~Cluster() {} + virtual void update(double&); + virtual string getTag() = 0; + virtual void setMapWanted(bool m); + virtual map getSeqtoBin() { return seq2Bin; } + +protected: + virtual bool updateDistance(PDistCell& colCell, PDistCell& rowCell) = 0; + virtual void clusterBins(); virtual void clusterNames(); + virtual void updateMap(); RAbundVector* rabund; ListVector* list; - SparseMatrix* dMatrix; + SparseDistanceMatrix* dMatrix; - int smallRow; - int smallCol; + ull smallRow; + ull smallCol; float smallDist; - vector rowCells; - vector colCells; + bool mapWanted; + float cutoff; + map seq2Bin; + string method; + ull nRowCells; ull nColCells; + MothurOut* m; }; /***********************************************************************/ class CompleteLinkage : public Cluster { public: - CompleteLinkage(RAbundVector*, ListVector*, SparseMatrix*); - void update(); + CompleteLinkage(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + bool updateDistance(PDistCell& colCell, PDistCell& rowCell); + string getTag(); private: - + }; /***********************************************************************/ class SingleLinkage : public Cluster { public: - SingleLinkage(RAbundVector*, ListVector*, SparseMatrix*); - void update(); + SingleLinkage(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + void update(double&); + bool updateDistance(PDistCell& colCell, PDistCell& rowCell); + string getTag(); private: - + }; /***********************************************************************/ class AverageLinkage : public Cluster { public: - AverageLinkage(RAbundVector*, ListVector*, SparseMatrix*); - void update(); + AverageLinkage(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + bool updateDistance(PDistCell& colCell, PDistCell& rowCell); + string getTag(); private: - + int saveRow; + int saveCol; + int rowBin; + int colBin; + int totalBin; + }; /***********************************************************************/ +class WeightedLinkage : public Cluster { +public: + WeightedLinkage(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + bool updateDistance(PDistCell& colCell, PDistCell& rowCell); + string getTag(); + +private: + int saveRow; + int saveCol; +}; + +/***********************************************************************/ + + + #endif