patch re http://issues.jalview.org/browse/JAL-583 : hack to prevent chains being...
authorjprocter <Jim Procter>
Fri, 27 Aug 2010 11:32:40 +0000 (11:32 +0000)
committerjprocter <Jim Procter>
Fri, 27 Aug 2010 11:32:40 +0000 (11:32 +0000)
src/jalview/structure/StructureSelectionManager.java

index 9797a20..936f139 100644 (file)
@@ -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());