resolved merge conflict
[jalview.git] / src / jalview / structure / StructureSelectionManager.java
index 671c325..59f37d9 100644 (file)
@@ -454,7 +454,7 @@ public class StructureSelectionManager
         {
           if (targetChainId.trim().length() == 0)
           {
-            targetChainId = " ";
+            targetChainId = StructureMapping.NO_CHAIN;
           }
           else
           {
@@ -474,7 +474,7 @@ public class StructureSelectionManager
        */
       int max = -10;
       AlignSeq maxAlignseq = null;
-      String maxChainId = " ";
+      String maxChainId = StructureMapping.NO_CHAIN; // space
       PDBChain maxChain = null;
       boolean first = true;
       for (PDBChain chain : pdb.getChains())
@@ -600,11 +600,16 @@ public class StructureSelectionManager
         setProgressBar(null);
         setProgressBar(MessageManager
                 .getString("status.obtaining_mapping_with_phyre2_template_alignment"));
+        String fastaFile = getPhyre2FastaFileFor(pdbFile);
         StructureMapping phyre2ModelMapping = new Phyre2Client(pdb)
-                .getStructureMapping(seq, pdbFile,
-                        getPhyre2FastaFileFor(pdbFile), " ");
-
+                .getStructureMapping(seq, pdbFile, fastaFile,
+                        StructureMapping.NO_CHAIN);
         seqToStrucMapping.add(phyre2ModelMapping);
+        maxChain.makeExactMapping(maxAlignseq, seq);
+        maxChain.transferRESNUMFeatures(seq, null);
+        jalview.datamodel.Mapping sqmpping = maxAlignseq
+                .getMappingFromS1(false);
+        maxChain.transferResidueAnnotation(phyre2ModelMapping, sqmpping);
         ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0));
       }
       else
@@ -781,7 +786,7 @@ public class StructureSelectionManager
       if (listeners.elementAt(i) instanceof StructureListener)
       {
         sl = (StructureListener) listeners.elementAt(i);
-        for (String pdbfile : sl.getPdbFile())
+        for (String pdbfile : sl.getStructureFiles())
         {
           pdbs.remove(pdbfile);
         }
@@ -846,6 +851,27 @@ public class StructureSelectionManager
       return;
     }
 
+    SearchResultsI results = findAlignmentPositionsForStructurePositions(atoms);
+    for (Object li : listeners)
+    {
+      if (li instanceof SequenceListener)
+      {
+        ((SequenceListener) li).highlightSequence(results);
+      }
+    }
+  }
+
+  /**
+   * Constructs a SearchResults object holding regions (if any) in the Jalview
+   * alignment which have a mapping to the structure viewer positions in the
+   * supplied list
+   * 
+   * @param atoms
+   * @return
+   */
+  public SearchResultsI findAlignmentPositionsForStructurePositions(
+          List<AtomSpec> atoms)
+  {
     SearchResultsI results = new SearchResults();
     for (AtomSpec atom : atoms)
     {
@@ -857,7 +883,7 @@ public class StructureSelectionManager
                 && sm.pdbchain.equals(atom.getChain()))
         {
           int indexpos = sm.getSeqPos(atom.getPdbResNum());
-          if (lastipos != indexpos && lastseq != sm.sequence)
+          if (lastipos != indexpos || lastseq != sm.sequence)
           {
             results.addResult(sm.sequence, indexpos, indexpos);
             lastipos = indexpos;
@@ -871,13 +897,7 @@ public class StructureSelectionManager
         }
       }
     }
-    for (Object li : listeners)
-    {
-      if (li instanceof SequenceListener)
-      {
-        ((SequenceListener) li).highlightSequence(results);
-      }
-    }
+    return results;
   }
 
   /**
@@ -1418,4 +1438,9 @@ public class StructureSelectionManager
     return instances.values().iterator().next();
   }
 
+  public void addStructureMapping(StructureMapping smapping)
+  {
+    mappings.add(smapping);
+  }
+
 }