1 |
package proteinstructure; |
2 |
import java.util.HashMap; |
3 |
import java.util.ArrayList; |
4 |
|
5 |
public class AA { |
6 |
|
7 |
public static final String CONTACT_TYPE_C_ALPHA = "Ca"; |
8 |
public static final String CONTACT_TYPE_C_BETA = "Cb"; |
9 |
|
10 |
public static String[] contactTypes() { |
11 |
// NOTE: whenever a new contact type is added it needs to be added here as well as in ct2atoms |
12 |
String[] cts ={"ALL","BB","SC","Ca","Cb","Cg","C"}; |
13 |
return cts; |
14 |
} |
15 |
|
16 |
public static String[] singleAtomContactTypes() { |
17 |
// NOTE: whenever a new contact type is added it needs to be added here as well as in ct2atoms |
18 |
String[] cts ={"Ca","Cb","Cg","C"}; |
19 |
return cts; |
20 |
} |
21 |
|
22 |
public static String[] multiAtomContactTypes() { |
23 |
// NOTE: whenever a new contact type is added it needs to be added here as well as in ct2atoms |
24 |
String[] cts ={"ALL","BB","SC"}; |
25 |
return cts; |
26 |
} |
27 |
|
28 |
/** |
29 |
* Returns true if given contact type is a valid one |
30 |
* @param ct |
31 |
* @return |
32 |
*/ |
33 |
public static boolean isValidCT(String ct){ |
34 |
if (!ct.contains("/")){ |
35 |
for (String validCt:contactTypes()){ |
36 |
if (ct.equals(validCt)) return true; |
37 |
} |
38 |
} else { |
39 |
String[] cts = ct.split("/"); |
40 |
String i_ct = cts[0]; |
41 |
String j_ct = cts[1]; |
42 |
if (isValidCT(i_ct) && isValidCT(j_ct)) return true; |
43 |
} |
44 |
return false; |
45 |
} |
46 |
|
47 |
/** |
48 |
* Returns true if given contact type is a valid single atom contact type |
49 |
* @param ct |
50 |
* @return |
51 |
*/ |
52 |
public static boolean isValidSingleAtomCT(String ct) { |
53 |
if (!ct.contains("/")){ |
54 |
for (String validCt:singleAtomContactTypes()){ |
55 |
if (ct.equals(validCt)) return true; |
56 |
} |
57 |
} else { |
58 |
String[] cts = ct.split("/"); |
59 |
String i_ct = cts[0]; |
60 |
String j_ct = cts[1]; |
61 |
if (isValidSingleAtomCT(i_ct) && isValidSingleAtomCT(j_ct)) return true; |
62 |
} |
63 |
return false; |
64 |
} |
65 |
|
66 |
/** |
67 |
* Returns true if given contact type is a valid multiple atom contact type |
68 |
* @param ct |
69 |
* @return |
70 |
*/ |
71 |
public static boolean isValidMultiAtomCT(String ct) { |
72 |
if (!ct.contains("/")){ |
73 |
for (String validCt:multiAtomContactTypes()){ |
74 |
if (ct.equals(validCt)) return true; |
75 |
} |
76 |
} else { |
77 |
String[] cts = ct.split("/"); |
78 |
String i_ct = cts[0]; |
79 |
String j_ct = cts[1]; |
80 |
if (isValidMultiAtomCT(i_ct) && isValidMultiAtomCT(j_ct)) return true; |
81 |
} |
82 |
return false; |
83 |
} |
84 |
|
85 |
private static HashMap<String,String> getThreeletter2oneletter() { |
86 |
HashMap<String,String> three2oneletter = new HashMap<String,String>(); |
87 |
three2oneletter.put("CYS", "C"); |
88 |
three2oneletter.put("ASP", "D"); |
89 |
three2oneletter.put("SER", "S"); |
90 |
three2oneletter.put("GLN", "Q"); |
91 |
three2oneletter.put("LYS", "K"); |
92 |
three2oneletter.put("ILE", "I"); |
93 |
three2oneletter.put("PRO", "P"); |
94 |
three2oneletter.put("THR", "T"); |
95 |
three2oneletter.put("PHE", "F"); |
96 |
three2oneletter.put("ALA", "A"); |
97 |
three2oneletter.put("GLY", "G"); |
98 |
three2oneletter.put("HIS", "H"); |
99 |
three2oneletter.put("GLU", "E"); |
100 |
three2oneletter.put("LEU", "L"); |
101 |
three2oneletter.put("ARG", "R"); |
102 |
three2oneletter.put("TRP", "W"); |
103 |
three2oneletter.put("VAL", "V"); |
104 |
three2oneletter.put("ASN", "N"); |
105 |
three2oneletter.put("TYR", "Y") ; |
106 |
three2oneletter.put("MET", "M"); |
107 |
return three2oneletter; |
108 |
} |
109 |
|
110 |
public static String threeletter2oneletter(String three) { |
111 |
HashMap<String,String> three2oneletter = getThreeletter2oneletter(); |
112 |
return three2oneletter.get(three); |
113 |
} |
114 |
|
115 |
private static HashMap<String,String> getOneletter2Threeletter(){ |
116 |
HashMap<String,String> one2threeletter = new HashMap<String,String>(); |
117 |
one2threeletter.put("C", "CYS"); |
118 |
one2threeletter.put("D", "ASP"); |
119 |
one2threeletter.put("S", "SER"); |
120 |
one2threeletter.put("Q", "GLN"); |
121 |
one2threeletter.put("K", "LYS"); |
122 |
one2threeletter.put("I", "ILE"); |
123 |
one2threeletter.put("P", "PRO"); |
124 |
one2threeletter.put("T", "THR"); |
125 |
one2threeletter.put("F", "PHE"); |
126 |
one2threeletter.put("A", "ALA"); |
127 |
one2threeletter.put("G", "GLY"); |
128 |
one2threeletter.put("H", "HIS"); |
129 |
one2threeletter.put("E", "GLU"); |
130 |
one2threeletter.put("L", "LEU"); |
131 |
one2threeletter.put("R", "ARG"); |
132 |
one2threeletter.put("W", "TRP"); |
133 |
one2threeletter.put("V", "VAL"); |
134 |
one2threeletter.put("N", "ASN"); |
135 |
one2threeletter.put("Y", "TYR"); |
136 |
one2threeletter.put("M", "MET"); |
137 |
return one2threeletter; |
138 |
} |
139 |
|
140 |
public static String oneletter2threeletter(String one) { |
141 |
HashMap<String,String> one2threeletter = getOneletter2Threeletter(); |
142 |
return one2threeletter.get(one); |
143 |
} |
144 |
|
145 |
public static ArrayList<String> aas() { |
146 |
HashMap<String,String> three2oneletter = getThreeletter2oneletter(); |
147 |
ArrayList<String> aas = new ArrayList<String>(); |
148 |
for (String aa:three2oneletter.keySet()) { |
149 |
aas.add(aa); |
150 |
} |
151 |
return aas; |
152 |
} |
153 |
|
154 |
public static HashMap<String,ArrayList<String>> getaas2atoms() { |
155 |
HashMap<String,ArrayList<String>> aas2atoms = new HashMap<String,ArrayList<String>>(); |
156 |
aas2atoms.put("CYS", new ArrayList<String>()); |
157 |
aas2atoms.get("CYS").add("SG"); |
158 |
aas2atoms.get("CYS").add("CB"); |
159 |
aas2atoms.get("CYS").add("O"); |
160 |
aas2atoms.get("CYS").add("CA"); |
161 |
aas2atoms.get("CYS").add("C"); |
162 |
aas2atoms.get("CYS").add("N"); |
163 |
aas2atoms.put("ASP", new ArrayList<String>()); |
164 |
aas2atoms.get("ASP").add("N"); |
165 |
aas2atoms.get("ASP").add("CB"); |
166 |
aas2atoms.get("ASP").add("OD2"); |
167 |
aas2atoms.get("ASP").add("CG"); |
168 |
aas2atoms.get("ASP").add("CA"); |
169 |
aas2atoms.get("ASP").add("C"); |
170 |
aas2atoms.get("ASP").add("O"); |
171 |
aas2atoms.get("ASP").add("OD1"); |
172 |
aas2atoms.put("SER", new ArrayList<String>()); |
173 |
aas2atoms.get("SER").add("C"); |
174 |
aas2atoms.get("SER").add("N"); |
175 |
aas2atoms.get("SER").add("CA"); |
176 |
aas2atoms.get("SER").add("O"); |
177 |
aas2atoms.get("SER").add("CB"); |
178 |
aas2atoms.get("SER").add("OG"); |
179 |
aas2atoms.put("GLN", new ArrayList<String>()); |
180 |
aas2atoms.get("GLN").add("CA"); |
181 |
aas2atoms.get("GLN").add("CG"); |
182 |
aas2atoms.get("GLN").add("N"); |
183 |
aas2atoms.get("GLN").add("NE2"); |
184 |
aas2atoms.get("GLN").add("OE1"); |
185 |
aas2atoms.get("GLN").add("CD"); |
186 |
aas2atoms.get("GLN").add("C"); |
187 |
aas2atoms.get("GLN").add("O"); |
188 |
aas2atoms.get("GLN").add("CB"); |
189 |
aas2atoms.put("LYS", new ArrayList<String>()); |
190 |
aas2atoms.get("LYS").add("C"); |
191 |
aas2atoms.get("LYS").add("CA"); |
192 |
aas2atoms.get("LYS").add("N"); |
193 |
aas2atoms.get("LYS").add("O"); |
194 |
aas2atoms.get("LYS").add("CB"); |
195 |
aas2atoms.get("LYS").add("CG"); |
196 |
aas2atoms.get("LYS").add("CD"); |
197 |
aas2atoms.get("LYS").add("CE"); |
198 |
aas2atoms.get("LYS").add("NZ"); |
199 |
aas2atoms.put("ASN", new ArrayList<String>()); |
200 |
aas2atoms.get("ASN").add("ND2"); |
201 |
aas2atoms.get("ASN").add("OD1"); |
202 |
aas2atoms.get("ASN").add("CB"); |
203 |
aas2atoms.get("ASN").add("O"); |
204 |
aas2atoms.get("ASN").add("CG"); |
205 |
aas2atoms.get("ASN").add("C"); |
206 |
aas2atoms.get("ASN").add("CA"); |
207 |
aas2atoms.get("ASN").add("N"); |
208 |
aas2atoms.put("PRO", new ArrayList<String>()); |
209 |
aas2atoms.get("PRO").add("O"); |
210 |
aas2atoms.get("PRO").add("C"); |
211 |
aas2atoms.get("PRO").add("CB"); |
212 |
aas2atoms.get("PRO").add("CG"); |
213 |
aas2atoms.get("PRO").add("CA"); |
214 |
aas2atoms.get("PRO").add("CD"); |
215 |
aas2atoms.get("PRO").add("N"); |
216 |
aas2atoms.put("THR", new ArrayList<String>()); |
217 |
aas2atoms.get("THR").add("CA"); |
218 |
aas2atoms.get("THR").add("N"); |
219 |
aas2atoms.get("THR").add("C"); |
220 |
aas2atoms.get("THR").add("CG2"); |
221 |
aas2atoms.get("THR").add("OG1"); |
222 |
aas2atoms.get("THR").add("CB"); |
223 |
aas2atoms.get("THR").add("O"); |
224 |
aas2atoms.put("PHE", new ArrayList<String>()); |
225 |
aas2atoms.get("PHE").add("O"); |
226 |
aas2atoms.get("PHE").add("CE2"); |
227 |
aas2atoms.get("PHE").add("CE1"); |
228 |
aas2atoms.get("PHE").add("CG"); |
229 |
aas2atoms.get("PHE").add("C"); |
230 |
aas2atoms.get("PHE").add("N"); |
231 |
aas2atoms.get("PHE").add("CA"); |
232 |
aas2atoms.get("PHE").add("CB"); |
233 |
aas2atoms.get("PHE").add("CD2"); |
234 |
aas2atoms.get("PHE").add("CD1"); |
235 |
aas2atoms.get("PHE").add("CZ"); |
236 |
aas2atoms.put("ALA", new ArrayList<String>()); |
237 |
aas2atoms.get("ALA").add("CA"); |
238 |
aas2atoms.get("ALA").add("C"); |
239 |
aas2atoms.get("ALA").add("N"); |
240 |
aas2atoms.get("ALA").add("CB"); |
241 |
aas2atoms.get("ALA").add("O"); |
242 |
aas2atoms.put("HIS", new ArrayList<String>()); |
243 |
aas2atoms.get("HIS").add("CE1"); |
244 |
aas2atoms.get("HIS").add("CD2"); |
245 |
aas2atoms.get("HIS").add("ND1"); |
246 |
aas2atoms.get("HIS").add("CG"); |
247 |
aas2atoms.get("HIS").add("CB"); |
248 |
aas2atoms.get("HIS").add("O"); |
249 |
aas2atoms.get("HIS").add("C"); |
250 |
aas2atoms.get("HIS").add("CA"); |
251 |
aas2atoms.get("HIS").add("N"); |
252 |
aas2atoms.get("HIS").add("NE2"); |
253 |
aas2atoms.put("GLY", new ArrayList<String>()); |
254 |
aas2atoms.get("GLY").add("N"); |
255 |
aas2atoms.get("GLY").add("CA"); |
256 |
aas2atoms.get("GLY").add("C"); |
257 |
aas2atoms.get("GLY").add("O"); |
258 |
aas2atoms.put("ILE", new ArrayList<String>()); |
259 |
aas2atoms.get("ILE").add("CG2"); |
260 |
aas2atoms.get("ILE").add("CD1"); |
261 |
aas2atoms.get("ILE").add("O"); |
262 |
aas2atoms.get("ILE").add("N"); |
263 |
aas2atoms.get("ILE").add("CA"); |
264 |
aas2atoms.get("ILE").add("C"); |
265 |
aas2atoms.get("ILE").add("CB"); |
266 |
aas2atoms.get("ILE").add("CG1"); |
267 |
aas2atoms.put("LEU", new ArrayList<String>()); |
268 |
aas2atoms.get("LEU").add("N"); |
269 |
aas2atoms.get("LEU").add("CA"); |
270 |
aas2atoms.get("LEU").add("C"); |
271 |
aas2atoms.get("LEU").add("O"); |
272 |
aas2atoms.get("LEU").add("CB"); |
273 |
aas2atoms.get("LEU").add("CG"); |
274 |
aas2atoms.get("LEU").add("CD2"); |
275 |
aas2atoms.get("LEU").add("CD1"); |
276 |
aas2atoms.put("ARG", new ArrayList<String>()); |
277 |
aas2atoms.get("ARG").add("NH2"); |
278 |
aas2atoms.get("ARG").add("CZ"); |
279 |
aas2atoms.get("ARG").add("NE"); |
280 |
aas2atoms.get("ARG").add("CD"); |
281 |
aas2atoms.get("ARG").add("CG"); |
282 |
aas2atoms.get("ARG").add("C"); |
283 |
aas2atoms.get("ARG").add("CA"); |
284 |
aas2atoms.get("ARG").add("N"); |
285 |
aas2atoms.get("ARG").add("NH1"); |
286 |
aas2atoms.get("ARG").add("CB"); |
287 |
aas2atoms.get("ARG").add("O"); |
288 |
aas2atoms.put("TRP", new ArrayList<String>()); |
289 |
aas2atoms.get("TRP").add("CE2"); |
290 |
aas2atoms.get("TRP").add("CA"); |
291 |
aas2atoms.get("TRP").add("C"); |
292 |
aas2atoms.get("TRP").add("O"); |
293 |
aas2atoms.get("TRP").add("CB"); |
294 |
aas2atoms.get("TRP").add("CG"); |
295 |
aas2atoms.get("TRP").add("CD1"); |
296 |
aas2atoms.get("TRP").add("CD2"); |
297 |
aas2atoms.get("TRP").add("CH2"); |
298 |
aas2atoms.get("TRP").add("CZ3"); |
299 |
aas2atoms.get("TRP").add("CZ2"); |
300 |
aas2atoms.get("TRP").add("CE3"); |
301 |
aas2atoms.get("TRP").add("NE1"); |
302 |
aas2atoms.get("TRP").add("N"); |
303 |
aas2atoms.put("VAL", new ArrayList<String>()); |
304 |
aas2atoms.get("VAL").add("CG1"); |
305 |
aas2atoms.get("VAL").add("CB"); |
306 |
aas2atoms.get("VAL").add("O"); |
307 |
aas2atoms.get("VAL").add("C"); |
308 |
aas2atoms.get("VAL").add("CA"); |
309 |
aas2atoms.get("VAL").add("N"); |
310 |
aas2atoms.get("VAL").add("CG2"); |
311 |
aas2atoms.put("GLU", new ArrayList<String>()); |
312 |
aas2atoms.get("GLU").add("C"); |
313 |
aas2atoms.get("GLU").add("N"); |
314 |
aas2atoms.get("GLU").add("CA"); |
315 |
aas2atoms.get("GLU").add("OE2"); |
316 |
aas2atoms.get("GLU").add("OE1"); |
317 |
aas2atoms.get("GLU").add("CD"); |
318 |
aas2atoms.get("GLU").add("CG"); |
319 |
aas2atoms.get("GLU").add("CB"); |
320 |
aas2atoms.get("GLU").add("O"); |
321 |
aas2atoms.put("TYR", new ArrayList<String>()); |
322 |
aas2atoms.get("TYR").add("CD2"); |
323 |
aas2atoms.get("TYR").add("CD1"); |
324 |
aas2atoms.get("TYR").add("OH"); |
325 |
aas2atoms.get("TYR").add("CZ"); |
326 |
aas2atoms.get("TYR").add("CE2"); |
327 |
aas2atoms.get("TYR").add("N"); |
328 |
aas2atoms.get("TYR").add("CA"); |
329 |
aas2atoms.get("TYR").add("C"); |
330 |
aas2atoms.get("TYR").add("O"); |
331 |
aas2atoms.get("TYR").add("CB"); |
332 |
aas2atoms.get("TYR").add("CG"); |
333 |
aas2atoms.get("TYR").add("CE1"); |
334 |
aas2atoms.put("MET", new ArrayList<String>()); |
335 |
aas2atoms.get("MET").add("CA"); |
336 |
aas2atoms.get("MET").add("O"); |
337 |
aas2atoms.get("MET").add("C"); |
338 |
aas2atoms.get("MET").add("CB"); |
339 |
aas2atoms.get("MET").add("CE"); |
340 |
aas2atoms.get("MET").add("N"); |
341 |
aas2atoms.get("MET").add("CG"); |
342 |
aas2atoms.get("MET").add("SD"); |
343 |
return aas2atoms; |
344 |
|
345 |
} |
346 |
|
347 |
public static HashMap<String,String[]> ct2atoms(String ct) { |
348 |
ArrayList<String> aas = aas(); |
349 |
HashMap<String,String[]> ct2atoms = new HashMap<String,String[]>(); |
350 |
if (ct.equals("Ca")){ |
351 |
String[] atoms = {"CA"}; |
352 |
for (String aa:aas) { |
353 |
ct2atoms.put(aa, atoms); |
354 |
} |
355 |
} |
356 |
else if (ct.equals("Cb")){ |
357 |
String[] atoms = {"CB"}; |
358 |
for (String aa:aas) { |
359 |
ct2atoms.put(aa, atoms); |
360 |
} |
361 |
atoms = new String[1]; |
362 |
atoms[0]="CA"; |
363 |
ct2atoms.put("GLY", atoms); |
364 |
} |
365 |
else if (ct.equals("C")){ |
366 |
String[] atoms = {"C"}; |
367 |
for (String aa:aas) { |
368 |
ct2atoms.put(aa, atoms); |
369 |
} |
370 |
} |
371 |
else if (ct.equals("Cg")){ |
372 |
String[] atoms = {"SG"}; |
373 |
ct2atoms.put("CYS", atoms); |
374 |
atoms = new String[1]; |
375 |
atoms[0]= "CG"; |
376 |
ct2atoms.put("ASP", atoms); |
377 |
atoms = new String[1]; |
378 |
atoms[0]="OG"; |
379 |
ct2atoms.put("SER", atoms); |
380 |
atoms = new String[1]; |
381 |
atoms[0]="CG"; |
382 |
ct2atoms.put("GLN", atoms); |
383 |
atoms = new String[1]; |
384 |
atoms[0]="CD"; |
385 |
ct2atoms.put("LYS", atoms); |
386 |
atoms = new String[1]; |
387 |
atoms[0]="CG1"; |
388 |
ct2atoms.put("ILE", atoms); |
389 |
atoms = new String[1]; |
390 |
atoms[0]="CG"; |
391 |
ct2atoms.put("PRO", atoms); |
392 |
atoms = new String[1]; |
393 |
atoms[0]="OG1"; |
394 |
ct2atoms.put("THR", atoms); |
395 |
atoms = new String[1]; |
396 |
atoms[0]="CG"; |
397 |
ct2atoms.put("PHE", atoms); |
398 |
ct2atoms.put("ALA", new String[0]); |
399 |
ct2atoms.put("GLY", new String[0]); |
400 |
atoms = new String[1]; |
401 |
atoms[0]="CG"; |
402 |
ct2atoms.put("HIS", atoms); |
403 |
atoms = new String[1]; |
404 |
atoms[0]="CG"; |
405 |
ct2atoms.put("GLU", atoms); |
406 |
atoms = new String[1]; |
407 |
atoms[0]="CG"; |
408 |
ct2atoms.put("LEU", atoms); |
409 |
atoms = new String[1]; |
410 |
atoms[0]="NE"; |
411 |
ct2atoms.put("ARG", atoms); |
412 |
atoms = new String[1]; |
413 |
atoms[0]="CD2"; |
414 |
ct2atoms.put("TRP", atoms); |
415 |
atoms = new String[1]; |
416 |
atoms[0]="CG1"; |
417 |
ct2atoms.put("VAL", atoms); |
418 |
atoms = new String[1]; |
419 |
atoms[0]="CG"; |
420 |
ct2atoms.put("ASN", atoms); |
421 |
atoms = new String[1]; |
422 |
atoms[0]="CG"; |
423 |
ct2atoms.put("TYR", atoms); |
424 |
atoms = new String[1]; |
425 |
atoms[0]="CG"; |
426 |
ct2atoms.put("MET", atoms); |
427 |
} |
428 |
else if (ct.equals("BB")){ |
429 |
String[] atoms = {"CA", "N", "C", "O"}; |
430 |
for (String aa:aas) { |
431 |
ct2atoms.put(aa, atoms); |
432 |
} |
433 |
} |
434 |
else if (ct.equals("SC")){ |
435 |
HashMap<String,ArrayList<String>> aas2atoms = getaas2atoms(); |
436 |
for (String aa:aas) { |
437 |
ArrayList<String> SCatoms =aas2atoms.get(aa); |
438 |
SCatoms.remove("CA"); |
439 |
SCatoms.remove("N"); |
440 |
SCatoms.remove("C"); |
441 |
SCatoms.remove("O"); |
442 |
String[] SCatomsar= new String[SCatoms.size()]; |
443 |
SCatomsar=SCatoms.toArray(SCatomsar); |
444 |
ct2atoms.put(aa, SCatomsar); |
445 |
} |
446 |
} |
447 |
else if (ct.equals("ALL")){ |
448 |
HashMap<String,ArrayList<String>> aas2atoms = getaas2atoms(); |
449 |
for (String aa:aas) { |
450 |
ArrayList<String> ALLatoms = aas2atoms.get(aa); |
451 |
String[] ALLatomsar= new String[ALLatoms.size()]; |
452 |
ALLatomsar=ALLatoms.toArray(ALLatomsar); |
453 |
ct2atoms.put(aa,ALLatomsar); |
454 |
} |
455 |
} |
456 |
return ct2atoms; |
457 |
} |
458 |
} |