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