X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fws%2Fdbsources%2FPdb.java;h=757ab834292d4346c5e09c24a8da26df93c38e6a;hb=8b27085fa7fc5f2877e078421284c2636b85b8c6;hp=af8676f57ec7631e2447ac5d435e8653dee8f0f5;hpb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;p=jalview.git diff --git a/src/jalview/ws/dbsources/Pdb.java b/src/jalview/ws/dbsources/Pdb.java index af8676f..757ab83 100644 --- a/src/jalview/ws/dbsources/Pdb.java +++ b/src/jalview/ws/dbsources/Pdb.java @@ -1,56 +1,70 @@ + /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview 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 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview 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 Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ws.dbsources; -import jalview.datamodel.Alignment; +import jalview.api.FeatureSettingsModelI; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefEntry; import jalview.datamodel.DBRefSource; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.PDBEntry.Type; import jalview.datamodel.SequenceI; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FileFormatI; +import jalview.io.FormatAdapter; +import jalview.io.PDBFeatureSettings; +import jalview.structure.StructureImportSettings; +import jalview.util.MessageManager; +import jalview.ws.ebi.EBIFetchClient; +import java.util.ArrayList; +import java.util.List; import java.util.Vector; -import MCview.PDBChain; -import MCview.PDBfile; - import com.stevesoft.pat.Regex; -import jalview.datamodel.AlignmentI; -import jalview.ws.ebi.EBIFetchClient; -import jalview.ws.seqfetcher.DbSourceProxy; - /** * @author JimP * */ -public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy +public class Pdb extends EbiFileRetrievedProxy { public Pdb() { super(); - addDbSourceProperty(DBRefSource.PROTSEQDB); } + public static final String FEATURE_INSERTION = "INSERTION"; + + public static final String FEATURE_RES_NUM = "RESNUM"; + /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getAccessionSeparator() */ + @Override public String getAccessionSeparator() { // TODO Auto-generated method stub @@ -62,6 +76,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy * * @see jalview.ws.DbSourceProxy#getAccessionValidator() */ + @Override public Regex getAccessionValidator() { return new Regex("([1-9][0-9A-Za-z]{3}):?([ _A-Za-z0-9]?)"); @@ -72,6 +87,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy * * @see jalview.ws.DbSourceProxy#getDbSource() */ + @Override public String getDbSource() { return DBRefSource.PDB; @@ -82,6 +98,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy * * @see jalview.ws.DbSourceProxy#getDbVersion() */ + @Override public String getDbVersion() { return "0"; @@ -92,9 +109,10 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy * * @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[]) */ + @Override public AlignmentI getSequenceRecords(String queries) throws Exception { - + AlignmentI pdbAlignment = null; Vector result = new Vector(); String chain = null; String id = null; @@ -118,8 +136,12 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy stopQuery(); return null; } + Type pdbFileFormat = StructureImportSettings + .getDefaultStructureFileFormat(); + String ext = "." + pdbFileFormat.getExtension(); EBIFetchClient ebi = new EBIFetchClient(); - file = ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw").getAbsolutePath(); + file = ebi.fetchDataAsFile("pdb:" + id, pdbFileFormat.getFormat(), ext) + .getAbsolutePath(); stopQuery(); if (file == null) { @@ -127,63 +149,90 @@ 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++) + // convert Type.PDB/MMCIF to FileFormat.PDB/MMCIF + // todo get rid of Type? + FileFormatI fileFormat = FileFormat.valueOf(pdbFileFormat.toString()); + pdbAlignment = new FormatAdapter().readFile(file, + DataSourceType.FILE, fileFormat); + if (pdbAlignment != null) { - if (chain == null - || ((PDBChain) pdbfile.chains.elementAt(i)).id - .toUpperCase().equals(chain)) + List toremove = new ArrayList(); + for (SequenceI pdbcs : pdbAlignment.getSequences()) + { + String chid = null; + // Mapping map=null; + for (PDBEntry pid : pdbcs.getAllPDBEntries()) + { + if (pid.getFile() == file) + { + chid = pid.getChainCode(); + + } + ; + + } + 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 + { + // mark this sequence to be removed from the alignment + // - since it's not from the right chain + toremove.add(pdbcs); + } + } + // now remove marked sequences + for (SequenceI pdbcs : toremove) { - 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()); + pdbAlignment.deleteSequence(pdbcs); + if (pdbcs.getAnnotation() != null) + { + for (AlignmentAnnotation aa : pdbcs.getAnnotation()) + { + pdbAlignment.deleteAnnotation(aa); + } + } } } - if (result.size() < 1) + if (pdbAlignment == null || pdbAlignment.getHeight() < 1) { - throw new Exception("No PDB Records for " + id + " chain " - + ((chain == null) ? "' '" : chain)); + throw new Exception(MessageManager.formatMessage( + "exception.no_pdb_records_for_chain", new String[] { id, + ((chain == null) ? "' '" : chain) })); } + } catch (Exception ex) // Problem parsing PDB file { 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 pdbAlignment; } /* @@ -191,6 +240,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy * * @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String) */ + @Override public boolean isValidReference(String accession) { Regex r = getAccessionValidator(); @@ -198,13 +248,15 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy } /** - * obtain human glyoxalase chain A sequence + * human glyoxalase */ + @Override public String getTestQuery() { - return "1QIPA"; + return "1QIP"; } + @Override public String getDbName() { return "PDB"; // getDbSource(); @@ -215,4 +267,20 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy { return 0; } + + + /** + * Returns a descriptor for suitable feature display settings with + *
    + *
  • ResNums or insertions features visible
  • + *
  • insertions features coloured red
  • + *
  • ResNum features coloured by label
  • + *
  • Insertions displayed above (on top of) ResNums
  • + *
+ */ + @Override + public FeatureSettingsModelI getFeatureColourScheme() + { + return new PDBFeatureSettings(); + } }