X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=averagelinkage.cpp;fp=averagelinkage.cpp;h=c430c883f66d6006cc9bf01a2a964dd62957688f;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/averagelinkage.cpp b/averagelinkage.cpp new file mode 100644 index 0000000..c430c88 --- /dev/null +++ b/averagelinkage.cpp @@ -0,0 +1,56 @@ +#ifndef AVERAGE_H +#define AVERAGE_H + +//test +#include "mothur.h" +#include "cluster.hpp" +#include "rabundvector.hpp" +#include "sparsematrix.hpp" + +/* This class implements the average UPGMA, average neighbor clustering algorithm */ + +/***********************************************************************/ + +AverageLinkage::AverageLinkage(RAbundVector* rav, ListVector* lv, SparseMatrix* dm, float c, string s) : + Cluster(rav, lv, dm, c, s) +{ + saveRow = -1; + saveCol = -1; +} + + +/***********************************************************************/ +//This function returns the tag of the method. +string AverageLinkage::getTag() { + return("an"); +} + + +/***********************************************************************/ +//This function updates the distance based on the average linkage method. +bool AverageLinkage::updateDistance(MatData& colCell, MatData& rowCell) { + try { + if ((saveRow != smallRow) || (saveCol != smallCol)) { + rowBin = rabund->get(smallRow); + colBin = rabund->get(smallCol); + totalBin = rowBin + colBin; + saveRow = smallRow; + saveCol = smallCol; + } + + colCell->dist = (colBin * colCell->dist + rowBin * rowCell->dist) / totalBin; + + return(true); + } + catch(exception& e) { + m->errorOut(e, "AverageLinkage", "updateDistance"); + exit(1); + } +} + +/***********************************************************************/ + + +/***********************************************************************/ + +#endif