X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fgui%2FSequenceFetcher.java;h=b4370b7f73f4001318e11eb4d1fb132dc727ad12;hb=0a1d49ccc421184b23bcb45cee901f5313913aa1;hp=075629908f5f7513732a950651ea14cc80d5793f;hpb=4d2e0d36506302cc00677527725bcccbdf27d766;p=jalview.git diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index 0756299..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")) { @@ -286,7 +301,7 @@ public class SequenceFetcher } //Then read in the features and apply them to the dataset - SequenceI[] sequence = parseResult(result.toString(), null); + Alignment al = parseResult(result.toString(), null); for (int i = 0; i < entries.size(); i++) { UniprotEntry entry = (UniprotEntry) entries.elementAt(i); @@ -304,7 +319,7 @@ public class SequenceFetcher Enumeration en2 = entry.getAccession().elements(); while (en2.hasMoreElements()) { - sequence[i].getDatasetSequence().addDBRef(new DBRefEntry(DBRefSource.UNIPROT, + al.getSequenceAt(i).getDatasetSequence().addDBRef(new DBRefEntry(DBRefSource.UNIPROT, "0", en2.nextElement().toString())); } @@ -312,7 +327,7 @@ public class SequenceFetcher - sequence[i].getDatasetSequence().setPDBId(onlyPdbEntries); + al.getSequenceAt(i).getDatasetSequence().setPDBId(onlyPdbEntries); if (entry.getFeature() != null) { e = entry.getFeature().elements(); @@ -320,16 +335,16 @@ public class SequenceFetcher { SequenceFeature sf = (SequenceFeature) e.nextElement(); sf.setFeatureGroup("Uniprot"); - sequence[i].getDatasetSequence().addSequenceFeature( sf ); + al.getSequenceAt(i).getDatasetSequence().addSequenceFeature( sf ); } } } } } - 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. - getSequence()); + 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) + return null; + } + Alignment parseResult(Alignment al, String title, String currentFileFormat) { + + if (al != null && al.getHeight() > 0) { if (alignFrame == null) { - AlignFrame af = new AlignFrame(new Alignment(sequences), + 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 @@ -408,20 +458,9 @@ public class SequenceFetcher } else { - for (int i = 0; i < sequences.length; i++) + for (int i = 0; i < al.getHeight(); i++) { - alignFrame.viewport.alignment.addSequence(sequences[i]); - - //////////////////////////// - //Dataset needs extension; - ///////////////////////////// - Sequence ds = new Sequence(sequences[i].getName(), - AlignSeq.extractGaps("-. ", - sequences[i].getSequenceAsString()), - sequences[i].getStart(), - sequences[i].getEnd()); - sequences[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 < sequences.length; i++) - { - PDBEntry entry = new PDBEntry(); - com.stevesoft.pat.Regex idbits = new com.stevesoft.pat.Regex( - "PDB\\|([0-9A-z]{4})\\|(.)"); - if (idbits.search(sequences[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 - + "=" + sequences[i].getStart() - + "-" + sequences[i].getEnd()); - sequences[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); - sequences[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 + " : " + - sequences[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 sequences; - + return al; } void showErrorMessage(final String error)