3c25ec2f995c0eacbb989cb96e8c440fcbf7724f
[jalview.git] / 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     Double prob;
53     prob = hmm.getMatchEmissionProbability(position, symbol);
54     double freq = 0;
55     if ("amino".equals(hmm.getAlphabetType()))
56     {
57       if (!ResidueProperties.aminoBackgroundFrequencies.containsKey(symbol))
58       {
59         return Color.white;
60       }
61       freq = ResidueProperties.aminoBackgroundFrequencies.get(symbol);
62     }
63     else if ("DNA".equals(hmm.getAlphabetType()))
64     {
65       if (!ResidueProperties.dnaBackgroundFrequencies.containsKey(symbol))
66       {
67         return Color.white;
68       }
69       freq = ResidueProperties.dnaBackgroundFrequencies.get(symbol);
70     }
71     else if ("RNA".equals(hmm.getAlphabetType()))
72     {
73       if (!ResidueProperties.rnaBackgroundFrequencies.containsKey(symbol))
74       {
75         return Color.white;
76       }
77       freq = ResidueProperties.rnaBackgroundFrequencies.get(symbol);
78     }
79     if (prob == 0)
80     {
81       return Color.red;
82     }
83     Double value = Math.log(prob / freq);
84     Color colour = null;
85     if (value > 0)
86     {
87
88       colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
89               Color.WHITE, 4.52f, Color.blue);
90     }
91     else if (value < 0)
92     {
93       return Color.ORANGE;
94
95     }
96     return colour;
97
98   }
99     
100
101
102
103
104
105   @Override
106   public void alignmentChanged(AnnotatedCollectionI collection,
107           Map<SequenceI, SequenceCollectionI> hiddenReps)
108   {
109     List<SequenceI> seqs = collection.getSequences();
110     for (SequenceI seq : seqs)
111     {
112       if (seq.getHMM() != null)
113       {
114         hmm = seq.getHMM();
115         break;
116       }
117     }
118
119   }
120
121
122
123   @Override
124   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
125           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
126   {
127     HiddenMarkovModel markov = null;
128     List<SequenceI> seqs = sg.getSequences();
129     for (SequenceI seq : seqs)
130     {
131       if (seq.getHMM() != null)
132       {
133         markov = seq.getHMM();
134         break;
135       }
136     }
137     HMMERColourScheme colour = new HMMERColourScheme(markov);
138     return colour;
139
140   }
141
142   @Override
143   public boolean isApplicableTo(AnnotatedCollectionI ac)
144   {
145       return true;
146
147   }
148
149   @Override
150   public String getSchemeName()
151   {
152
153     return JalviewColourScheme.HMMER.name();
154   }
155
156   @Override
157   public boolean isSimple()
158   {
159     // TODO Auto-generated method stub
160     return false;
161   }
162
163 }