Read in Hetatms, allow for models, highlight in canvas
authoramwaterhouse <Andrew Waterhouse>
Fri, 25 Nov 2005 17:56:20 +0000 (17:56 +0000)
committeramwaterhouse <Andrew Waterhouse>
Fri, 25 Nov 2005 17:56:20 +0000 (17:56 +0000)
src/MCview/Atom.java
src/MCview/PDBCanvas.java
src/MCview/PDBChain.java
src/MCview/PDBViewer.java
src/MCview/PDBfile.java
src/MCview/Residue.java

index 0815dc0..6ae2baa 100755 (executable)
@@ -20,8 +20,6 @@ package MCview;
 \r
 import java.awt.*;\r
 \r
-import java.util.*;\r
-\r
 \r
 public class Atom {\r
     float x;\r
@@ -39,7 +37,7 @@ public class Atom {
 \r
     public Atom(String str)\r
     {\r
-        name =  str.substring(12,16);\r
+        name =  str.substring(12,15).trim();\r
 \r
         resName = str.substring(17,20);\r
 \r
@@ -50,6 +48,7 @@ public class Atom {
         this.x = (float) (new Float(str.substring(30,38).trim()).floatValue());\r
         this.y = (float) (new Float(str.substring(38,46).trim()).floatValue());\r
         this.z = (float) (new Float(str.substring(47,55).trim()).floatValue());\r
+\r
     }\r
 \r
     public void setColor(Color col) {\r
index 5ff0f1f..b3eb23f 100755 (executable)
@@ -66,33 +66,29 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
     int xmid;\r
     int ymid;\r
     Font font = new Font("Helvetica", Font.PLAIN, 10);\r
-    jalview.gui.SequenceRenderer sr;\r
-    jalview.gui.FeatureRenderer  fr;\r
     jalview.gui.SeqCanvas seqcanvas;\r
     public Sequence sequence;\r
     final StringBuffer mappingDetails = new StringBuffer();\r
     PDBChain mainchain;\r
+    Vector highlightRes;\r
+    boolean pdbAction = false;\r
 \r
     public PDBCanvas(jalview.gui.SeqCanvas seqcanvas, Sequence seq)\r
     {\r
       this.seqcanvas = seqcanvas;\r
       this.sequence = seq;\r
-      sr = seqcanvas.getSequenceRenderer();\r
-      fr = seqcanvas.getFeatureRenderer();\r
-\r
       seqcanvas.setPDBCanvas(this);\r
     }\r
 \r
   public void setPDBFile(PDBfile pdb)\r
    {\r
-        this.sr = sr;\r
-        this.fr = fr;\r
         int max = -10;\r
         int maxchain = -1;\r
         int pdbstart = 0;\r
         int pdbend = 0;\r
         int seqstart = 0;\r
         int seqend = 0;\r
+        int [] mapping = null;\r
 \r
         for (int i = 0; i < pdb.chains.size(); i++)\r
         {\r
@@ -120,14 +116,17 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
 \r
             as.printAlignment(ps);\r
 \r
-            if (as.maxscore > max) {\r
+\r
+\r
+            if (as.maxscore > max)\r
+            {\r
                 max = as.maxscore;\r
                 maxchain = i;\r
-\r
                 pdbstart = as.seq2start;\r
                 pdbend = as.seq2end;\r
                 seqstart = as.seq1start + sequence.getStart()-1;\r
                 seqend = as.seq1end + sequence.getEnd()-1;\r
+                mapping = as.getExactMapping();\r
             }\r
 \r
             mappingDetails.append("\nPDB start/end "  + pdbstart + " " + pdbend);\r
@@ -141,9 +140,10 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         mainchain.seqstart = seqstart;\r
         mainchain.seqend = seqend;\r
         mainchain.isVisible = true;\r
-        mainchain.sequence = sequence;\r
+        mainchain.seqMapping = mapping;\r
+      //  mainchain.sequence = sequence;\r
 \r
-        this.pdb = pdb;\r
+      this.pdb = pdb;\r
         this.prefsize = new Dimension(getWidth(), getHeight());\r
 \r
         //Initialize the matrices to identity\r
@@ -195,6 +195,8 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         findCentre();\r
         findWidth();\r
 \r
+        setupBonds();\r
+\r
         scale = findScale();\r
 \r
 \r
@@ -202,10 +204,29 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         ToolTipManager.sharedInstance().registerComponent(this);\r
         ToolTipManager.sharedInstance().setInitialDelay(0);\r
         ToolTipManager.sharedInstance().setDismissDelay(10000);\r
+    }\r
+\r
+    Vector visiblebonds;\r
+    void setupBonds()\r
+    {\r
+      // Sort the bonds by z coord\r
+      visiblebonds = new Vector();\r
+\r
+      for (int ii = 0; ii < pdb.chains.size(); ii++)\r
+      {\r
+        if ( ( (PDBChain) pdb.chains.elementAt(ii)).isVisible)\r
+        {\r
+          Vector tmp = ( (PDBChain) pdb.chains.elementAt(ii)).bonds;\r
 \r
+          for (int i = 0; i < tmp.size(); i++)\r
+          {\r
+            visiblebonds.addElement(tmp.elementAt(i));\r
+          }\r
+        }\r
+      }\r
     }\r
 \r
-    public void deleteBonds() {\r
+   public void deleteBonds() {\r
         scale = 0;\r
         maxwidth = 0;\r
 \r
@@ -367,8 +388,8 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         centre[2] = ztot / (2 * (float) bsize);\r
     }\r
 \r
-    public void paintComponent(Graphics g) {\r
-\r
+    public void paintComponent(Graphics g)\r
+    {\r
       super.paintComponent(g);\r
 \r
       if(pdb==null)\r
@@ -382,8 +403,11 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
 \r
         //Only create the image at the beginning -\r
         //this saves much memory usage\r
-        if ((img == null) || (prefsize.width != getWidth()) ||\r
-                (prefsize.height != getHeight())) {\r
+        if ((img == null)\r
+            || (prefsize.width != getWidth())\r
+            || (prefsize.height != getHeight()))\r
+\r
+      {\r
             prefsize.width = getWidth();\r
             prefsize.height = getHeight();\r
 \r
@@ -395,7 +419,6 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
             ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
                                  RenderingHints.VALUE_ANTIALIAS_ON);\r
 \r
-\r
             redrawneeded = true;\r
         }\r
 \r
@@ -407,6 +430,8 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         }\r
 \r
         g.drawImage(img, 0, 0, this);\r
+\r
+        pdbAction = false;\r
     }\r
 \r
     public void drawAll(Graphics g, int width, int height)\r
@@ -420,6 +445,12 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
 \r
     public void updateSeqColours()\r
     {\r
+      if(pdbAction)\r
+      {\r
+        return;\r
+      }\r
+\r
+     // System.out.println("update seq colours");\r
       if(bysequence && pdb!=null)\r
       {\r
         for (int ii = 0; ii < pdb.chains.size(); ii++)\r
@@ -430,77 +461,69 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
 \r
       redrawneeded=true;\r
       repaint();\r
-\r
     }\r
 \r
     // This method has been taken out of PDBChain to allow\r
     // Applet and Application specific sequence renderers to be used\r
     void colourBySequence(PDBChain chain)\r
     {\r
+     // System.out.println("colour by seq");\r
       for (int i = 0; i < chain.bonds.size(); i++)\r
       {\r
         Bond tmp = (Bond) chain.bonds.elementAt(i);\r
+        tmp.startCol = Color.lightGray;\r
+        tmp.endCol = Color.lightGray;\r
 \r
         if ( (tmp.at1.resNumber >= ( (chain.offset + chain.pdbstart) - 1)) &&\r
             (tmp.at1.resNumber <= ( (chain.offset + chain.pdbend) - 1)))\r
         {\r
-          int pos = chain.seqstart +\r
-              (tmp.at1.resNumber - chain.pdbstart - chain.offset);\r
-\r
-          int index = sequence.findIndex(pos);\r
 \r
-          tmp.startCol = sr.findSequenceColour(Color.lightGray, sequence, index);\r
+          int pos = // chain.seqstart + Don't include seqstart here, start from 0\r
+              (tmp.at1.resNumber - chain.pdbstart - chain.offset)+1;\r
 \r
-          tmp.startCol = fr.findFeatureColour(tmp.startCol, sequence, index);\r
+            int index = chain.seqMapping[pos];\r
+            if (index != -1)\r
+            {\r
+              tmp.startCol = seqcanvas.getSequenceRenderer().findSequenceColour(\r
+                  Color.lightGray, sequence, index);\r
 \r
-        }\r
-        else\r
-        {\r
-          tmp.startCol = Color.gray;\r
+              tmp.startCol = seqcanvas.getFeatureRenderer().findFeatureColour(tmp.\r
+                  startCol, sequence, index);\r
+            }\r
         }\r
 \r
         if ( (tmp.at2.resNumber >= ( (chain.offset + chain.pdbstart) - 1)) &&\r
             (tmp.at2.resNumber <= ( (chain.pdbend + chain.offset) - 1)))\r
         {\r
-          int pos = chain.seqstart +\r
-              (tmp.at2.resNumber - chain.pdbstart - chain.offset);\r
-          int index = sequence.findIndex(pos);\r
+          int pos = // chain.seqstart + Don't include seqstart here, start from 0\r
+              (tmp.at2.resNumber - chain.pdbstart - chain.offset)+1;\r
 \r
-          tmp.endCol = sr.findSequenceColour(tmp.endCol, sequence, index);\r
-          tmp.endCol = fr.findFeatureColour(tmp.endCol, sequence, index);\r
-        }\r
-        else\r
-        {\r
-          tmp.endCol = Color.gray;\r
+            int index = chain.seqMapping[pos];\r
+            if (index != -1)\r
+            {\r
+              tmp.endCol = seqcanvas.getSequenceRenderer().findSequenceColour(\r
+                  tmp.endCol, sequence, index);\r
+              tmp.endCol = seqcanvas.getFeatureRenderer().findFeatureColour(tmp.\r
+                  endCol, sequence, index);\r
+            }\r
         }\r
       }\r
     }\r
 \r
 \r
-    public void drawScene(Graphics g) {\r
-        // Sort the bonds by z coord\r
-        Vector bonds = new Vector();\r
-\r
-        for (int ii = 0; ii < pdb.chains.size(); ii++)\r
-        {\r
-          if ( ( (PDBChain) pdb.chains.elementAt(ii)).isVisible)\r
-          {\r
-            Vector tmp = ( (PDBChain) pdb.chains.elementAt(ii)).bonds;\r
+    public void drawScene(Graphics g)\r
+    {\r
 \r
-            for (int i = 0; i < tmp.size(); i++)\r
-            {\r
-              bonds.addElement(tmp.elementAt(i));\r
-            }\r
-          }\r
-        }\r
 \r
-        if (zbuffer) {\r
-            Zsort.Zsort(bonds);\r
+        if (zbuffer)\r
+        {\r
+            Zsort.Zsort(visiblebonds);\r
         }\r
 \r
         Bond tmpBond=null;\r
-        for (int i = 0; i < bonds.size(); i++) {\r
-            tmpBond = (Bond) bonds.elementAt(i);\r
+        for (int i = 0; i < visiblebonds.size(); i++)\r
+        {\r
+            tmpBond = (Bond) visiblebonds.elementAt(i);\r
 \r
             xstart = (int) (((tmpBond.start[0] - centre[0]) * scale) +\r
                 (getWidth() / 2));\r
@@ -515,7 +538,8 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
             xmid = (xend + xstart) / 2;\r
             ymid = (yend + ystart) / 2;\r
 \r
-            if (depthcue && !bymolecule) {\r
+            if (depthcue && !bymolecule)\r
+            {\r
                 if (tmpBond.start[2] < (centre[2] - (maxwidth / 6))) {\r
                     g.setColor(tmpBond.startCol.darker().darker());\r
                     drawLine(g, xstart, ystart, xmid, ymid);\r
@@ -613,13 +637,37 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
       }\r
     }\r
 \r
-    public void mousePressed(MouseEvent e) {\r
+    public void mousePressed(MouseEvent e)\r
+    {\r
+        pdbAction = true;\r
         Atom fatom = findAtom(e.getX(), e.getY());\r
         if(fatom!=null)\r
         {\r
           fatom.isSelected = !fatom.isSelected;\r
+\r
           redrawneeded = true;\r
           repaint();\r
+          if (foundchain != -1)\r
+          {\r
+            PDBChain chain = (PDBChain) pdb.chains.elementAt(foundchain);\r
+            if (chain == mainchain)\r
+            {\r
+              int pos = // chain.seqstart + Don't include seqstart here, start from 0\r
+                  (fatom.resNumber - chain.pdbstart - chain.offset) +1 ;\r
+\r
+              if (chain.seqMapping[pos] != -1)\r
+              {\r
+                if (highlightRes == null)\r
+                  highlightRes = new Vector();\r
+\r
+                if (highlightRes.contains((chain.seqMapping[pos]) + ""))\r
+                  highlightRes.remove((chain.seqMapping[pos]) + "");\r
+                else\r
+                  highlightRes.add((chain.seqMapping[pos]) + "");\r
+              }\r
+            }\r
+          }\r
+\r
         }\r
         mx = e.getX();\r
         my = e.getY();\r
@@ -628,7 +676,16 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         dragging = false;\r
     }\r
 \r
-    public void mouseMoved(MouseEvent e) {\r
+    public void mouseMoved(MouseEvent e)\r
+    {\r
+      pdbAction = true;\r
+      if(highlightBond1!=null)\r
+      {\r
+        highlightBond1.at2.isSelected = false;\r
+        highlightBond2.at1.isSelected = false;\r
+        highlightBond1 = null;\r
+        highlightBond2 = null;\r
+      }\r
 \r
         Atom fatom = findAtom(e.getX(), e.getY());\r
 \r
@@ -638,43 +695,72 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
           chain = (PDBChain) pdb.chains.elementAt(foundchain);\r
           if(chain == mainchain)\r
           {\r
-            int pos = chain.seqstart +\r
-                (fatom.resNumber - chain.pdbstart - chain.offset) + 1;\r
-\r
-            int index = seqcanvas.getViewport().getAlignment().findIndex(\r
-                sequence);\r
+           int pos = // chain.seqstart + Don't include seqstart here, start from 0\r
+               (fatom.resNumber - chain.pdbstart - chain.offset) +1 ;\r
 \r
-            seqcanvas.highlightSearchResults(new int[]\r
-                                             {index, pos, pos});\r
+            highlightSeqcanvas( chain.seqMapping[pos] );\r
           }\r
         }\r
-        else\r
-          seqcanvas.highlightSearchResults(null);\r
 \r
         if (fatom != null)\r
         {\r
             this.setToolTipText(chain.id+":"+ fatom.resNumber+" "+ fatom.resName);\r
         } else\r
         {\r
-            this.setToolTipText("");\r
+            highlightSeqcanvas( -1);\r
+            this.setToolTipText(null);\r
         }\r
     }\r
 \r
-    public void mouseClicked(MouseEvent e) {\r
-    }\r
 \r
-    public void mouseEntered(MouseEvent e) {\r
-    }\r
+    void highlightSeqcanvas(int pos)\r
+    {\r
+      int index = seqcanvas.getViewport().getAlignment().findIndex(sequence);\r
 \r
-    public void mouseExited(MouseEvent e) {\r
+      int size = pos==-1?0:3;\r
+\r
+      if(highlightRes!=null)\r
+        size += highlightRes.size()*3;\r
+\r
+      int [] array = new int[size];\r
+      int i=0;\r
+      if(highlightRes!=null)\r
+      {\r
+        for (i = 0; i < highlightRes.size(); i++)\r
+        {\r
+          int a = Integer.parseInt(highlightRes.elementAt(\r
+              i).toString())+1;\r
+          array[i * 3] = index;\r
+          array[ (i * 3) + 1] = a;\r
+          array[ (i * 3) + 2] = a;\r
+        }\r
+      }\r
+\r
+      if(pos!=-1)\r
+      {\r
+        array[i * 3] = index;\r
+        array[i * 3 + 1] = pos+1;\r
+        array[i * 3 + 2] = pos+1;\r
+      }\r
+\r
+      seqcanvas.highlightSearchResults(array);\r
     }\r
 \r
-    public void mouseDragged(MouseEvent evt) {\r
+\r
+    public void mouseClicked(MouseEvent e)  { }\r
+\r
+    public void mouseEntered(MouseEvent e) {  }\r
+\r
+    public void mouseExited(MouseEvent e) { }\r
+\r
+    public void mouseDragged(MouseEvent evt)\r
+    {\r
         int x = evt.getX();\r
         int y = evt.getY();\r
         mx = x;\r
         my = y;\r
 \r
+\r
         MCMatrix objmat = new MCMatrix(3, 3);\r
         objmat.setIdentity();\r
 \r
@@ -716,7 +802,8 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
         repaint();\r
     }\r
 \r
-    public void mouseReleased(MouseEvent evt) {\r
+    public void mouseReleased(MouseEvent evt)\r
+    {\r
         dragging = false;\r
         return;\r
     }\r
@@ -729,20 +816,17 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
 \r
             if (chain.isVisible)\r
             {\r
-                Vector bonds = ((PDBChain) pdb.chains.elementAt(ii)).bonds;\r
 \r
-                for (int i = 0; i < bonds.size(); i++)\r
+                for (int i = 0; i < chain.bonds.size(); i++)\r
                 {\r
-                    Bond tmpBond = (Bond) bonds.elementAt(i);\r
+                    Bond tmpBond = (Bond) chain.bonds.elementAt(i);\r
 \r
                     if (tmpBond.at1.isSelected)\r
                     {\r
                         labelAtom(g, tmpBond, 1);\r
                     }\r
-\r
-                    if (tmpBond.at2.isSelected)\r
+                    else if (tmpBond.at2.isSelected)\r
                     {\r
-\r
                         labelAtom(g, tmpBond, 2);\r
                     }\r
                 }\r
@@ -752,14 +836,14 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
 \r
     public void labelAtom(Graphics g, Bond b, int n) {\r
         g.setFont(font);\r
-\r
-        if (n == 1) {\r
+        g.setColor(Color.red);\r
+        if (n == 1)\r
+        {\r
             int xstart = (int) (((b.start[0] - centre[0]) * scale) +\r
                 (getWidth() / 2));\r
             int ystart = (int) (((b.start[1] - centre[1]) * scale) +\r
                 (getHeight() / 2));\r
 \r
-            g.setColor(Color.red);\r
             g.drawString(b.at1.resName + "-" + b.at1.resNumber, xstart, ystart);\r
         }\r
 \r
@@ -769,7 +853,6 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
             int ystart = (int) (((b.end[1] - centre[1]) * scale) +\r
                 (getHeight() / 2));\r
 \r
-            g.setColor(Color.red);\r
             g.drawString(b.at2.resName + "-" + b.at2.resNumber, xstart, ystart);\r
         }\r
     }\r
@@ -841,12 +924,28 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
     }\r
 \r
    Bond highlightBond1, highlightBond2;\r
+   String alignMouseOver;\r
    public void highlightRes(int ii)\r
   {\r
+\r
+    int index = ii - mainchain.seqstart;\r
+\r
+    if (highlightRes!=null\r
+        && highlightRes.contains( mainchain.seqMapping[index]+ ""))\r
+    {\r
+       return;\r
+    }\r
+\r
+    if(highlightBond1!=null)\r
+      highlightBond1.at2.isSelected = false;\r
+\r
+    if(highlightBond2!=null)\r
+      highlightBond2.at1.isSelected = false;\r
+\r
     highlightBond1 = null;\r
     highlightBond2 = null;\r
 \r
-    int index = ii - mainchain.seqstart;\r
+\r
 \r
     if(index <0 )\r
       return;\r
@@ -856,10 +955,16 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
       if(index>0)\r
       {\r
         highlightBond1 = (Bond) mainchain.bonds.elementAt(index - 1);\r
+        highlightBond1.at2.isSelected = true;\r
+       // highlightBond1.at2.isSelected = true;\r
       }\r
 \r
       if(index!=mainchain.bonds.size())\r
+      {\r
         highlightBond2 = (Bond) mainchain.bonds.elementAt(index);\r
+        highlightBond2.at1.isSelected = true;\r
+     //   highlightBond2.at2.isSelected = true;\r
+      }\r
     }\r
 \r
     redrawneeded = true;\r
@@ -875,5 +980,8 @@ public class PDBCanvas extends JPanel implements MouseListener, MouseMotionListe
       }\r
       mainchain.isVisible = true;\r
       findCentre();\r
+      setupBonds();\r
+      redrawneeded = true;\r
+      repaint();\r
     }\r
 }\r
index 43c8e9d..3cf73d1 100755 (executable)
@@ -39,6 +39,7 @@ public class PDBChain {
     public int pdbend = 0;\r
     public int seqstart = 0;\r
     public int seqend = 0;\r
+    public int [] seqMapping;\r
 \r
     //public DrawableSequence ds;\r
     public PDBChain(String id) {\r
@@ -57,15 +58,19 @@ public class PDBChain {
         return tmp;\r
     }\r
 \r
-    public void makeCaBondList() {\r
-        for (int i = 0; i < (residues.size() - 1); i++) {\r
+    public void makeCaBondList()\r
+    {\r
+        for (int i = 0; i < (residues.size() - 1); i++)\r
+        {\r
             Residue tmpres = (Residue) residues.elementAt(i);\r
             Residue tmpres2 = (Residue) residues.elementAt(i + 1);\r
             Atom at1 = tmpres.findAtom("CA");\r
             Atom at2 = tmpres2.findAtom("CA");\r
 \r
-            if ((at1 != null) && (at2 != null)) {\r
-                if (at1.chain.equals(at2.chain)) {\r
+            if ((at1 != null) && (at2 != null))\r
+            {\r
+                if (at1.chain.equals(at2.chain))\r
+                {\r
                     makeBond(at1, at2);\r
                 }\r
             }\r
@@ -89,11 +94,12 @@ public class PDBChain {
 \r
     public void makeResidueList() {\r
         int count = 0;\r
-        String seq = "";\r
+        StringBuffer seq = new StringBuffer();\r
 \r
-        for (int i = 0; i < atoms.size(); i++) {\r
+        int i, iSize = atoms.size()-1;\r
+        for (i = 0; i < iSize; i++)\r
+        {\r
             Atom tmp = (Atom) atoms.elementAt(i);\r
-            //String resName = tmp.resName;\r
             int resNumber = tmp.resNumber;\r
             int res = resNumber;\r
 \r
@@ -131,21 +137,23 @@ public class PDBChain {
             Atom tmpat = (Atom) tmpres.atoms.elementAt(0);\r
 \r
             // Keep totting up the sequence\r
-            if (ResidueProperties.getAA3Hash().get(tmpat.resName) == null) {\r
-                System.err.println("PDBReader:Null aa3Hash for " +\r
-                    tmpat.resName);\r
+            if (ResidueProperties.getAA3Hash().get(tmpat.resName) == null)\r
+            {\r
+                seq.append("X") ;\r
+               //  System.err.println("PDBReader:Null aa3Hash for " +\r
+               //     tmpat.resName);\r
             } else {\r
-                String tmpres2 = ResidueProperties.aa[((Integer) ResidueProperties.getAA3Hash()\r
-                                                                                  .get(tmpat.resName)).intValue()];\r
-                seq = seq + tmpres2;\r
+\r
+                seq.append(ResidueProperties.aa[((Integer) ResidueProperties.getAA3Hash()\r
+                                                                                  .get(tmpat.resName)).intValue()]);\r
             }\r
         }\r
 \r
         if(id.length()<1 || id.equals(" "))\r
            id = "_";\r
 \r
-        sequence = new Sequence(id, seq, 1, seq.length());\r
-     //   System.out.println("PDB Sequence is :\nSequence = " + seq);\r
+        sequence = new Sequence(id, seq.toString(), 1, seq.length());\r
+      //  System.out.println("PDB Sequence is :\nSequence = " + seq);\r
      //   System.out.println("No of residues = " + residues.size());\r
     }\r
 \r
index 06b6f65..082ce6e 100755 (executable)
@@ -19,9 +19,13 @@ public class PDBViewer extends JInternalFrame implements Runnable
                    Sequence seq,\r
                    SeqCanvas seqcanvas)\r
   {\r
+\r
     pdb = entry;\r
     sequence = seq;\r
 \r
+    Thread worker = new Thread(this);\r
+    worker.start();\r
+\r
     try\r
     {\r
       jbInit();\r
@@ -42,10 +46,8 @@ public class PDBViewer extends JInternalFrame implements Runnable
       title.append( " Chain:" );\r
       title.append( pdb.getProperty().get("chains"));\r
     }\r
-    Desktop.addInternalFrame(this,title.toString(),400, 400);\r
 \r
-     Thread worker = new Thread(this);\r
-     worker.start();\r
+     Desktop.addInternalFrame(this,title.toString(),400, 400);\r
   }\r
 \r
   public void run()\r
@@ -53,8 +55,7 @@ public class PDBViewer extends JInternalFrame implements Runnable
     try\r
     {\r
       EBIFetchClient ebi = new EBIFetchClient();\r
-      String[] result = ebi.fetchData("pdb:" + pdb.getId(), null,\r
-                                      null);\r
+      String[] result = ebi.fetchData("pdb:" + pdb.getId(), "default","raw");\r
 \r
       PDBfile pdbfile = new PDBfile(result);\r
 \r
@@ -337,7 +338,7 @@ public class PDBViewer extends JInternalFrame implements Runnable
   public void mapping_actionPerformed(ActionEvent e)\r
   {\r
     jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer();\r
-    Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 500, 600);\r
+    Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 550, 600);\r
     cap.setText(pdbcanvas.mappingDetails.toString());\r
   }\r
 \r
index 2b22b24..c4fe563 100755 (executable)
@@ -71,7 +71,9 @@ public class PDBfile extends jalview.io.FileParse {
 \r
     public void parse()\r
     {\r
+        PDBChain tmpchain;\r
         String line;\r
+        boolean modelFlag = false;\r
         for (int i = 0; i < lineArray.size(); i++)\r
         {\r
 \r
@@ -83,16 +85,29 @@ public class PDBfile extends jalview.io.FileParse {
              continue;\r
            }\r
 \r
-                if (line.indexOf("ATOM") == 0) {\r
+           if(line.indexOf("MODEL")==0)\r
+             modelFlag = true;\r
+\r
+           if(modelFlag && line.indexOf("ENDMDL")==0)\r
+             break;\r
+\r
+           if (line.indexOf("ATOM")==0 || line.indexOf("HETATM")==0 )\r
+            {\r
                     try {\r
                         Atom tmpatom = new Atom(line);\r
 \r
-                        if (findChain(tmpatom.chain) != null)\r
+                        //Jalview is only interested in CA bonds????\r
+                        if(!tmpatom.name.equals("CA"))\r
+                          continue;\r
+\r
+                        tmpchain = findChain(tmpatom.chain);\r
+                        if ( tmpchain != null)\r
                         {\r
-                            findChain(tmpatom.chain).atoms.addElement(tmpatom);\r
-                        } else\r
+                          tmpchain.atoms.addElement(tmpatom);\r
+                        }\r
+                        else\r
                         {\r
-                            PDBChain tmpchain = new PDBChain(tmpatom.chain);\r
+                            tmpchain = new PDBChain(tmpatom.chain);\r
                             chains.addElement(tmpchain);\r
                             tmpchain.atoms.addElement(tmpatom);\r
                         }\r
index efaf1f0..0f24137 100755 (executable)
@@ -33,9 +33,12 @@ public class Residue {
         this.count = count;\r
     }\r
 \r
-    public Atom findAtom(String name) {\r
-        for (int i = 0; i < atoms.size(); i++) {\r
-            if (((Atom) atoms.elementAt(i)).name.equals(name)) {\r
+    public Atom findAtom(String name)\r
+    {\r
+        for (int i = 0; i < atoms.size(); i++)\r
+        {\r
+            if (((Atom) atoms.elementAt(i)).name.equals(name))\r
+            {\r
                 return (Atom) atoms.elementAt(i);\r
             }\r
         }\r