package jalview.schemes; 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 { AnnotatedCollectionI alignment; HiddenMarkovModel hmm; boolean peptideSpecific; boolean nucleotideSpecific; public HMMERColourScheme(HiddenMarkovModel markov) { hmm = markov; } public HMMERColourScheme() { } @Override public Color findColour(char symbol, int position, SequenceI seq, String consensusResidue, float pid) { if (hmm ==null) { return Color.white; } return findColour(symbol, position); } public Color findColour(char symbol, int position) { if (Comparison.isGap(symbol)) { return Color.white; } if (Character.isLowerCase(symbol)) { return new Color(230, 0, 0); } 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())) { if (!ResidueProperties.rnaBackgroundFrequencies.containsKey(symbol)) { return Color.white; } freq = ResidueProperties.rnaBackgroundFrequencies.get(symbol); } if (prob == 0) { return new Color(230, 0, 0); } 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 hiddenReps) { List seqs = collection.getSequences(); for (SequenceI seq : seqs) { if (seq.getHMM() != null) { hmm = seq.getHMM(); break; } } } @Override public ColourSchemeI getInstance(AnnotatedCollectionI sg, Map hiddenRepSequences) { HiddenMarkovModel markov = null; List seqs = sg.getSequences(); for (SequenceI seq : seqs) { if (seq.getHMM() != null) { markov = seq.getHMM(); break; } } HMMERColourScheme colour = new HMMERColourScheme(markov); return colour; } @Override public boolean isApplicableTo(AnnotatedCollectionI ac) { return true; } @Override public String getSchemeName() { return JalviewColourScheme.HMMER.name(); } @Override public boolean isSimple() { // TODO Auto-generated method stub return false; } }