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
{
if (hmm ==null)
{
- return new Color(255, 255, 255);
+ return Color.white;
}
return findColour(symbol, position);
}
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