#ifndef CLUSTER_H
#define CLUSTER_H
-using namespace std;
#include "mothur.h"
-#include "utilities.hpp"
#include "sparsematrix.hpp"
-#include "rabundvector.hpp"
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;
-
+ virtual void update();
+ 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 clusterBins();
virtual void clusterNames();
int smallRow;
int smallCol;
float smallDist;
- vector<MatData> rowCells;
- vector<MatData> colCells;
+
+ vector<MatVec> seqVec; // contains vectors of cells related to a certain sequence\r
+ MatVec rowCells;
+ MatVec colCells;
ull nRowCells;
ull nColCells;
};
class CompleteLinkage : public Cluster {
public:
CompleteLinkage(RAbundVector*, ListVector*, SparseMatrix*);
- void update();
+ bool updateDistance(MatData& colCell, MatData& rowCell);
+ string getTag();
private:
class SingleLinkage : public Cluster {
public:
SingleLinkage(RAbundVector*, ListVector*, SparseMatrix*);
- void update();
+ void update();
+ bool updateDistance(MatData& colCell, MatData& rowCell);
+ string getTag();
private:
class AverageLinkage : public Cluster {
public:
AverageLinkage(RAbundVector*, ListVector*, SparseMatrix*);
- void update();
+ bool updateDistance(MatData& colCell, MatData& rowCell);
+ string getTag();
private:
-
+ int saveRow;
+ int saveCol;
+ int rowBin;
+ int colBin;
+ int totalBin;
+
};
/***********************************************************************/