JAL-974 create graduated feature colours for annotation with scores.
authorjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 2 Jul 2012 06:40:33 +0000 (07:40 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 2 Jul 2012 06:40:33 +0000 (07:40 +0100)
src/jalview/ws/jws2/AADisorderClient.java

index baec458..c5c7a13 100644 (file)
@@ -1,14 +1,19 @@
 package jalview.ws.jws2;
 
 import jalview.api.AlignCalcWorkerI;
+import jalview.bin.Cache;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
+import jalview.schemes.GraduatedColor;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
 import jalview.ws.params.WsParamSetI;
 
+import java.awt.Color;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import compbio.data.sequence.Range;
 import compbio.data.sequence.Score;
@@ -55,6 +60,7 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
     if (immediate || !calcMan.isWorking(this) && scoremanager != null)
     {
       boolean dispFeatures = false;
+      Map<String,Object> fc=new Hashtable<String, Object>();
       for (String seqId : seqNames.keySet())
       {
         SequenceI dseq, seq = seqNames.get(seqId);
@@ -65,7 +71,7 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
         }
         ;
         ScoreHolder scores = scoremanager.getAnnotationForSequence(seqId);
-
+        float last=Float.NaN,val=Float.NaN;
         for (Score scr : scores.scores)
         {
 
@@ -81,7 +87,7 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
               {
                 sf = new SequenceFeature(typeName + "(" + scr.getMethod()
                         + ")", "Disordered Region", base + rn.from, base
-                        + rn.to, vals.next().floatValue(), methodName);
+                        + rn.to, val=vals.next().floatValue(), methodName);
               }
               else
               {
@@ -90,6 +96,11 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
                         base + rn.to, methodName);
               }
               dseq.addSequenceFeature(sf);
+              if (last!=val && last!=Float.NaN)
+              {
+                fc.put(sf.getType(),sf);
+              }
+              last=val;
               dispFeatures = true;
             }
           }
@@ -100,7 +111,12 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
             {
               SequenceFeature sf = new SequenceFeature(typeName + "("
                       + scr.getMethod() + ")", "Disordered Region", start,
-                      start, vals.next().floatValue(), methodName);
+                      start, val=vals.next().floatValue(), methodName);
+              if (last!=val && last!=Float.NaN)
+              {
+                fc.put(sf.getType(),sf);
+              }
+              last=val;
               dseq.addSequenceFeature(sf);
               dispFeatures = true;
             }
@@ -110,15 +126,25 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
       {
         if (dispFeatures)
         {
+          jalview.gui.FeatureRenderer fr = ((jalview.gui.AlignmentPanel) ap).cloneFeatureRenderer();
           // TODO: configure feature display settings for added types if they don't already exist
-          
+          for (String ft:fc.keySet())
+          {
+            Cache.log.debug("Set graduated feature for new type:"+ft);
+            Object gc=fr.getFeatureStyle(ft);
+            if (gc instanceof Color)
+            {
+              // set graduated color as fading to white for minimum, and autoscaling to values on alignment
+              GraduatedColor ggc=new GraduatedColor(Color.white, (Color)gc,Float.MIN_VALUE, Float.MAX_VALUE);
+              ggc.setAutoScaled(true);
+              fr.setColour(ft, ggc);
+            }
+          }
+          af.alignPanel.updateFeatureRendererFrom(fr);
           af.alignPanel.av.setShowSequenceFeatures(true);
           ap.paintAlignment(true);
         }
       }
-      /*
-       * else { ap.paintAlignment(true); }
-       */
     }
   }