#include "mothur.h"
#include "sparsematrix.hpp"
+#include "mothurout.h"
class RAbundVector;
class ListVector;
-class SparseMatrix;
-typedef list<PCell>::iterator MatData;
+typedef vector<MatData> MatVec;
class Cluster {
public:
- Cluster(RAbundVector*, ListVector*, SparseMatrix*);
- virtual void update() = 0;
-
+ Cluster(RAbundVector*, ListVector*, SparseMatrix*, float, string);
+ virtual void update(double&);
+ virtual string getTag() = 0;
+ virtual void setMapWanted(bool m);
+ virtual map<string, int> getSeqtoBin() { return seq2Bin; }
+
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 clusterBins();
virtual void clusterNames();
+ virtual void updateMap();
RAbundVector* rabund;
ListVector* list;
int smallRow;
int smallCol;
float smallDist;
- vector<MatData> rowCells;
- vector<MatData> colCells;
+ bool mapWanted;
+ float cutoff;
+ map<string, int> seq2Bin;
+ string method;
+
+ vector<MatVec> 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*);
- void update();
+ CompleteLinkage(RAbundVector*, ListVector*, SparseMatrix*, float, string);
+ bool updateDistance(MatData& colCell, MatData& rowCell);
+ string getTag();
private:
class SingleLinkage : public Cluster {
public:
- SingleLinkage(RAbundVector*, ListVector*, SparseMatrix*);
- void update();
+ SingleLinkage(RAbundVector*, ListVector*, SparseMatrix*, float, string);
+ void update();
+ bool updateDistance(MatData& colCell, MatData& rowCell);
+ string getTag();
private:
class AverageLinkage : public Cluster {
public:
- AverageLinkage(RAbundVector*, ListVector*, SparseMatrix*);
- void update();
+ AverageLinkage(RAbundVector*, ListVector*, SparseMatrix*, float, string);
+ bool updateDistance(MatData& colCell, MatData& rowCell);
+ string getTag();
private:
-
+ int saveRow;
+ int saveCol;
+ int rowBin;
+ int colBin;
+ int totalBin;
+
};
/***********************************************************************/