JAL-2403 improved ScoreModelI hierarchy as per Kira's review suggestions
[jalview.git] / src / jalview / analysis / TreeBuilder.java
index 6d5b0fe..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;
@@ -55,6 +53,8 @@ public abstract class TreeBuilder
 
   Vector<SequenceNode> node;
 
+  private AlignmentView seqStrings;
+
   /**
    * Constructor
    * 
@@ -68,7 +68,7 @@ public abstract class TreeBuilder
     int start, end;
     boolean selview = av.getSelectionGroup() != null
             && av.getSelectionGroup().getSize() > 1;
-    AlignmentView seqStrings = av.getAlignmentView(selview);
+    seqStrings = av.getAlignmentView(selview);
     if (!selview)
     {
       start = 0;
@@ -251,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();
 
   /**
@@ -268,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();
   
@@ -293,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)
   {
@@ -323,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)
   {
@@ -426,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
@@ -459,4 +452,9 @@ public abstract class TreeBuilder
     }
   }
 
+  public AlignmentView getOriginalData()
+  {
+    return seqStrings;
+  }
+
 }