JAL-2629 add hmmalign command
[jalview.git] / src / jalview / schemes / HMMERColourScheme.java
index a7fc8b8..3c25ec2 100644 (file)
@@ -1,6 +1,5 @@
 package jalview.schemes;
 
-import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.HiddenMarkovModel;
 import jalview.datamodel.SequenceCollectionI;
@@ -9,6 +8,7 @@ import jalview.util.ColorUtils;
 import jalview.util.Comparison;
 
 import java.awt.Color;
+import java.util.List;
 import java.util.Map;
 
 public class HMMERColourScheme extends ResidueColourScheme
@@ -51,19 +51,46 @@ public class HMMERColourScheme extends ResidueColourScheme
     }
     Double prob;
     prob = hmm.getMatchEmissionProbability(position, symbol);
-    double freq = ResidueProperties.aminoBackgroundFrequencies.get(symbol);
-    Double value = prob - freq;
-
+    double freq = 0;
+    if ("amino".equals(hmm.getAlphabetType()))
+    {
+      if (!ResidueProperties.aminoBackgroundFrequencies.containsKey(symbol))
+      {
+        return Color.white;
+      }
+      freq = ResidueProperties.aminoBackgroundFrequencies.get(symbol);
+    }
+    else if ("DNA".equals(hmm.getAlphabetType()))
+    {
+      if (!ResidueProperties.dnaBackgroundFrequencies.containsKey(symbol))
+      {
+        return Color.white;
+      }
+      freq = ResidueProperties.dnaBackgroundFrequencies.get(symbol);
+    }
+    else if ("RNA".equals(hmm.getAlphabetType()))
+    {
+      if (!ResidueProperties.rnaBackgroundFrequencies.containsKey(symbol))
+      {
+        return Color.white;
+      }
+      freq = ResidueProperties.rnaBackgroundFrequencies.get(symbol);
+    }
+    if (prob == 0)
+    {
+      return Color.red;
+    }
+    Double value = Math.log(prob / freq);
     Color colour = null;
-    if (value >= 0)
+    if (value > 0)
     {
 
       colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
-              Color.WHITE, 1f, Color.green);
+              Color.WHITE, 4.52f, Color.blue);
     }
     else if (value < 0)
     {
-      return Color.YELLOW;
+      return Color.ORANGE;
 
     }
     return colour;
@@ -79,35 +106,34 @@ public class HMMERColourScheme extends ResidueColourScheme
   public void alignmentChanged(AnnotatedCollectionI collection,
           Map<SequenceI, SequenceCollectionI> hiddenReps)
   {
-    AlignmentAnnotation[] annArr = collection.getAlignmentAnnotation();
-    for (AlignmentAnnotation ann : annArr)
+    List<SequenceI> seqs = collection.getSequences();
+    for (SequenceI seq : seqs)
     {
-      if (ann.label.indexOf("Information Content") > -1)
+      if (seq.getHMM() != null)
       {
-        hmm = ann.getHMM();
+        hmm = seq.getHMM();
+        break;
       }
     }
 
   }
 
+
+
   @Override
   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
     HiddenMarkovModel markov = null;
-    AlignmentAnnotation[] annArr = sg.getAlignmentAnnotation();
-    for (AlignmentAnnotation ann : annArr)
+    List<SequenceI> seqs = sg.getSequences();
+    for (SequenceI seq : seqs)
     {
-      if (ann.label.indexOf("Information Content") > -1)
+      if (seq.getHMM() != null)
       {
-        markov = ann.getHMM();
+        markov = seq.getHMM();
+        break;
       }
     }
-    
-    
-    
-    
-
     HMMERColourScheme colour = new HMMERColourScheme(markov);
     return colour;