JAL-2403 improved ScoreModelI hierarchy as per Kira's review suggestions
[jalview.git] / src / jalview / analysis / TreeBuilder.java
index 5347ba2..effef9a 100644 (file)
@@ -1,9 +1,7 @@
 package jalview.analysis;
 
-import jalview.api.analysis.DistanceScoreModelI;
 import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
-import jalview.api.analysis.SimilarityScoreModelI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.CigarArray;
 import jalview.datamodel.SeqCigar;
@@ -253,6 +251,12 @@ public abstract class TreeBuilder
     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();
 
   /**
@@ -270,22 +274,7 @@ public abstract class TreeBuilder
    */
   protected void computeTree(ScoreModelI sm, SimilarityParamsI scoreOptions)
   {
-    if (sm instanceof DistanceScoreModelI)
-    {
-      distances = ((DistanceScoreModelI) sm).findDistances(seqData,
-              scoreOptions);
-    }
-    else if (sm instanceof SimilarityScoreModelI)
-    {
-      /*
-       * compute similarity and invert it to give a distance measure
-       * reverseRange(true) converts maximum similarity to zero distance
-       */
-      MatrixI result = ((SimilarityScoreModelI) sm).findSimilarities(
-              seqData, scoreOptions);
-      result.reverseRange(true);
-      distances = result;
-    }
+    distances = sm.findDistances(seqData, scoreOptions);
   
     makeLeaves();
   
@@ -295,10 +284,10 @@ public abstract class TreeBuilder
   }
 
   /**
-   * 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)
   {
@@ -325,14 +314,12 @@ public abstract class TreeBuilder
   }
 
   /**
-   * 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)
   {
@@ -428,8 +415,12 @@ public abstract class TreeBuilder
     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