header updated
[jalview.git] / src / MCview / PDBfile.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2006 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 jalview.datamodel.*;\r
22 \r
23 import java.io.*;\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.AlignFile {\r
30     public Vector chains;\r
31     public String id;\r
32 \r
33     public PDBfile(String inFile, String inType) throws IOException\r
34     {\r
35         super(inFile, inType);\r
36     }\r
37 \r
38     public String print()\r
39     {\r
40       return null;\r
41     }\r
42 \r
43     public void parse() throws IOException\r
44     {\r
45         chains = new Vector();\r
46 \r
47         PDBChain tmpchain;\r
48         String line;\r
49         boolean modelFlag = false;\r
50         boolean terFlag = false;\r
51 \r
52 \r
53         int index = 0;\r
54         while((line = nextLine())!=null)\r
55         {\r
56            if (line.indexOf("HEADER") == 0)\r
57            {\r
58              id = line.substring(62, 67).trim();\r
59              continue;\r
60            }\r
61 \r
62            if(line.indexOf("MODEL")==0)\r
63              modelFlag = true;\r
64 \r
65            if(line.indexOf("TER")==0)\r
66              terFlag = true;\r
67 \r
68            if(modelFlag && line.indexOf("ENDMDL")==0)\r
69              break;\r
70 \r
71            if (    line.indexOf("ATOM")==0\r
72                || (line.indexOf("HETATM")==0 && !terFlag)\r
73              )\r
74             {\r
75               terFlag = false;\r
76 \r
77 \r
78               //Jalview is only interested in CA bonds????\r
79               if (!line.substring(12, 15).trim().equals("CA"))\r
80               {\r
81                 continue;\r
82               }\r
83 \r
84               Atom tmpatom = new Atom(line);\r
85               tmpchain = findChain(tmpatom.chain);\r
86               if (tmpchain != null)\r
87               {\r
88                 tmpchain.atoms.addElement(tmpatom);\r
89               }\r
90               else\r
91               {\r
92                 tmpchain = new PDBChain(tmpatom.chain);\r
93                 chains.addElement(tmpchain);\r
94                 tmpchain.atoms.addElement(tmpatom);\r
95               }\r
96           }\r
97           index ++;\r
98         }\r
99 \r
100        makeResidueList();\r
101        makeCaBondList();\r
102 \r
103        if(id==null)\r
104        {\r
105          id = inFile.getName();\r
106        }\r
107        for (int i = 0; i < chains.size(); i++)\r
108        {\r
109          SequenceI seq = ( (PDBChain) chains.elementAt(i)).\r
110              sequence;\r
111          seq.setName(id + "|" + seq.getName());\r
112          Sequence dataset = new Sequence(seq.\r
113              getName(),\r
114              seq.getSequence().toString(), seq.getStart(), seq.getEnd());\r
115 \r
116          PDBEntry entry = new PDBEntry();\r
117          entry.setId(id);\r
118          if(inFile!=null)\r
119            entry.setFile(inFile.getAbsolutePath());\r
120 \r
121          seq.setDatasetSequence(dataset);\r
122          dataset.addPDBId(entry);\r
123 \r
124          getSeqs().addElement(seq);\r
125        }\r
126     }\r
127 \r
128     public void makeResidueList() {\r
129         for (int i = 0; i < chains.size(); i++) {\r
130             ((PDBChain) chains.elementAt(i)).makeResidueList();\r
131         }\r
132     }\r
133 \r
134     public void makeCaBondList() {\r
135         for (int i = 0; i < chains.size(); i++) {\r
136             ((PDBChain) chains.elementAt(i)).makeCaBondList();\r
137         }\r
138     }\r
139 \r
140     public PDBChain findChain(String id) {\r
141         for (int i = 0; i < chains.size(); i++) {\r
142             if (((PDBChain) chains.elementAt(i)).id.equals(id)) {\r
143                 return (PDBChain) chains.elementAt(i);\r
144             }\r
145         }\r
146 \r
147         return null;\r
148     }\r
149 \r
150     public void setChargeColours() {\r
151         for (int i = 0; i < chains.size(); i++) {\r
152             ((PDBChain) chains.elementAt(i)).setChargeColours();\r
153         }\r
154     }\r
155 \r
156     public void setColours(jalview.schemes.ColourSchemeI cs) {\r
157         for (int i = 0; i < chains.size(); i++) {\r
158             ((PDBChain) chains.elementAt(i)).setChainColours(cs);\r
159         }\r
160     }\r
161 \r
162     public void setChainColours()\r
163     {\r
164        for (int i = 0; i < chains.size(); i++)\r
165        {\r
166             ((PDBChain) chains.elementAt(i)).setChainColours(\r
167                      Color.getHSBColor(1.0f / (float)i, .4f, 1.0f)\r
168                 );\r
169         }\r
170     }\r
171 }\r