Merge branch 'Release_2_8_2_Branch' into JAL-1483_featureBasedTreeCalc
authorJim Procter <jprocter@dundee.ac.uk>
Fri, 13 Jun 2014 10:14:07 +0000 (11:14 +0100)
committerJim Procter <jprocter@dundee.ac.uk>
Fri, 13 Jun 2014 10:14:07 +0000 (11:14 +0100)
15 files changed:
src/jalview/analysis/Conservation.java
src/jalview/analysis/Finder.java
src/jalview/analysis/SequenceIdMatcher.java
src/jalview/analysis/scoremodels/FeatureScoreModel.java [new file with mode: 0644]
src/jalview/api/AlignmentViewPanel.java
src/jalview/api/FeatureRenderer.java
src/jalview/api/analysis/ViewBasedAnalysisI.java [new file with mode: 0644]
src/jalview/appletgui/AlignmentPanel.java
src/jalview/appletgui/FeatureRenderer.java
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/AppJmolBinding.java
src/jalview/gui/FeatureRenderer.java
src/jalview/schemes/AnnotationColourGradient.java
src/jalview/viewmodel/FeatureRenderer.java [new file with mode: 0644]
src/jalview/ws/jws2/AADisorderClient.java

index 4d64685..66a6d78 100755 (executable)
@@ -71,6 +71,8 @@ public class Conservation
 
   int[][] cons2;
 
+  private String[] consSymbs;
+
   /**
    * Creates a new Conservation object.
    * 
@@ -366,17 +368,17 @@ public class Conservation
     {
       consString.append('-');
     }
-
+    consSymbs = new String[end-start+1];
     for (int i = start; i <= end; i++)
     {
       gapcons = countConsNGaps(i);
       totGaps = gapcons[1];
       pgaps = ((float) totGaps * 100) / (float) sequences.length;
-
+      consSymbs[i-start]=new String();
+      
       if (percentageGaps > pgaps)
       {
         resultHash = total[i - start];
-
         // Now find the verdict
         count = 0;
         enumeration = resultHash.keys();
@@ -385,12 +387,12 @@ public class Conservation
         {
           type = (String) enumeration.nextElement();
           result = (Integer) resultHash.get(type);
-
           // Do we want to count +ve conservation or +ve and -ve cons.?
           if (consflag)
           {
             if (result.intValue() == 1)
             {
+              consSymbs[i-start] = type+" "+consSymbs[i-start];
               count++;
             }
           }
@@ -398,6 +400,14 @@ public class Conservation
           {
             if (result.intValue() != -1)
             {
+              { 
+                 if (result.intValue()==0) {
+                   consSymbs[i-start] = consSymbs[i-start]+ " !"+type;
+                 } else {
+                   consSymbs[i-start] = type+" "+consSymbs[i-start];
+                 }
+              }
+              
               count++;
             }
           }
@@ -683,7 +693,7 @@ public class Conservation
       float vprop = value - min;
       vprop /= max;
       conservation.annotations[i] = new Annotation(String.valueOf(c),
-              String.valueOf(value), ' ', value, new Color(minR
+              consSymbs[i-start], ' ', value, new Color(minR
                       + (maxR * vprop), minG + (maxG * vprop), minB
                       + (maxB * vprop)));
 
index 96151d7..b87c170 100644 (file)
@@ -188,7 +188,7 @@ public class Finder
           {
             continue;
           }
-
+// if invalid string used, then regex has no matched to/from
           int sres = seq
                   .findPosition(resIndex
                           + Integer.parseInt(spaces.elementAt(resIndex)
index aec7faf..bedce3f 100755 (executable)
@@ -42,10 +42,15 @@ public class SequenceIdMatcher
       // TODO: deal with ID collisions - SequenceI should be appended to list
       // associated with this key.
       names.put(new SeqIdName(seqs[i].getDisplayId(true)), seqs[i]);
+      SequenceI dbseq = seqs[i];
+      while (dbseq.getDatasetSequence()!=null)
+      {
+        dbseq = dbseq.getDatasetSequence();
+      }
       // add in any interesting identifiers
-      if (seqs[i].getDBRef() != null)
+      if (dbseq.getDBRef() != null)
       {
-        DBRefEntry dbr[] = seqs[i].getDBRef();
+        DBRefEntry dbr[] = dbseq.getDBRef();
         SeqIdName sid = null;
         for (int r = 0; r < dbr.length; r++)
         {
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";
+  }
+}
index 7ff3a6a..a6eaba2 100644 (file)
@@ -50,4 +50,9 @@ public interface AlignmentViewPanel extends OOMHandlerI
    * ensuring the alignment is still visible.
    */
   void adjustAnnotationHeight();
+
+  FeatureRenderer getFeatureRenderer();
+
+  FeatureRenderer cloneFeatureRenderer();
+  
 }
index 679cded..a0552dc 100644 (file)
@@ -20,7 +20,9 @@
  */
 package jalview.api;
 
+import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.GraduatedColor;
 
 import java.awt.Color;
 
@@ -37,4 +39,8 @@ public interface FeatureRenderer
 
   void featuresAdded();
 
+  Object getFeatureStyle(String ft);
+
+  void setColour(String ft, Object ggc);
+
 }
diff --git a/src/jalview/api/analysis/ViewBasedAnalysisI.java b/src/jalview/api/analysis/ViewBasedAnalysisI.java
new file mode 100644 (file)
index 0000000..c8454fe
--- /dev/null
@@ -0,0 +1,17 @@
+package jalview.api.analysis;
+
+import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
+
+public interface ViewBasedAnalysisI
+{
+
+  /**
+   * Parameterise the analysis model using the current view
+   * @param view
+   * @return true if model is applicable and calculation should procede
+   */
+
+  boolean configureFromAlignmentView(AlignmentViewPanel view);
+
+}
index a677eff..5ac12aa 100644 (file)
@@ -145,12 +145,18 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
   {
     return seqPanel.seqCanvas.sr;
   }
-
-  public FeatureRenderer getFeatureRenderer()
+  @Override
+  public jalview.api.FeatureRenderer getFeatureRenderer()
   {
     return seqPanel.seqCanvas.fr;
   }
-
+  @Override
+  public jalview.api.FeatureRenderer cloneFeatureRenderer()
+  {
+    FeatureRenderer nfr = new FeatureRenderer(av);
+    nfr.transferSettings(seqPanel.seqCanvas.fr);
+    return nfr;
+  }
   public void alignmentChanged()
   {
     av.alignmentChanged(this);
index aef8e31..14338fa 100644 (file)
@@ -81,31 +81,41 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
     }
   }
 
-  public void transferSettings(FeatureRenderer fr)
+  public void transferSettings(jalview.api.FeatureRenderer _fr)
   {
-    renderOrder = fr.renderOrder;
-    featureGroups = fr.featureGroups;
-    featureColours = fr.featureColours;
-    transparency = fr.transparency;
-    if (av != null && fr.av != null && fr.av != av)
+    if (_fr instanceof FeatureRenderer)
     {
-      if (fr.av.featuresDisplayed != null)
+      FeatureRenderer fr = (FeatureRenderer) _fr;
+      renderOrder = fr.renderOrder;
+      featureGroups = fr.featureGroups;
+      featureColours = fr.featureColours;
+      transparency = fr.transparency;
+      if (av != null && fr.av != null && fr.av != av)
       {
-        if (av.featuresDisplayed == null)
-        {
-          av.featuresDisplayed = new Hashtable();
-        }
-        else
+        if (fr.av.featuresDisplayed != null)
         {
-          av.featuresDisplayed.clear();
-        }
-        Enumeration en = fr.av.featuresDisplayed.keys();
-        while (en.hasMoreElements())
-        {
-          av.featuresDisplayed.put(en.nextElement(), Boolean.TRUE);
+          if (av.featuresDisplayed == null)
+          {
+            av.featuresDisplayed = new Hashtable();
+          }
+          else
+          {
+            av.featuresDisplayed.clear();
+          }
+          Enumeration en = fr.av.featuresDisplayed.keys();
+          while (en.hasMoreElements())
+          {
+            av.featuresDisplayed.put(en.nextElement(), Boolean.TRUE);
+          }
         }
       }
     }
+    else
+    {
+      throw new Error(
+              "Implementation error: cannot port feature settings from implementation of type "
+                      + _fr.getClass() + " to " + getClass());
+    }
   }
 
   static String lastFeatureAdded;
index 134019d..8c18a15 100644 (file)
@@ -1508,18 +1508,23 @@ public class AlignmentPanel extends GAlignmentPanel implements
     new OOMWarning(string, error, this);
   }
 
-  public FeatureRenderer cloneFeatureRenderer()
+  @Override
+  public jalview.api.FeatureRenderer cloneFeatureRenderer()
   {
 
     return new FeatureRenderer(this);
   }
-
+  @Override 
+  public jalview.api.FeatureRenderer getFeatureRenderer()
+  {
+    return seqPanel.seqCanvas.getFeatureRenderer();
+  }
   public void updateFeatureRenderer(FeatureRenderer fr)
   {
     fr.transferSettings(seqPanel.seqCanvas.getFeatureRenderer());
   }
 
-  public void updateFeatureRendererFrom(FeatureRenderer fr)
+  public void updateFeatureRendererFrom(jalview.api.FeatureRenderer fr)
   {
     if (seqPanel.seqCanvas.getFeatureRenderer() != null)
     {
index 7fa300e..35abb94 100644 (file)
@@ -62,7 +62,7 @@ public class AppJmolBinding extends jalview.ext.jmol.JalviewJmolBinding
     {
       if (fr == null)
       {
-        fr = ap.cloneFeatureRenderer();
+        fr = (jalview.gui.FeatureRenderer) ap.cloneFeatureRenderer();
       }
       else
       {
index eb64dee..d36105a 100644 (file)
@@ -41,7 +41,7 @@ import jalview.util.MessageManager;
  * @author $author$
  * @version $Revision$
  */
-public class FeatureRenderer implements jalview.api.FeatureRenderer
+public class FeatureRenderer extends jalview.viewmodel.FeatureRenderer implements jalview.api.FeatureRenderer
 {
   AlignmentPanel ap;
 
@@ -179,8 +179,9 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
    * @param fr
    *          settings to copy
    */
-  public void transferSettings(FeatureRenderer fr)
+  public void transferSettings(jalview.api.FeatureRenderer _fr)
   {
+    FeatureRenderer fr = (FeatureRenderer) _fr;
     FeatureRendererSettings frs = new FeatureRendererSettings(fr);
     this.renderOrder = frs.renderOrder;
     this.featureGroups = frs.featureGroups;
index f467cb8..a91a9e0 100755 (executable)
@@ -219,7 +219,7 @@ public class AnnotationColourGradient extends FollowerColourScheme
   public Color findColour(char c, int j, SequenceI seq)
   {
     Color currentColour = Color.white;
-    AlignmentAnnotation annotation = (seqAssociated ? seqannot.get(seq)
+    AlignmentAnnotation annotation = (seqAssociated && seqannot!=null ? seqannot.get(seq)
             : this.annotation);
     if (annotation == null)
     {
diff --git a/src/jalview/viewmodel/FeatureRenderer.java b/src/jalview/viewmodel/FeatureRenderer.java
new file mode 100644 (file)
index 0000000..b03cedb
--- /dev/null
@@ -0,0 +1,9 @@
+package jalview.viewmodel;
+
+import jalview.datamodel.SequenceFeature;
+
+import java.awt.Color;
+
+public class FeatureRenderer
+{
+}
index 83eebdf..b2fe3bb 100644 (file)
@@ -345,7 +345,7 @@ public class AADisorderClient extends JabawsCalcWorker implements
       {
         if (dispFeatures)
         {
-          jalview.gui.FeatureRenderer fr = ((jalview.gui.AlignmentPanel) ap)
+          jalview.api.FeatureRenderer fr = ((jalview.gui.AlignmentPanel) ap)
                   .cloneFeatureRenderer();
           for (String ft : fc.keySet())
           {