2 /* Copyright (C) 1998 Michele Clamp
\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
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
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
18 package jalview.schemes;
\r
20 import java.awt.Color;
\r
22 import jalview.jbgui.*;
\r
23 import jalview.datamodel.*;
\r
25 public class ResidueProperties {
\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
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
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
71 // These numbers should correspond to the indices in the Color hashes
\r
72 public static Hashtable aaSpecialsHash = new Hashtable();
\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
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
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
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
136 public static Color midBlue = new Color(100,100,255);
\r
137 public static Vector scaleColours = new Vector();
\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
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
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
188 public static Color[] color = {
\r
196 Color.magenta, // G
\r
203 Color.magenta, // P
\r
218 // Dunno where I got these numbers from
\r
219 public static double[] hyd2 = {
\r
244 public static double[] helix = {
\r
270 public static double helixmin = 0.57;
\r
271 public static double helixmax = 1.51;
\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
278 public static double strandmin = 0.37;
\r
279 public static double strandmax = 1.7;
\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
286 public static double turnmin = 0.47;
\r
287 public static double turnmax = 1.56;
\r
289 public static double[] buried = {
\r
305 0.8,0.7,1.6,0.5,2.9,0.4,0.3,
\r
310 public static double buriedmin = 0.05;
\r
311 public static double buriedmax = 4.6;
\r
313 // This is hydropathy index
\r
314 // Kyte, J., and Doolittle, R.F., J. Mol. Biol.
\r
315 // 1157, 105-132, 1982
\r
317 public static double hyd[] = {
\r
344 public static final double hydmax = 4.5;
\r
345 public static final double hydmin = -3.9;
\r
347 public static double getHydmax() {
\r
350 public static double getHydmin() {
\r
353 public static double[] getHyd() {
\r
356 //public static final double hydmax = 1.38;
\r
357 //public static final double hydmin = -2.53;
\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
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
413 public static Hashtable ssHash = new Hashtable(); // stores the number value of the aa
\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
426 static final int[][] DNA = {
\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
434 public static Hashtable getAAHash() {
\r
437 public static Hashtable getAA3Hash() {
\r
440 public static int[][] getDNA() {
\r
441 return ResidueProperties.DNA;
\r
443 public static int[][] getBLOSUM62() {
\r
444 return ResidueProperties.BLOSUM62;
\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
452 public static int getBLOSUM62(String A1, String A2) {
\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
464 public static Color[] pidColours = {
\r
466 new Color(153,153,255),
\r
467 // Color.lightGray,
\r
468 new Color(204,204,255),
\r
470 public static float[] pidThresholds = {
\r
475 private ResidueProperties() {}
\r
477 public static Hashtable codonHash = new Hashtable();
\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
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
525 public static Vector getCodons(String res) {
\r
526 if (codonHash.containsKey(res))
\r
527 return (Vector)codonHash.get(res);
\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
542 public static Hashtable codonHash2 = new Hashtable();
\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
549 codonHash2.put("CAA","E");
\r
550 codonHash2.put("CAG","E");
\r
551 codonHash2.put("CAC","H");
\r
552 codonHash2.put("CAT","H");
\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
559 codonHash2.put("TAC","Y");
\r
560 codonHash2.put("TAT","Y");
\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
567 codonHash2.put("CCA","P");
\r
568 codonHash2.put("CCG","P");
\r
569 codonHash2.put("CCC","P");
\r
570 codonHash2.put("CCT","P");
\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
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
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
591 codonHash2.put("GGA","G");
\r
592 codonHash2.put("GGG","G");
\r
593 codonHash2.put("GGC","G");
\r
594 codonHash2.put("GGT","G");
\r
596 codonHash2.put("TGA","*");
\r
597 codonHash2.put("TAA","*");
\r
598 codonHash2.put("TAG","*");
\r
600 codonHash2.put("TGG","W");
\r
602 codonHash2.put("TGC","C");
\r
603 codonHash2.put("TGT","C");
\r
605 codonHash2.put("ATA","I");
\r
606 codonHash2.put("ATC","I");
\r
607 codonHash2.put("ATT","I");
\r
609 codonHash2.put("ATG","M");
\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
618 codonHash2.put("GTA","V");
\r
619 codonHash2.put("GTG","V");
\r
620 codonHash2.put("GTC","V");
\r
621 codonHash2.put("GTT","V");
\r
623 codonHash2.put("TTC","F");
\r
624 codonHash2.put("TTT","F");
\r
629 Lys.addElement("AAA");
\r
630 Lys.addElement("AAG");
\r
631 Asn.addElement("AAC");
\r
632 Asn.addElement("AAT");
\r
634 Gln.addElement("CAA");
\r
635 Gln.addElement("CAG");
\r
636 His.addElement("CAC");
\r
637 His.addElement("CAT");
\r
639 Glu.addElement("GAA");
\r
640 Glu.addElement("GAG");
\r
641 Asp.addElement("GAC");
\r
642 Asp.addElement("GAT");
\r
644 Tyr.addElement("TAC");
\r
645 Tyr.addElement("TAT");
\r
647 Thr.addElement("ACA");
\r
648 Thr.addElement("ACG");
\r
649 Thr.addElement("ACC");
\r
650 Thr.addElement("ACT");
\r
652 Pro.addElement("CCA");
\r
653 Pro.addElement("CCG");
\r
654 Pro.addElement("CCC");
\r
655 Pro.addElement("CCT");
\r
657 Ala.addElement("GCA");
\r
658 Ala.addElement("GCG");
\r
659 Ala.addElement("GCC");
\r
660 Ala.addElement("GCT");
\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
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
676 Gly.addElement("GGA");
\r
677 Gly.addElement("GGG");
\r
678 Gly.addElement("GGC");
\r
679 Gly.addElement("GGT");
\r
681 STOP.addElement("TGA");
\r
682 STOP.addElement("TAA");
\r
683 STOP.addElement("TAG");
\r
685 Trp.addElement("TGG");
\r
687 Cys.addElement("TGC");
\r
688 Cys.addElement("TGT");
\r
690 Ile.addElement("ATA");
\r
691 Ile.addElement("ATC");
\r
692 Ile.addElement("ATT");
\r
694 Met.addElement("ATG");
\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
703 Val.addElement("GTA");
\r
704 Val.addElement("GTG");
\r
705 Val.addElement("GTC");
\r
706 Val.addElement("GTT");
\r
708 Phe.addElement("TTC");
\r
709 Phe.addElement("TTT");
\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
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
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
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
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
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
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
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
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
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
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
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
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
998 public static Hashtable chainColours = new Hashtable();
\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
1009 public static Hashtable getChainColours() {
\r
1010 return chainColours;
\r