JAL-2403 further test coverage for ScoreMatrix, min/max getters
[jalview.git] / src / jalview / analysis / scoremodels / ScoreMatrix.java
index c71658b..84e91ae 100644 (file)
@@ -90,6 +90,10 @@ public class ScoreMatrix implements SimilarityScoreModelI,
    */
   private boolean peptide;
 
+  private float minValue;
+
+  private float maxValue;
+
   /**
    * Constructor given a name, symbol alphabet, and matrix of scores for pairs
    * of symbols. The matrix should be square and of the same size as the
@@ -124,6 +128,8 @@ public class ScoreMatrix implements SimilarityScoreModelI,
 
     symbolIndex = buildSymbolIndex(alphabet);
 
+    findMinMax();
+
     /*
      * crude heuristic for now...
      */
@@ -131,6 +137,31 @@ public class ScoreMatrix implements SimilarityScoreModelI,
   }
 
   /**
+   * Record the minimum and maximum score values
+   */
+  protected void findMinMax()
+  {
+    float min = Float.MAX_VALUE;
+    float max = -Float.MAX_VALUE;
+    if (matrix != null)
+    {
+      for (float[] row : matrix)
+      {
+        if (row != null)
+        {
+          for (float f : row)
+          {
+            min = Math.min(min, f);
+            max = Math.max(max, f);
+          }
+        }
+      }
+    }
+    minValue = min;
+    maxValue = max;
+  }
+
+  /**
    * Returns an array A where A[i] is the position in the alphabet array of the
    * character whose value is i. For example if the alphabet is { 'A', 'D', 'X'
    * } then A['D'] = A[68] = 1.
@@ -281,6 +312,12 @@ public class ScoreMatrix implements SimilarityScoreModelI,
     {
       return matrix[cIndex][dIndex];
     }
+
+    /*
+     * one or both symbols not found in the matrix
+     * note: a possible strategy here would be to return the minimum
+     * matrix value if c != d
+     */
     return 0;
   }
 
@@ -532,4 +569,14 @@ public class ScoreMatrix implements SimilarityScoreModelI,
   {
     description = desc;
   }
+
+  public float getMinimumScore()
+  {
+    return minValue;
+  }
+
+  public float getMaximumScore()
+  {
+    return maxValue;
+  }
 }