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