X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fpymol%2FPymolCommands.java;h=b69d3e390c4007d0141da778d972da55e187518f;hb=966baa18c09b8fb041b874acdb8a850ad143d205;hp=bba11a1bcd2d5f2fe343dfbda0af00857b083330;hpb=7720585dc8cc56cdad2486b330ed37ddd0133531;p=jalview.git diff --git a/src/jalview/ext/pymol/PymolCommands.java b/src/jalview/ext/pymol/PymolCommands.java index bba11a1..b69d3e3 100644 --- a/src/jalview/ext/pymol/PymolCommands.java +++ b/src/jalview/ext/pymol/PymolCommands.java @@ -2,6 +2,7 @@ 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 +23,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 +84,7 @@ public class PymolCommands extends StructureCommandsBase @Override public StructureCommandI focusView() { - // TODO what? - return null; + return FOCUS_VIEW; } @Override @@ -91,26 +99,32 @@ 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 +158,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 +189,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 +247,7 @@ public class PymolCommands extends StructureCommandsBase final AtomSpecModel colourData = colourMap.get(colour); commands.add(getColourCommand(colourData, colour)); } - + return commands; } @@ -247,13 +265,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 +299,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 values = featureMap.get(featureType); for (Object value : values.keySet()) { @@ -305,7 +322,7 @@ public class PymolCommands extends StructureCommandsBase commands.add(cmd); } } - + return commands; } @@ -313,7 +330,15 @@ public class PymolCommands extends StructureCommandsBase public StructureCommandI openSession(String filepath) { // https://pymolwiki.org/index.php/Load - return new StructureCommand("load", "", "0", "pse"); + // this version of the command has no dependency on file extension + return new StructureCommand("load", filepath, "", "0", "pse"); + } + + @Override + public StructureCommandI closeViewer() + { + // https://pymolwiki.org/index.php/Quit + return CLOSE_PYMOL; } }