JAL-1473 refactor score matrices and tree score calculations to interface/api and...
[jalview.git] / src / jalview / analysis / scoremodels / PairwiseSeqScoreModel.java
diff --git a/src/jalview/analysis/scoremodels/PairwiseSeqScoreModel.java b/src/jalview/analysis/scoremodels/PairwiseSeqScoreModel.java
new file mode 100644 (file)
index 0000000..78c5f17
--- /dev/null
@@ -0,0 +1,61 @@
+package jalview.analysis.scoremodels;
+
+import jalview.api.analysis.ScoreModelI;
+import jalview.datamodel.AlignmentView;
+import jalview.schemes.ScoreMatrix;
+import jalview.util.Comparison;
+
+public abstract class PairwiseSeqScoreModel implements ScoreModelI
+{
+  abstract public int getPairwiseScore(char c, char d);
+
+  public float[][] findDistances(AlignmentView seqData)
+  {
+    String[] sequenceString = seqData
+            .getSequenceStrings(Comparison.GapChars.charAt(0));
+    int noseqs = sequenceString.length;
+    float[][] distance = new float[noseqs][noseqs];
+
+    int maxscore = 0;
+    int end = sequenceString[0].length();
+    for (int i = 0; i < (noseqs - 1); i++)
+    {
+      for (int j = i; j < noseqs; j++)
+      {
+        int score = 0;
+
+        for (int k = 0; k < end; k++)
+        {
+          try
+          {
+            score += getPairwiseScore(sequenceString[i].charAt(k),
+                    sequenceString[j].charAt(k));
+          } catch (Exception ex)
+          {
+            System.err.println("err creating " + getName() + " tree");
+            ex.printStackTrace();
+          }
+        }
+
+        distance[i][j] = (float) score;
+
+        if (score > maxscore)
+        {
+          maxscore = score;
+        }
+      }
+    }
+
+    for (int i = 0; i < (noseqs - 1); i++)
+    {
+      for (int j = i; j < noseqs; j++)
+      {
+        distance[i][j] = (float) maxscore - distance[i][j];
+        distance[j][i] = distance[i][j];
+      }
+    }
+    return distance;
+  }
+
+  abstract public int[][] getMatrix();
+}
\ No newline at end of file