From 0a1d49ccc421184b23bcb45cee901f5313913aa1 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 19 Jan 2007 16:04:05 +0000 Subject: [PATCH] reoganization of PDB sequence fetching for sequence annotation generated by PDBFile --- src/jalview/gui/SequenceFetcher.java | 181 ++++++++++++++++------------------ 1 file changed, 84 insertions(+), 97 deletions(-) diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index cb41e6e..b4370b7 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -211,16 +211,31 @@ public class SequenceFetcher { StringTokenizer qset = new StringTokenizer(textfield.getText(), ";"); String query; + SequenceI[] seqs = null; while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null)) { - StringBuffer respart = getPDBFile(query.toUpperCase()); - if(respart!=null) - result.append(respart); + SequenceI[] seqparts = getPDBFile(query.toUpperCase()); + if (seqparts!=null) { + if (seqs==null) { + seqs = seqparts; + } else { + SequenceI[] newseqs = new SequenceI[seqs.length+seqparts.length]; + int i=0; + for (;i0) { + if (parseResult(new Alignment(seqs), null, null)!=null) + result.append("# Successfully parsed the PDB File Queries into an Alignment"); } - - - if (result.length()>0) - parseResult(result.toString(), null); } else if( database.getSelectedItem().equals("PFAM")) { @@ -327,9 +342,9 @@ public class SequenceFetcher } } - StringBuffer getPDBFile(String id) + SequenceI[] getPDBFile(String id) { - StringBuffer result = new StringBuffer(); + Vector result = new Vector(); String chain = null; if (id.indexOf(":") > -1) { @@ -348,15 +363,34 @@ public class SequenceFetcher { if (chain == null || ( (PDBChain) pdbfile.chains.elementAt(i)).id. - toUpperCase().equals(chain)) - - result.append("\n>PDB|" + id + "|" + - ( (PDBChain) pdbfile.chains.elementAt(i)).sequence. - getName() + - "\n" - + - ( (PDBChain) pdbfile.chains.elementAt(i)).sequence. - getSequenceAsString()); + toUpperCase().equals(chain)) { + 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("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(jalview.datamodel.DBRefSource.PDB,"0",id+pdbchain.id); + sq.addDBRef(dbentry); + // and add seuqence to the retrieved set + result.addElement(sq.deriveSequence()); + } } } catch (Exception ex) // Problem parsing PDB file @@ -366,37 +400,53 @@ public class SequenceFetcher database.getSelectedItem(), ex); return null; } - - return result; + SequenceI[] results = new SequenceI[result.size()]; + for (int i=0,j=result.size();i 0) { if (alignFrame == null) { AlignFrame af = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT -); - af.currentFileFormat = format; + AlignFrame.DEFAULT_HEIGHT); + if (currentFileFormat!=null) + af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT FORMAT FOR NON-FormatAdapter Sourced Alignments? + if(title==null) title = "Retrieved from " + database.getSelectedItem(); + Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + af.statusBar.setText("Successfully pasted alignment file"); try @@ -410,18 +460,7 @@ public class SequenceFetcher { for (int i = 0; i < al.getHeight(); i++) { - alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); - - //////////////////////////// - //Dataset needs extension; - ///////////////////////////// - Sequence ds = new Sequence(al.getSequenceAt(i).getName(), - AlignSeq.extractGaps("-. ", - al.getSequenceAt(i).getSequenceAsString()), - al.getSequenceAt(i).getStart(), - al.getSequenceAt(i).getEnd()); - al.getSequenceAt(i).setDatasetSequence(ds); - alignFrame.viewport.alignment.getDataset().addSequence(ds); + alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); // this also creates dataset sequence entries } alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. getHeight()); @@ -429,61 +468,9 @@ public class SequenceFetcher alignFrame.viewport.firePropertyChange("alignment", null, alignFrame.viewport. getAlignment().getSequences()); - - } - - if (database.getSelectedItem().equals("PDB")) - { - // Parse out the ids from the structured names - boolean errors = false; - for (int i = 0; i < al.getHeight(); i++) - { - PDBEntry entry = new PDBEntry(); - com.stevesoft.pat.Regex idbits = new com.stevesoft.pat.Regex( - "PDB\\|([0-9A-z]{4})\\|(.)"); - if (idbits.search(al.getSequenceAt(i).getName())) - { - String pdbid = idbits.substring(1); - String pdbccode = idbits.substring(2); - // Construct the PDBEntry - entry.setId(pdbid); - if (entry.getProperty() == null) - entry.setProperty(new Hashtable()); - entry.getProperty().put("chains", - pdbccode - + "=" + al.getSequenceAt(i).getStart() - + "-" + al.getSequenceAt(i).getEnd()); - al.getSequenceAt(i).getDatasetSequence().addPDBId(entry); - - // 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(jalview.datamodel.DBRefSource.PDB,"0",pdbid); - al.getSequenceAt(i).getDatasetSequence().addDBRef(dbentry); - } - else - { - // don't add an entry for this chain, but this is probably a bug - // that the user should know about. - jalview.bin.Cache.log.warn( - "No PDBEntry constructed for sequence " + i + " : " + - al.getSequenceAt(i).getName()); - errors = true; - } - } - if (errors) - jalview.bin.Cache.log.warn( - "Query string that resulted in PDBEntry construction failure was :\n" + - textfield.getText()); } - } - else - showErrorMessage("Error retrieving " + textfield.getText() - + " from " + database.getSelectedItem()); - } - return al; - } void showErrorMessage(final String error) -- 1.7.10.2