X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=averagelinkage.cpp;h=db2c51edc5b182b52dcf540456baad7b5782c61e;hb=c3f0a9c8f932b923f3a6fbbf143e8f4b85fd6f5f;hp=26283ff800ca1241be49d4e7eaf18a97d89617d4;hpb=510b1cfc25cd79391d6973ca20c5ec25fb1bb3b2;p=mothur.git diff --git a/averagelinkage.cpp b/averagelinkage.cpp index 26283ff..db2c51e 100644 --- a/averagelinkage.cpp +++ b/averagelinkage.cpp @@ -11,69 +11,53 @@ /***********************************************************************/ -AverageLinkage::AverageLinkage(RAbundVector* rav, ListVector* lv, SparseMatrix* dm) : -Cluster(rav, lv, dm) -{} +AverageLinkage::AverageLinkage(RAbundVector* rav, ListVector* lv, SparseMatrix* dm, float c) : + Cluster(rav, lv, dm, c) +{ + saveRow = -1; + saveCol = -1; +} + + +/***********************************************************************/ +//This function returns the tag of the method. +string AverageLinkage::getTag() { + return("an"); +} + /***********************************************************************/ -//THis function clusters based on the average method -void AverageLinkage::update(){ - try{ - getRowColCells(); - - vector found(nColCells, 0); - - int rowBin = rabund->get(smallRow); - int colBin = rabund->get(smallCol); - int totalBin = rowBin + colBin; - - for(int i=1;iget(smallRow); + colBin = rabund->get(smallCol); + totalBin = rowBin + colBin; + saveRow = smallRow; + saveCol = smallCol; + } - int search; + float oldColCell = colCell->dist; - if(rowCells[i]->row == smallRow){ - search = rowCells[i]->column; - } - else{ - search = rowCells[i]->row; - } + colCell->dist = (colBin * colCell->dist + rowBin * rowCell->dist) / totalBin; - for(int j=1;jrow == search || colCells[j]->column == search){ - colCells[j]->dist = (colBin * colCells[j]->dist + rowBin * rowCells[i]->dist) / totalBin; - - found[j] = 1; - - if(colCells[j]->vectorMap != NULL){ - *(colCells[j]->vectorMap) = NULL; - colCells[j]->vectorMap = NULL; - } - - break; - } - - } - dMatrix->rmCell(rowCells[i]); - } - - clusterBins(); - clusterNames(); - - for(int i=0;irmCell(colCells[i]); - } + //warn user if merge with value above cutoff produces a value below cutoff + if ((colCell->dist < cutoff) && ((oldColCell > cutoff) || (rowCell->dist > cutoff)) ) { + mothurOut("Warning: merging " + toString(oldColCell) + " with " + toString(rowCell->dist) + ", new value = " + toString(colCell->dist) + ". Results will differ from those if cutoff was used in the read.dist command."); mothurOutEndLine(); } + + return(true); } catch(exception& e) { - errorOut(e, "AverageLinkage", "update"); + errorOut(e, "AverageLinkage", "updateDistance"); exit(1); } } /***********************************************************************/ -#endif +/***********************************************************************/ +#endif