X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fpymol%2FPymolCommands.java;fp=src%2Fjalview%2Fext%2Fpymol%2FPymolCommands.java;h=53b1ec5b77f525fcb877120d22e112f12258ac05;hb=2107a91322a1988a8a6b724c74f9d244795341e3;hp=e4f9f5f8d27911efec4a26791c70e98e05898071;hpb=cc4e7c2176bfc8c9c50ef2d8dde62f7bd80517db;p=jalview.git diff --git a/src/jalview/ext/pymol/PymolCommands.java b/src/jalview/ext/pymol/PymolCommands.java index e4f9f5f..53b1ec5 100644 --- a/src/jalview/ext/pymol/PymolCommands.java +++ b/src/jalview/ext/pymol/PymolCommands.java @@ -191,7 +191,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); @@ -233,4 +233,80 @@ public class PymolCommands extends StructureCommandsBase return commands; } + /** + * Returns a viewer command to set the given atom property value on atoms + * specified by the AtomSpecModel, for example + * + *
+   * iterate 4zho//B/12-34,48-55/CA,jv_chain='primary'
+   * 
+ * + * @param attributeName + * @param attributeValue + * @param atomSpecModel + * @return + */ + protected StructureCommandI setAttribute(String attributeName, + String attributeValue, + AtomSpecModel atomSpecModel) + { + StringBuilder sb = new StringBuilder(128); + sb.append("p.").append(attributeName).append("='") + .append(attributeValue).append("'"); + String atomSpec = getAtomSpec(atomSpecModel, false); + return new StructureCommand("iterate", atomSpec, sb.toString()); + } + + /** + * Traverse the map of features/values/models/chains/positions to construct a + * list of 'set property' commands (one per distinct feature type and value). + * The values are stored in the 'p' dictionary of user-defined properties of + * each atom. + *

+ * The format of each command is + * + *

+   * 
iterate atomspec, p.featureName='value' + * e.g. iterate 4zho//A/23,28-29/CA, p.jv_Metal='Fe' + *
+ *
+ * + * @param featureMap + * @return + */ + @Override + public List setAttributes( + Map> featureMap) + { + List commands = new ArrayList<>(); + 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()) + { + /* + * for each distinct value recorded for this feature type, + * add a command to set the attribute on the mapped residues + * Put values in single quotes, encoding any embedded single quotes + */ + AtomSpecModel atomSpecModel = values.get(value); + String featureValue = value.toString(); + featureValue = featureValue.replaceAll("\\'", "'"); + StructureCommandI cmd = setAttribute(attributeName, featureValue, + atomSpecModel); + commands.add(cmd); + } + } + + return commands; + } + }