JAL-2403 JAL-1483 changes to ScoreModelI hierarchy and signatures to
[jalview.git] / src / jalview / analysis / scoremodels / FeatureDistanceModel.java
index 04a7b14..9245898 100644 (file)
  */
 package jalview.analysis.scoremodels;
 
-import jalview.api.analysis.DistanceModelI;
+import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureRenderer;
+import jalview.api.analysis.DistanceScoreModelI;
 import jalview.api.analysis.ViewBasedAnalysisI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.SeqCigar;
 import jalview.datamodel.SequenceFeature;
+import jalview.math.Matrix;
+import jalview.math.MatrixI;
 import jalview.util.SetUtils;
 
 import java.util.HashMap;
@@ -33,13 +37,14 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class FeatureDistanceModel implements DistanceModelI, ViewBasedAnalysisI
+public class FeatureDistanceModel implements DistanceScoreModelI,
+        ViewBasedAnalysisI
 {
-  jalview.api.FeatureRenderer fr;
+  FeatureRenderer fr;
 
   @Override
-  public boolean configureFromAlignmentView(
-          jalview.api.AlignmentViewPanel view)
+  public boolean configureFromAlignmentView(AlignmentViewPanel view)
+
   {
     fr = view.cloneFeatureRenderer();
     return true;
@@ -53,16 +58,16 @@ public class FeatureDistanceModel implements DistanceModelI, ViewBasedAnalysisI
    * of columns processed.
    */
   @Override
-  public float[][] findDistances(AlignmentView seqData)
+  public MatrixI findDistances(AlignmentView seqData)
   {
     List<String> dft = fr.getDisplayedFeatureTypes();
     SeqCigar[] seqs = seqData.getSequences();
     int noseqs = seqs.length;
     int cpwidth = 0;// = seqData.getWidth();
-    float[][] distance = new float[noseqs][noseqs];
+    double[][] distances = new double[noseqs][noseqs];
     if (dft.isEmpty())
     {
-      return distance;
+      return new Matrix(distances);
     }
 
     // need to get real position for view position
@@ -94,7 +99,7 @@ public class FeatureDistanceModel implements DistanceModelI, ViewBasedAnalysisI
           {
             int seqDistance = SetUtils.countDisjunction(sfap.get(seqs[i]),
                     sfap.get(seqs[j]));
-            distance[i][j] += seqDistance;
+            distances[i][j] += seqDistance;
           }
         }
       }
@@ -103,16 +108,18 @@ public class FeatureDistanceModel implements DistanceModelI, ViewBasedAnalysisI
     /*
      * normalise the distance scores (summed over columns) by the
      * number of visible columns used in the calculation
+     * and fill in the bottom half of the matrix
      */
+    // TODO JAL-2424 cpwidth may be out by 1 - affects scores but not tree shape
     for (int i = 0; i < noseqs; i++)
     {
       for (int j = i + 1; j < noseqs; j++)
       {
-        distance[i][j] /= cpwidth;
-        distance[j][i] = distance[i][j];
+        distances[i][j] /= cpwidth;
+        distances[j][i] = distances[i][j];
       }
     }
-    return distance;
+    return new Matrix(distances);
   }
 
   /**