Cluster::Cluster(RAbundVector* rav, ListVector* lv, SparseMatrix* dm, float c, string f) :
rabund(rav), list(lv), dMatrix(dm), method(f)
{
+ try {
/*
cout << "sizeof(MatData): " << sizeof(MatData) << endl;
cout << "sizeof(PCell*): " << sizeof(PCell*) << endl;
// sequence in the distance matrix.
//ofstream outtemp;
//string temp = "temp";
-//openOutputFile(temp, outtemp);
+//m->openOutputFile(temp, outtemp);
//cout << lv->size() << endl;
seqVec = vector<MatVec>(lv->size());
for (MatData currentCell = dMatrix->begin(); currentCell != dMatrix->end(); currentCell++) {
//save so you can modify as it changes in average neighbor
cutoff = c;
m = MothurOut::getInstance();
+
+ }
+ catch(exception& e) {
+ m->errorOut(e, "Cluster", "Cluster");
+ exit(1);
+ }
}
/***********************************************************************/
void Cluster::update(double& cutOFF){
try {
getRowColCells();
-//cout << "got rowcells" << endl;
vector<int> foundCol(nColCells, 0);
// The vector has to be traversed in reverse order to preserve the index
// for faster removal in removeCell()
for (int i=nRowCells-1;i>=0;i--) {
+ //if you are not the smallCell
if (!((rowCells[i]->row == smallRow) && (rowCells[i]->column == smallCol))) {
if (rowCells[i]->row == smallRow) {
search = rowCells[i]->column;
}
}
//if not merged it you need it for warning
- if ((!merged) && (method == "average")) {
+ if ((!merged) && (method == "average" || method == "weighted")) {
//m->mothurOut("Warning: trying to merge cell " + toString(rowCells[i]->row+1) + " " + toString(rowCells[i]->column+1) + " distance " + toString(rowCells[i]->dist) + " with value above cutoff. Results may vary from using cutoff at cluster command instead of read.dist."); m->mothurOutEndLine();
if (cutOFF > rowCells[i]->dist) {
cutOFF = rowCells[i]->dist;
// could be avoided
for (int i=nColCells-1;i>=0;i--) {
if (foundCol[i] == 0) {
- if (method == "average") {
+ if (method == "average" || method == "weighted") {
if (!((colCells[i]->row == smallRow) && (colCells[i]->column == smallCol))) {
//m->mothurOut("Warning: merging cell " + toString(colCells[i]->row+1) + " " + toString(colCells[i]->column+1) + " distance " + toString(colCells[i]->dist) + " value above cutoff. Results may vary from using cutoff at cluster command instead of read.dist."); m->mothurOutEndLine();
if (cutOFF > colCells[i]->dist) {