JAL-2599 fix HMMER scheme not colouring inserts and made red darker
[jalview.git] / src / jalview / schemes / HMMERColourScheme.java
1 package jalview.schemes;
2
3 import jalview.datamodel.AnnotatedCollectionI;
4 import jalview.datamodel.HiddenMarkovModel;
5 import jalview.datamodel.SequenceCollectionI;
6 import jalview.datamodel.SequenceI;
7 import jalview.util.ColorUtils;
8 import jalview.util.Comparison;
9
10 import java.awt.Color;
11 import java.util.List;
12 import java.util.Map;
13
14 public class HMMERColourScheme extends ResidueColourScheme
15 {
16
17   AnnotatedCollectionI alignment;
18
19   HiddenMarkovModel hmm;
20   
21   boolean peptideSpecific;
22
23   boolean nucleotideSpecific;
24
25   public HMMERColourScheme(HiddenMarkovModel markov)
26   {
27     hmm = markov;
28   }
29   public HMMERColourScheme()
30   {
31
32   }
33
34   @Override
35   public Color findColour(char symbol, int position, SequenceI seq,
36           String consensusResidue, float pid)
37   {
38     if (hmm ==null)
39     {
40       return Color.white;
41     }
42     return findColour(symbol, position);
43   }
44
45   public Color findColour(char symbol, int position)
46   {
47
48     if (Comparison.isGap(symbol))
49     {
50       return Color.white;
51     }
52     if (Character.isLowerCase(symbol))
53     {
54       return new Color(230, 0, 0);
55     }
56     Double prob;
57     prob = hmm.getMatchEmissionProbability(position, symbol);
58     double freq = 0;
59     if ("amino".equals(hmm.getAlphabetType()))
60     {
61       if (!ResidueProperties.aminoBackgroundFrequencies.containsKey(symbol))
62       {
63         return Color.white;
64       }
65       freq = ResidueProperties.aminoBackgroundFrequencies.get(symbol);
66     }
67     else if ("DNA".equals(hmm.getAlphabetType()))
68     {
69       if (!ResidueProperties.dnaBackgroundFrequencies.containsKey(symbol))
70       {
71         return Color.white;
72       }
73       freq = ResidueProperties.dnaBackgroundFrequencies.get(symbol);
74     }
75     else if ("RNA".equals(hmm.getAlphabetType()))
76     {
77       if (!ResidueProperties.rnaBackgroundFrequencies.containsKey(symbol))
78       {
79         return Color.white;
80       }
81       freq = ResidueProperties.rnaBackgroundFrequencies.get(symbol);
82     }
83     if (prob == 0)
84     {
85       return new Color(230, 0, 0);
86     }
87     Double value = Math.log(prob / freq);
88     Color colour = null;
89     if (value > 0)
90     {
91
92       colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
93               Color.WHITE, 4.52f, Color.blue);
94     }
95     else if (value < 0)
96     {
97       return Color.ORANGE;
98
99     }
100     return colour;
101
102   }
103     
104
105
106
107
108
109   @Override
110   public void alignmentChanged(AnnotatedCollectionI collection,
111           Map<SequenceI, SequenceCollectionI> hiddenReps)
112   {
113           List<SequenceI> seqs = collection.getSequences();
114             for (SequenceI seq : seqs)
115             {
116               if (seq.getHMM() != null)
117               {
118                 hmm = seq.getHMM();
119                 break;
120               }
121             }
122
123   }
124
125
126
127   @Override
128   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
129           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
130   {
131           HiddenMarkovModel markov = null;
132             List<SequenceI> seqs = sg.getSequences();
133             for (SequenceI seq : seqs)
134             {
135               if (seq.getHMM() != null)
136               {
137                 markov = seq.getHMM();
138                 break;
139               }
140             }
141             HMMERColourScheme colour = new HMMERColourScheme(markov);
142             return colour;
143
144   }
145
146   @Override
147   public boolean isApplicableTo(AnnotatedCollectionI ac)
148   {
149       return true;
150
151   }
152
153   @Override
154   public String getSchemeName()
155   {
156
157     return JalviewColourScheme.HMMER.name();
158   }
159
160   @Override
161   public boolean isSimple()
162   {
163     // TODO Auto-generated method stub
164     return false;
165   }
166
167 }