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