JAL-2599 fix background frequency storage and correct colour scheme
[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     String alpha = hmm.getAlphabetType();
60     if (!ResidueProperties.backgroundFrequencies.get(alpha).containsKey(symbol))
61     {
62       return Color.white;
63     }
64     else
65     {
66       freq = ResidueProperties.backgroundFrequencies.get(alpha).get(symbol);
67     }
68     if (prob == 0)
69     {
70       return new Color(230, 0, 0);
71     }
72     Double value = Math.log(prob / freq) / Math.log(2);
73     Color colour = null;
74     if (value > 0)
75     {
76
77       colour = ColorUtils.getGraduatedColour(value.floatValue(), 0,
78               Color.WHITE, 6.52f, Color.blue);
79     }
80     else if (value < 0)
81     {
82       return Color.ORANGE;
83
84     }
85     return colour;
86
87   }
88     
89
90
91
92
93
94   @Override
95   public void alignmentChanged(AnnotatedCollectionI collection,
96           Map<SequenceI, SequenceCollectionI> hiddenReps)
97   {
98           List<SequenceI> seqs = collection.getSequences();
99             for (SequenceI seq : seqs)
100             {
101               if (seq.getHMM() != null)
102               {
103                 hmm = seq.getHMM();
104                 break;
105               }
106             }
107
108   }
109
110
111
112   @Override
113   public ColourSchemeI getInstance(AnnotatedCollectionI sg,
114           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
115   {
116           HiddenMarkovModel markov = null;
117             List<SequenceI> seqs = sg.getSequences();
118             for (SequenceI seq : seqs)
119             {
120               if (seq.getHMM() != null)
121               {
122                 markov = seq.getHMM();
123                 break;
124               }
125             }
126             HMMERColourScheme colour = new HMMERColourScheme(markov);
127             return colour;
128
129   }
130
131   @Override
132   public boolean isApplicableTo(AnnotatedCollectionI ac)
133   {
134       return true;
135
136   }
137
138   @Override
139   public String getSchemeName()
140   {
141
142     return JalviewColourScheme.HMMER.name();
143   }
144
145   @Override
146   public boolean isSimple()
147   {
148     // TODO Auto-generated method stub
149     return false;
150   }
151
152 }