return alignmentI created from pdbfile class directly to preserve all annotation
authorjprocter <jprocter@compbio.dundee.ac.uk>
Sat, 17 Nov 2012 21:24:42 +0000 (21:24 +0000)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Sat, 17 Nov 2012 21:24:42 +0000 (21:24 +0000)
src/jalview/ws/dbsources/Pdb.java

index b432dff..219008d 100644 (file)
@@ -20,6 +20,7 @@ package jalview.ws.dbsources;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
+import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 
 import java.util.Vector;
@@ -30,6 +31,7 @@ import MCview.PDBfile;
 import com.stevesoft.pat.Regex;
 
 import jalview.datamodel.AlignmentI;
+import jalview.io.FormatAdapter;
 import jalview.ws.ebi.EBIFetchClient;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
@@ -93,7 +95,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy
    */
   public AlignmentI getSequenceRecords(String queries) throws Exception
   {
-
+    AlignmentI pdbfile = null;
     Vector result = new Vector();
     String chain = null;
     String id = null;
@@ -127,45 +129,61 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy
     try
     {
 
-      PDBfile pdbfile = new PDBfile(file,
-              jalview.io.AppletFormatAdapter.FILE);
-      for (int i = 0; i < pdbfile.chains.size(); i++)
+      pdbfile = new FormatAdapter().readFile(file,
+              jalview.io.AppletFormatAdapter.FILE, "PDB");
+      if (pdbfile != null)
       {
-        if (chain == null
-                || ((PDBChain) pdbfile.chains.elementAt(i)).id
-                        .toUpperCase().equals(chain))
+        for (SequenceI pdbcs : pdbfile.getSequences())
         {
-          PDBChain pdbchain = (PDBChain) pdbfile.chains.elementAt(i);
-          // Get the Chain's Sequence - who's dataset includes any special
-          // features added from the PDB file
-          SequenceI sq = pdbchain.sequence;
-          // Specially formatted name for the PDB chain sequences retrieved from
-          // the PDB
-          sq.setName(jalview.datamodel.DBRefSource.PDB + "|" + id + "|"
-                  + sq.getName());
-          // Might need to add more metadata to the PDBEntry object
-          // like below
-          /*
-           * PDBEntry entry = new PDBEntry(); // Construct the PDBEntry
-           * entry.setId(id); if (entry.getProperty() == null)
-           * entry.setProperty(new Hashtable());
-           * entry.getProperty().put("chains", pdbchain.id + "=" + sq.getStart()
-           * + "-" + sq.getEnd()); sq.getDatasetSequence().addPDBId(entry);
-           */
-          // Add PDB DB Refs
-          // We make a DBRefEtntry because we have obtained the PDB file from a
-          // verifiable source
-          // JBPNote - PDB DBRefEntry should also carry the chain and mapping
-          // information
-          DBRefEntry dbentry = new DBRefEntry(getDbSource(),
-                  getDbVersion(), id + pdbchain.id);
-          sq.addDBRef(dbentry);
-          // and add seuqence to the retrieved set
-          result.addElement(sq.deriveSequence());
+          String chid = null;
+          // Mapping map=null;
+          for (PDBEntry pid : (Vector<PDBEntry>) pdbcs.getPDBId())
+          {
+            if (pid.getFile() == file)
+            {
+              chid = (String) pid.getProperty().get("CHAIN");
+
+            }
+            ;
+
+          }
+          if (chain == null
+                  || (chid != null && (chid.equals(chain)
+                          || chid.trim().equals(chain.trim()) || (chain
+                          .trim().length() == 0 && chid.equals("_")))))
+          {
+            pdbcs.setName(jalview.datamodel.DBRefSource.PDB + "|" + id
+                    + "|" + pdbcs.getName());
+            // Might need to add more metadata to the PDBEntry object
+            // like below
+            /*
+             * PDBEntry entry = new PDBEntry(); // Construct the PDBEntry
+             * entry.setId(id); if (entry.getProperty() == null)
+             * entry.setProperty(new Hashtable());
+             * entry.getProperty().put("chains", pdbchain.id + "=" +
+             * sq.getStart() + "-" + sq.getEnd());
+             * sq.getDatasetSequence().addPDBId(entry);
+             */
+            // Add PDB DB Refs
+            // We make a DBRefEtntry because we have obtained the PDB file from
+            // a
+            // verifiable source
+            // JBPNote - PDB DBRefEntry should also carry the chain and mapping
+            // information
+            DBRefEntry dbentry = new DBRefEntry(getDbSource(),
+                    getDbVersion(), (chid == null ? id : id + chid));
+            // dbentry.setMap()
+            pdbcs.addDBRef(dbentry);
+          }
+          else
+          {
+            // remove this sequence from the alignment - since it's not from the
+            // right chain
+            pdbfile.deleteSequence(pdbcs);
+          }
         }
       }
-
-      if (result.size() < 1)
+      if (pdbfile == null || pdbfile.getHeight() < 1)
       {
         throw new Exception("No PDB Records for " + id + " chain "
                 + ((chain == null) ? "' '" : chain));
@@ -175,14 +193,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy
       stopQuery();
       throw (ex);
     }
-
-    SequenceI[] results = new SequenceI[result.size()];
-    for (int i = 0, j = result.size(); i < j; i++)
-    {
-      results[i] = (SequenceI) result.elementAt(i);
-      result.setElementAt(null, i);
-    }
-    return new Alignment(results);
+    return pdbfile;
   }
 
   /*