1 package jalview.analysis;
3 import jalview.api.analysis.ScoreModelI;
4 import jalview.api.analysis.SimilarityParamsI;
5 import jalview.datamodel.SequenceNode;
6 import jalview.viewmodel.AlignmentViewport;
8 public class AverageDistanceTree extends TreeBuilder
15 * @param scoreParameters
17 public AverageDistanceTree(AlignmentViewport av, ScoreModelI sm,
18 SimilarityParamsI scoreParameters)
20 super(av, sm, scoreParameters);
24 * Calculates and saves the distance between the combination of cluster(i) and
25 * cluster(j) and all other clusters. An average of the distances from
26 * cluster(i) and cluster(j) is calculated, weighted by the sizes of each
33 protected void findClusterDistance(int i, int j)
35 int noi = clusters.elementAt(i).cardinality();
36 int noj = clusters.elementAt(j).cardinality();
38 // New distances from cluster i to others
39 double[] newdist = new double[noseqs];
41 for (int l = 0; l < noseqs; l++)
43 if ((l != i) && (l != j))
45 newdist[l] = ((distances.getValue(i, l) * noi) + (distances
46 .getValue(j, l) * noj)) / (noi + noj);
54 for (int ii = 0; ii < noseqs; ii++)
56 distances.setValue(i, ii, newdist[ii]);
57 distances.setValue(ii, i, newdist[ii]);
62 * Returns the minimum distance between two clusters, and also sets the
63 * indices of the clusters in fields mini and minj
65 * @return DOCUMENT ME!
68 protected double findMinDistance()
70 double min = Double.MAX_VALUE;
72 for (int i = 0; i < (noseqs - 1); i++)
74 for (int j = i + 1; j < noseqs; j++)
76 if (!done.get(i) && !done.get(j))
78 if (distances.getValue(i, j) < min)
83 min = distances.getValue(i, j);
102 protected void findNewDistances(SequenceNode tmpi, SequenceNode tmpj,
108 SequenceNode sni = tmpi;
109 SequenceNode snj = tmpj;
114 sni = (SequenceNode) sni.left();
120 snj = (SequenceNode) snj.left();
123 tmpi.dist = ((dist / 2) - ih);
124 tmpj.dist = ((dist / 2) - jh);