JAL-2629 add hmmalign command
[jalview.git] / src / jalview / schemes / HMMERColourScheme.java
index b2d0742..3c25ec2 100644 (file)
@@ -4,8 +4,11 @@ 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.List;
 import java.util.Map;
 
 public class HMMERColourScheme extends ResidueColourScheme
@@ -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,98 @@ public class HMMERColourScheme extends ResidueColourScheme
   public Color findColour(char symbol, int position)
   {
 
-
-    Double probability;
-    probability = hmm.getMatchEmissionProbability(position, symbol);
-    // Double redModifier = Math.pow(probability, 0.9);
-    Double doubleGreenModifier;
-    float greenModifier;
-    if (probability < 0.5)
+    if (Comparison.isGap(symbol))
+    {
+      return Color.white;
+    }
+    Double prob;
+    prob = hmm.getMatchEmissionProbability(position, symbol);
+    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()))
     {
-      doubleGreenModifier = probability;
-      greenModifier = doubleGreenModifier.floatValue();
+      if (!ResidueProperties.rnaBackgroundFrequencies.containsKey(symbol))
+      {
+        return Color.white;
+      }
+      freq = ResidueProperties.rnaBackgroundFrequencies.get(symbol);
     }
-    else
+    if (prob == 0)
     {
-      doubleGreenModifier = Math.pow(probability, 1 / 1.9);
-      greenModifier = doubleGreenModifier.floatValue();
+      return Color.red;
     }
-    // Double blueModifier = Math.pow(probability, 0.9);
-    return new Color(1f, 1f - greenModifier, 0.f);
+    Double value = Math.log(prob / freq);
+    Color colour = null;
+    if (value > 0)
+    {
+
+      colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
+              Color.WHITE, 4.52f, Color.blue);
+    }
+    else if (value < 0)
+    {
+      return Color.ORANGE;
+
+    }
+    return colour;
 
   }
+    
+
+
+
+
 
   @Override
   public void alignmentChanged(AnnotatedCollectionI collection,
           Map<SequenceI, SequenceCollectionI> hiddenReps)
   {
+    List<SequenceI> seqs = collection.getSequences();
+    for (SequenceI seq : seqs)
+    {
+      if (seq.getHMM() != null)
+      {
+        hmm = seq.getHMM();
+        break;
+      }
+    }
 
-    collection.setHMM(hmm);
   }
 
+
+
   @Override
   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
-    
-    
-    
-    
+    HiddenMarkovModel markov = null;
+    List<SequenceI> seqs = sg.getSequences();
+    for (SequenceI seq : seqs)
+    {
+      if (seq.getHMM() != null)
+      {
+        markov = seq.getHMM();
+        break;
+      }
+    }
+    HMMERColourScheme colour = new HMMERColourScheme(markov);
+    return colour;
 
-    HMMERColourScheme markov = new HMMERColourScheme(sg.getHMM());
-    return markov;
   }
 
   @Override