X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2FMCview%2FPDBfile.java;h=7e37277b2926bd797f0ebd343f5fc3d9df4c2fd8;hb=4cdc5b801cd2a0f2786ab753900e4ce774099ad8;hp=4fc88141cff64812809c1c38911fb422a269d79a;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/src/MCview/PDBfile.java b/src/MCview/PDBfile.java index 4fc8814..7e37277 100755 --- a/src/MCview/PDBfile.java +++ b/src/MCview/PDBfile.java @@ -20,14 +20,20 @@ */ package MCview; -import java.io.*; -import java.util.*; - -import java.awt.*; - import jalview.analysis.AlignSeq; -import jalview.datamodel.*; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.SequenceI; import jalview.io.FileParse; +import jalview.util.MessageManager; + +import java.awt.Color; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Vector; public class PDBfile extends jalview.io.AlignFile { @@ -40,14 +46,33 @@ public class PDBfile extends jalview.io.AlignFile */ boolean VisibleChainAnnotation = false; - public PDBfile(String inFile, String inType) throws IOException + boolean processSecondaryStructure=true; + + + public PDBfile(boolean visibleChainAnnotation, + boolean processSecondaryStructure) { - super(inFile, inType); + super(); + VisibleChainAnnotation = visibleChainAnnotation; + this.processSecondaryStructure = processSecondaryStructure; } - public PDBfile(FileParse source) throws IOException + public PDBfile(boolean visibleChainAnnotation, + boolean processSecondaryStructure, String file, String protocol) throws IOException { - super(source); + super(false, file, protocol); + VisibleChainAnnotation = visibleChainAnnotation; + this.processSecondaryStructure = processSecondaryStructure; + doParse(); + } + + public PDBfile(boolean visibleChainAnnotation, + boolean processSecondaryStructure, FileParse source) throws IOException + { + super(false, source); + VisibleChainAnnotation = visibleChainAnnotation; + this.processSecondaryStructure = processSecondaryStructure; + doParse(); } public String print() @@ -61,7 +86,7 @@ public class PDBfile extends jalview.io.AlignFile id = safeName(getDataName()); chains = new Vector(); - ArrayList rna=new ArrayList(), prot=new ArrayList(); + ArrayList rna = new ArrayList(), prot = new ArrayList(); PDBChain tmpchain; String line = null; boolean modelFlag = false; @@ -161,8 +186,10 @@ public class PDBfile extends jalview.io.AlignFile PDBEntry entry = new PDBEntry(); entry.setId(id); entry.setProperty(new Hashtable()); - if (((PDBChain)chains.elementAt(i)).id!=null) { - entry.getProperty().put("CHAIN", ((PDBChain)chains.elementAt(i)).id); + if (((PDBChain) chains.elementAt(i)).id != null) + { + entry.getProperty().put("CHAIN", + ((PDBChain) chains.elementAt(i)).id); } if (inFile != null) { @@ -178,56 +205,62 @@ public class PDBfile extends jalview.io.AlignFile // maintain reference to // dataset seqs.addElement(chainseq); - if(isRNA(chainseq)==true) - { - rna.add(chainseq); - } else { - prot.add(chainseq); - } - + if (isRNA(chainseq) == true) + { + rna.add(chainseq); + } + else + { + prot.add(chainseq); + } + AlignmentAnnotation[] chainannot = chainseq.getAnnotation(); - + if (chainannot != null) { for (int ai = 0; ai < chainannot.length; ai++) { - chainannot[ai].visible = VisibleChainAnnotation; annotations.addElement(chainannot[ai]); } } } - if (rna.size()>0) - try { - processPdbFileWithAnnotate3d(rna); - } catch (Exception x) + if (processSecondaryStructure) { - System.err.println("Exceptions when dealing with RNA in pdb file"); - x.printStackTrace(); - - }; - if (prot.size()>0) - try { - processPdbFileWithJmol(prot); - } catch (Exception x) + if (rna.size() > 0) { - System.err.println("Exceptions when dealing with RNA in pdb file"); - x.printStackTrace(); - - }; - if (prot.size()>0) - try { - processPdbFileWithJmol(prot); - } catch (Exception x) + try + { + processPdbFileWithAnnotate3d(rna); + } catch (Exception x) + { + System.err + .println("Exceptions when dealing with RNA in pdb file"); + x.printStackTrace(); + + } + } + ; + if (prot.size() > 0) { - System.err.println("Exceptions when dealing with RNA in pdb file"); - x.printStackTrace(); - - }; + try + { + processPdbFileWithJmol(prot); + } catch (Exception x) + { + System.err + .println("Exceptions from Jmol when processing data in pdb file"); + x.printStackTrace(); + + } + } + } } catch (OutOfMemoryError er) { System.out.println("OUT OF MEMORY LOADING PDB FILE"); - throw new IOException("Out of memory loading PDB File"); + throw new IOException( + MessageManager + .getString("exception.outofmemory_loading_pdb_file")); } catch (NumberFormatException ex) { if (line != null) @@ -236,95 +269,82 @@ public class PDBfile extends jalview.io.AlignFile System.err.println(line); } } + markCalcIds(); + } + + public static boolean isCalcIdForFile(String calcId, String pdbFile) + { + return (calcId != null && calcId.startsWith("JalviewPDB:" + pdbFile + + ":JalviewPDB:")); + } + private void markCalcIds() + { + for (SequenceI sq : seqs) + { + for (AlignmentAnnotation aa : sq.getAnnotation()) + { + String oldId = aa.getCalcId(); + if (oldId == null) + { + oldId = ""; + } + aa.setCalcId("JalviewPDB:" + id + ":JalviewPDB:" + oldId); + } + } } - private void processPdbFileWithJmol(ArrayList prot) throws Exception + private void processPdbFileWithJmol(ArrayList prot) + throws Exception { - try { + try + { Class cl = Class.forName("jalview.ext.jmol.PDBFileWithJmol"); - if (cl!=null) + if (cl != null) { - Object jmf = cl.getConstructor(new Class[] {FileParse.class}).newInstance(new Object[] {new FileParse(getDataName(),type)}); - Alignment al = new Alignment((SequenceI[]) cl.getMethod("getSeqsAsArray", new Class[] {}).invoke(jmf)); - cl.getMethod("addAnnotations",new Class[] {Alignment.class}).invoke(jmf, al); - replaceMatchingSeqsWith(prot, al, AlignSeq.PEP); + Object jmf = cl.getConstructor(new Class[] + { FileParse.class }).newInstance(new Object[] + { new FileParse(getDataName(), type) }); + Alignment al = new Alignment((SequenceI[]) cl.getMethod( + "getSeqsAsArray", new Class[] + {}).invoke(jmf)); + cl.getMethod("addAnnotations", new Class[] + { Alignment.class }).invoke(jmf, al); + AlignSeq.replaceMatchingSeqsWith(seqs, annotations, prot, al, AlignSeq.PEP, false); } } catch (ClassNotFoundException q) - {} - } - private void processPdbFileWithAnnotate3d(ArrayList rna) throws Exception { -// System.out.println("this is a PDB format and RNA sequence"); - // note: we use reflection here so that the applet can compile and run without the HTTPClient bits and pieces needed for accessing Annotate3D web service - try { - Class cl = Class.forName("jalview.ws.jws1.Annotate3D"); - if (cl!=null) { - // TODO: use the PDB ID of the structure if one is available, to save bandwidth and avoid uploading the whole structure to the service - Object annotate3d = cl.getConstructor(new Class[] {}).newInstance(new Object[] {}); - AlignmentI al = ((AlignmentI) cl.getMethod("getRNAMLFor", new Class[] { FileParse.class}).invoke(annotate3d, new Object[] { new FileParse(getDataName(),type)})); - replaceMatchingSeqsWith(rna, al, AlignSeq.DNA); } - } catch (ClassNotFoundException x) - { - //ignore classnotfounds - occurs in applet - }; } - private void replaceMatchingSeqsWith(ArrayList ochains, AlignmentI al, String dnaOrProtein) + + private void processPdbFileWithAnnotate3d(ArrayList rna) + throws Exception { - if (al!=null && al.getHeight()>0) + // System.out.println("this is a PDB format and RNA sequence"); + // note: we use reflection here so that the applet can compile and run + // without the HTTPClient bits and pieces needed for accessing Annotate3D + // web service + try { - ArrayList matches=new ArrayList(); - ArrayList aligns=new ArrayList(); - - for (SequenceI sq:ochains) + Class cl = Class.forName("jalview.ws.jws1.Annotate3D"); + if (cl != null) { - SequenceI bestm=null; - AlignSeq bestaseq=null; - int bestscore=0; - for (SequenceI msq:al.getSequences()) - { - AlignSeq aseq = AlignSeq.doGlobalNWAlignment(msq, sq, dnaOrProtein); - if (bestm==null || aseq.getMaxScore()>bestscore) - { - bestscore=aseq.getMaxScore(); - bestaseq= aseq; - bestm=msq; - } - } - System.out.println("Best Score for "+(matches.size()+1)+" :"+bestscore); - matches.add(bestm); - aligns.add(bestaseq); - al.deleteSequence(bestm); - } - for (int p=0,pSize=seqs.size();p-1) - { - seqs.set(p, sq=matches.get(q)); - sq.setName(sp.getName()); - sq.setDescription(sp.getDescription()); - sq.transferAnnotation(sp, aligns.get(q).getMappingFromS1(false)); - int inspos=-1; - for (int ap=0;ap