--- /dev/null
+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