From 27de1236a81237ca094abd34661ee156c1bdb521 Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 31 Aug 2010 16:16:06 +0000 Subject: [PATCH] fixed various null pointer exceptions that occur when PDB files imported into Jmol which do not map to a sequence --- .../structure/StructureSelectionManager.java | 83 +++++++++++--------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 936f139..0fb8428 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -97,12 +97,18 @@ public class StructureSelectionManager } /** - * create sequence structure mappings between each sequence and the given pdbFile (retrieved via the given protocol). + * create sequence structure mappings between each sequence and the given + * pdbFile (retrieved via the given protocol). * - * @param sequence - one or more sequences to be mapped to pdbFile - * @param targetChains - optional chain specification for mapping each sequence to pdb (may be nill, individual elements may be nill) - * @param pdbFile - structure data resource - * @param protocol - how to resolve data from resource + * @param sequence + * - one or more sequences to be mapped to pdbFile + * @param targetChains + * - optional chain specification for mapping each sequence to pdb + * (may be nill, individual elements may be nill) + * @param pdbFile + * - structure data resource + * @param protocol + * - how to resolve data from resource * @return null or the structure data parsed as a pdb file */ synchronized public MCview.PDBfile setMapping(SequenceI[] sequence, @@ -139,35 +145,37 @@ public class StructureSelectionManager AlignSeq maxAlignseq = null; String maxChainId = " "; PDBChain maxChain = null; - boolean first=true; + boolean first = true; for (int i = 0; i < pdb.chains.size(); i++) { - // TODO: re http://issues.jalview.org/browse/JAL-583 : this patch may need to be revoked + // TODO: re http://issues.jalview.org/browse/JAL-583 : this patch may + // need to be revoked PDBChain chain = ((PDBChain) pdb.chains.elementAt(i)); - if (targetChain.length()>0 && !targetChain.equals(chain.id)) + if (targetChain.length() > 0 && !targetChain.equals(chain.id)) { continue; // don't try to map chains don't match. } // end of patch for limiting computed mappings // TODO: correctly determine sequence type for mixed na/peptide // structures - AlignSeq as = new AlignSeq(sequence[s], ((PDBChain) pdb.chains - .elementAt(i)).sequence, ((PDBChain) pdb.chains - .elementAt(i)).isNa ? AlignSeq.DNA : AlignSeq.PEP); + AlignSeq as = new AlignSeq(sequence[s], + ((PDBChain) pdb.chains.elementAt(i)).sequence, + ((PDBChain) pdb.chains.elementAt(i)).isNa ? AlignSeq.DNA + : AlignSeq.PEP); as.calcScoreMatrix(); as.traceAlignment(); if (first || as.maxscore > max || (as.maxscore == max && chain.id.equals(targetChain))) { - first=false; + first = false; maxChain = chain; max = as.maxscore; maxAlignseq = as; maxChainId = chain.id; } } - if (maxChain==null) + if (maxChain == null) { continue; } @@ -233,8 +241,8 @@ public class StructureSelectionManager pdbFile = "INLINE" + pdb.id; mappings[mappings.length - 1] = new StructureMapping(sequence[s], - pdbFile, pdb.id, maxChainId, mapping, mappingDetails - .toString()); + pdbFile, pdb.id, maxChainId, mapping, + mappingDetails.toString()); maxChain.transferResidueAnnotation(mappings[mappings.length - 1]); } // /////// @@ -245,7 +253,7 @@ public class StructureSelectionManager public void removeStructureViewerListener(Object svl, String[] pdbfiles) { listeners.removeElement(svl); - if (pdbfiles==null) + if (pdbfiles == null) { return; } @@ -271,8 +279,8 @@ public class StructureSelectionManager } } - - if (pdbs.size()>0 && mappings != null) + + if (pdbs.size() > 0 && mappings != null) { Vector tmp = new Vector(); for (int i = 0; i < mappings.length; i++) @@ -301,23 +309,26 @@ public class StructureSelectionManager results = new SearchResults(); } int indexpos; - for (int j = 0; j < mappings.length; j++) + if (mappings != null) { - if (mappings[j].pdbfile.equals(pdbfile) - && mappings[j].pdbchain.equals(chain)) + for (int j = 0; j < mappings.length; j++) { - indexpos = mappings[j].getSeqPos(pdbResNum); - results.addResult(mappings[j].sequence, indexpos, indexpos); - // construct highlighted sequence list - if (seqmappings != null) + if (mappings[j].pdbfile.equals(pdbfile) + && mappings[j].pdbchain.equals(chain)) { + indexpos = mappings[j].getSeqPos(pdbResNum); + results.addResult(mappings[j].sequence, indexpos, indexpos); + // construct highlighted sequence list + if (seqmappings != null) + { - Enumeration e = seqmappings.elements(); - while (e.hasMoreElements()) + Enumeration e = seqmappings.elements(); + while (e.hasMoreElements()) - { - ((AlignedCodonFrame) e.nextElement()).markMappedRegion( - mappings[j].sequence, indexpos, results); + { + ((AlignedCodonFrame) e.nextElement()).markMappedRegion( + mappings[j].sequence, indexpos, results); + } } } } @@ -361,7 +372,7 @@ public class StructureSelectionManager if (listeners.elementAt(i) instanceof StructureListener) { sl = (StructureListener) listeners.elementAt(i); - if (mappings==null) + if (mappings == null) { continue; } @@ -524,14 +535,16 @@ public class StructureSelectionManager public StructureMapping[] getMapping(String pdbfile) { Vector tmp = new Vector(); - for (int i = 0; i < mappings.length; i++) + if (mappings != null) { - if (mappings[i].pdbfile.equals(pdbfile)) + for (int i = 0; i < mappings.length; i++) { - tmp.addElement(mappings[i]); + if (mappings[i].pdbfile.equals(pdbfile)) + { + tmp.addElement(mappings[i]); + } } } - StructureMapping[] ret = new StructureMapping[tmp.size()]; for (int i = 0; i < tmp.size(); i++) { -- 1.7.10.2