X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fpymol%2FPymolCommands.java;h=ed64c006002f22a161bf2582ea46e6ae8af8dabf;hb=f9062df1303c1ff071075256cf4b7ad7c9db9658;hp=16386440f5c662b77beacf51ec2fc7cde8e5f83e;hpb=42f4227ed213d422a87d3b22fc9e85d14ffaf53f;p=jalview.git
diff --git a/src/jalview/ext/pymol/PymolCommands.java b/src/jalview/ext/pymol/PymolCommands.java
index 1638644..ed64c00 100644
--- a/src/jalview/ext/pymol/PymolCommands.java
+++ b/src/jalview/ext/pymol/PymolCommands.java
@@ -1,48 +1,57 @@
package jalview.ext.pymol;
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
import jalview.structure.AtomSpecModel;
import jalview.structure.StructureCommand;
import jalview.structure.StructureCommandI;
import jalview.structure.StructureCommandsBase;
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-
/**
- * A class that generates commands to send to PyMol
+ * A class that generates commands to send to PyMol over its XML-RPC interface.
+ *
+ * Note that because the xml-rpc interface can only accept one command at a
+ * time, we can't concatenate commands, and must instead form and send them
+ * individually.
*
* @see https://pymolwiki.org/index.php/Category:Commands
+ * @see https://pymolwiki.org/index.php/RPC
*/
public class PymolCommands extends StructureCommandsBase
{
- private static final StructureCommandI COLOUR_BY_CHAIN = new StructureCommand(
- "util.cbc");
+ // https://pymol.org/dokuwiki/doku.php?id=command:zoom
+ // not currently documented on
+ // https://pymolwiki.org/index.php/Category:Commands
+ private static final StructureCommand FOCUS_VIEW = new StructureCommand(
+ "zoom");
- /*
- * because the xml-rpc interface can only accept one command at a time, we can't
- * concatenate commands and must instead form and send them individually
- */
- private static final List COLOR_BY_CHARGE = new ArrayList<>();
+ // https://pymolwiki.org/index.php/Quit
+ private static final StructureCommand CLOSE_PYMOL = new StructureCommand(
+ "quit");
- private static final List SHOW_BACKBONE = new ArrayList<>();
+ // not currently documented on
+ // https://pymolwiki.org/index.php/Category:Commands
+ private static final StructureCommand COLOUR_BY_CHAIN = new StructureCommand(
+ "spectrum", "chain");
- static {
- COLOR_BY_CHARGE.add(new StructureCommand("color", "white", "*"));
- COLOR_BY_CHARGE
- .add(new StructureCommand("color", "red", "resn ASP resn GLU"));
- COLOR_BY_CHARGE.add(
- new StructureCommand("color", "blue", "resn LYS resn ARG"));
- COLOR_BY_CHARGE.add(new StructureCommand("color"));
- SHOW_BACKBONE.add(new StructureCommand("hide", "everything"));
- SHOW_BACKBONE.add(new StructureCommand("show", "ribbon"));
- }
+ private static final List COLOR_BY_CHARGE = Arrays
+ .asList(new StructureCommand("color", "white", "*"),
+ new StructureCommand("color", "red", "resn ASP resn GLU"),
+ new StructureCommand("color", "blue",
+ "resn LYS resn ARG"),
+ new StructureCommand("color", "yellow", "resn CYS"));
+
+ private static final List SHOW_BACKBONE = Arrays
+ .asList(new StructureCommand("hide", "everything"),
+ new StructureCommand("show", "ribbon"));
@Override
public StructureCommandI colourByChain()
{
- // https://pymolwiki.org/index.php/CBC
- // TODO this doesn't execute as an xml-rpc command
return COLOUR_BY_CHAIN;
}
@@ -75,8 +84,7 @@ public class PymolCommands extends StructureCommandsBase
@Override
public StructureCommandI focusView()
{
- // TODO what?
- return null;
+ return FOCUS_VIEW;
}
@Override
@@ -91,26 +99,29 @@ public class PymolCommands extends StructureCommandsBase
{
chains.append(" chain ").append(chain);
}
- commands.add(new StructureCommand("show", "cartoon", chains.toString()));
+ commands.add(
+ new StructureCommand("show", "cartoon", chains.toString()));
return commands;
}
@Override
public List superposeStructures(AtomSpecModel refAtoms,
- AtomSpecModel atomSpec)
+ AtomSpecModel atomSpec, AtomSpecType specType)
{
+
// https://pymolwiki.org/index.php/Super
List 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
+ commands.add(new StructureCommand("pair_fit",
+ atomSpec2AlphaOnly, refAtomsAlphaOnly));
/*
* 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));
@@ -120,9 +131,8 @@ public class PymolCommands extends StructureCommandsBase
@Override
public StructureCommandI openCommandFile(String path)
{
- // where is this documented by PyMol?
- // todo : xml-rpc answers 'method "@" is not supported'
- return new StructureCommand("@" + path); // should be .pml
+ // https://pymolwiki.org/index.php/Run
+ return new StructureCommand("run", path); // should be .pml
}
@Override
@@ -145,7 +155,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;
@@ -176,10 +186,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();
@@ -192,7 +206,7 @@ public class PymolCommands extends StructureCommandsBase
}
@Override
- protected StructureCommandI getColourCommand(String atomSpec, Color colour)
+ protected StructureCommandI colourResidues(String atomSpec, Color colour)
{
// https://pymolwiki.org/index.php/Color
return new StructureCommand("color", getColourString(colour), atomSpec);
@@ -211,4 +225,117 @@ public class PymolCommands extends StructureCommandsBase
return new StructureCommand("load", file);
}
+ /**
+ * Overrides the default implementation (which generates concatenated
+ * commands) to generate one per colour (because the XML-RPC interface to
+ * PyMOL only accepts one command at a time)
+ *
+ * @param colourMap
+ * @return
+ */
+ @Override
+ public List colourBySequence(
+ Map