b3e4e2815f284b32d156412c6cd05b1079a1e617
[jalview.git] / src / MCview / PDBfile.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 package MCview;\r
20 \r
21 import java.io.*;\r
22 \r
23 import java.net.*;\r
24 \r
25 import java.util.*;\r
26 import java.awt.Color;\r
27 \r
28 \r
29 public class PDBfile extends jalview.io.FileParse {\r
30     public Vector chains = new Vector();\r
31     Vector lineArray = new Vector();\r
32     String id;\r
33 \r
34     public PDBfile(String[] lines) {\r
35         for (int i = 0; i < lines.length; i++)\r
36             lineArray.addElement(lines[i]);\r
37 \r
38         noLines = lineArray.size();\r
39         parse();\r
40     }\r
41 \r
42     public PDBfile(String inFile, String inType) throws IOException {\r
43         super(inFile, inType);\r
44 \r
45         String line;\r
46         this.lineArray = new Vector();\r
47 \r
48         BufferedReader dataIn;\r
49 \r
50         if (inType.equals("File")) {\r
51             dataIn = new BufferedReader(new FileReader(inFile));\r
52         }\r
53         else if(inType.equals("Paste"))\r
54         {\r
55             dataIn = new BufferedReader(new StringReader(inFile));\r
56         }\r
57         else {\r
58             URL url = new URL(inFile);\r
59             this.fileSize = 0;\r
60             dataIn = new BufferedReader(new InputStreamReader(url.openStream()));\r
61         }\r
62 \r
63         while ((line = dataIn.readLine()) != null) {\r
64             lineArray.addElement(line);\r
65         }\r
66 \r
67         noLines = lineArray.size();\r
68 \r
69         parse();\r
70     }\r
71 \r
72     public void parse()\r
73     {\r
74         PDBChain tmpchain;\r
75         String line;\r
76         boolean modelFlag = false;\r
77         boolean terFlag = false;\r
78 \r
79         for (int i = 0; i < lineArray.size(); i++)\r
80         {\r
81 \r
82            line = lineArray.elementAt(i).toString();\r
83 \r
84            if (line.indexOf("HEADER") == 0)\r
85            {\r
86              id = line.substring(62, 67).trim();\r
87              continue;\r
88            }\r
89 \r
90            if(line.indexOf("MODEL")==0)\r
91              modelFlag = true;\r
92 \r
93            if(line.indexOf("TER")==0)\r
94              terFlag = true;\r
95 \r
96            if(modelFlag && line.indexOf("ENDMDL")==0)\r
97              break;\r
98 \r
99            if (line.indexOf("ATOM")==0\r
100                || (line.indexOf("HETATM")==0 && !terFlag) )\r
101             {\r
102               terFlag = false;\r
103 \r
104                     try {\r
105                         Atom tmpatom = new Atom(line);\r
106 \r
107                         //Jalview is only interested in CA bonds????\r
108                         if(!tmpatom.name.equals("CA"))\r
109                           continue;\r
110 \r
111                         tmpchain = findChain(tmpatom.chain);\r
112                         if ( tmpchain != null)\r
113                         {\r
114                           tmpchain.atoms.addElement(tmpatom);\r
115                         }\r
116                         else\r
117                         {\r
118                             tmpchain = new PDBChain(tmpatom.chain);\r
119                             chains.addElement(tmpchain);\r
120                             tmpchain.atoms.addElement(tmpatom);\r
121                         }\r
122                     } catch (NumberFormatException e) {\r
123                         System.err.println("Caught" + e);\r
124                         System.err.println("Record not added to PDB model:" +\r
125                             lineArray.elementAt(i).toString());\r
126                     }\r
127                 }\r
128         }\r
129 \r
130         makeResidueList();\r
131         makeCaBondList();\r
132     }\r
133 \r
134     public void makeResidueList() {\r
135         for (int i = 0; i < chains.size(); i++) {\r
136             ((PDBChain) chains.elementAt(i)).makeResidueList();\r
137         }\r
138     }\r
139 \r
140     public void makeCaBondList() {\r
141         for (int i = 0; i < chains.size(); i++) {\r
142             ((PDBChain) chains.elementAt(i)).makeCaBondList();\r
143         }\r
144     }\r
145 \r
146     public PDBChain findChain(String id) {\r
147         for (int i = 0; i < chains.size(); i++) {\r
148             if (((PDBChain) chains.elementAt(i)).id.equals(id)) {\r
149                 return (PDBChain) chains.elementAt(i);\r
150             }\r
151         }\r
152 \r
153         return null;\r
154     }\r
155 \r
156     public void setChargeColours() {\r
157         for (int i = 0; i < chains.size(); i++) {\r
158             ((PDBChain) chains.elementAt(i)).setChargeColours();\r
159         }\r
160     }\r
161 \r
162     public void setHydrophobicityColours() {\r
163         for (int i = 0; i < chains.size(); i++) {\r
164             ((PDBChain) chains.elementAt(i)).setHydrophobicityColours();\r
165         }\r
166     }\r
167 \r
168     public void setChainColours()\r
169     {\r
170        for (int i = 0; i < chains.size(); i++)\r
171        {\r
172             ((PDBChain) chains.elementAt(i)).setChainColours(\r
173                      Color.getHSBColor(1.0f / (float)i, .4f, 1.0f)\r
174                 );\r
175         }\r
176     }\r
177 }\r