X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Frbvi%2Fchimera%2FJalviewChimeraBinding.java;h=3498f239ab9929b7d8f11ddd69808fbc2098ac99;hb=ec1c914a99011e20634fbff19df71e2627766dfd;hp=00446f2ab334d297adb824bfed7a4370a55dee21;hpb=3d0101179759ef157b088ea135423cd909512d9f;p=jalview.git diff --git a/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java b/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java index 00446f2..3498f23 100644 --- a/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java +++ b/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java @@ -20,8 +20,8 @@ */ package jalview.ext.rbvi.chimera; +import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; -import jalview.api.SequenceRenderer; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.datamodel.AlignmentI; @@ -40,6 +40,7 @@ import jalview.structure.StructureMappingcommandSet; import jalview.structure.StructureSelectionManager; import jalview.structures.models.AAStructureBindingModel; import jalview.util.MessageManager; +import jalview.util.StructureCommands; import java.awt.Color; import java.io.File; @@ -76,9 +77,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel private static final String ALPHACARBON = "CA"; - private List chainNames = new ArrayList(); - - private Hashtable chainFile = new Hashtable(); + private Hashtable chainFile = new Hashtable<>(); /* * Object through which we talk to Chimera @@ -106,7 +105,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel /* * Map of ChimeraModel objects keyed by PDB full local file name */ - private Map> chimeraMaps = new LinkedHashMap>(); + private Map> chimeraMaps = new LinkedHashMap<>(); String lastHighlightCommand; @@ -133,7 +132,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel String file = pe.getFile(); try { - List modelsToMap = new ArrayList(); + List modelsToMap = new ArrayList<>(); List oldList = viewer.getModelList(); boolean alreadyOpen = false; @@ -248,43 +247,6 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel } /** - * Tells Chimera to display only the specified chains - * - * @param toshow - */ - public void showChains(List toshow) - { - /* - * Construct a chimera command like - * - * ~display #*;~ribbon #*;ribbon :.A,:.B - */ - StringBuilder cmd = new StringBuilder(64); - boolean first = true; - for (String chain : toshow) - { - int modelNumber = getModelNoForChain(chain); - String showChainCmd = modelNumber == -1 ? "" - : modelNumber + ":." + chain.split(":")[1]; - if (!first) - { - cmd.append(","); - } - cmd.append(showChainCmd); - first = false; - } - - /* - * could append ";focus" to this command to resize the display to fill the - * window, but it looks more helpful not to (easier to relate chains to the - * whole) - */ - final String command = "~display #*; ~ribbon #*; ribbon :" - + cmd.toString(); - sendChimeraCommand(command, false); - } - - /** * Close down the Jalview viewer and listener, and (optionally) the associated * Chimera window. */ @@ -499,7 +461,8 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel * @see * https://www.cgl.ucsf.edu/chimera/docs/UsersGuide/midas/match.html */ - command.append("match ").append(getModelSpec(pdbfnum)).append(":"); + command.append("match ").append(getModelSpec(pdbfnum)) + .append(":"); command.append(selcom[pdbfnum]); command.append("@").append( structures[pdbfnum].isRna ? PHOSPHORUS : ALPHACARBON); @@ -519,8 +482,8 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel System.out.println( "Superimpose command(s):\n" + command.toString()); } - allComs.append("~display all; chain @CA|P; ribbon ") - .append(selectioncom.toString()) + allComs/*.append("~display all; chain @CA|P; ribbon ") + .append(selectioncom.toString())*/ .append(";" + command.toString()); } } @@ -537,13 +500,24 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel { System.out.println("Select regions:\n" + selectioncom.toString()); } - allComs.append("; ~display all; chain @CA|P; ribbon ") - .append(selectioncom.toString()).append("; focus"); + allComs.append("; ~display "); // all"); + if (!isShowAlignmentOnly()) + { + allComs.append("; ribbon; chain @CA|P"); + } + else + { + allComs.append("; ~ribbon"); + } + allComs.append("; ribbon ").append(selectioncom.toString()) + .append("; focus"); List chimeraReplies = sendChimeraCommand(allComs.toString(), true); for (String reply : chimeraReplies) { - if (reply.toLowerCase().contains("unequal numbers of atoms")) + String lowerCase = reply.toLowerCase(); + if (lowerCase.contains("unequal numbers of atoms") + || lowerCase.contains("at least")) { error = reply; } @@ -565,7 +539,8 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel * @param pdbfnum * @return */ - protected String getModelSpec(int pdbfnum) + @Override + public String getModelSpec(int pdbfnum) { if (pdbfnum < 0 || pdbfnum >= getPdbCount()) { @@ -580,7 +555,8 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel */ List maps = chimeraMaps.get(getStructureFiles()[pdbfnum]); boolean hasSubModels = maps != null && maps.size() > 1; - return "#" + String.valueOf(pdbfnum) + (hasSubModels ? ".1" : ""); + String spec = "#" + String.valueOf(pdbfnum); + return hasSubModels ? spec + ".1" : spec; } /** @@ -671,38 +647,26 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel String progressMsg); /** - * Sends a set of colour commands to the structure viewer + * Constructs a set of colour commands and sends them to the structure viewer * - * @param colourBySequenceCommands + * @param viewPanel */ @Override - protected void colourBySequence( - StructureMappingcommandSet[] colourBySequenceCommands) + protected void colourBySequence(AlignmentViewPanel viewPanel) { - for (StructureMappingcommandSet cpdbbyseq : colourBySequenceCommands) + Map colourMap = StructureCommands + .buildColoursMap(this, viewPanel); + + String[] commands = ChimeraCommands + .getColourBySequenceCommand(colourMap, this); + + for (String command : commands) { - for (String command : cpdbbyseq.commands) - { - sendAsynchronousCommand(command, COLOURING_CHIMERA); - } + sendAsynchronousCommand(command, COLOURING_CHIMERA); } } /** - * @param files - * @param sr - * @param viewPanel - * @return - */ - @Override - protected StructureMappingcommandSet[] getColourBySequenceCommands( - String[] files, SequenceRenderer sr, AlignmentViewPanel viewPanel) - { - return ChimeraCommands.getColourBySequenceCommand(getSsm(), files, - getSequence(), sr, viewPanel); - } - - /** * @param command */ protected void executeWhenReady(String command) @@ -857,7 +821,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel protected List convertStructureResiduesToAlignment( List structureSelection) { - List atomSpecs = new ArrayList(); + List atomSpecs = new ArrayList<>(); for (String atomSpec : structureSelection) { try @@ -924,7 +888,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel return; } - // Chimera expects RBG values in the range 0-1 + // Chimera expects RGB values in the range 0-1 final double normalise = 255D; viewerCommandHistory(false); StringBuilder command = new StringBuilder(128); @@ -937,9 +901,11 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel ? ResidueProperties.getSingleCharacterCode(resName) : resName.charAt(0); Color col = cs.findColour(res, 0, null, null, 0f); - command.append("color " + col.getRed() / normalise + "," - + col.getGreen() / normalise + "," + col.getBlue() / normalise - + " ::" + resName + ";"); + command.append("color ") + .append(String.valueOf(col.getRed() / normalise)).append(",") + .append(String.valueOf(col.getGreen() / normalise)) + .append(",").append(String.valueOf(col.getBlue() / normalise)) + .append(" ::").append(resName).append(";"); } sendAsynchronousCommand(command.toString(), COLOURING_CHIMERA); @@ -1043,20 +1009,9 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel } /** - * Returns a list of chains mapped in this viewer. Note this list is not - * currently scoped per structure. - * - * @return - */ - @Override - public List getChainNames() - { - return chainNames; - } - - /** * Send a 'focus' command to Chimera to recentre the visible display */ + @Override public void focusView() { sendChimeraCommand("focus", false); @@ -1109,8 +1064,7 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel } StructureMappingcommandSet commandSet = ChimeraCommands - .getSetAttributeCommandsForFeatures(getSsm(), files, - getSequence(), avp); + .getSetAttributeCommandsForFeatures(avp, this); String[] commands = commandSet.commands; if (commands.length > 10) { @@ -1308,4 +1262,39 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel } return -1; } + + @Override + public void showStructures(AlignViewportI av, boolean refocus) + { + StringBuilder cmd = new StringBuilder(128); + cmd.append("~display; ~ribbon;"); + + AtomSpecModel model = getShownResidues(av); + String atomSpec = ChimeraCommands.getAtomSpec(model, this); + + cmd.append("ribbon ").append(atomSpec); + if (!isShowAlignmentOnly()) + { + cmd.append("; chain @CA|P"); + } + if (refocus) + { + cmd.append("; focus"); + } + sendChimeraCommand(cmd.toString(), false); + } + + @Override + public int getModelForPdbFile(String fileName, int fileIndex) + { + if (chimeraMaps.containsKey(fileName)) + { + List models = chimeraMaps.get(fileName); + if (!models.isEmpty()) + { + return models.get(0).getModelNumber(); + } + } + return -1; + } }