import jalview.datamodel.SequenceNode;
import jalview.viewmodel.AlignmentViewport;
+/**
+ * This class implements distance calculations used in constructing a Average
+ * Distance tree (also known as UPGMA)
+ */
public class AverageDistanceTree extends TreeBuilder
{
/**
}
/**
- * Returns the minimum distance between two clusters, and also sets the
- * indices of the clusters in fields mini and minj
- *
- * @return DOCUMENT ME!
+ * {@inheritDoc}
*/
@Override
protected double findMinDistance()
}
/**
- * DOCUMENT ME!
- *
- * @param tmpi
- * DOCUMENT ME!
- * @param tmpj
- * DOCUMENT ME!
- * @param dist
- * DOCUMENT ME!
+ * {@inheritDoc}
*/
@Override
- protected void findNewDistances(SequenceNode tmpi, SequenceNode tmpj,
+ protected void findNewDistances(SequenceNode nodei, SequenceNode nodej,
double dist)
{
double ih = 0;
double jh = 0;
- SequenceNode sni = tmpi;
- SequenceNode snj = tmpj;
+ SequenceNode sni = nodei;
+ SequenceNode snj = nodej;
while (sni != null)
{
snj = (SequenceNode) snj.left();
}
- tmpi.dist = ((dist / 2) - ih);
- tmpj.dist = ((dist / 2) - jh);
+ nodei.dist = ((dist / 2) - ih);
+ nodej.dist = ((dist / 2) - jh);
}
}
import jalview.viewmodel.AlignmentViewport;
/**
- * DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision$
+ * This class implements distance calculations used in constructing a Neighbour
+ * Joining tree
*/
public class NJTree extends TreeBuilder
{
}
/**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
+ * {@inheritDoc}
*/
@Override
- protected
- double findMinDistance()
+ protected double findMinDistance()
{
double min = Double.MAX_VALUE;
}
/**
- * DOCUMENT ME!
- *
- * @param tmpi
- * DOCUMENT ME!
- * @param tmpj
- * DOCUMENT ME!
- * @param dist
- * DOCUMENT ME!
+ * {@inheritDoc}
*/
@Override
- protected
- void findNewDistances(SequenceNode tmpi, SequenceNode tmpj, double dist)
+ protected void findNewDistances(SequenceNode nodei, SequenceNode nodej,
+ double dist)
{
+ nodei.dist = ((dist + ri) - rj) / 2;
+ nodej.dist = (dist - nodei.dist);
- tmpi.dist = ((dist + ri) - rj) / 2;
- tmpj.dist = (dist - tmpi.dist);
-
- if (tmpi.dist < 0)
+ if (nodei.dist < 0)
{
- tmpi.dist = 0;
+ nodei.dist = 0;
}
- if (tmpj.dist < 0)
+ if (nodej.dist < 0)
{
- tmpj.dist = 0;
+ nodej.dist = 0;
}
}
-
-
/**
* Calculates and saves the distance between the combination of cluster(i) and
* cluster(j) and all other clusters. The new distance to cluster k is
findMaxDist(top);
}
+ /**
+ * Returns the minimum distance between two clusters, and also sets the
+ * indices of the clusters in fields mini and minj
+ *
+ * @return
+ */
protected abstract double findMinDistance();
/**
}
/**
- * DOCUMENT ME!
+ * Finds the node, at or below the given node, with the maximum distance, and
+ * saves the node and the distance value
*
* @param nd
- * DOCUMENT ME!
*/
void findMaxDist(SequenceNode nd)
{
}
/**
- * DOCUMENT ME!
+ * Calculates and returns r, whatever that is
*
* @param i
- * DOCUMENT ME!
* @param j
- * DOCUMENT ME!
*
- * @return DOCUMENT ME!
+ * @return
*/
protected double findr(int i, int j)
{
done.set(j);
}
- protected abstract void findNewDistances(SequenceNode tmpi, SequenceNode tmpj,
- double dist);
+ /*
+ * Computes and stores new distances for nodei and nodej, given the previous
+ * distance between them
+ */
+ protected abstract void findNewDistances(SequenceNode nodei,
+ SequenceNode nodej, double previousDistance);
/**
* Calculates and saves the distance between the combination of cluster(i) and