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("a", new Integer(0));
\r
58 aaHash.put("r", new Integer(1));
\r
59 aaHash.put("n", new Integer(2));
\r
60 aaHash.put("d", new Integer(3));
\r
61 aaHash.put("c", new Integer(4));
\r
62 aaHash.put("q", new Integer(5));
\r
63 aaHash.put("e", new Integer(6));
\r
64 aaHash.put("g", new Integer(7));
\r
65 aaHash.put("h", new Integer(8));
\r
66 aaHash.put("i", new Integer(9));
\r
67 aaHash.put("l", new Integer(10));
\r
68 aaHash.put("k", new Integer(11));
\r
69 aaHash.put("m", new Integer(12));
\r
70 aaHash.put("f", new Integer(13));
\r
71 aaHash.put("p", new Integer(14));
\r
72 aaHash.put("s", new Integer(15));
\r
73 aaHash.put("t", new Integer(16));
\r
74 aaHash.put("w", new Integer(17));
\r
75 aaHash.put("y", new Integer(18));
\r
76 aaHash.put("v", new Integer(19));
\r
77 aaHash.put("b", new Integer(20));
\r
78 aaHash.put("z", new Integer(21));
\r
79 aaHash.put("x", new Integer(22));
\r
80 aaHash.put("-", new Integer(23));
\r
81 aaHash.put("*", new Integer(23));
\r
82 aaHash.put(".", new Integer(23));
\r
83 aaHash.put(" ", new Integer(23));
\r
87 nucleotideHash.put("A", new Integer(0));
\r
88 nucleotideHash.put("C", new Integer(1));
\r
89 nucleotideHash.put("G", new Integer(2));
\r
90 nucleotideHash.put("T", new Integer(3));
\r
91 nucleotideHash.put("U", new Integer(4));
\r
94 // These numbers should correspond to the indices in the Color hashes
\r
95 public static Hashtable aaSpecialsHash = new Hashtable();
\r
97 aaSpecialsHash.put("-", new Integer(23));
\r
98 aaSpecialsHash.put("*", new Integer(24));
\r
99 aaSpecialsHash.put(".", new Integer(25));
\r
100 aaSpecialsHash.put(" ", new Integer(26));
\r
104 aa3Hash.put("ALA", new Integer(0));
\r
105 aa3Hash.put("ARG", new Integer(1));
\r
106 aa3Hash.put("ASN", new Integer(2));
\r
107 aa3Hash.put("ASP", new Integer(3)); //D
\r
108 aa3Hash.put("CYS", new Integer(4));
\r
109 aa3Hash.put("GLN", new Integer(5)); //Q
\r
110 aa3Hash.put("GLU", new Integer(6)); // E
\r
111 aa3Hash.put("GLY", new Integer(7));
\r
112 aa3Hash.put("HIS", new Integer(8));
\r
113 aa3Hash.put("ILE", new Integer(9));
\r
114 aa3Hash.put("LEU", new Integer(10));
\r
115 aa3Hash.put("LYS", new Integer(11));
\r
116 aa3Hash.put("MET", new Integer(12));
\r
117 aa3Hash.put("PHE", new Integer(13));
\r
118 aa3Hash.put("PRO", new Integer(14));
\r
119 aa3Hash.put("SER", new Integer(15));
\r
120 aa3Hash.put("THR", new Integer(16));
\r
121 aa3Hash.put("TRP", new Integer(17));
\r
122 aa3Hash.put("TYR", new Integer(18));
\r
123 aa3Hash.put("VAL", new Integer(19));
\r
124 aa3Hash.put("B", new Integer(20));
\r
125 aa3Hash.put("Z", new Integer(21));
\r
126 aa3Hash.put("X", new Integer(22));
\r
127 aa3Hash.put("-", new Integer(23));
\r
128 aa3Hash.put("*", new Integer(23));
\r
129 aa3Hash.put(".", new Integer(23));
\r
130 aa3Hash.put(" ", new Integer(23));
\r
134 aa2Triplet.put("A", "ALA");
\r
135 aa2Triplet.put("R", "ARG");
\r
136 aa2Triplet.put("N", "ASN");
\r
137 aa2Triplet.put("D", "ASP");
\r
138 aa2Triplet.put("C", "CYS");
\r
139 aa2Triplet.put("Q", "GLN");
\r
140 aa2Triplet.put("E", "GLU");
\r
141 aa2Triplet.put("G", "GLY");
\r
142 aa2Triplet.put("H", "HIS");
\r
143 aa2Triplet.put("I", "ILE");
\r
144 aa2Triplet.put("L", "LEU");
\r
145 aa2Triplet.put("K", "LYS");
\r
146 aa2Triplet.put("M", "MET");
\r
147 aa2Triplet.put("F", "PHE");
\r
148 aa2Triplet.put("P", "PRO");
\r
149 aa2Triplet.put("S", "SER");
\r
150 aa2Triplet.put("T", "THR");
\r
151 aa2Triplet.put("W", "TRP");
\r
152 aa2Triplet.put("Y", "TYR");
\r
153 aa2Triplet.put("V", "VAL");
\r
156 public static String aa[] = {
\r
157 "A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X","_","*","."," "
\r
159 public static Color midBlue = new Color(100,100,255);
\r
160 public static Vector scaleColours = new Vector();
\r
162 scaleColours.addElement(new Color(114,0,147));
\r
163 scaleColours.addElement(new Color(156,0,98));
\r
164 scaleColours.addElement(new Color(190,0,0));
\r
165 scaleColours.addElement(Color.red);
\r
166 scaleColours.addElement(new Color(255,125,0));
\r
167 scaleColours.addElement(Color.orange);
\r
168 scaleColours.addElement(new Color(255,194,85));
\r
169 scaleColours.addElement(Color.yellow);
\r
170 scaleColours.addElement(new Color(255,255,181));
\r
171 scaleColours.addElement(Color.white);
\r
174 public static Color[] taylor = {
\r
175 new Color(204,255,0), // A Greenish-yellowy-yellow
\r
176 new Color(0,0,255), // R Blueish-bluey-blue
\r
177 new Color(204,0,255), // N Blueish-reddy-blue
\r
178 new Color(255,0,0), // D Reddish-reddy-red
\r
179 new Color(255,255,0), // C Yellowish-yellowy-yellow
\r
180 new Color(255,0,204), // Q Reddish-bluey-red
\r
181 new Color(255,0,102), // E Blueish-reddy-red
\r
182 new Color(255,153,0), // G Yellowy-reddy-yellow
\r
183 new Color(0,102,255), // H Greenish-bluey-blue
\r
184 new Color(102,255,0), // I Greenish-yellowy-green
\r
185 new Color(51,255,0), // L Yellowish-greeny-green
\r
186 new Color(102,0,255), // K Reddish-bluey-blue
\r
187 new Color(0,255,0), // M Greenish-greeny-green
\r
188 new Color(0,255,102), // F Blueish-greeny-green
\r
189 new Color(255,204,0), // P Reddish-yellowy-yellow
\r
190 new Color(255,51,0), // S Yellowish-reddy-red
\r
191 new Color(255,102,0), // T Reddish-yellowy-red
\r
192 new Color(0,204,255), // W Blueish-greeny-green
\r
193 new Color(0,255,204), // Y Greenish-bluey-green
\r
194 new Color(153,255,0), // V Yellowish-greeny-yellow
\r
203 public static Color[] nucleotide = {
\r
204 new Color(100,247,63), // A
\r
205 new Color(255,179,64), // C
\r
206 new Color(235,65,60), // G
\r
207 new Color(60,136,238), // T
\r
208 new Color(60,136,238) // U
\r
211 public static Color[] color = {
\r
219 Color.magenta, // G
\r
226 Color.magenta, // P
\r
241 // Dunno where I got these numbers from
\r
242 public static double[] hyd2 = {
\r
267 public static double[] helix = {
\r
293 public static double helixmin = 0.57;
\r
294 public static double helixmax = 1.51;
\r
296 public static double[] strand = {
\r
297 0.83,0.93,0.89,0.54,1.19,1.10,0.37,
\r
298 0.75,0.87,1.60,1.30,0.74,1.05,1.38,0.55,
\r
299 0.75,1.19,1.37,1.47,1.70,0.72,0.74,1.0,0.0};
\r
301 public static double strandmin = 0.37;
\r
302 public static double strandmax = 1.7;
\r
304 public static double[] turn = {
\r
305 0.66,0.95,1.56,1.46,1.19,0.98,0.74,
\r
306 1.56,0.95,0.47,0.59,1.01,0.60,0.60,1.52,
\r
307 1.43,0.96,0.96,1.14,0.50,1.51,0.86,1.00,0,0};
\r
309 public static double turnmin = 0.47;
\r
310 public static double turnmax = 1.56;
\r
312 public static double[] buried = {
\r
328 0.8,0.7,1.6,0.5,2.9,0.4,0.3,
\r
333 public static double buriedmin = 0.05;
\r
334 public static double buriedmax = 4.6;
\r
336 // This is hydropathy index
\r
337 // Kyte, J., and Doolittle, R.F., J. Mol. Biol.
\r
338 // 1157, 105-132, 1982
\r
340 public static double hyd[] = {
\r
367 public static final double hydmax = 4.5;
\r
368 public static final double hydmin = -3.9;
\r
370 public static double getHydmax() {
\r
373 public static double getHydmin() {
\r
376 public static double[] getHyd() {
\r
379 //public static final double hydmax = 1.38;
\r
380 //public static final double hydmin = -2.53;
\r
382 static final int[][] BLOSUM62 = {
\r
383 //A R N D C Q E G H I L K M F P S T W Y V B Z X -
\r
384 { 4 ,-1, -2 ,-2 , 0 ,-1 ,-1 , 0 ,-2 ,-1 ,-1 ,-1 ,-1 ,-2 ,-1 , 1 , 0 ,-3 ,-2 , 0 ,-2, -1 , 0 ,-4},
\r
385 {-1 , 5 , 0 ,-2 ,-3 , 1 , 0 ,-2 , 0 ,-3 ,-2 , 2 ,-1 ,-3 ,-2 ,-1 ,-1 ,-3 ,-2 ,-3 ,-1 , 0 ,-1 ,-4 },
\r
386 {-2 , 0 , 6 , 1 ,-3 , 0 , 0 , 0 , 1 ,-3 ,-3 , 0 ,-2 ,-3 ,-2 , 1 , 0 ,-4 ,-2 ,-3 , 3 , 0 ,-1 ,-4 },
\r
387 {-2 ,-2 , 1 , 6 ,-3 , 0 , 2 ,-1 ,-1 ,-3 ,-4 ,-1 ,-3 ,-3 ,-1 , 0 ,-1 ,-4 ,-3 ,-3 , 4 , 1 ,-1 ,-4 },
\r
388 { 0 , 3 ,-3 ,-3 , 9 ,-3 ,-4 ,-3 ,-3 ,-1 ,-1 ,-3 ,-1 ,-2 ,-3 ,-1 ,-1 ,-2 ,-2 ,-1 ,-3 ,-3 ,-2 ,-4 },
\r
389 {-1 , 1 , 0 , 0 ,-3 , 5 , 2 ,-2 , 0 ,-3 ,-2 , 1 , 0 ,-3 ,-1 , 0 ,-1 ,-2 ,-1 ,-2 , 0 , 3 ,-1 ,-4 },
\r
390 {-1 , 0 , 0 , 2 ,-4 , 2 , 5 ,-2 , 0 ,-3 ,-3 , 1 ,-2 ,-3 ,-1 , 0 ,-1 ,-3 ,-2 ,-2 , 1 , 4 ,-1 ,-4 },
\r
391 { 0 ,-2 , 0 ,-1 ,-3 ,-2 ,-2 , 6 ,-2 ,-4 ,-4 ,-2 ,-3 ,-3 ,-2 , 0 ,-2 ,-2 ,-3 ,-3 ,-1 ,-2 ,-1 ,-4 },
\r
392 {-2 , 0 , 1 ,-1 ,-3 , 0 , 0 ,-2 , 8 ,-3 ,-3 ,-1 ,-2 ,-1 ,-2 ,-1 ,-2 ,-2 , 2 ,-3 , 0 , 0 ,-1 ,-4 },
\r
393 {-1 ,-3 ,-3 ,-3 ,-1 ,-3 ,-3 ,-4 ,-3 , 4 , 2 ,-3 , 1 , 0 ,-3 ,-2 ,-1 ,-3 ,-1 , 3 ,-3 ,-3 ,-1 ,-4 },
\r
394 {-1 ,-2 ,-3 ,-4 ,-1 ,-2 ,-3 ,-4 ,-3 , 2 , 4 ,-2 , 2 , 0 ,-3 ,-2 ,-1 ,-2 ,-1 , 1 ,-4 ,-3 ,-1 ,-4 },
\r
395 {-1 , 2 , 0 ,-1 ,-3 , 1 , 1 ,-2 ,-1 ,-3 ,-2 , 5 ,-1 ,-3 ,-1 , 0 ,-1 ,-3 ,-2 ,-2 , 0 , 1 ,-1 ,-4 },
\r
396 {-1 ,-1 ,-2 ,-3 ,-1 , 0 ,-2 ,-3 ,-2 , 1 , 2 ,-1 , 5 , 0 ,-2 ,-1 ,-1 ,-1 ,-1 , 1 ,-3 ,-1 ,-1 ,-4 },
\r
397 {-2 ,-3 ,-3 ,-3 ,-2 ,-3 ,-3 ,-3 ,-1 , 0 , 0 ,-3 , 0 , 6 ,-4 ,-2 ,-2 , 1 , 3 ,-1 ,-3 ,-3 ,-1 ,-4 },
\r
398 {-1 ,-2 ,-2 ,-1 ,-3 ,-1 ,-1 ,-2 ,-2 ,-3 ,-3 ,-1 ,-2 ,-4 , 7 ,-1 ,-1 ,-4 ,-3 ,-2 ,-2 ,-1 ,-2 ,-4 },
\r
399 { 1 ,-1 , 1 , 0 ,-1 , 0 , 0 , 0 ,-1 ,-2 ,-2 , 0 ,-1 ,-2 ,-1 , 4 , 1 ,-3 ,-2 ,-2 , 0 , 0 , 0 ,-4 },
\r
400 { 0 ,-1 , 0 ,-1 ,-1 ,-1 ,-1 ,-2 ,-2 ,-1 ,-1 ,-1 ,-1 ,-2 ,-1 , 1 , 5 ,-2 ,-2 , 0 ,-1 ,-1 , 0 ,-4 },
\r
401 {-3 ,-3 ,-4 ,-4 ,-2 ,-2 ,-3 ,-2 ,-2 ,-3 ,-2 ,-3 ,-1 , 1 ,-4 ,-3 ,-2 ,11 , 2 ,-3 ,-4 ,-3 ,-2 ,-4 },
\r
402 {-2 ,-2 ,-2 ,-3 ,-2 ,-1 ,-2 ,-3 , 2 ,-1 ,-1 ,-2 ,-1 , 3 ,-3 ,-2 ,-2 , 2 , 7 ,-1 ,-3 ,-2 ,-1 ,-4 },
\r
403 { 0 ,-3 ,-3 ,-3 ,-1 ,-2 ,-2 ,-3 ,-3 , 3 , 1 ,-2 , 1 ,-1 ,-2 ,-2 , 0 ,-3 ,-1 , 4 ,-3 ,-2 ,-1 ,-4 },
\r
404 {-2 ,-1 , 3 , 4 ,-3 , 0 , 1 ,-1 , 0 ,-3 ,-4 , 0 ,-3 ,-3 ,-2 , 0 ,-1 ,-4 ,-3 ,-3 , 4 , 1 ,-1 ,-4 },
\r
405 {-1 , 0 , 0 , 1 ,-3 , 3 , 4 ,-2 , 0 ,-3 ,-3 , 1 ,-1 ,-3 ,-1 , 0 ,-1 ,-3 ,-2 ,-2 , 1 , 4 ,-1 ,-4 },
\r
406 { 0 ,-1 ,-1 ,-1 ,-2 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-2 , 0 , 0 ,-2 ,-1 ,-1 ,-1 ,-1 ,-1 ,-4 },
\r
407 {-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 ,-4 , 1 },
\r
409 static final int[][] PAM250 = {
\r
410 { 2,-2 ,0 ,0,-2 ,0 ,0 ,1,-1,-1,-2,-1,-1,-3 ,1 ,1 ,1,-6,-3 ,0 ,0 ,0 ,0,-8},
\r
411 { -2 ,6 ,0,-1,-4 ,1,-1,-3 ,2,-2,-3 ,3 ,0,-4 ,0 ,0,-1 ,2,-4,-2,-1 ,0,-1,-8},
\r
412 { 0 ,0 ,2 ,2,-4 ,1 ,1 ,0 ,2,-2,-3 ,1,-2,-3 ,0 ,1 ,0,-4,-2,-2 ,2 ,1 ,0,-8},
\r
413 { 0,-1 ,2 ,4,-5 ,2 ,3 ,1 ,1,-2,-4 ,0,-3,-6,-1 ,0 ,0,-7,-4,-2 ,3 ,3,-1,-8},
\r
414 { -2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3 ,0,-2,-8 ,0,-2,-4,-5,-3,-8},
\r
415 { 0 ,1 ,1 ,2,-5 ,4 ,2,-1 ,3,-2,-2 ,1,-1,-5 ,0,-1,-1,-5,-4,-2 ,1 ,3,-1,-8},
\r
416 { 0,-1 ,1 ,3,-5 ,2 ,4 ,0 ,1,-2,-3 ,0,-2,-5,-1 ,0 ,0,-7,-4,-2 ,3 ,3,-1,-8},
\r
417 { 1,-3 ,0 ,1,-3,-1 ,0 ,5,-2,-3,-4,-2,-3,-5 ,0 ,1 ,0,-7,-5,-1 ,0 ,0,-1,-8},
\r
418 { -1 ,2 ,2 ,1,-3 ,3 ,1,-2 ,6,-2,-2 ,0,-2,-2 ,0,-1,-1,-3 ,0,-2 ,1 ,2,-1,-8},
\r
419 { -1,-2,-2,-2,-2,-2,-2,-3,-2 ,5 ,2,-2 ,2 ,1,-2,-1 ,0,-5,-1 ,4,-2,-2,-1,-8},
\r
420 { -2,-3,-3,-4,-6,-2,-3,-4,-2 ,2 ,6,-3 ,4 ,2,-3,-3,-2,-2,-1 ,2,-3,-3,-1,-8},
\r
421 { -1 ,3 ,1 ,0,-5 ,1 ,0,-2 ,0,-2,-3 ,5 ,0,-5,-1 ,0 ,0,-3,-4,-2 ,1 ,0,-1,-8},
\r
422 { -1 ,0,-2,-3,-5,-1,-2,-3,-2 ,2 ,4 ,0 ,6 ,0,-2,-2,-1,-4,-2 ,2,-2,-2,-1,-8},
\r
423 { -3,-4,-3,-6,-4,-5,-5,-5,-2 ,1 ,2,-5 ,0 ,9,-5,-3,-3 ,0 ,7,-1,-4,-5,-2,-8},
\r
424 { 1 ,0 ,0,-1,-3 ,0,-1 ,0 ,0,-2,-3,-1,-2,-5 ,6 ,1 ,0,-6,-5,-1,-1 ,0,-1,-8},
\r
425 { 1 ,0 ,1 ,0 ,0,-1 ,0 ,1,-1,-1,-3 ,0,-2,-3 ,1 ,2 ,1,-2,-3,-1 ,0 ,0 ,0,-8},
\r
426 { 1,-1 ,0 ,0,-2,-1 ,0 ,0,-1 ,0,-2 ,0,-1,-3 ,0 ,1 ,3,-5,-3 ,0 ,0,-1 ,0,-8},
\r
427 { -6 ,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4 ,0,-6,-2,-5,17 ,0,-6,-5,-6,-4,-8},
\r
428 { -3,-4,-2,-4 ,0,-4,-4,-5 ,0,-1,-1,-4,-2 ,7,-5,-3,-3 ,0,10,-2,-3,-4,-2,-8},
\r
429 { 0,-2,-2,-2,-2,-2,-2,-1,-2 ,4 ,2,-2 ,2,-1,-1,-1 ,0,-6,-2 ,4,-2,-2,-1,-8},
\r
430 { 0,-1 ,2 ,3,-4 ,1 ,3 ,0 ,1,-2,-3 ,1,-2,-4,-1 ,0 ,0,-5,-3,-2 ,3 ,2,-1,-8},
\r
431 { 0 ,0 ,1 ,3,-5 ,3 ,3 ,0 ,2,-2,-3 ,0,-2,-5 ,0 ,0,-1,-6,-4,-2 ,2 ,3,-1,-8},
\r
432 { 0,-1 ,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1 ,0 ,0,-4,-2,-1,-1,-1,-1,-8},
\r
433 { -8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8 ,1},
\r
436 public static Hashtable ssHash = new Hashtable(); // stores the number value of the aa
\r
439 ssHash.put("H", Color.magenta);
\r
440 ssHash.put("E", Color.yellow);
\r
441 ssHash.put("-", Color.white);
\r
442 ssHash.put(".", Color.white);
\r
443 ssHash.put("S", Color.cyan);
\r
444 ssHash.put("T", Color.blue);
\r
445 ssHash.put("G", Color.pink);
\r
446 ssHash.put("I", Color.pink);
\r
447 ssHash.put("B", Color.yellow);
\r
449 static final int[][] DNA = {
\r
451 { 5,-4,-4,-4, 1},// C
\r
452 {-4, 5,-4,-4, 1},// T
\r
453 {-4,-4, 5,-4, 1},// A
\r
454 {-4,-4,-4, 5, 1},// G
\r
455 { 1, 1, 1, 1, 1},// -
\r
457 public static Hashtable getAAHash() {
\r
460 public static Hashtable getAA3Hash() {
\r
463 public static int[][] getDNA() {
\r
464 return ResidueProperties.DNA;
\r
466 public static int[][] getBLOSUM62() {
\r
467 return ResidueProperties.BLOSUM62;
\r
469 public static int getPAM250(String A1, String A2) {
\r
470 Integer pog1 = (Integer)aaHash.get(A1);
\r
471 Integer pog2 = (Integer)aaHash.get(A2);
\r
472 int pog = ResidueProperties.PAM250[pog1.intValue()][pog2.intValue()];
\r
475 public static int getBLOSUM62(String A1, String A2) {
\r
478 Integer pog1 = (Integer)aaHash.get(A1);
\r
479 Integer pog2 = (Integer)aaHash.get(A2);
\r
480 pog = ResidueProperties.BLOSUM62[pog1.intValue()][pog2.intValue()];
\r
481 } catch (Exception e) {
\r
482 //System.out.println("Unknown residue in " + A1 + " " + A2);
\r
487 public static Color[] pidColours = {
\r
489 new Color(153,153,255),
\r
490 // Color.lightGray,
\r
491 new Color(204,204,255),
\r
493 public static float[] pidThresholds = {
\r
498 private ResidueProperties() {}
\r
500 public static Hashtable codonHash = new Hashtable();
\r
502 public static Vector Lys = new Vector();
\r
503 public static Vector Asn = new Vector();
\r
504 public static Vector Gln = new Vector();
\r
505 public static Vector His = new Vector();
\r
506 public static Vector Glu = new Vector();
\r
507 public static Vector Asp = new Vector();
\r
508 public static Vector Tyr = new Vector();
\r
509 public static Vector Thr = new Vector();
\r
510 public static Vector Pro = new Vector();
\r
511 public static Vector Ala = new Vector();
\r
512 public static Vector Ser = new Vector();
\r
513 public static Vector Arg = new Vector();
\r
514 public static Vector Gly = new Vector();
\r
515 public static Vector Trp = new Vector();
\r
516 public static Vector Cys = new Vector();
\r
517 public static Vector Ile = new Vector();
\r
518 public static Vector Met = new Vector();
\r
519 public static Vector Leu = new Vector();
\r
520 public static Vector Val = new Vector();
\r
521 public static Vector Phe = new Vector();
\r
522 public static Vector STOP = new Vector();
\r
525 codonHash.put("K",Lys);
\r
526 codonHash.put("N",Asn);
\r
527 codonHash.put("Q",Gln);
\r
528 codonHash.put("H",His);
\r
529 codonHash.put("E",Glu);
\r
530 codonHash.put("D",Asp);
\r
531 codonHash.put("Y",Tyr);
\r
532 codonHash.put("T",Thr);
\r
533 codonHash.put("P",Pro);
\r
534 codonHash.put("A",Ala);
\r
535 codonHash.put("S",Ser);
\r
536 codonHash.put("R",Arg);
\r
537 codonHash.put("G",Gly);
\r
538 codonHash.put("W",Trp);
\r
539 codonHash.put("C",Cys);
\r
540 codonHash.put("I",Ile);
\r
541 codonHash.put("M",Met);
\r
542 codonHash.put("L",Leu);
\r
543 codonHash.put("V",Val);
\r
544 codonHash.put("F",Phe);
\r
545 codonHash.put("STOP",STOP);
\r
548 public static Vector getCodons(String res) {
\r
549 if (codonHash.containsKey(res))
\r
550 return (Vector)codonHash.get(res);
\r
554 public static String codonTranslate(String codon) {
\r
555 Enumeration e = codonHash.keys();
\r
556 while (e.hasMoreElements()) {
\r
557 String key = (String)e.nextElement();
\r
558 Vector tmp = (Vector)codonHash.get(key);
\r
559 if (tmp.contains(codon)) {
\r
565 public static Hashtable codonHash2 = new Hashtable();
\r
567 codonHash2.put("AAA","K");
\r
568 codonHash2.put("AAG","K");
\r
569 codonHash2.put("AAC","N");
\r
570 codonHash2.put("AAT","N");
\r
572 codonHash2.put("CAA","E");
\r
573 codonHash2.put("CAG","E");
\r
574 codonHash2.put("CAC","H");
\r
575 codonHash2.put("CAT","H");
\r
577 codonHash2.put("GAA","Q");
\r
578 codonHash2.put("GAG","Q");
\r
579 codonHash2.put("GAC","D");
\r
580 codonHash2.put("GAT","D");
\r
582 codonHash2.put("TAC","Y");
\r
583 codonHash2.put("TAT","Y");
\r
585 codonHash2.put("ACA","T");
\r
586 codonHash2.put("AAG","T");
\r
587 codonHash2.put("ACC","T");
\r
588 codonHash2.put("ACT","T");
\r
590 codonHash2.put("CCA","P");
\r
591 codonHash2.put("CCG","P");
\r
592 codonHash2.put("CCC","P");
\r
593 codonHash2.put("CCT","P");
\r
595 codonHash2.put("GCA","A");
\r
596 codonHash2.put("GCG","A");
\r
597 codonHash2.put("GCC","A");
\r
598 codonHash2.put("GCT","A");
\r
600 codonHash2.put("TCA","S");
\r
601 codonHash2.put("TCG","S");
\r
602 codonHash2.put("TCC","S");
\r
603 codonHash2.put("TCT","S");
\r
604 codonHash2.put("AGC","S");
\r
605 codonHash2.put("AGT","S");
\r
607 codonHash2.put("AGA","R");
\r
608 codonHash2.put("AGG","R");
\r
609 codonHash2.put("CGA","R");
\r
610 codonHash2.put("CGG","R");
\r
611 codonHash2.put("CGC","R");
\r
612 codonHash2.put("CGT","R");
\r
614 codonHash2.put("GGA","G");
\r
615 codonHash2.put("GGG","G");
\r
616 codonHash2.put("GGC","G");
\r
617 codonHash2.put("GGT","G");
\r
619 codonHash2.put("TGA","*");
\r
620 codonHash2.put("TAA","*");
\r
621 codonHash2.put("TAG","*");
\r
623 codonHash2.put("TGG","W");
\r
625 codonHash2.put("TGC","C");
\r
626 codonHash2.put("TGT","C");
\r
628 codonHash2.put("ATA","I");
\r
629 codonHash2.put("ATC","I");
\r
630 codonHash2.put("ATT","I");
\r
632 codonHash2.put("ATG","M");
\r
634 codonHash2.put("CTA","L");
\r
635 codonHash2.put("CTG","L");
\r
636 codonHash2.put("CTC","L");
\r
637 codonHash2.put("CTT","L");
\r
638 codonHash2.put("TTA","L");
\r
639 codonHash2.put("TTG","L");
\r
641 codonHash2.put("GTA","V");
\r
642 codonHash2.put("GTG","V");
\r
643 codonHash2.put("GTC","V");
\r
644 codonHash2.put("GTT","V");
\r
646 codonHash2.put("TTC","F");
\r
647 codonHash2.put("TTT","F");
\r
652 Lys.addElement("AAA");
\r
653 Lys.addElement("AAG");
\r
654 Asn.addElement("AAC");
\r
655 Asn.addElement("AAT");
\r
657 Gln.addElement("CAA");
\r
658 Gln.addElement("CAG");
\r
659 His.addElement("CAC");
\r
660 His.addElement("CAT");
\r
662 Glu.addElement("GAA");
\r
663 Glu.addElement("GAG");
\r
664 Asp.addElement("GAC");
\r
665 Asp.addElement("GAT");
\r
667 Tyr.addElement("TAC");
\r
668 Tyr.addElement("TAT");
\r
670 Thr.addElement("ACA");
\r
671 Thr.addElement("ACG");
\r
672 Thr.addElement("ACC");
\r
673 Thr.addElement("ACT");
\r
675 Pro.addElement("CCA");
\r
676 Pro.addElement("CCG");
\r
677 Pro.addElement("CCC");
\r
678 Pro.addElement("CCT");
\r
680 Ala.addElement("GCA");
\r
681 Ala.addElement("GCG");
\r
682 Ala.addElement("GCC");
\r
683 Ala.addElement("GCT");
\r
685 Ser.addElement("TCA");
\r
686 Ser.addElement("TCG");
\r
687 Ser.addElement("TCC");
\r
688 Ser.addElement("TCT");
\r
689 Ser.addElement("AGC");
\r
690 Ser.addElement("AGT");
\r
692 Arg.addElement("AGA");
\r
693 Arg.addElement("AGG");
\r
694 Arg.addElement("CGA");
\r
695 Arg.addElement("CGG");
\r
696 Arg.addElement("CGC");
\r
697 Arg.addElement("CGT");
\r
699 Gly.addElement("GGA");
\r
700 Gly.addElement("GGG");
\r
701 Gly.addElement("GGC");
\r
702 Gly.addElement("GGT");
\r
704 STOP.addElement("TGA");
\r
705 STOP.addElement("TAA");
\r
706 STOP.addElement("TAG");
\r
708 Trp.addElement("TGG");
\r
710 Cys.addElement("TGC");
\r
711 Cys.addElement("TGT");
\r
713 Ile.addElement("ATA");
\r
714 Ile.addElement("ATC");
\r
715 Ile.addElement("ATT");
\r
717 Met.addElement("ATG");
\r
719 Leu.addElement("CTA");
\r
720 Leu.addElement("CTG");
\r
721 Leu.addElement("CTC");
\r
722 Leu.addElement("CTT");
\r
723 Leu.addElement("TTA");
\r
724 Leu.addElement("TTG");
\r
726 Val.addElement("GTA");
\r
727 Val.addElement("GTG");
\r
728 Val.addElement("GTC");
\r
729 Val.addElement("GTT");
\r
731 Phe.addElement("TTC");
\r
732 Phe.addElement("TTT");
\r
735 public static Color[][] groupColors = {
\r
736 {Color.red,Color.red.brighter(),Color.red.brighter().brighter()},
\r
737 {Color.orange,Color.orange.brighter(),Color.orange.brighter().brighter()},
\r
738 {Color.green,Color.green.brighter(),Color.green.brighter().brighter()},
\r
739 {Color.blue,Color.blue.brighter(),Color.blue.brighter().brighter()},
\r
740 {Color.magenta,Color.magenta.brighter(),Color.magenta.brighter().brighter()},
\r
741 {Color.cyan,Color.cyan.brighter(),Color.cyan.brighter().brighter()},
\r
742 {Color.pink,Color.pink.brighter(),Color.pink.brighter().brighter()},
\r
748 //Stores residue codes/names and colours and other things
\r
749 public static Hashtable propHash = new Hashtable();
\r
750 public static Hashtable hydrophobic = new Hashtable();
\r
751 public static Hashtable polar = new Hashtable();
\r
752 public static Hashtable small = new Hashtable();
\r
753 public static Hashtable positive = new Hashtable();
\r
754 public static Hashtable negative = new Hashtable();
\r
755 public static Hashtable charged = new Hashtable();
\r
756 public static Hashtable aromatic = new Hashtable();
\r
757 public static Hashtable aliphatic = new Hashtable();
\r
758 public static Hashtable tiny = new Hashtable();
\r
759 public static Hashtable proline = new Hashtable();
\r
762 hydrophobic.put("I",new Integer(1));
\r
763 hydrophobic.put("L",new Integer(1));
\r
764 hydrophobic.put("V",new Integer(1));
\r
765 hydrophobic.put("C",new Integer(1));
\r
766 hydrophobic.put("A",new Integer(1));
\r
767 hydrophobic.put("G",new Integer(1));
\r
768 hydrophobic.put("M",new Integer(1));
\r
769 hydrophobic.put("F",new Integer(1));
\r
770 hydrophobic.put("Y",new Integer(1));
\r
771 hydrophobic.put("W",new Integer(1));
\r
772 hydrophobic.put("H",new Integer(1));
\r
773 hydrophobic.put("K",new Integer(1));
\r
774 hydrophobic.put("X",new Integer(1));
\r
775 hydrophobic.put("-",new Integer(1));
\r
776 hydrophobic.put("*",new Integer(1));
\r
777 hydrophobic.put("R",new Integer(0));
\r
778 hydrophobic.put("E",new Integer(0));
\r
779 hydrophobic.put("Q",new Integer(0));
\r
780 hydrophobic.put("D",new Integer(0));
\r
781 hydrophobic.put("N",new Integer(0));
\r
782 hydrophobic.put("S",new Integer(0));
\r
783 hydrophobic.put("T",new Integer(0));
\r
784 hydrophobic.put("P",new Integer(0));
\r
787 polar.put("Y",new Integer(1));
\r
788 polar.put("W",new Integer(1));
\r
789 polar.put("H",new Integer(1));
\r
790 polar.put("K",new Integer(1));
\r
791 polar.put("R",new Integer(1));
\r
792 polar.put("E",new Integer(1));
\r
793 polar.put("Q",new Integer(1));
\r
794 polar.put("D",new Integer(1));
\r
795 polar.put("N",new Integer(1));
\r
796 polar.put("S",new Integer(1));
\r
797 polar.put("T",new Integer(1));
\r
798 polar.put("X",new Integer(1));
\r
799 polar.put("-",new Integer(1));
\r
800 polar.put("*",new Integer(1));
\r
801 polar.put("I",new Integer(0));
\r
802 polar.put("L",new Integer(0));
\r
803 polar.put("V",new Integer(0));
\r
804 polar.put("C",new Integer(0));
\r
805 polar.put("A",new Integer(0));
\r
806 polar.put("G",new Integer(0));
\r
807 polar.put("M",new Integer(0));
\r
808 polar.put("F",new Integer(0));
\r
809 polar.put("P",new Integer(0));
\r
813 small.put("I",new Integer(0));
\r
814 small.put("L",new Integer(0));
\r
815 small.put("V",new Integer(1));
\r
816 small.put("C",new Integer(1));
\r
817 small.put("A",new Integer(1));
\r
818 small.put("G",new Integer(1));
\r
819 small.put("M",new Integer(0));
\r
820 small.put("F",new Integer(0));
\r
821 small.put("Y",new Integer(0));
\r
822 small.put("W",new Integer(0));
\r
823 small.put("H",new Integer(0));
\r
824 small.put("K",new Integer(0));
\r
825 small.put("R",new Integer(0));
\r
826 small.put("E",new Integer(0));
\r
827 small.put("Q",new Integer(0));
\r
828 small.put("D",new Integer(1));
\r
829 small.put("N",new Integer(1));
\r
830 small.put("S",new Integer(1));
\r
831 small.put("T",new Integer(1));
\r
832 small.put("P",new Integer(1));
\r
833 small.put("-",new Integer(1));
\r
834 small.put("*",new Integer(1));
\r
837 positive.put("I",new Integer(0));
\r
838 positive.put("L",new Integer(0));
\r
839 positive.put("V",new Integer(0));
\r
840 positive.put("C",new Integer(0));
\r
841 positive.put("A",new Integer(0));
\r
842 positive.put("G",new Integer(0));
\r
843 positive.put("M",new Integer(0));
\r
844 positive.put("F",new Integer(0));
\r
845 positive.put("Y",new Integer(0));
\r
846 positive.put("W",new Integer(0));
\r
847 positive.put("H",new Integer(1));
\r
848 positive.put("K",new Integer(1));
\r
849 positive.put("R",new Integer(1));
\r
850 positive.put("E",new Integer(0));
\r
851 positive.put("Q",new Integer(0));
\r
852 positive.put("D",new Integer(0));
\r
853 positive.put("N",new Integer(0));
\r
854 positive.put("S",new Integer(0));
\r
855 positive.put("T",new Integer(0));
\r
856 positive.put("P",new Integer(0));
\r
857 positive.put("-",new Integer(1));
\r
858 positive.put("*",new Integer(1));
\r
861 negative.put("I",new Integer(0));
\r
862 negative.put("L",new Integer(0));
\r
863 negative.put("V",new Integer(0));
\r
864 negative.put("C",new Integer(0));
\r
865 negative.put("A",new Integer(0));
\r
866 negative.put("G",new Integer(0));
\r
867 negative.put("M",new Integer(0));
\r
868 negative.put("F",new Integer(0));
\r
869 negative.put("Y",new Integer(0));
\r
870 negative.put("W",new Integer(0));
\r
871 negative.put("H",new Integer(0));
\r
872 negative.put("K",new Integer(0));
\r
873 negative.put("R",new Integer(0));
\r
874 negative.put("E",new Integer(1));
\r
875 negative.put("Q",new Integer(0));
\r
876 negative.put("D",new Integer(1));
\r
877 negative.put("N",new Integer(0));
\r
878 negative.put("S",new Integer(0));
\r
879 negative.put("T",new Integer(0));
\r
880 negative.put("P",new Integer(0));
\r
881 negative.put("-",new Integer(1));
\r
882 negative.put("*",new Integer(1));
\r
885 charged.put("I",new Integer(0));
\r
886 charged.put("L",new Integer(0));
\r
887 charged.put("V",new Integer(0));
\r
888 charged.put("C",new Integer(0));
\r
889 charged.put("A",new Integer(0));
\r
890 charged.put("G",new Integer(0));
\r
891 charged.put("M",new Integer(0));
\r
892 charged.put("F",new Integer(0));
\r
893 charged.put("Y",new Integer(0));
\r
894 charged.put("W",new Integer(0));
\r
895 charged.put("H",new Integer(1));
\r
896 charged.put("K",new Integer(1));
\r
897 charged.put("R",new Integer(1));
\r
898 charged.put("E",new Integer(1));
\r
899 charged.put("Q",new Integer(0));
\r
900 charged.put("D",new Integer(1));
\r
901 charged.put("N",new Integer(1));
\r
902 charged.put("S",new Integer(0));
\r
903 charged.put("T",new Integer(0));
\r
904 charged.put("P",new Integer(0));
\r
905 charged.put("-",new Integer(1));
\r
906 charged.put("*",new Integer(1));
\r
909 aromatic.put("I",new Integer(0));
\r
910 aromatic.put("L",new Integer(0));
\r
911 aromatic.put("V",new Integer(0));
\r
912 aromatic.put("C",new Integer(0));
\r
913 aromatic.put("A",new Integer(0));
\r
914 aromatic.put("G",new Integer(0));
\r
915 aromatic.put("M",new Integer(0));
\r
916 aromatic.put("F",new Integer(1));
\r
917 aromatic.put("Y",new Integer(1));
\r
918 aromatic.put("W",new Integer(1));
\r
919 aromatic.put("H",new Integer(1));
\r
920 aromatic.put("K",new Integer(0));
\r
921 aromatic.put("R",new Integer(0));
\r
922 aromatic.put("E",new Integer(0));
\r
923 aromatic.put("Q",new Integer(0));
\r
924 aromatic.put("D",new Integer(0));
\r
925 aromatic.put("N",new Integer(0));
\r
926 aromatic.put("S",new Integer(0));
\r
927 aromatic.put("T",new Integer(0));
\r
928 aromatic.put("P",new Integer(0));
\r
929 aromatic.put("-",new Integer(1));
\r
930 aromatic.put("*",new Integer(1));
\r
933 aliphatic.put("I",new Integer(1));
\r
934 aliphatic.put("L",new Integer(1));
\r
935 aliphatic.put("V",new Integer(1));
\r
936 aliphatic.put("C",new Integer(0));
\r
937 aliphatic.put("A",new Integer(0));
\r
938 aliphatic.put("G",new Integer(0));
\r
939 aliphatic.put("M",new Integer(0));
\r
940 aliphatic.put("F",new Integer(0));
\r
941 aliphatic.put("Y",new Integer(0));
\r
942 aliphatic.put("W",new Integer(0));
\r
943 aliphatic.put("H",new Integer(0));
\r
944 aliphatic.put("K",new Integer(0));
\r
945 aliphatic.put("R",new Integer(0));
\r
946 aliphatic.put("E",new Integer(0));
\r
947 aliphatic.put("Q",new Integer(0));
\r
948 aliphatic.put("D",new Integer(0));
\r
949 aliphatic.put("N",new Integer(0));
\r
950 aliphatic.put("S",new Integer(0));
\r
951 aliphatic.put("T",new Integer(0));
\r
952 aliphatic.put("P",new Integer(0));
\r
953 aliphatic.put("-",new Integer(1));
\r
954 aliphatic.put("*",new Integer(1));
\r
958 tiny.put("I",new Integer(0));
\r
959 tiny.put("L",new Integer(0));
\r
960 tiny.put("V",new Integer(0));
\r
961 tiny.put("C",new Integer(0));
\r
962 tiny.put("A",new Integer(1));
\r
963 tiny.put("G",new Integer(1));
\r
964 tiny.put("M",new Integer(0));
\r
965 tiny.put("F",new Integer(0));
\r
966 tiny.put("Y",new Integer(0));
\r
967 tiny.put("W",new Integer(0));
\r
968 tiny.put("H",new Integer(0));
\r
969 tiny.put("K",new Integer(0));
\r
970 tiny.put("R",new Integer(0));
\r
971 tiny.put("E",new Integer(0));
\r
972 tiny.put("Q",new Integer(0));
\r
973 tiny.put("D",new Integer(0));
\r
974 tiny.put("N",new Integer(0));
\r
975 tiny.put("S",new Integer(1));
\r
976 tiny.put("T",new Integer(0));
\r
977 tiny.put("P",new Integer(0));
\r
978 tiny.put("-",new Integer(1));
\r
979 tiny.put("*",new Integer(1));
\r
983 proline.put("I",new Integer(0));
\r
984 proline.put("L",new Integer(0));
\r
985 proline.put("V",new Integer(0));
\r
986 proline.put("C",new Integer(0));
\r
987 proline.put("A",new Integer(0));
\r
988 proline.put("G",new Integer(0));
\r
989 proline.put("M",new Integer(0));
\r
990 proline.put("F",new Integer(0));
\r
991 proline.put("Y",new Integer(0));
\r
992 proline.put("W",new Integer(0));
\r
993 proline.put("H",new Integer(0));
\r
994 proline.put("K",new Integer(0));
\r
995 proline.put("R",new Integer(0));
\r
996 proline.put("E",new Integer(0));
\r
997 proline.put("Q",new Integer(0));
\r
998 proline.put("D",new Integer(0));
\r
999 proline.put("N",new Integer(0));
\r
1000 proline.put("S",new Integer(0));
\r
1001 proline.put("T",new Integer(0));
\r
1002 proline.put("P",new Integer(1));
\r
1003 proline.put("-",new Integer(1));
\r
1004 proline.put("*",new Integer(1));
\r
1009 propHash.put("hydrophobic",hydrophobic);
\r
1010 propHash.put("small",small);
\r
1011 propHash.put("positive",positive);
\r
1012 propHash.put("negative",negative);
\r
1013 propHash.put("charged",charged);
\r
1014 propHash.put("aromatic",aromatic);
\r
1015 propHash.put("aliphatic",aliphatic);
\r
1016 propHash.put("tiny",tiny);
\r
1017 propHash.put("proline",proline);
\r
1018 propHash.put("polar",polar);
\r
1021 public static Hashtable chainColours = new Hashtable();
\r
1023 chainColours.put("A",Color.red);
\r
1024 chainColours.put("B",Color.orange);
\r
1025 chainColours.put("C",Color.yellow);
\r
1026 chainColours.put("D",Color.green);
\r
1027 chainColours.put("E",Color.cyan);
\r
1028 chainColours.put("F",Color.blue);
\r
1029 chainColours.put("G",Color.magenta);
\r
1030 chainColours.put("H",Color.pink);
\r
1032 public static Hashtable getChainColours() {
\r
1033 return chainColours;
\r