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]);
58 System.out.println(String.format(
59 "findClusterDistance(%d, %d) newdist to %d is %f", i, j, ii,
65 * Returns the minimum distance between two clusters, and also sets the
66 * indices of the clusters in fields mini and minj
68 * @return DOCUMENT ME!
71 protected double findMinDistance()
73 double min = Double.MAX_VALUE;
75 for (int i = 0; i < (noseqs - 1); i++)
77 for (int j = i + 1; j < noseqs; j++)
79 if (!done.get(i) && !done.get(j))
81 if (distances.getValue(i, j) < min)
86 min = distances.getValue(i, j);
91 System.out.println("findMinDistance found " + min + " at " + mini + ","
107 protected void findNewDistances(SequenceNode tmpi, SequenceNode tmpj,
113 SequenceNode sni = tmpi;
114 SequenceNode snj = tmpj;
119 sni = (SequenceNode) sni.left();
125 snj = (SequenceNode) snj.left();
128 tmpi.dist = ((dist / 2) - ih);
129 tmpj.dist = ((dist / 2) - jh);
130 System.out.println("findNewDistances set tmpi to " + tmpi.dist
131 + ", tmpj to " + tmpj.dist);