f7c13ef9d4c24cb46a7c2ba9b9861266cadab0a8
[jalview.git] / src / jalview / schemes / ResidueProperties.java
1 \r
2 /* Copyright (C) 1998  Michele Clamp\r
3 *\r
4 * This program is free software; you can redistribute it and/or\r
5 * modify it under the terms of the GNU General Public License\r
6 * as published by the Free Software Foundation; either version 2\r
7 * of the License, or (at your option) any later version.\r
8 *\r
9 * This program is distributed in the hope that it will be useful,\r
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 * GNU General Public License for more details.\r
13 *\r
14 * You should have received a copy of the GNU General Public License\r
15 * along with this program; if not, write to the Free Software\r
16 * Foundation, Inc, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\r
17 */\r
18 package jalview.schemes;\r
19 \r
20 import java.awt.Color;\r
21 import java.util.*;\r
22 \r
23 public class ResidueProperties {\r
24 \r
25   //Stores residue codes/names and colours and other things\r
26   public static Hashtable aaHash = new Hashtable();  // stores the number value of the aa\r
27   public static Hashtable aa3Hash = new Hashtable();\r
28   public static Hashtable aa2Triplet = new Hashtable();\r
29   public static Hashtable nucleotideHash = new Hashtable();\r
30 \r
31   static {\r
32     aaHash.put("A", new Integer(0));\r
33     aaHash.put("R", new Integer(1));\r
34     aaHash.put("N", new Integer(2));\r
35     aaHash.put("D", new Integer(3));\r
36     aaHash.put("C", new Integer(4));\r
37     aaHash.put("Q", new Integer(5));\r
38     aaHash.put("E", new Integer(6));\r
39     aaHash.put("G", new Integer(7));\r
40     aaHash.put("H", new Integer(8));\r
41     aaHash.put("I", new Integer(9));\r
42     aaHash.put("L", new Integer(10));\r
43     aaHash.put("K", new Integer(11));\r
44     aaHash.put("M", new Integer(12));\r
45     aaHash.put("F", new Integer(13));\r
46     aaHash.put("P", new Integer(14));\r
47     aaHash.put("S", new Integer(15));\r
48     aaHash.put("T", new Integer(16));\r
49     aaHash.put("W", new Integer(17));\r
50     aaHash.put("Y", new Integer(18));\r
51     aaHash.put("V", new Integer(19));\r
52     aaHash.put("B", new Integer(20));\r
53     aaHash.put("Z", new Integer(21));\r
54     aaHash.put("X", new Integer(22));\r
55     aaHash.put("a", new Integer(0));\r
56     aaHash.put("r", new Integer(1));\r
57     aaHash.put("n", new Integer(2));\r
58     aaHash.put("d", new Integer(3));\r
59     aaHash.put("c", new Integer(4));\r
60     aaHash.put("q", new Integer(5));\r
61     aaHash.put("e", new Integer(6));\r
62     aaHash.put("g", new Integer(7));\r
63     aaHash.put("h", new Integer(8));\r
64     aaHash.put("i", new Integer(9));\r
65     aaHash.put("l", new Integer(10));\r
66     aaHash.put("k", new Integer(11));\r
67     aaHash.put("m", new Integer(12));\r
68     aaHash.put("f", new Integer(13));\r
69     aaHash.put("p", new Integer(14));\r
70     aaHash.put("s", new Integer(15));\r
71     aaHash.put("t", new Integer(16));\r
72     aaHash.put("w", new Integer(17));\r
73     aaHash.put("y", new Integer(18));\r
74     aaHash.put("v", new Integer(19));\r
75     aaHash.put("b", new Integer(20));\r
76     aaHash.put("z", new Integer(21));\r
77     aaHash.put("x", new Integer(22));\r
78     aaHash.put("-", new Integer(23));\r
79     aaHash.put("*", new Integer(23));\r
80     aaHash.put(".", new Integer(23));\r
81     aaHash.put(" ", new Integer(23));\r
82   }\r
83 \r
84   static {\r
85     nucleotideHash.put("A", new Integer(0));\r
86     nucleotideHash.put("C", new Integer(1));\r
87     nucleotideHash.put("G", new Integer(2));\r
88     nucleotideHash.put("T", new Integer(3));\r
89     nucleotideHash.put("U", new Integer(4));\r
90   }\r
91 \r
92   // These numbers should correspond to the indices in the Color hashes\r
93   public static Hashtable aaSpecialsHash = new Hashtable();\r
94   static {\r
95     aaSpecialsHash.put("-", new Integer(23));\r
96     aaSpecialsHash.put("*", new Integer(24));\r
97     aaSpecialsHash.put(".", new Integer(25));\r
98     aaSpecialsHash.put(" ", new Integer(26));\r
99   }\r
100 \r
101   static {\r
102     aa3Hash.put("ALA", new Integer(0));\r
103     aa3Hash.put("ARG", new Integer(1));\r
104     aa3Hash.put("ASN", new Integer(2));\r
105     aa3Hash.put("ASP", new Integer(3)); //D\r
106     aa3Hash.put("CYS", new Integer(4));\r
107     aa3Hash.put("GLN", new Integer(5)); //Q\r
108     aa3Hash.put("GLU", new Integer(6));   // E\r
109     aa3Hash.put("GLY", new Integer(7));\r
110     aa3Hash.put("HIS", new Integer(8));\r
111     aa3Hash.put("ILE", new Integer(9));\r
112     aa3Hash.put("LEU", new Integer(10));\r
113     aa3Hash.put("LYS", new Integer(11));\r
114     aa3Hash.put("MET", new Integer(12));\r
115     aa3Hash.put("PHE", new Integer(13));\r
116     aa3Hash.put("PRO", new Integer(14));\r
117     aa3Hash.put("SER", new Integer(15));\r
118     aa3Hash.put("THR", new Integer(16));\r
119     aa3Hash.put("TRP", new Integer(17));\r
120     aa3Hash.put("TYR", new Integer(18));\r
121     aa3Hash.put("VAL", new Integer(19));\r
122     aa3Hash.put("B", new Integer(20));\r
123     aa3Hash.put("Z", new Integer(21));\r
124     aa3Hash.put("X", new Integer(22));\r
125     aa3Hash.put("-", new Integer(23));\r
126     aa3Hash.put("*", new Integer(23));\r
127     aa3Hash.put(".", new Integer(23));\r
128     aa3Hash.put(" ", new Integer(23));\r
129   }\r
130 \r
131   static{\r
132      aa2Triplet.put("A", "ALA");\r
133      aa2Triplet.put("R", "ARG");\r
134      aa2Triplet.put("N", "ASN");\r
135      aa2Triplet.put("D", "ASP");\r
136      aa2Triplet.put("C", "CYS");\r
137      aa2Triplet.put("Q", "GLN");\r
138      aa2Triplet.put("E", "GLU");\r
139      aa2Triplet.put("G", "GLY");\r
140      aa2Triplet.put("H", "HIS");\r
141      aa2Triplet.put("I", "ILE");\r
142      aa2Triplet.put("L", "LEU");\r
143      aa2Triplet.put("K", "LYS");\r
144      aa2Triplet.put("M", "MET");\r
145      aa2Triplet.put("F", "PHE");\r
146      aa2Triplet.put("P", "PRO");\r
147      aa2Triplet.put("S", "SER");\r
148      aa2Triplet.put("T", "THR");\r
149      aa2Triplet.put("W", "TRP");\r
150      aa2Triplet.put("Y", "TYR");\r
151      aa2Triplet.put("V", "VAL");\r
152   }\r
153 \r
154   public static String aa[] = {\r
155     "A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X","_","*","."," "\r
156   };\r
157   public static Color midBlue = new Color(100,100,255);\r
158   public static Vector scaleColours = new Vector();\r
159   static {\r
160     scaleColours.addElement(new Color(114,0,147));\r
161     scaleColours.addElement(new Color(156,0,98));\r
162     scaleColours.addElement(new Color(190,0,0));\r
163     scaleColours.addElement(Color.red);\r
164     scaleColours.addElement(new Color(255,125,0));\r
165     scaleColours.addElement(Color.orange);\r
166     scaleColours.addElement(new Color(255,194,85));\r
167     scaleColours.addElement(Color.yellow);\r
168     scaleColours.addElement(new Color(255,255,181));\r
169     scaleColours.addElement(Color.white);\r
170   }\r
171 \r
172   public static Color[] taylor = {\r
173     new Color(204,255,0),          // A  Greenish-yellowy-yellow\r
174     new Color(0,0,255),            // R  Blueish-bluey-blue\r
175     new Color(204,0,255),          // N  Blueish-reddy-blue\r
176     new Color(255,0,0),            // D  Reddish-reddy-red\r
177     new Color(255,255,0),          // C  Yellowish-yellowy-yellow\r
178     new Color(255,0,204),          // Q  Reddish-bluey-red\r
179     new Color(255,0,102),          // E  Blueish-reddy-red\r
180     new Color(255,153,0),          // G  Yellowy-reddy-yellow\r
181     new Color(0,102,255),          // H  Greenish-bluey-blue\r
182     new Color(102,255,0),          // I  Greenish-yellowy-green\r
183     new Color(51,255,0),           // L  Yellowish-greeny-green\r
184     new Color(102,0,255),          // K  Reddish-bluey-blue\r
185     new Color(0,255,0),            // M  Greenish-greeny-green\r
186     new Color(0,255,102),          // F  Blueish-greeny-green\r
187     new Color(255,204,0),          // P  Reddish-yellowy-yellow\r
188     new Color(255,51,0),           // S  Yellowish-reddy-red\r
189     new Color(255,102,0),          // T  Reddish-yellowy-red\r
190     new Color(0,204,255),          // W  Blueish-greeny-green\r
191     new Color(0,255,204),          // Y  Greenish-bluey-green\r
192     new Color(153,255,0),          // V  Yellowish-greeny-yellow\r
193     Color.white,         // B\r
194     Color.white,         // Z\r
195     Color.white,         // X\r
196     Color.white,         // -\r
197     Color.white,         // *\r
198     Color.white          // .\r
199   };\r
200 \r
201   public static Color[] nucleotide = {\r
202       new Color(100,247,63),          // A\r
203       new Color(255,179,64),          // C\r
204       new Color(235,65,60),           // G\r
205       new Color(60,136,238),          // T\r
206       new Color(60,136,238)           // U\r
207   };\r
208 \r
209   public static Color[] color = {\r
210     Color.pink,          // A\r
211     midBlue,             // R\r
212     Color.green,         // N\r
213     Color.red,           // D\r
214     Color.yellow,        // C\r
215     Color.green,         // Q\r
216     Color.red,           // E\r
217     Color.magenta,       // G\r
218     Color.red,           // H\r
219     Color.pink,          // I\r
220     Color.pink,          // L\r
221     midBlue,             // K\r
222     Color.pink,          // M\r
223     Color.orange,        // F\r
224     Color.magenta,       // P\r
225     Color.green,         // S\r
226     Color.green,         // T\r
227     Color.orange,        // W\r
228     Color.orange,        // Y\r
229     Color.pink,          // V\r
230     Color.white,         // B\r
231     Color.white,         // Z\r
232     Color.white,         // X\r
233     Color.white,         // -\r
234     Color.white,         // *\r
235     Color.white,          // .\r
236     Color.white          // ' '\r
237   };\r
238 \r
239   // Dunno where I got these numbers from\r
240   public static double[] hyd2 = {\r
241     0.62,  //A\r
242     0.29,  //R\r
243     -0.90,  //N\r
244     -0.74,  //D\r
245     1.19,  //C\r
246     0.48,  //Q\r
247     -0.40, //E\r
248     1.38,  //G\r
249     -1.50, //H\r
250     1.06,  //I\r
251     0.64,  //L\r
252     -0.78, //K\r
253     0.12,  //M\r
254     -0.85, //F\r
255     -2.53, //P\r
256     -0.18, //S\r
257     -0.05, //T\r
258     1.08,  //W\r
259     0.81,  //Y\r
260     0.0,   //V\r
261     0.26,  //B\r
262     0.0,   //Z\r
263     0.0   //X\r
264   };\r
265   public static double[] helix = {\r
266     1.42,\r
267     0.98,\r
268     0.67,\r
269     1.01,\r
270     0.70,\r
271     1.11,\r
272     1.51,\r
273     0.57,\r
274     1.00,\r
275     1.08,\r
276     1.21,\r
277     1.16,\r
278     1.45,\r
279     1.13,\r
280     0.57,\r
281     0.77,\r
282     0.83,\r
283     1.08,\r
284     0.69,\r
285     1.06,\r
286     0.84,\r
287     1.31,\r
288     1.00,\r
289     0.0\r
290   };\r
291   public static double helixmin = 0.57;\r
292   public static double helixmax = 1.51;\r
293 \r
294   public static double[] strand = {\r
295     0.83,0.93,0.89,0.54,1.19,1.10,0.37,\r
296     0.75,0.87,1.60,1.30,0.74,1.05,1.38,0.55,\r
297     0.75,1.19,1.37,1.47,1.70,0.72,0.74,1.0,0.0};\r
298 \r
299   public static double strandmin = 0.37;\r
300   public static double strandmax = 1.7;\r
301 \r
302   public static double[] turn = {\r
303     0.66,0.95,1.56,1.46,1.19,0.98,0.74,\r
304     1.56,0.95,0.47,0.59,1.01,0.60,0.60,1.52,\r
305     1.43,0.96,0.96,1.14,0.50,1.51,0.86,1.00,0,0};\r
306 \r
307   public static double turnmin = 0.47;\r
308   public static double turnmax = 1.56;\r
309 \r
310   public static double[] buried = {\r
311     1.7,\r
312     0.1,\r
313     0.4,\r
314     0.4,\r
315     4.6,\r
316     0.3,\r
317     0.3,\r
318     1.8,\r
319     0.8,\r
320     3.1,\r
321     2.4,\r
322     0.05,\r
323     1.9,\r
324     2.2,\r
325     0.6,\r
326     0.8,0.7,1.6,0.5,2.9,0.4,0.3,\r
327     1.358,\r
328     0.00\r
329   };\r
330 \r
331   public static double buriedmin = 0.05;\r
332   public static double buriedmax = 4.6;\r
333 \r
334   // This is hydropathy index\r
335   // Kyte, J., and Doolittle, R.F., J. Mol. Biol.\r
336   // 1157, 105-132, 1982\r
337 \r
338   public static double hyd[] = {\r
339     1.8,\r
340     -4.5,\r
341     -3.5,\r
342     -3.5,\r
343     2.5,\r
344     -3.5,\r
345     -3.5,\r
346     -0.4,\r
347     -3.2,\r
348     4.5,\r
349     3.8,\r
350     -3.9,\r
351     1.9,\r
352     2.8,\r
353     -1.6,\r
354     -0.8,\r
355     -0.7,\r
356     -0.9,\r
357     -1.3,\r
358     4.2,\r
359     -3.5,\r
360     -3.5,\r
361     -0.49,\r
362     0.0\r
363   };\r
364 \r
365   public static final double hydmax = 4.5;\r
366   public static final double hydmin = -3.9;\r
367 \r
368   public static double getHydmax() {\r
369     return hydmax;\r
370   }\r
371   public static double getHydmin() {\r
372     return hydmin;\r
373   }\r
374   public static double[] getHyd() {\r
375     return hyd;\r
376   }\r
377   //public static final double hydmax = 1.38;\r
378   //public static final double hydmin = -2.53;\r
379 \r
380   static final int[][] BLOSUM62 = {\r
381     //A   R   N   D   C   Q   E   G   H   I   L   K   M   F   P   S   T   W   Y   V   B   Z   X  -\r
382     { 4 ,-1, -2 ,-2 , 0 ,-1 ,-1 , 0 ,-2 ,-1 ,-1 ,-1 ,-1 ,-2 ,-1 , 1 , 0 ,-3 ,-2 , 0 ,-2, -1 , 0 ,-4},\r
383     {-1 , 5 , 0 ,-2 ,-3 , 1 , 0 ,-2 , 0 ,-3 ,-2 , 2 ,-1 ,-3 ,-2 ,-1 ,-1 ,-3 ,-2 ,-3 ,-1 , 0 ,-1 ,-4 },\r
384     {-2 , 0 , 6 , 1 ,-3 , 0 , 0 , 0 , 1 ,-3 ,-3 , 0 ,-2 ,-3 ,-2 , 1 , 0 ,-4 ,-2 ,-3 , 3 , 0 ,-1 ,-4 },\r
385     {-2 ,-2 , 1 , 6 ,-3 , 0 , 2 ,-1 ,-1 ,-3 ,-4 ,-1 ,-3 ,-3 ,-1 , 0 ,-1 ,-4 ,-3 ,-3 , 4 , 1 ,-1 ,-4 },\r
386     { 0 , 3 ,-3 ,-3 , 9 ,-3 ,-4 ,-3 ,-3 ,-1 ,-1 ,-3 ,-1 ,-2 ,-3 ,-1 ,-1 ,-2 ,-2 ,-1 ,-3 ,-3 ,-2 ,-4 },\r
387     {-1 , 1 , 0 , 0 ,-3 , 5 , 2 ,-2 , 0 ,-3 ,-2 , 1 , 0 ,-3 ,-1 , 0 ,-1 ,-2 ,-1 ,-2 , 0 , 3 ,-1 ,-4 },\r
388     {-1 , 0 , 0 , 2 ,-4 , 2 , 5 ,-2 , 0 ,-3 ,-3 , 1 ,-2 ,-3 ,-1 , 0 ,-1 ,-3 ,-2 ,-2 , 1 , 4 ,-1 ,-4 },\r
389     { 0 ,-2 , 0 ,-1 ,-3 ,-2 ,-2 , 6 ,-2 ,-4 ,-4 ,-2 ,-3 ,-3 ,-2 , 0 ,-2 ,-2 ,-3 ,-3 ,-1 ,-2 ,-1 ,-4 },\r
390     {-2 , 0 , 1 ,-1 ,-3 , 0 , 0 ,-2 , 8 ,-3 ,-3 ,-1 ,-2 ,-1 ,-2 ,-1 ,-2 ,-2 , 2 ,-3 , 0 , 0 ,-1 ,-4 },\r
391     {-1 ,-3 ,-3 ,-3 ,-1 ,-3 ,-3 ,-4 ,-3 , 4 , 2 ,-3 , 1 , 0 ,-3 ,-2 ,-1 ,-3 ,-1 , 3 ,-3 ,-3 ,-1 ,-4 },\r
392     {-1 ,-2 ,-3 ,-4 ,-1 ,-2 ,-3 ,-4 ,-3 , 2 , 4 ,-2 , 2 , 0 ,-3 ,-2 ,-1 ,-2 ,-1 , 1 ,-4 ,-3 ,-1 ,-4 },\r
393     {-1 , 2 , 0 ,-1 ,-3 , 1 , 1 ,-2 ,-1 ,-3 ,-2 , 5 ,-1 ,-3 ,-1 , 0 ,-1 ,-3 ,-2 ,-2 , 0 , 1 ,-1 ,-4 },\r
394     {-1 ,-1 ,-2 ,-3 ,-1 , 0 ,-2 ,-3 ,-2 , 1 , 2 ,-1 , 5 , 0 ,-2 ,-1 ,-1 ,-1 ,-1 , 1 ,-3 ,-1 ,-1 ,-4 },\r
395     {-2 ,-3 ,-3 ,-3 ,-2 ,-3 ,-3 ,-3 ,-1 , 0 , 0 ,-3 , 0 , 6 ,-4 ,-2 ,-2 , 1 , 3 ,-1 ,-3 ,-3 ,-1 ,-4 },\r
396     {-1 ,-2 ,-2 ,-1 ,-3 ,-1 ,-1 ,-2 ,-2 ,-3 ,-3 ,-1 ,-2 ,-4 , 7 ,-1 ,-1 ,-4 ,-3 ,-2 ,-2 ,-1 ,-2 ,-4 },\r
397     { 1 ,-1 , 1 , 0 ,-1 , 0 , 0 , 0 ,-1 ,-2 ,-2 , 0 ,-1 ,-2 ,-1 , 4 , 1 ,-3 ,-2 ,-2 , 0 , 0 , 0 ,-4 },\r
398     { 0 ,-1 , 0 ,-1 ,-1 ,-1 ,-1 ,-2 ,-2 ,-1 ,-1 ,-1 ,-1 ,-2 ,-1 , 1 , 5 ,-2 ,-2 , 0 ,-1 ,-1 , 0 ,-4 },\r
399     {-3 ,-3 ,-4 ,-4 ,-2 ,-2 ,-3 ,-2 ,-2 ,-3 ,-2 ,-3 ,-1 , 1 ,-4 ,-3 ,-2 ,11 , 2 ,-3 ,-4 ,-3 ,-2 ,-4 },\r
400     {-2 ,-2 ,-2 ,-3 ,-2 ,-1 ,-2 ,-3 , 2 ,-1 ,-1 ,-2 ,-1 , 3 ,-3 ,-2 ,-2 , 2 , 7 ,-1 ,-3 ,-2 ,-1 ,-4 },\r
401     { 0 ,-3 ,-3 ,-3 ,-1 ,-2 ,-2 ,-3 ,-3 , 3 , 1 ,-2 , 1 ,-1 ,-2 ,-2 , 0 ,-3 ,-1 , 4 ,-3 ,-2 ,-1 ,-4 },\r
402     {-2 ,-1 , 3 , 4 ,-3 , 0 , 1 ,-1 , 0 ,-3 ,-4 , 0 ,-3 ,-3 ,-2 , 0 ,-1 ,-4 ,-3 ,-3 , 4 , 1 ,-1 ,-4 },\r
403     {-1 , 0 , 0 , 1 ,-3 , 3 , 4 ,-2 , 0 ,-3 ,-3 , 1 ,-1 ,-3 ,-1 , 0 ,-1 ,-3 ,-2 ,-2 , 1 , 4 ,-1 ,-4 },\r
404     { 0 ,-1 ,-1 ,-1 ,-2 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-2 , 0 , 0 ,-2 ,-1 ,-1 ,-1 ,-1 ,-1 ,-4 },\r
405     {-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 , 1 },\r
406   };\r
407   static final int[][] PAM250 = {\r
408     {  2,-2 ,0 ,0,-2 ,0 ,0 ,1,-1,-1,-2,-1,-1,-3 ,1 ,1 ,1,-6,-3 ,0 ,0 ,0 ,0,-8},\r
409     { -2 ,6 ,0,-1,-4 ,1,-1,-3 ,2,-2,-3 ,3 ,0,-4 ,0 ,0,-1 ,2,-4,-2,-1 ,0,-1,-8},\r
410     {  0 ,0 ,2 ,2,-4 ,1 ,1 ,0 ,2,-2,-3 ,1,-2,-3 ,0 ,1 ,0,-4,-2,-2 ,2 ,1 ,0,-8},\r
411     {  0,-1 ,2 ,4,-5 ,2 ,3 ,1 ,1,-2,-4 ,0,-3,-6,-1 ,0 ,0,-7,-4,-2 ,3 ,3,-1,-8},\r
412     { -2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3 ,0,-2,-8 ,0,-2,-4,-5,-3,-8},\r
413     {  0 ,1 ,1 ,2,-5 ,4 ,2,-1 ,3,-2,-2 ,1,-1,-5 ,0,-1,-1,-5,-4,-2 ,1 ,3,-1,-8},\r
414     {  0,-1 ,1 ,3,-5 ,2 ,4 ,0 ,1,-2,-3 ,0,-2,-5,-1 ,0 ,0,-7,-4,-2 ,3 ,3,-1,-8},\r
415     {  1,-3 ,0 ,1,-3,-1 ,0 ,5,-2,-3,-4,-2,-3,-5 ,0 ,1 ,0,-7,-5,-1 ,0 ,0,-1,-8},\r
416     { -1 ,2 ,2 ,1,-3 ,3 ,1,-2 ,6,-2,-2 ,0,-2,-2 ,0,-1,-1,-3 ,0,-2 ,1 ,2,-1,-8},\r
417     { -1,-2,-2,-2,-2,-2,-2,-3,-2 ,5 ,2,-2 ,2 ,1,-2,-1 ,0,-5,-1 ,4,-2,-2,-1,-8},\r
418     { -2,-3,-3,-4,-6,-2,-3,-4,-2 ,2 ,6,-3 ,4 ,2,-3,-3,-2,-2,-1 ,2,-3,-3,-1,-8},\r
419     { -1 ,3 ,1 ,0,-5 ,1 ,0,-2 ,0,-2,-3 ,5 ,0,-5,-1 ,0 ,0,-3,-4,-2 ,1 ,0,-1,-8},\r
420     { -1 ,0,-2,-3,-5,-1,-2,-3,-2 ,2 ,4 ,0 ,6 ,0,-2,-2,-1,-4,-2 ,2,-2,-2,-1,-8},\r
421     { -3,-4,-3,-6,-4,-5,-5,-5,-2 ,1 ,2,-5 ,0 ,9,-5,-3,-3 ,0 ,7,-1,-4,-5,-2,-8},\r
422     {  1 ,0 ,0,-1,-3 ,0,-1 ,0 ,0,-2,-3,-1,-2,-5 ,6 ,1 ,0,-6,-5,-1,-1 ,0,-1,-8},\r
423     {  1 ,0 ,1 ,0 ,0,-1 ,0 ,1,-1,-1,-3 ,0,-2,-3 ,1 ,2 ,1,-2,-3,-1 ,0 ,0 ,0,-8},\r
424     {  1,-1 ,0 ,0,-2,-1 ,0 ,0,-1 ,0,-2 ,0,-1,-3 ,0 ,1 ,3,-5,-3 ,0 ,0,-1 ,0,-8},\r
425     { -6 ,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4 ,0,-6,-2,-5,17 ,0,-6,-5,-6,-4,-8},\r
426     { -3,-4,-2,-4 ,0,-4,-4,-5 ,0,-1,-1,-4,-2 ,7,-5,-3,-3 ,0,10,-2,-3,-4,-2,-8},\r
427     {  0,-2,-2,-2,-2,-2,-2,-1,-2 ,4 ,2,-2 ,2,-1,-1,-1 ,0,-6,-2 ,4,-2,-2,-1,-8},\r
428     {  0,-1 ,2 ,3,-4 ,1 ,3 ,0 ,1,-2,-3 ,1,-2,-4,-1 ,0 ,0,-5,-3,-2 ,3 ,2,-1,-8},\r
429     {  0 ,0 ,1 ,3,-5 ,3 ,3 ,0 ,2,-2,-3 ,0,-2,-5 ,0 ,0,-1,-6,-4,-2 ,2 ,3,-1,-8},\r
430     {  0,-1 ,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1 ,0 ,0,-4,-2,-1,-1,-1,-1,-8},\r
431     { -8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8 ,1},\r
432   };\r
433 \r
434   public static Hashtable ssHash = new Hashtable();  // stores the number value of the aa\r
435 \r
436   static {\r
437     ssHash.put("H", Color.magenta);\r
438     ssHash.put("E", Color.yellow);\r
439     ssHash.put("-", Color.white);\r
440     ssHash.put(".", Color.white);\r
441     ssHash.put("S", Color.cyan);\r
442     ssHash.put("T", Color.blue);\r
443     ssHash.put("G", Color.pink);\r
444     ssHash.put("I", Color.pink);\r
445     ssHash.put("B", Color.yellow);\r
446   }\r
447   static final int[][] DNA = {\r
448     //  C  T  A  G  -\r
449     { 5,-4,-4,-4, 1},// C\r
450     {-4, 5,-4,-4, 1},// T\r
451     {-4,-4, 5,-4, 1},// A\r
452     {-4,-4,-4, 5, 1},// G\r
453     { 1, 1, 1, 1, 1},// -\r
454   };\r
455   public static Hashtable getAAHash() {\r
456     return aaHash;\r
457   }\r
458   public static Hashtable getAA3Hash() {\r
459     return aa3Hash;\r
460   }\r
461   public static int[][] getDNA() {\r
462     return ResidueProperties.DNA;\r
463   }\r
464   public static int[][] getBLOSUM62() {\r
465     return ResidueProperties.BLOSUM62;\r
466   }\r
467   public static int getPAM250(String A1, String A2) {\r
468     Integer pog1  = (Integer)aaHash.get(A1);\r
469     Integer pog2  = (Integer)aaHash.get(A2);\r
470     int pog = ResidueProperties.PAM250[pog1.intValue()][pog2.intValue()];\r
471     return pog ;\r
472   }\r
473   public static int getBLOSUM62(String A1, String A2) {\r
474     int pog = 0;\r
475     try {\r
476       Integer pog1  = (Integer)aaHash.get(A1);\r
477       Integer pog2  = (Integer)aaHash.get(A2);\r
478       pog = ResidueProperties.BLOSUM62[pog1.intValue()][pog2.intValue()];\r
479     } catch (Exception e) {\r
480       //System.out.println("Unknown residue in " + A1 + " " + A2);\r
481     }\r
482     return pog ;\r
483   }\r
484 \r
485   public static Color[] pidColours = {\r
486     midBlue,\r
487     new Color(153,153,255),\r
488     //    Color.lightGray,\r
489     new Color(204,204,255),\r
490   };\r
491   public static float[] pidThresholds = {\r
492     80,\r
493     60,\r
494     40,\r
495   } ;\r
496   private ResidueProperties() {}\r
497 \r
498   public static Hashtable codonHash = new Hashtable();\r
499 \r
500   public static Vector Lys = new Vector();\r
501   public static Vector Asn = new Vector();\r
502   public static Vector Gln = new Vector();\r
503   public static Vector His = new Vector();\r
504   public static Vector Glu = new Vector();\r
505   public static Vector Asp = new Vector();\r
506   public static Vector Tyr = new Vector();\r
507   public static Vector Thr = new Vector();\r
508   public static Vector Pro = new Vector();\r
509   public static Vector Ala = new Vector();\r
510   public static Vector Ser = new Vector();\r
511   public static Vector Arg = new Vector();\r
512   public static Vector Gly = new Vector();\r
513   public static Vector Trp = new Vector();\r
514   public static Vector Cys = new Vector();\r
515   public static Vector Ile = new Vector();\r
516   public static Vector Met = new Vector();\r
517   public static Vector Leu = new Vector();\r
518   public static Vector Val = new Vector();\r
519   public static Vector Phe = new Vector();\r
520   public static Vector STOP = new Vector();\r
521 \r
522   static {\r
523     codonHash.put("K",Lys);\r
524     codonHash.put("N",Asn);\r
525     codonHash.put("Q",Gln);\r
526     codonHash.put("H",His);\r
527     codonHash.put("E",Glu);\r
528     codonHash.put("D",Asp);\r
529     codonHash.put("Y",Tyr);\r
530     codonHash.put("T",Thr);\r
531     codonHash.put("P",Pro);\r
532     codonHash.put("A",Ala);\r
533     codonHash.put("S",Ser);\r
534     codonHash.put("R",Arg);\r
535     codonHash.put("G",Gly);\r
536     codonHash.put("W",Trp);\r
537     codonHash.put("C",Cys);\r
538     codonHash.put("I",Ile);\r
539     codonHash.put("M",Met);\r
540     codonHash.put("L",Leu);\r
541     codonHash.put("V",Val);\r
542     codonHash.put("F",Phe);\r
543     codonHash.put("STOP",STOP);\r
544   }\r
545 \r
546   public static Vector getCodons(String res) {\r
547     if (codonHash.containsKey(res))\r
548       return (Vector)codonHash.get(res);\r
549     return null;\r
550   }\r
551 \r
552   public static String codonTranslate(String codon) {\r
553     Enumeration e = codonHash.keys();\r
554     while (e.hasMoreElements()) {\r
555       String key = (String)e.nextElement();\r
556       Vector tmp = (Vector)codonHash.get(key);\r
557       if (tmp.contains(codon)) {\r
558         return key;\r
559       }\r
560     }\r
561     return null;\r
562   }\r
563   public static Hashtable codonHash2 = new Hashtable();\r
564   static {\r
565     codonHash2.put("AAA","K");\r
566     codonHash2.put("AAG","K");\r
567     codonHash2.put("AAC","N");\r
568     codonHash2.put("AAT","N");\r
569 \r
570     codonHash2.put("CAA","E");\r
571     codonHash2.put("CAG","E");\r
572     codonHash2.put("CAC","H");\r
573     codonHash2.put("CAT","H");\r
574 \r
575     codonHash2.put("GAA","Q");\r
576     codonHash2.put("GAG","Q");\r
577     codonHash2.put("GAC","D");\r
578     codonHash2.put("GAT","D");\r
579 \r
580     codonHash2.put("TAC","Y");\r
581     codonHash2.put("TAT","Y");\r
582 \r
583     codonHash2.put("ACA","T");\r
584     codonHash2.put("AAG","T");\r
585     codonHash2.put("ACC","T");\r
586     codonHash2.put("ACT","T");\r
587 \r
588     codonHash2.put("CCA","P");\r
589     codonHash2.put("CCG","P");\r
590     codonHash2.put("CCC","P");\r
591     codonHash2.put("CCT","P");\r
592 \r
593     codonHash2.put("GCA","A");\r
594     codonHash2.put("GCG","A");\r
595     codonHash2.put("GCC","A");\r
596     codonHash2.put("GCT","A");\r
597 \r
598     codonHash2.put("TCA","S");\r
599     codonHash2.put("TCG","S");\r
600     codonHash2.put("TCC","S");\r
601     codonHash2.put("TCT","S");\r
602     codonHash2.put("AGC","S");\r
603     codonHash2.put("AGT","S");\r
604 \r
605     codonHash2.put("AGA","R");\r
606     codonHash2.put("AGG","R");\r
607     codonHash2.put("CGA","R");\r
608     codonHash2.put("CGG","R");\r
609     codonHash2.put("CGC","R");\r
610     codonHash2.put("CGT","R");\r
611 \r
612     codonHash2.put("GGA","G");\r
613     codonHash2.put("GGG","G");\r
614     codonHash2.put("GGC","G");\r
615     codonHash2.put("GGT","G");\r
616 \r
617     codonHash2.put("TGA","*");\r
618     codonHash2.put("TAA","*");\r
619     codonHash2.put("TAG","*");\r
620 \r
621     codonHash2.put("TGG","W");\r
622 \r
623     codonHash2.put("TGC","C");\r
624     codonHash2.put("TGT","C");\r
625 \r
626     codonHash2.put("ATA","I");\r
627     codonHash2.put("ATC","I");\r
628     codonHash2.put("ATT","I");\r
629 \r
630     codonHash2.put("ATG","M");\r
631 \r
632     codonHash2.put("CTA","L");\r
633     codonHash2.put("CTG","L");\r
634     codonHash2.put("CTC","L");\r
635     codonHash2.put("CTT","L");\r
636     codonHash2.put("TTA","L");\r
637     codonHash2.put("TTG","L");\r
638 \r
639     codonHash2.put("GTA","V");\r
640     codonHash2.put("GTG","V");\r
641     codonHash2.put("GTC","V");\r
642     codonHash2.put("GTT","V");\r
643 \r
644     codonHash2.put("TTC","F");\r
645     codonHash2.put("TTT","F");\r
646 \r
647   }\r
648 \r
649   static {\r
650     Lys.addElement("AAA");\r
651     Lys.addElement("AAG");\r
652     Asn.addElement("AAC");\r
653     Asn.addElement("AAT");\r
654 \r
655     Gln.addElement("CAA");\r
656     Gln.addElement("CAG");\r
657     His.addElement("CAC");\r
658     His.addElement("CAT");\r
659 \r
660     Glu.addElement("GAA");\r
661     Glu.addElement("GAG");\r
662     Asp.addElement("GAC");\r
663     Asp.addElement("GAT");\r
664 \r
665     Tyr.addElement("TAC");\r
666     Tyr.addElement("TAT");\r
667 \r
668     Thr.addElement("ACA");\r
669     Thr.addElement("ACG");\r
670     Thr.addElement("ACC");\r
671     Thr.addElement("ACT");\r
672 \r
673     Pro.addElement("CCA");\r
674     Pro.addElement("CCG");\r
675     Pro.addElement("CCC");\r
676     Pro.addElement("CCT");\r
677 \r
678     Ala.addElement("GCA");\r
679     Ala.addElement("GCG");\r
680     Ala.addElement("GCC");\r
681     Ala.addElement("GCT");\r
682 \r
683     Ser.addElement("TCA");\r
684     Ser.addElement("TCG");\r
685     Ser.addElement("TCC");\r
686     Ser.addElement("TCT");\r
687     Ser.addElement("AGC");\r
688     Ser.addElement("AGT");\r
689 \r
690     Arg.addElement("AGA");\r
691     Arg.addElement("AGG");\r
692     Arg.addElement("CGA");\r
693     Arg.addElement("CGG");\r
694     Arg.addElement("CGC");\r
695     Arg.addElement("CGT");\r
696 \r
697     Gly.addElement("GGA");\r
698     Gly.addElement("GGG");\r
699     Gly.addElement("GGC");\r
700     Gly.addElement("GGT");\r
701 \r
702     STOP.addElement("TGA");\r
703     STOP.addElement("TAA");\r
704     STOP.addElement("TAG");\r
705 \r
706     Trp.addElement("TGG");\r
707 \r
708     Cys.addElement("TGC");\r
709     Cys.addElement("TGT");\r
710 \r
711     Ile.addElement("ATA");\r
712     Ile.addElement("ATC");\r
713     Ile.addElement("ATT");\r
714 \r
715     Met.addElement("ATG");\r
716 \r
717     Leu.addElement("CTA");\r
718     Leu.addElement("CTG");\r
719     Leu.addElement("CTC");\r
720     Leu.addElement("CTT");\r
721     Leu.addElement("TTA");\r
722     Leu.addElement("TTG");\r
723 \r
724     Val.addElement("GTA");\r
725     Val.addElement("GTG");\r
726     Val.addElement("GTC");\r
727     Val.addElement("GTT");\r
728 \r
729     Phe.addElement("TTC");\r
730     Phe.addElement("TTT");\r
731   }\r
732 \r
733   public static Color[][] groupColors = {\r
734     {Color.red,Color.red.brighter(),Color.red.brighter().brighter()},\r
735     {Color.orange,Color.orange.brighter(),Color.orange.brighter().brighter()},\r
736     {Color.green,Color.green.brighter(),Color.green.brighter().brighter()},\r
737     {Color.blue,Color.blue.brighter(),Color.blue.brighter().brighter()},\r
738     {Color.magenta,Color.magenta.brighter(),Color.magenta.brighter().brighter()},\r
739     {Color.cyan,Color.cyan.brighter(),Color.cyan.brighter().brighter()},\r
740     {Color.pink,Color.pink.brighter(),Color.pink.brighter().brighter()},\r
741 \r
742   };\r
743 \r
744 \r
745 \r
746   //Stores residue codes/names and colours and other things\r
747   public static Hashtable propHash = new Hashtable();\r
748   public static Hashtable hydrophobic = new Hashtable();\r
749   public static Hashtable polar = new Hashtable();\r
750   public static Hashtable small = new Hashtable();\r
751   public static Hashtable positive = new Hashtable();\r
752   public static Hashtable negative = new Hashtable();\r
753   public static Hashtable charged = new Hashtable();\r
754   public static Hashtable aromatic = new Hashtable();\r
755   public static Hashtable aliphatic = new Hashtable();\r
756   public static Hashtable tiny = new Hashtable();\r
757   public static Hashtable proline = new Hashtable();\r
758 \r
759   static {\r
760     hydrophobic.put("I",new Integer(1));\r
761     hydrophobic.put("L",new Integer(1));\r
762     hydrophobic.put("V",new Integer(1));\r
763     hydrophobic.put("C",new Integer(1));\r
764     hydrophobic.put("A",new Integer(1));\r
765     hydrophobic.put("G",new Integer(1));\r
766     hydrophobic.put("M",new Integer(1));\r
767     hydrophobic.put("F",new Integer(1));\r
768     hydrophobic.put("Y",new Integer(1));\r
769     hydrophobic.put("W",new Integer(1));\r
770     hydrophobic.put("H",new Integer(1));\r
771     hydrophobic.put("K",new Integer(1));\r
772     hydrophobic.put("X",new Integer(1));\r
773     hydrophobic.put("-",new Integer(1));\r
774     hydrophobic.put("*",new Integer(1));\r
775     hydrophobic.put("R",new Integer(0));\r
776     hydrophobic.put("E",new Integer(0));\r
777     hydrophobic.put("Q",new Integer(0));\r
778     hydrophobic.put("D",new Integer(0));\r
779     hydrophobic.put("N",new Integer(0));\r
780     hydrophobic.put("S",new Integer(0));\r
781     hydrophobic.put("T",new Integer(0));\r
782     hydrophobic.put("P",new Integer(0));\r
783   }\r
784   static {\r
785     polar.put("Y",new Integer(1));\r
786     polar.put("W",new Integer(1));\r
787     polar.put("H",new Integer(1));\r
788     polar.put("K",new Integer(1));\r
789     polar.put("R",new Integer(1));\r
790     polar.put("E",new Integer(1));\r
791     polar.put("Q",new Integer(1));\r
792     polar.put("D",new Integer(1));\r
793     polar.put("N",new Integer(1));\r
794     polar.put("S",new Integer(1));\r
795     polar.put("T",new Integer(1));\r
796     polar.put("X",new Integer(1));\r
797     polar.put("-",new Integer(1));\r
798     polar.put("*",new Integer(1));\r
799     polar.put("I",new Integer(0));\r
800     polar.put("L",new Integer(0));\r
801     polar.put("V",new Integer(0));\r
802     polar.put("C",new Integer(0));\r
803     polar.put("A",new Integer(0));\r
804     polar.put("G",new Integer(0));\r
805     polar.put("M",new Integer(0));\r
806     polar.put("F",new Integer(0));\r
807     polar.put("P",new Integer(0));\r
808 \r
809   }\r
810   static {\r
811     small.put("I",new Integer(0));\r
812     small.put("L",new Integer(0));\r
813     small.put("V",new Integer(1));\r
814     small.put("C",new Integer(1));\r
815     small.put("A",new Integer(1));\r
816     small.put("G",new Integer(1));\r
817     small.put("M",new Integer(0));\r
818     small.put("F",new Integer(0));\r
819     small.put("Y",new Integer(0));\r
820     small.put("W",new Integer(0));\r
821     small.put("H",new Integer(0));\r
822     small.put("K",new Integer(0));\r
823     small.put("R",new Integer(0));\r
824     small.put("E",new Integer(0));\r
825     small.put("Q",new Integer(0));\r
826     small.put("D",new Integer(1));\r
827     small.put("N",new Integer(1));\r
828     small.put("S",new Integer(1));\r
829     small.put("T",new Integer(1));\r
830     small.put("P",new Integer(1));\r
831     small.put("-",new Integer(1));\r
832     small.put("*",new Integer(1));\r
833   }\r
834   static {\r
835     positive.put("I",new Integer(0));\r
836     positive.put("L",new Integer(0));\r
837     positive.put("V",new Integer(0));\r
838     positive.put("C",new Integer(0));\r
839     positive.put("A",new Integer(0));\r
840     positive.put("G",new Integer(0));\r
841     positive.put("M",new Integer(0));\r
842     positive.put("F",new Integer(0));\r
843     positive.put("Y",new Integer(0));\r
844     positive.put("W",new Integer(0));\r
845     positive.put("H",new Integer(1));\r
846     positive.put("K",new Integer(1));\r
847     positive.put("R",new Integer(1));\r
848     positive.put("E",new Integer(0));\r
849     positive.put("Q",new Integer(0));\r
850     positive.put("D",new Integer(0));\r
851     positive.put("N",new Integer(0));\r
852     positive.put("S",new Integer(0));\r
853     positive.put("T",new Integer(0));\r
854     positive.put("P",new Integer(0));\r
855     positive.put("-",new Integer(1));\r
856     positive.put("*",new Integer(1));\r
857   }\r
858   static {\r
859     negative.put("I",new Integer(0));\r
860     negative.put("L",new Integer(0));\r
861     negative.put("V",new Integer(0));\r
862     negative.put("C",new Integer(0));\r
863     negative.put("A",new Integer(0));\r
864     negative.put("G",new Integer(0));\r
865     negative.put("M",new Integer(0));\r
866     negative.put("F",new Integer(0));\r
867     negative.put("Y",new Integer(0));\r
868     negative.put("W",new Integer(0));\r
869     negative.put("H",new Integer(0));\r
870     negative.put("K",new Integer(0));\r
871     negative.put("R",new Integer(0));\r
872     negative.put("E",new Integer(1));\r
873     negative.put("Q",new Integer(0));\r
874     negative.put("D",new Integer(1));\r
875     negative.put("N",new Integer(0));\r
876     negative.put("S",new Integer(0));\r
877     negative.put("T",new Integer(0));\r
878     negative.put("P",new Integer(0));\r
879     negative.put("-",new Integer(1));\r
880     negative.put("*",new Integer(1));\r
881   }\r
882   static {\r
883     charged.put("I",new Integer(0));\r
884     charged.put("L",new Integer(0));\r
885     charged.put("V",new Integer(0));\r
886     charged.put("C",new Integer(0));\r
887     charged.put("A",new Integer(0));\r
888     charged.put("G",new Integer(0));\r
889     charged.put("M",new Integer(0));\r
890     charged.put("F",new Integer(0));\r
891     charged.put("Y",new Integer(0));\r
892     charged.put("W",new Integer(0));\r
893     charged.put("H",new Integer(1));\r
894     charged.put("K",new Integer(1));\r
895     charged.put("R",new Integer(1));\r
896     charged.put("E",new Integer(1));\r
897     charged.put("Q",new Integer(0));\r
898     charged.put("D",new Integer(1));\r
899     charged.put("N",new Integer(1));\r
900     charged.put("S",new Integer(0));\r
901     charged.put("T",new Integer(0));\r
902     charged.put("P",new Integer(0));\r
903     charged.put("-",new Integer(1));\r
904     charged.put("*",new Integer(1));\r
905   }\r
906   static {\r
907     aromatic.put("I",new Integer(0));\r
908     aromatic.put("L",new Integer(0));\r
909     aromatic.put("V",new Integer(0));\r
910     aromatic.put("C",new Integer(0));\r
911     aromatic.put("A",new Integer(0));\r
912     aromatic.put("G",new Integer(0));\r
913     aromatic.put("M",new Integer(0));\r
914     aromatic.put("F",new Integer(1));\r
915     aromatic.put("Y",new Integer(1));\r
916     aromatic.put("W",new Integer(1));\r
917     aromatic.put("H",new Integer(1));\r
918     aromatic.put("K",new Integer(0));\r
919     aromatic.put("R",new Integer(0));\r
920     aromatic.put("E",new Integer(0));\r
921     aromatic.put("Q",new Integer(0));\r
922     aromatic.put("D",new Integer(0));\r
923     aromatic.put("N",new Integer(0));\r
924     aromatic.put("S",new Integer(0));\r
925     aromatic.put("T",new Integer(0));\r
926     aromatic.put("P",new Integer(0));\r
927     aromatic.put("-",new Integer(1));\r
928     aromatic.put("*",new Integer(1));\r
929   }\r
930   static {\r
931     aliphatic.put("I",new Integer(1));\r
932     aliphatic.put("L",new Integer(1));\r
933     aliphatic.put("V",new Integer(1));\r
934     aliphatic.put("C",new Integer(0));\r
935     aliphatic.put("A",new Integer(0));\r
936     aliphatic.put("G",new Integer(0));\r
937     aliphatic.put("M",new Integer(0));\r
938     aliphatic.put("F",new Integer(0));\r
939     aliphatic.put("Y",new Integer(0));\r
940     aliphatic.put("W",new Integer(0));\r
941     aliphatic.put("H",new Integer(0));\r
942     aliphatic.put("K",new Integer(0));\r
943     aliphatic.put("R",new Integer(0));\r
944     aliphatic.put("E",new Integer(0));\r
945     aliphatic.put("Q",new Integer(0));\r
946     aliphatic.put("D",new Integer(0));\r
947     aliphatic.put("N",new Integer(0));\r
948     aliphatic.put("S",new Integer(0));\r
949     aliphatic.put("T",new Integer(0));\r
950     aliphatic.put("P",new Integer(0));\r
951     aliphatic.put("-",new Integer(1));\r
952     aliphatic.put("*",new Integer(1));\r
953   }\r
954 \r
955   static {\r
956     tiny.put("I",new Integer(0));\r
957     tiny.put("L",new Integer(0));\r
958     tiny.put("V",new Integer(0));\r
959     tiny.put("C",new Integer(0));\r
960     tiny.put("A",new Integer(1));\r
961     tiny.put("G",new Integer(1));\r
962     tiny.put("M",new Integer(0));\r
963     tiny.put("F",new Integer(0));\r
964     tiny.put("Y",new Integer(0));\r
965     tiny.put("W",new Integer(0));\r
966     tiny.put("H",new Integer(0));\r
967     tiny.put("K",new Integer(0));\r
968     tiny.put("R",new Integer(0));\r
969     tiny.put("E",new Integer(0));\r
970     tiny.put("Q",new Integer(0));\r
971     tiny.put("D",new Integer(0));\r
972     tiny.put("N",new Integer(0));\r
973     tiny.put("S",new Integer(1));\r
974     tiny.put("T",new Integer(0));\r
975     tiny.put("P",new Integer(0));\r
976     tiny.put("-",new Integer(1));\r
977     tiny.put("*",new Integer(1));\r
978   }\r
979 \r
980   static {\r
981     proline.put("I",new Integer(0));\r
982     proline.put("L",new Integer(0));\r
983     proline.put("V",new Integer(0));\r
984     proline.put("C",new Integer(0));\r
985     proline.put("A",new Integer(0));\r
986     proline.put("G",new Integer(0));\r
987     proline.put("M",new Integer(0));\r
988     proline.put("F",new Integer(0));\r
989     proline.put("Y",new Integer(0));\r
990     proline.put("W",new Integer(0));\r
991     proline.put("H",new Integer(0));\r
992     proline.put("K",new Integer(0));\r
993     proline.put("R",new Integer(0));\r
994     proline.put("E",new Integer(0));\r
995     proline.put("Q",new Integer(0));\r
996     proline.put("D",new Integer(0));\r
997     proline.put("N",new Integer(0));\r
998     proline.put("S",new Integer(0));\r
999     proline.put("T",new Integer(0));\r
1000     proline.put("P",new Integer(1));\r
1001     proline.put("-",new Integer(1));\r
1002     proline.put("*",new Integer(1));\r
1003   }\r
1004 \r
1005 \r
1006   static {\r
1007     propHash.put("hydrophobic",hydrophobic);\r
1008     propHash.put("small",small);\r
1009     propHash.put("positive",positive);\r
1010     propHash.put("negative",negative);\r
1011     propHash.put("charged",charged);\r
1012     propHash.put("aromatic",aromatic);\r
1013     propHash.put("aliphatic",aliphatic);\r
1014     propHash.put("tiny",tiny);\r
1015     propHash.put("proline",proline);\r
1016     propHash.put("polar",polar);\r
1017   }\r
1018 \r
1019   public static Hashtable chainColours = new Hashtable();\r
1020   static {\r
1021     chainColours.put("A",Color.red);\r
1022     chainColours.put("B",Color.orange);\r
1023     chainColours.put("C",Color.yellow);\r
1024     chainColours.put("D",Color.green);\r
1025     chainColours.put("E",Color.cyan);\r
1026     chainColours.put("F",Color.blue);\r
1027     chainColours.put("G",Color.magenta);\r
1028     chainColours.put("H",Color.pink);\r
1029   }\r
1030   public static Hashtable getChainColours() {\r
1031     return chainColours;\r
1032   }\r
1033 }\r