JAL-2629 moved HMM storage location to placeholder sequence
[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.Map;
12
13 public class HMMERColourScheme extends ResidueColourScheme
14 {
15
16   AnnotatedCollectionI alignment;
17
18   HiddenMarkovModel hmm;
19   
20   boolean peptideSpecific;
21
22   boolean nucleotideSpecific;
23
24   public HMMERColourScheme(HiddenMarkovModel markov)
25   {
26     hmm = markov;
27   }
28   public HMMERColourScheme()
29   {
30
31   }
32
33   @Override
34   public Color findColour(char symbol, int position, SequenceI seq,
35           String consensusResidue, float pid)
36   {
37     if (hmm ==null)
38     {
39       return Color.white;
40     }
41     return findColour(symbol, position);
42   }
43
44   public Color findColour(char symbol, int position)
45   {
46
47     if (Comparison.isGap(symbol))
48     {
49       return Color.white;
50     }
51     Double prob;
52     prob = hmm.getMatchEmissionProbability(position, symbol);
53     double freq = 0;
54     if ("amino".equals(hmm.getAlphabetType()))
55     {
56       if (!ResidueProperties.aminoBackgroundFrequencies.containsKey(symbol))
57       {
58         return Color.white;
59       }
60       freq = ResidueProperties.aminoBackgroundFrequencies.get(symbol);
61     }
62     else if ("DNA".equals(hmm.getAlphabetType()))
63     {
64       if (!ResidueProperties.dnaBackgroundFrequencies.containsKey(symbol))
65       {
66         return Color.white;
67       }
68       freq = ResidueProperties.dnaBackgroundFrequencies.get(symbol);
69     }
70     else if ("RNA".equals(hmm.getAlphabetType()))
71     {
72       if (!ResidueProperties.rnaBackgroundFrequencies.containsKey(symbol))
73       {
74         return Color.white;
75       }
76       freq = ResidueProperties.rnaBackgroundFrequencies.get(symbol);
77     }
78     if (prob == 0)
79     {
80       return Color.red;
81     }
82     Double value = Math.log(prob / freq);
83     Color colour = null;
84     if (value > 0)
85     {
86
87       colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
88               Color.WHITE, 3f, Color.blue);
89     }
90     else if (value < 0)
91     {
92       return Color.ORANGE;
93
94     }
95     return colour;
96
97   }
98     
99
100
101
102
103
104   @Override
105   public void alignmentChanged(AnnotatedCollectionI collection,
106           Map<SequenceI, SequenceCollectionI> hiddenReps)
107   {
108     SequenceI seq = collection.getSequences().get(0);
109     hmm = seq.getHMM();
110   }
111
112
113
114   @Override
115   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
116           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
117   {
118     HiddenMarkovModel markov = null;
119     SequenceI seq = sg.getSequences().get(0);
120     markov = seq.getHMM();
121     HMMERColourScheme colour = new HMMERColourScheme(markov);
122     return colour;
123
124   }
125
126   @Override
127   public boolean isApplicableTo(AnnotatedCollectionI ac)
128   {
129       return true;
130
131   }
132
133   @Override
134   public String getSchemeName()
135   {
136
137     return JalviewColourScheme.HMMER.name();
138   }
139
140   @Override
141   public boolean isSimple()
142   {
143     // TODO Auto-generated method stub
144     return false;
145   }
146
147 }