Merge branch 'features/JAL-2393customMatrices' into develop
[jalview.git] / src / jalview / analysis / scoremodels / DistanceScoreModel.java
diff --git a/src/jalview/analysis/scoremodels/DistanceScoreModel.java b/src/jalview/analysis/scoremodels/DistanceScoreModel.java
new file mode 100644 (file)
index 0000000..0dd7617
--- /dev/null
@@ -0,0 +1,40 @@
+package jalview.analysis.scoremodels;
+
+import jalview.api.analysis.ScoreModelI;
+import jalview.api.analysis.SimilarityParamsI;
+import jalview.datamodel.AlignmentView;
+import jalview.math.MatrixI;
+
+public abstract class DistanceScoreModel implements ScoreModelI
+{
+  /**
+   * A similarity score is calculated by first computing a distance score, and
+   * then reversing the min-max range of the score values
+   */
+  @Override
+  public MatrixI findSimilarities(AlignmentView seqData,
+          SimilarityParamsI options)
+  {
+    MatrixI distances = findDistances(seqData, options);
+
+    MatrixI similarities = distanceToSimilarity(distances);
+
+    return similarities;
+  }
+
+  /**
+   * Converts distance scores to similarity scores, by reversing the range of
+   * score values so that max becomes min and vice versa. The input matrix is
+   * not modified.
+   * 
+   * @param distances
+   */
+  public static MatrixI distanceToSimilarity(MatrixI distances)
+  {
+    MatrixI similarities = distances.copy();
+
+    similarities.reverseRange(false);
+
+    return similarities;
+  }
+}