Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / src / jalview / ext / pymol / PymolCommands.java
index 36957f5..b8b6a98 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.ext.pymol;
 
 import java.awt.Color;
@@ -106,20 +126,27 @@ public class PymolCommands extends StructureCommandsBase
 
   @Override
   public List<StructureCommandI> superposeStructures(AtomSpecModel refAtoms,
-          AtomSpecModel atomSpec)
+          AtomSpecModel atomSpec, AtomSpecType specType)
   {
+
     // https://pymolwiki.org/index.php/Super
     List<StructureCommandI> commands = new ArrayList<>();
-    String refAtomsAlphaOnly = getAtomSpec(refAtoms, true);
-    String atomSpec2AlphaOnly = getAtomSpec(atomSpec, true);
-    commands.add(new StructureCommand("super", refAtomsAlphaOnly,
-            atomSpec2AlphaOnly));
+    String refAtomsAlphaOnly = "(" + getAtomSpec(refAtoms, specType)
+            + " and (altloc '' or altloc 'a'))";
+    String atomSpec2AlphaOnly = "(" + getAtomSpec(atomSpec, specType)
+            + " and (altloc '' or altloc 'a'))";
+    // pair_fit mobile -> reference
+    // crashes when undo is enabled on 2.5.2 (incentive)
+    commands.add(new StructureCommand("undo_disable"));
+    commands.add(new StructureCommand("pair_fit", atomSpec2AlphaOnly,
+            refAtomsAlphaOnly));
+    commands.add(new StructureCommand("undo_enable"));
 
     /*
      * and show superposed residues as cartoon
      */
-    String refAtomsAll = getAtomSpec(refAtoms, false);
-    String atomSpec2All = getAtomSpec(atomSpec, false);
+    String refAtomsAll = getAtomSpec(refAtoms, AtomSpecType.RESIDUE_ONLY);
+    String atomSpec2All = getAtomSpec(atomSpec, AtomSpecType.RESIDUE_ONLY);
     commands.add(new StructureCommand("show", "cartoon",
             refAtomsAll + " " + atomSpec2All));
 
@@ -153,7 +180,7 @@ public class PymolCommands extends StructureCommandsBase
    * @see https://pymolwiki.org/index.php/Selection_Macros
    */
   @Override
-  public String getAtomSpec(AtomSpecModel model, boolean alphaOnly)
+  public String getAtomSpec(AtomSpecModel model, AtomSpecType specType)
   {
     StringBuilder sb = new StringBuilder(64);
     boolean first = true;
@@ -184,10 +211,14 @@ public class PymolCommands extends StructureCommandsBase
           }
         }
         sb.append("/");
-        if (alphaOnly)
+        if (specType == AtomSpecType.ALPHA)
         {
           sb.append("CA");
         }
+        if (specType == AtomSpecType.PHOSPHATE)
+        {
+          sb.append("P");
+        }
       }
     }
     return sb.toString();
@@ -261,7 +292,7 @@ public class PymolCommands extends StructureCommandsBase
     StringBuilder sb = new StringBuilder(128);
     sb.append("p.").append(attributeName).append("='")
             .append(attributeValue).append("'");
-    String atomSpec = getAtomSpec(atomSpecModel, false);
+    String atomSpec = getAtomSpec(atomSpecModel, AtomSpecType.RESIDUE_ONLY);
     return new StructureCommand("iterate", atomSpec, sb.toString());
   }