Control and alt for toggle hide
[jalview.git] / src / MCview / PDBfile.java
index f97216b..3153e3c 100755 (executable)
@@ -22,86 +22,107 @@ import jalview.datamodel.*;
 \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
+public class PDBfile extends jalview.io.AlignFile {\r
+    public Vector chains;\r
+    public String id;\r
 \r
-    public PDBfile(String[] lines) {\r
-        for (int i = 0; i < lines.length; i++)\r
-            lineArray.addElement(lines[i]);\r
+    public PDBfile(String inFile, String inType) throws IOException\r
+    {\r
+        super(inFile, inType);\r
+    }\r
 \r
-        noLines = lineArray.size();\r
-        parse();\r
+    public String print()\r
+    {\r
+      return null;\r
     }\r
 \r
-    public PDBfile(String inFile, String inType) throws IOException {\r
-        super(inFile, inType);\r
+    public void parse() throws IOException\r
+    {\r
+        chains = new Vector();\r
 \r
+        PDBChain tmpchain;\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
+        boolean modelFlag = false;\r
+        boolean terFlag = false;\r
+\r
+\r
+        int index = 0;\r
+        while((line = nextLine())!=null)\r
+        {\r
+           if (line.indexOf("HEADER") == 0)\r
+           {\r
+             id = line.substring(62, 67).trim();\r
+             continue;\r
+           }\r
+\r
+           if(line.indexOf("MODEL")==0)\r
+             modelFlag = true;\r
+\r
+           if(line.indexOf("TER")==0)\r
+             terFlag = true;\r
+\r
+           if(modelFlag && line.indexOf("ENDMDL")==0)\r
+             break;\r
+\r
+           if (    line.indexOf("ATOM")==0\r
+               || (line.indexOf("HETATM")==0 && !terFlag)\r
+             )\r
+            {\r
+              terFlag = false;\r
+\r
+\r
+              //Jalview is only interested in CA bonds????\r
+              if (!line.substring(12, 15).trim().equals("CA"))\r
+              {\r
+                continue;\r
+              }\r
+\r
+              Atom tmpatom = new Atom(line);\r
+              tmpchain = findChain(tmpatom.chain);\r
+              if (tmpchain != null)\r
+              {\r
+                tmpchain.atoms.addElement(tmpatom);\r
+              }\r
+              else\r
+              {\r
+                tmpchain = new PDBChain(tmpatom.chain);\r
+                chains.addElement(tmpchain);\r
+                tmpchain.atoms.addElement(tmpatom);\r
+              }\r
+          }\r
+          index ++;\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
+       makeResidueList();\r
+       makeCaBondList();\r
+\r
+       if(id==null)\r
+       {\r
+         id = inFile.getName();\r
+       }\r
+       for (int i = 0; i < chains.size(); i++)\r
+       {\r
+         SequenceI seq = ( (PDBChain) chains.elementAt(i)).\r
+             sequence;\r
+         seq.setName(id + "|" + seq.getName());\r
+         Sequence dataset = new Sequence(seq.\r
+             getName(),\r
+             seq.getSequence().toString(), seq.getStart(), seq.getEnd());\r
+\r
+         PDBEntry entry = new PDBEntry();\r
+         entry.setId(id);\r
+         if(inFile!=null)\r
+           entry.setFile(inFile.getAbsolutePath());\r
+\r
+         seq.setDatasetSequence(dataset);\r
+         dataset.addPDBId(entry);\r
+\r
+         getSeqs().addElement(seq);\r
+       }\r
     }\r
 \r
     public void makeResidueList() {\r
@@ -118,7 +139,6 @@ public class PDBfile extends jalview.io.FileParse {
 \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
@@ -133,23 +153,19 @@ public class PDBfile extends jalview.io.FileParse {
         }\r
     }\r
 \r
-    public void setHydrophobicityColours() {\r
+    public void setColours(jalview.schemes.ColourSchemeI cs) {\r
         for (int i = 0; i < chains.size(); i++) {\r
-            ((PDBChain) chains.elementAt(i)).setHydrophobicityColours();\r
+            ((PDBChain) chains.elementAt(i)).setChainColours(cs);\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
+    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