From a90e0eeb2b61e962b86e9dcef586f9e4224405b0 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 27 Aug 2010 11:32:40 +0000 Subject: [PATCH] patch re http://issues.jalview.org/browse/JAL-583 : hack to prevent chains being mapped to sequences with different chainspecs --- .../structure/StructureSelectionManager.java | 34 +++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 9797a20..936f139 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -96,13 +96,22 @@ public class StructureSelectionManager return null; } - /* - * There will be better ways of doing this in the future, for now we'll use - * the tried and tested MCview pdb mapping + /** + * 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 + * @return null or the structure data parsed as a pdb file */ synchronized public MCview.PDBfile setMapping(SequenceI[] sequence, String[] targetChains, String pdbFile, String protocol) { + /* + * There will be better ways of doing this in the future, for now we'll use + * the tried and tested MCview pdb mapping + */ MCview.PDBfile pdb = null; try { @@ -130,10 +139,16 @@ public class StructureSelectionManager AlignSeq maxAlignseq = null; String maxChainId = " "; PDBChain maxChain = null; - + 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 + PDBChain chain = ((PDBChain) pdb.chains.elementAt(i)); + 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 @@ -141,18 +156,21 @@ public class StructureSelectionManager .elementAt(i)).isNa ? AlignSeq.DNA : AlignSeq.PEP); as.calcScoreMatrix(); as.traceAlignment(); - PDBChain chain = ((PDBChain) pdb.chains.elementAt(i)); - if (as.maxscore > max + if (first || as.maxscore > max || (as.maxscore == max && chain.id.equals(targetChain))) { + first=false; maxChain = chain; max = as.maxscore; maxAlignseq = as; maxChainId = chain.id; } } - + if (maxChain==null) + { + continue; + } final StringBuffer mappingDetails = new StringBuffer(); mappingDetails.append("\n\nPDB Sequence is :\nSequence = " + maxChain.sequence.getSequenceAsString()); -- 1.7.10.2