updated to jalview 2.1 and begun ArchiveClient/VamsasClient/VamsasStore updates.
[jalview.git] / src / MCview / PDBfile.java
index f97216b..5824575 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.datamodel.*;\r
-\r
-import java.io.*;\r
-\r
-import java.net.*;\r
-\r
-import java.util.*;\r
-\r
-\r
-public class PDBfile extends jalview.io.FileParse {\r
-    public Vector chains = new Vector();\r
-    Vector lineArray = new Vector();\r
-\r
-    public PDBfile(String[] lines) {\r
-        for (int i = 0; i < lines.length; i++)\r
-            lineArray.addElement(lines[i]);\r
-\r
-        noLines = lineArray.size();\r
-        parse();\r
-    }\r
-\r
-    public PDBfile(String inFile, String inType) throws IOException {\r
-        super(inFile, inType);\r
-\r
-        String line;\r
-        this.lineArray = new Vector();\r
-\r
-        BufferedReader dataIn;\r
-\r
-        if (inType.equals("File")) {\r
-            dataIn = new BufferedReader(new FileReader(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
-        while ((line = dataIn.readLine()) != null) {\r
-            lineArray.addElement(line);\r
-        }\r
-\r
-        noLines = lineArray.size();\r
-\r
-        parse();\r
-    }\r
-\r
-    public void parse() {\r
-        for (int i = 0; i < lineArray.size(); i++) {\r
-            StringTokenizer str = new StringTokenizer(lineArray.elementAt(i)\r
-                                                               .toString());\r
-\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
-\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.err.println("Caught" + e);\r
-                        System.err.println("Record not added to PDB model:" +\r
-                            lineArray.elementAt(i).toString());\r
-                    }\r
-                }\r
-            }\r
-        }\r
-\r
-        makeResidueList();\r
-        makeCaBondList();\r
-\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
-\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
-\r
-        return null;\r
-    }\r
-\r
-    public void setChargeColours() {\r
-        for (int i = 0; i < chains.size(); i++) {\r
-            ((PDBChain) chains.elementAt(i)).setChargeColours();\r
-        }\r
-    }\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 void colourBySequence(Sequence 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
-    }\r
-}\r
+/*
+* Jalview - A Sequence Alignment Editor and Viewer
+* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+*/
+package MCview;
+
+import jalview.datamodel.*;
+
+import java.io.*;
+
+import java.util.*;
+import java.awt.Color;
+
+
+public class PDBfile extends jalview.io.AlignFile {
+    public Vector chains;
+    public String id;
+
+    public PDBfile(String inFile, String inType) throws IOException
+    {
+        super(inFile, inType);
+    }
+
+    public String print()
+    {
+      return null;
+    }
+
+    public void parse() throws IOException
+    {
+        chains = new Vector();
+
+        PDBChain tmpchain;
+        String line;
+        boolean modelFlag = false;
+        boolean terFlag = false;
+
+
+        int index = 0;
+        while((line = nextLine())!=null)
+        {
+           if (line.indexOf("HEADER") == 0)
+           {
+             id = line.substring(62, 67).trim();
+             continue;
+           }
+
+           if(line.indexOf("MODEL")==0)
+             modelFlag = true;
+
+           if(line.indexOf("TER")==0)
+             terFlag = true;
+
+           if(modelFlag && line.indexOf("ENDMDL")==0)
+             break;
+
+           if (    line.indexOf("ATOM")==0
+               || (line.indexOf("HETATM")==0 && !terFlag)
+             )
+            {
+              terFlag = false;
+
+
+              //Jalview is only interested in CA bonds????
+              if (!line.substring(12, 15).trim().equals("CA"))
+              {
+                continue;
+              }
+
+              Atom tmpatom = new Atom(line);
+              tmpchain = findChain(tmpatom.chain);
+              if (tmpchain != null)
+              {
+                tmpchain.atoms.addElement(tmpatom);
+              }
+              else
+              {
+                tmpchain = new PDBChain(tmpatom.chain);
+                chains.addElement(tmpchain);
+                tmpchain.atoms.addElement(tmpatom);
+              }
+          }
+          index ++;
+        }
+
+       makeResidueList();
+       makeCaBondList();
+
+       if(id==null)
+       {
+         id = inFile.getName();
+       }
+       for (int i = 0; i < chains.size(); i++)
+       {
+         SequenceI seq = ( (PDBChain) chains.elementAt(i)).
+             sequence;
+         seq.setName(id + "|" + seq.getName());
+         Sequence dataset = new Sequence(seq.
+             getName(),
+             seq.getSequence().toString(), seq.getStart(), seq.getEnd());
+
+         PDBEntry entry = new PDBEntry();
+         entry.setId(id);
+         if(inFile!=null)
+           entry.setFile(inFile.getAbsolutePath());
+
+         seq.setDatasetSequence(dataset);
+         dataset.addPDBId(entry);
+
+         getSeqs().addElement(seq);
+       }
+    }
+
+    public void makeResidueList() {
+        for (int i = 0; i < chains.size(); i++) {
+            ((PDBChain) chains.elementAt(i)).makeResidueList();
+        }
+    }
+
+    public void makeCaBondList() {
+        for (int i = 0; i < chains.size(); i++) {
+            ((PDBChain) chains.elementAt(i)).makeCaBondList();
+        }
+    }
+
+    public PDBChain findChain(String id) {
+        for (int i = 0; i < chains.size(); i++) {
+            if (((PDBChain) chains.elementAt(i)).id.equals(id)) {
+                return (PDBChain) chains.elementAt(i);
+            }
+        }
+
+        return null;
+    }
+
+    public void setChargeColours() {
+        for (int i = 0; i < chains.size(); i++) {
+            ((PDBChain) chains.elementAt(i)).setChargeColours();
+        }
+    }
+
+    public void setColours(jalview.schemes.ColourSchemeI cs) {
+        for (int i = 0; i < chains.size(); i++) {
+            ((PDBChain) chains.elementAt(i)).setChainColours(cs);
+        }
+    }
+
+    public void setChainColours()
+    {
+       for (int i = 0; i < chains.size(); i++)
+       {
+            ((PDBChain) chains.elementAt(i)).setChainColours(
+                     Color.getHSBColor(1.0f / (float)i, .4f, 1.0f)
+                );
+        }
+    }
+}