Use PDB column format
[jalview.git] / src / MCview / PDBfile.java
index 7e46b2e..2b22b24 100755 (executable)
+/*\r
+* Jalview - A Sequence Alignment Editor and Viewer\r
+* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+*\r
+* This program is free software; you can redistribute it and/or\r
+* modify it under the terms of the GNU General Public License\r
+* as published by the Free Software Foundation; either version 2\r
+* of the License, or (at your option) any later version.\r
+*\r
+* This program is distributed in the hope that it will be useful,\r
+* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+* GNU General Public License for more details.\r
+*\r
+* You should have received a copy of the GNU General Public License\r
+* along with this program; if not, write to the Free Software\r
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
+*/\r
 package MCview;\r
 \r
-import jalview.gui.*;\r
 import java.io.*;\r
+\r
 import java.net.*;\r
+\r
 import java.util.*;\r
+import java.awt.Color;\r
 \r
 \r
 public class PDBfile extends jalview.io.FileParse {\r
+    public Vector chains = new Vector();\r
+    Vector lineArray = new Vector();\r
+    String id;\r
 \r
-  public Vector chains = new Vector();\r
+    public PDBfile(String[] lines) {\r
+        for (int i = 0; i < lines.length; i++)\r
+            lineArray.addElement(lines[i]);\r
 \r
-  Vector lineArray = new Vector();\r
-\r
-  public PDBfile(String [] lines)\r
-  {\r
-    for(int i=0; i<lines.length; i++)\r
-      lineArray.add(lines[i]);\r
+        noLines = lineArray.size();\r
+        parse();\r
+    }\r
 \r
-    noLines = lineArray.size();\r
-    parse();\r
-  }\r
+    public PDBfile(String inFile, String inType) throws IOException {\r
+        super(inFile, inType);\r
 \r
-  public PDBfile(String inFile, String inType) throws IOException {\r
+        String line;\r
+        this.lineArray = new Vector();\r
 \r
-    super(inFile,inType);\r
+        BufferedReader dataIn;\r
 \r
-    String line;\r
-    this.lineArray = new Vector();\r
-    BufferedReader dataIn;\r
+        if (inType.equals("File")) {\r
+            dataIn = new BufferedReader(new FileReader(inFile));\r
+        }\r
+        else if(inType.equals("Paste"))\r
+        {\r
+            dataIn = new BufferedReader(new StringReader(inFile));\r
+        }\r
+        else {\r
+            URL url = new URL(inFile);\r
+            this.fileSize = 0;\r
+            dataIn = new BufferedReader(new InputStreamReader(url.openStream()));\r
+        }\r
 \r
-    if (inType.equals("File"))\r
-      dataIn =  new BufferedReader(new FileReader( inFile ));\r
+        while ((line = dataIn.readLine()) != null) {\r
+            lineArray.addElement(line);\r
+        }\r
 \r
-    else\r
-    {\r
-      URL url = new URL(inFile);\r
-      this.fileSize = 0;\r
-      dataIn = new BufferedReader(new InputStreamReader(url.openStream()));\r
-    }\r
+        noLines = lineArray.size();\r
 \r
-    while ((line = dataIn.readLine()) != null) {\r
-      lineArray.addElement(line);\r
+        parse();\r
     }\r
-    noLines = lineArray.size();\r
 \r
-    parse();\r
-\r
-}\r
+    public void parse()\r
+    {\r
+        String line;\r
+        for (int i = 0; i < lineArray.size(); i++)\r
+        {\r
+\r
+           line = lineArray.elementAt(i).toString();\r
+\r
+           if (line.indexOf("HEADER") == 0)\r
+           {\r
+             id = line.substring(62, 67).trim();\r
+             continue;\r
+           }\r
+\r
+                if (line.indexOf("ATOM") == 0) {\r
+                    try {\r
+                        Atom tmpatom = new Atom(line);\r
+\r
+                        if (findChain(tmpatom.chain) != null)\r
+                        {\r
+                            findChain(tmpatom.chain).atoms.addElement(tmpatom);\r
+                        } else\r
+                        {\r
+                            PDBChain tmpchain = new PDBChain(tmpatom.chain);\r
+                            chains.addElement(tmpchain);\r
+                            tmpchain.atoms.addElement(tmpatom);\r
+                        }\r
+                    } catch (NumberFormatException e) {\r
+                        System.err.println("Caught" + e);\r
+                        System.err.println("Record not added to PDB model:" +\r
+                            lineArray.elementAt(i).toString());\r
+                    }\r
+                }\r
+        }\r
 \r
+        makeResidueList();\r
+        makeCaBondList();\r
+    }\r
 \r
-  public void parse() {\r
-\r
-    for (int i = 0; i < lineArray.size(); i++) {\r
-      StringTokenizer str = new StringTokenizer(lineArray.elementAt(i).toString());\r
-      if (str.hasMoreTokens()) {\r
-        String inStr = str.nextToken();\r
-\r
-        if (inStr.indexOf("ATOM") != -1) {\r
-          try {\r
-            myAtom tmpatom = new myAtom(str);\r
-            if (findChain(tmpatom.chain) != null) {\r
-           //   System.out.println("Adding to chain " + tmpatom.chain);\r
-              findChain(tmpatom.chain).atoms.addElement(tmpatom);\r
-            } else {\r
-            //  System.out.println("Making chain " + tmpatom.chain);\r
-              PDBChain tmpchain = new PDBChain(tmpatom.chain);\r
-              chains.addElement(tmpchain);\r
-              tmpchain.atoms.addElement(tmpatom);\r
-            }\r
-          } catch(NumberFormatException e) {\r
-            System.out.println("Caught" +  e);\r
-            System.out.println("Atom not added");\r
-          }\r
+    public void makeResidueList() {\r
+        for (int i = 0; i < chains.size(); i++) {\r
+            ((PDBChain) chains.elementAt(i)).makeResidueList();\r
         }\r
-      }\r
     }\r
-    makeResidueList();\r
-    makeCaBondList();\r
-    //    for (int i=0; i < chains.size() ; i++) {\r
-    //  String pog = ((PDBChain)chains.elementAt(i)).print();\r
-    //  System.out.println(pog);\r
-    // }\r
-  }\r
-\r
-  public void makeResidueList() {\r
-    for (int i=0; i < chains.size() ; i++) {\r
-      ((PDBChain)chains.elementAt(i)).makeResidueList();\r
-    }\r
-  }\r
-  public void makeCaBondList() {\r
-    for (int i=0; i < chains.size() ; i++) {\r
-      ((PDBChain)chains.elementAt(i)).makeCaBondList();\r
-    }\r
-  }\r
-\r
-  public PDBChain findChain(String id) {\r
-    for (int i=0; i < chains.size(); i++) {\r
-      // System.out.println("ID = " + id + " " +((PDBChain)chains.elementAt(i)).id);\r
-      if (((PDBChain)chains.elementAt(i)).id.equals(id)) {\r
-        return (PDBChain)chains.elementAt(i);\r
-      }\r
+\r
+    public void makeCaBondList() {\r
+        for (int i = 0; i < chains.size(); i++) {\r
+            ((PDBChain) chains.elementAt(i)).makeCaBondList();\r
+        }\r
     }\r
-    return null;\r
-  }\r
 \r
+    public PDBChain findChain(String id) {\r
+        for (int i = 0; i < chains.size(); i++) {\r
+            if (((PDBChain) chains.elementAt(i)).id.equals(id)) {\r
+                return (PDBChain) chains.elementAt(i);\r
+            }\r
+        }\r
 \r
-  public void setChargeColours() {\r
-    for (int i=0; i < chains.size(); i++) {\r
-      ((PDBChain)chains.elementAt(i)).setChargeColours();\r
+        return null;\r
     }\r
-  }\r
 \r
-  public void setHydrophobicityColours() {\r
-    for (int i=0; i < chains.size(); i++) {\r
-      ((PDBChain)chains.elementAt(i)).setHydrophobicityColours();\r
+    public void setChargeColours() {\r
+        for (int i = 0; i < chains.size(); i++) {\r
+            ((PDBChain) chains.elementAt(i)).setChargeColours();\r
+        }\r
     }\r
-  }\r
-\r
-  public void colourBySequence(DrawableSequence seq) {\r
-//SMJS TODO\r
-//    int max = seq.maxchain;\r
-//    if (seq.maxchain != -1) {\r
-//      ((PDBChain)chains.elementAt(max)).colourBySequence(seq);\r
-//    }\r
-  }\r
-\r
-  public void setChainColours() {\r
-    for (int i=0; i < chains.size(); i++) {\r
-      ((PDBChain)chains.elementAt(i)).setChainColours();\r
+\r
+    public void setHydrophobicityColours() {\r
+        for (int i = 0; i < chains.size(); i++) {\r
+            ((PDBChain) chains.elementAt(i)).setHydrophobicityColours();\r
+        }\r
     }\r
-  }\r
-  public static void main(String[] args) {\r
-    try {\r
-      PDBfile pdb = new PDBfile("enkp1.pdb","File");\r
-    } catch(IOException e) {\r
-      System.out.println(e);\r
-      System.exit(0);\r
+\r
+    public void setChainColours()\r
+    {\r
+       for (int i = 0; i < chains.size(); i++)\r
+       {\r
+            ((PDBChain) chains.elementAt(i)).setChainColours(\r
+                     Color.getHSBColor(1.0f / (float)i, .4f, 1.0f)\r
+                );\r
+        }\r
     }\r
-  }\r
 }\r
-\r
-\r
-\r