JAL-1483 cut and paste from SW score model to allow scores based on sequences to...
authorJim Procter <jprocter@dundee.ac.uk>
Mon, 21 Apr 2014 10:07:46 +0000 (11:07 +0100)
committerJim Procter <jprocter@dundee.ac.uk>
Mon, 21 Apr 2014 13:18:14 +0000 (14:18 +0100)
src/jalview/analysis/scoremodels/FeatureScoreModel.java [new file with mode: 0644]

diff --git a/src/jalview/analysis/scoremodels/FeatureScoreModel.java b/src/jalview/analysis/scoremodels/FeatureScoreModel.java
new file mode 100644 (file)
index 0000000..e9347e4
--- /dev/null
@@ -0,0 +1,84 @@
+package jalview.analysis.scoremodels;
+
+import java.awt.Color;
+
+import jalview.analysis.AlignSeq;
+import jalview.api.analysis.ScoreModelI;
+import jalview.api.analysis.ViewBasedAnalysisI;
+import jalview.datamodel.AlignmentView;
+import jalview.datamodel.SeqCigar;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.util.Comparison;
+
+public class FeatureScoreModel implements ScoreModelI,ViewBasedAnalysisI
+{
+  jalview.api.FeatureRenderer fr;
+  
+  @Override 
+  public boolean configureFromAlignmentView(jalview.api.AlignmentViewPanel view)
+  {
+    fr = view.cloneFeatureRenderer();
+    return true;
+  }
+
+  @Override
+  public float[][] findDistances(AlignmentView seqData)
+  {
+   
+    SequenceI[] sequenceString = seqData
+            .getVisibleAlignment(Comparison.GapChars.charAt(0)).getSequencesArray();
+    int noseqs = sequenceString.length;
+    int cpwidth = seqData.getWidth();
+    float[][] distance = new float[noseqs][noseqs];
+    float max=0;
+    for (int cpos = 0;cpos<cpwidth;cpos++)
+    {
+      // get visible features at cpos under view's display settings and compare them
+      for (int i = 0; i < (noseqs - 1); i++)
+      {
+        SequenceFeature[] sf = fr.getVisible(sequenceString[i],cpos);
+        for (int j=i+1;j<noseqs;j++)
+        {
+          SequenceFeature[] jsf = fr.getVisible(sequenceString[i],cpos);
+
+          
+        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";
+  }
+}