X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=cluster.hpp;h=dff55e61fcf7b571da5c0b895a5f46910f58f8c6;hp=99d8b7d557a41cef684ad2f9aae7d636d621bbc7;hb=1a20e24ee786195ab0e1cccd4f5aede7a88f3f4e;hpb=1b9d0a66e4737f31d16824fe93944880b9edc530 diff --git a/cluster.hpp b/cluster.hpp index 99d8b7d..dff55e6 100644 --- a/cluster.hpp +++ b/cluster.hpp @@ -2,76 +2,79 @@ #define CLUSTER_H + #include "mothur.h" -#include "sparsematrix.hpp" +#include "sparsedistancematrix.h" +#include "mothurout.h" class RAbundVector; class ListVector; -typedef vector MatVec; - class Cluster { public: - Cluster(RAbundVector*, ListVector*, SparseMatrix*); - virtual void update(); + Cluster(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + virtual ~Cluster() {} + virtual void update(double&); virtual string getTag() = 0; - -protected: - void getRowColCells(); - void removeCell(const MatData& cell, int vrow, int vcol, bool rmMatrix=true); - - virtual bool updateDistance(MatData& colCell, MatData& rowCell) = 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; + bool mapWanted; + float cutoff; + map seq2Bin; + string method; - vector seqVec; // contains vectors of cells related to a certain sequence - MatVec rowCells; - MatVec colCells; ull nRowCells; ull nColCells; + MothurOut* m; }; /***********************************************************************/ class CompleteLinkage : public Cluster { public: - CompleteLinkage(RAbundVector*, ListVector*, SparseMatrix*); - bool updateDistance(MatData& colCell, MatData& rowCell); + 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(); - bool updateDistance(MatData& colCell, MatData& rowCell); + 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*); - bool updateDistance(MatData& colCell, MatData& rowCell); + AverageLinkage(RAbundVector*, ListVector*, SparseDistanceMatrix*, float, string); + bool updateDistance(PDistCell& colCell, PDistCell& rowCell); string getTag(); private: @@ -80,9 +83,24 @@ private: 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