complete Information Content annotation
[jalview.git] / src / jalview / schemes / HMMERColourScheme.java
index b2d0742..a7fc8b8 100644 (file)
@@ -1,9 +1,12 @@
 package jalview.schemes;
 
+import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.HiddenMarkovModel;
 import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceI;
+import jalview.util.ColorUtils;
+import jalview.util.Comparison;
 
 import java.awt.Color;
 import java.util.Map;
@@ -34,7 +37,7 @@ public class HMMERColourScheme extends ResidueColourScheme
   {
     if (hmm ==null)
     {
-      return new Color(255, 255, 255);
+      return Color.white;
     }
     return findColour(symbol, position);
   }
@@ -42,46 +45,72 @@ public class HMMERColourScheme extends ResidueColourScheme
   public Color findColour(char symbol, int position)
   {
 
+    if (Comparison.isGap(symbol))
+    {
+      return Color.white;
+    }
+    Double prob;
+    prob = hmm.getMatchEmissionProbability(position, symbol);
+    double freq = ResidueProperties.aminoBackgroundFrequencies.get(symbol);
+    Double value = prob - freq;
 
-    Double probability;
-    probability = hmm.getMatchEmissionProbability(position, symbol);
-    // Double redModifier = Math.pow(probability, 0.9);
-    Double doubleGreenModifier;
-    float greenModifier;
-    if (probability < 0.5)
+    Color colour = null;
+    if (value >= 0)
     {
-      doubleGreenModifier = probability;
-      greenModifier = doubleGreenModifier.floatValue();
+
+      colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
+              Color.WHITE, 1f, Color.green);
     }
-    else
+    else if (value < 0)
     {
-      doubleGreenModifier = Math.pow(probability, 1 / 1.9);
-      greenModifier = doubleGreenModifier.floatValue();
+      return Color.YELLOW;
+
     }
-    // Double blueModifier = Math.pow(probability, 0.9);
-    return new Color(1f, 1f - greenModifier, 0.f);
+    return colour;
 
   }
+    
+
+
+
+
 
   @Override
   public void alignmentChanged(AnnotatedCollectionI collection,
           Map<SequenceI, SequenceCollectionI> hiddenReps)
   {
+    AlignmentAnnotation[] annArr = collection.getAlignmentAnnotation();
+    for (AlignmentAnnotation ann : annArr)
+    {
+      if (ann.label.indexOf("Information Content") > -1)
+      {
+        hmm = ann.getHMM();
+      }
+    }
 
-    collection.setHMM(hmm);
   }
 
   @Override
   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
+    HiddenMarkovModel markov = null;
+    AlignmentAnnotation[] annArr = sg.getAlignmentAnnotation();
+    for (AlignmentAnnotation ann : annArr)
+    {
+      if (ann.label.indexOf("Information Content") > -1)
+      {
+        markov = ann.getHMM();
+      }
+    }
     
     
     
     
 
-    HMMERColourScheme markov = new HMMERColourScheme(sg.getHMM());
-    return markov;
+    HMMERColourScheme colour = new HMMERColourScheme(markov);
+    return colour;
+
   }
 
   @Override