X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fext%2Fpymol%2FPymolCommands.java;h=08521a28aab9255f373b6788de26b6279739dd81;hb=c1e71094304dcd2b975c485416ec5e25cca30815;hp=7e5ba2d12bc5b7582d64233036186e4b3b7f03d1;hpb=2fb924ec0d110eb3ca6c3fb06efa27acd34b2750;p=jalview.git
diff --git a/src/jalview/ext/pymol/PymolCommands.java b/src/jalview/ext/pymol/PymolCommands.java
index 7e5ba2d..08521a2 100644
--- a/src/jalview/ext/pymol/PymolCommands.java
+++ b/src/jalview/ext/pymol/PymolCommands.java
@@ -1,7 +1,28 @@
+/*
+ * 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 .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.ext.pymol;
import java.awt.Color;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -22,23 +43,31 @@ import jalview.structure.StructureCommandsBase;
*/
public class PymolCommands extends StructureCommandsBase
{
- private static final StructureCommand COLOUR_BY_CHAIN = new StructureCommand("spectrum", "chain");
-
- private static final List COLOR_BY_CHARGE = new ArrayList<>();
-
- private static final List SHOW_BACKBONE = new ArrayList<>();
-
- 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", "yellow", "resn CYS"));
- SHOW_BACKBONE.add(new StructureCommand("hide", "everything"));
- SHOW_BACKBONE.add(new StructureCommand("show", "ribbon"));
- }
+ // 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");
+
+ // https://pymolwiki.org/index.php/Quit
+ private static final StructureCommand CLOSE_PYMOL = new StructureCommand(
+ "quit");
+
+ // not currently documented on
+ // https://pymolwiki.org/index.php/Category:Commands
+ private static final StructureCommand COLOUR_BY_CHAIN = new StructureCommand(
+ "spectrum", "chain");
+
+ 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()
@@ -75,8 +104,7 @@ public class PymolCommands extends StructureCommandsBase
@Override
public StructureCommandI focusView()
{
- // TODO what?
- return null;
+ return FOCUS_VIEW;
}
@Override
@@ -91,26 +119,34 @@ 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
+ // 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));
@@ -144,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;
@@ -175,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();
@@ -229,7 +269,7 @@ public class PymolCommands extends StructureCommandsBase
final AtomSpecModel colourData = colourMap.get(colour);
commands.add(getColourCommand(colourData, colour));
}
-
+
return commands;
}
@@ -247,13 +287,12 @@ public class PymolCommands extends StructureCommandsBase
* @return
*/
protected StructureCommandI setAttribute(String attributeName,
- String attributeValue,
- AtomSpecModel atomSpecModel)
+ String attributeValue, AtomSpecModel atomSpecModel)
{
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());
}
@@ -282,13 +321,13 @@ public class PymolCommands extends StructureCommandsBase
for (String featureType : featureMap.keySet())
{
String attributeName = makeAttributeName(featureType);
-
+
/*
* todo: clear down existing attributes for this feature?
*/
// commands.add(new StructureCommand("iterate", "all",
// "p."+attributeName+"='None'"); //?
-
+
Map