--- /dev/null
+package jalview.analysis.scoremodels;
+
+import jalview.analysis.AlignSeq;
+import jalview.api.analysis.ScoreModelI;
+import jalview.datamodel.AlignmentView;
+import jalview.datamodel.SequenceI;
+import jalview.util.Comparison;
+
+public class SWScoreModel implements ScoreModelI
+{
+
+ @Override
+ public float[][] findDistances(AlignmentView seqData)
+ {
+ SequenceI[] sequenceString = seqData
+ .getVisibleAlignment(Comparison.GapChars.charAt(0)).getSequencesArray();
+ int noseqs = sequenceString.length;
+ float[][] distance = new float[noseqs][noseqs];
+
+ float max = -1;
+
+ for (int i = 0; i < (noseqs - 1); i++) { for (int j = i; j < noseqs; j++)
+ { AlignSeq as = new AlignSeq(sequenceString[i], sequenceString[j], seqData.isNa() ? "dna" : "pep");
+ as.calcScoreMatrix(); as.traceAlignment(); as.printAlignment(System.out);
+ distance[i][j] = (float) as.maxscore;
+
+ if (max < distance[i][j]) { max = distance[i][j]; } } }
+
+ for (int i = 0; i < (noseqs - 1); i++) { for (int j = i; j < noseqs; j++)
+ { distance[i][j] = max - distance[i][j]; distance[j][i] = distance[i][j];
+ } }
+
+ return distance;
+ }
+
+ @Override
+ public String getName()
+ {
+ return "Smith Waterman Score";
+ }
+ @Override
+ public boolean isDNA()
+ {
+ return true;
+ }
+ @Override
+ public boolean isProtein()
+ {
+ return true;
+ }
+ public String toString() {
+ return "Score between two sequences aligned with Smith Waterman with default Peptide/Nucleotide matrix";
+ }
+}