tidied up system.out messages and moved many to stderr.
[jalview.git] / src / MCview / PDBChain.java
1 /* Copyright (C) 1998  Michele Clamp\r
2  *\r
3  * This program is free software; you can redistribute it and/or\r
4  * modify it under the terms of the GNU General Public License\r
5  * as published by the Free Software Foundation; either version 2\r
6  * of the License, or (at your option) any later version.\r
7  *\r
8  * This program is distributed in the hope that it will be useful,\r
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
11  * GNU General Public License for more details.\r
12  *\r
13  * You should have received a copy of the GNU General Public License\r
14  * along with this program; if not, write to the Free Software\r
15  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\r
16  */\r
17 package MCview;\r
18 \r
19 import jalview.datamodel.*;\r
20 import jalview.schemes.ResidueProperties;\r
21 \r
22 import java.awt.*;\r
23 import java.util.*;\r
24 \r
25 \r
26 public class PDBChain {\r
27 \r
28   public String id;\r
29   public Vector bonds = new Vector();\r
30   public Vector atoms = new Vector();\r
31   public Vector residues = new Vector();\r
32   public int offset;\r
33 \r
34   public Sequence sequence;\r
35   public boolean isVisible = false;\r
36 \r
37   public int pdbstart=0, pdbend=0, seqstart=0, seqend=0;\r
38 \r
39   //public DrawableSequence ds;\r
40 \r
41   public PDBChain(String id) {\r
42     this.id = id;\r
43   }\r
44 \r
45 \r
46   public String print() {\r
47     String tmp = "";\r
48     for (int i=0; i < bonds.size() ;i++) {\r
49       tmp = tmp + ((Bond)bonds.elementAt(i)).at1.resName + " " + ((Bond)bonds.elementAt(i)).at1.resNumber +" " + offset+ "\n";\r
50     }\r
51     return tmp;\r
52   }\r
53   public void makeCaBondList() {\r
54     for (int i = 0; i < (residues.size() - 1) ; i++) {\r
55       Residue tmpres = (Residue)residues.elementAt(i);\r
56       Residue tmpres2 = (Residue)residues.elementAt(i+1);\r
57       myAtom at1 = tmpres.findAtom("CA");\r
58       myAtom at2 = tmpres2.findAtom("CA");\r
59       if ((at1 != null) && (at2 != null)) {\r
60         if (at1.chain.equals(at2.chain)) {\r
61           makeBond(at1,at2);\r
62         }\r
63       }\r
64     }\r
65   }\r
66 \r
67   public void makeBond(myAtom at1, myAtom at2) {\r
68     float[] start = new float[3];\r
69     float[] end = new float[3];\r
70 \r
71     start[0] = at1.x;\r
72     start[1] = at1.y;\r
73     start[2] = at1.z;\r
74 \r
75     end[0] = at2.x;\r
76     end[1] = at2.y;\r
77     end[2] = at2.z;\r
78 \r
79     bonds.addElement(new Bond(start, end, at1,at2));\r
80   }\r
81 \r
82   public void makeResidueList() {\r
83     int count = 0;\r
84     String seq = "";\r
85     for (int i = 0; i < atoms.size(); i++) {\r
86 \r
87       myAtom tmp = (myAtom)atoms.elementAt(i);\r
88       String resName = tmp.resName;\r
89       int resNumber = tmp.resNumber;\r
90       int res = resNumber;\r
91 \r
92       if (i ==0) {\r
93         offset = resNumber;\r
94       }\r
95       Vector resAtoms = new Vector();\r
96 \r
97       resAtoms.addElement((myAtom)atoms.elementAt(i));\r
98       i++;\r
99       resNumber = ((myAtom)atoms.elementAt(i)).resNumber;\r
100 \r
101       //Add atoms to a vector while the residue number\r
102       //remains the same\r
103       while ((resNumber == res) && (i < atoms.size())) {\r
104 \r
105         resAtoms.addElement((myAtom)atoms.elementAt(i));\r
106         i++;\r
107         if (i < atoms.size()) {\r
108           resNumber = ((myAtom)atoms.elementAt(i)).resNumber;\r
109         } else {\r
110           resNumber++;\r
111         }\r
112       }\r
113 \r
114       //We need this to keep in step with the outer for i = loop\r
115       i--;\r
116 \r
117       //Make a new Residue object with the new atoms vector\r
118       residues.addElement(new Residue(resAtoms, resNumber - 1,count));\r
119       count++;\r
120       Residue tmpres = (Residue)residues.lastElement();\r
121       myAtom tmpat = (myAtom)tmpres.atoms.elementAt(0);\r
122 \r
123       // Keep totting up the sequence\r
124       if (ResidueProperties.getAA3Hash().get(tmpat.resName) == null) {\r
125         System.err.println("PDBReader:Null aa3Hash for " + tmpat.resName);\r
126       } else {\r
127         String tmpres2 =\r
128           ResidueProperties.aa[((Integer)ResidueProperties.getAA3Hash().get(tmpat.resName)).intValue()];\r
129         seq = seq + tmpres2;\r
130       }\r
131       //      System.out.println(tmpat.resName + " " + tmpres2);\r
132     }\r
133     sequence = new Sequence("PDB_seq",seq,1,seq.length());\r
134     System.out.println("PDB Sequence is :\nSequence = " + seq);\r
135     System.out.println("No of residues = " +residues.size());\r
136   }\r
137 \r
138   public void setChargeColours() {\r
139     for (int i = 0; i < bonds.size(); i++) {\r
140       try {\r
141         Bond b = (Bond)bonds.elementAt(i);\r
142 \r
143         if (b.at1.resName.toUpperCase().equals("ASP") || b.at1.resName.toUpperCase().equals("GLU")) {\r
144           b.startCol = Color.red;\r
145         } else if (b.at1.resName.toUpperCase().equals("LYS") || b.at1.resName.toUpperCase().equals("ARG")) {\r
146           b.startCol = Color.blue;\r
147         } else if (b.at1.resName.toUpperCase().equals("CYS")) {\r
148           b.startCol = Color.yellow;\r
149         } else {\r
150           int atno = ((Integer)ResidueProperties.getAA3Hash().get(b.at1.resName.toUpperCase())).intValue();\r
151           b.startCol = Color.lightGray;\r
152         }\r
153         if (b.at2.resName.toUpperCase().equals("ASP") || b.at2.resName.toUpperCase().equals("GLU")) {\r
154           b.endCol = Color.red;\r
155         } else if (b.at2.resName.toUpperCase().equals("LYS") || b.at2.resName.toUpperCase().equals("ARG")) {\r
156           b.endCol = Color.blue;\r
157         } else if (b.at2.resName.toUpperCase().equals("CYS")) {\r
158           b.endCol = Color.yellow;\r
159         } else {\r
160           int atno = ((Integer)ResidueProperties.getAA3Hash().get(b.at2.resName.toUpperCase())).intValue();\r
161           b.endCol = Color.lightGray;\r
162         }\r
163       } catch (Exception e) {\r
164         Bond b = (Bond)bonds.elementAt(i);\r
165         b.startCol = Color.gray;\r
166         b.endCol = Color.gray;\r
167       }\r
168     }\r
169   }\r
170 \r
171   public void setHydrophobicityColours() {\r
172     float hydmin = (float)ResidueProperties.getHydmin();\r
173     float hydmax = (float)ResidueProperties.getHydmax();\r
174     double[] hyd  = ResidueProperties.getHyd();\r
175 \r
176     Hashtable AA3Hash = ResidueProperties.getAA3Hash();\r
177 \r
178     for (int i = 0; i < bonds.size(); i++) {\r
179       try {\r
180         Bond b = (Bond)bonds.elementAt(i);\r
181 \r
182         int   atno = ((Integer)AA3Hash.get(b.at1.resName.toUpperCase())).intValue();\r
183         float red  = ((float)hyd[atno] - hydmin)/(hydmax - hydmin);\r
184 \r
185         if (red > (float)1.0) {\r
186           red = (float)1.0;\r
187         }\r
188         if (red < (float)0.0) {\r
189           red = (float)0.0;\r
190         }\r
191 \r
192         b.startCol = new Color(red,(float)0.0,(float)1.0-red);\r
193         atno = ((Integer)AA3Hash.get(b.at2.resName.toUpperCase())).intValue();\r
194 \r
195         red = ((float)hyd[atno] - hydmin)/(hydmax - hydmin);\r
196 \r
197         if (red > (float)1.0) {\r
198           red = (float)1.0;\r
199         }\r
200         if (red < (float)0.0) {\r
201           red = (float)0.0;\r
202         }\r
203 \r
204         b.endCol = new Color(red,(float)0.2,(float)1.0-red);\r
205       } catch (Exception e) {\r
206         Bond b = (Bond)bonds.elementAt(i);\r
207         b.startCol = Color.gray;\r
208         b.endCol = Color.gray;\r
209       }\r
210     }\r
211   }\r
212 \r
213 \r
214   public void colourBySequence(jalview.gui.AlignViewport av, Sequence seq) {\r
215 jalview.gui.SequenceRenderer sr = new jalview.gui.SequenceRenderer(av);\r
216 \r
217 \r
218     for (int i = 0; i < bonds.size(); i++) {\r
219       Bond tmp = (Bond)bonds.elementAt(i);\r
220       try {\r
221 \r
222         if (tmp.at1.resNumber >= (offset + pdbstart - 1) && tmp.at1.resNumber <= (offset + pdbend - 1)) {\r
223 \r
224           int pos   = seqstart + (tmp.at1.resNumber - pdbstart - offset) ;\r
225           int index = seq.findIndex(pos);\r
226 \r
227 \r
228           tmp.startCol = sr.getResidueBoxColour(av.getGlobalColourScheme(), seq, index);\r
229 \r
230         } else {\r
231           tmp.startCol = Color.gray;\r
232         }\r
233 \r
234         if (tmp.at2.resNumber >= (offset + pdbstart -1) && tmp.at2.resNumber <= (pdbend+offset-1)) {\r
235 \r
236           int pos    = seqstart + (tmp.at2.resNumber - pdbstart-offset);\r
237           int index  = seq.findIndex(pos);\r
238 \r
239           tmp.endCol = sr.getResidueBoxColour(av.getGlobalColourScheme(), seq, index);\r
240 \r
241         } else {\r
242           tmp.endCol = Color.gray;\r
243         }\r
244       } catch (Exception e) {\r
245         tmp.startCol = Color.lightGray;\r
246         tmp.endCol = Color.lightGray;\r
247       }\r
248     }\r
249   }\r
250 \r
251   public void setChainColours() {\r
252     for (int i = 0; i < bonds.size(); i++) {\r
253       Bond tmp = (Bond)bonds.elementAt(i);\r
254       try {\r
255         tmp.startCol = (Color) ResidueProperties.getChainColours().get(id);\r
256         tmp.endCol   = (Color) ResidueProperties.getChainColours().get(id);\r
257       } catch (Exception e) {\r
258         tmp.startCol = Color.lightGray;\r
259         tmp.endCol   = Color.lightGray;\r
260       }\r
261     }\r
262   }\r
263 }\r
264 \r
265 \r