X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Frbvi%2Fchimera%2FJalviewChimeraBinding.java;h=ae34bd07db27bef90a8eb822ac7b0e4977d540ce;hb=9ae9207767c6ddad56fa405423935c924e959d93;hp=36562044f1e1106751d9cf47b24585f0cda5173b;hpb=fea6f8ed76719fd78b600adfea8891dafb8c9d12;p=jalview.git diff --git a/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java b/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java index 3656204..ae34bd0 100644 --- a/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java +++ b/src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java @@ -268,281 +268,6 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel } /** - * {@inheritDoc} - */ - public String superposeStructures(AlignmentI[] _alignment, - int[] _refStructure, HiddenColumns[] _hiddenCols) - { - // TODO delete method - StringBuilder allComs = new StringBuilder(128); - String[] files = getStructureFiles(); - - if (!waitForFileLoad(files)) - { - return null; - } - - refreshPdbEntries(); - StringBuilder selectioncom = new StringBuilder(256); - boolean chimeraX = chimeraManager.isChimeraX(); - for (int a = 0; a < _alignment.length; a++) - { - int refStructure = _refStructure[a]; - AlignmentI alignment = _alignment[a]; - HiddenColumns hiddenCols = _hiddenCols[a]; - - if (refStructure >= files.length) - { - System.err.println("Ignoring invalid reference structure value " - + refStructure); - refStructure = -1; - } - - /* - * 'matched' bit i will be set for visible alignment columns i where - * all sequences have a residue with a mapping to the PDB structure - */ - BitSet matched = new BitSet(); - for (int m = 0; m < alignment.getWidth(); m++) - { - if (hiddenCols == null || hiddenCols.isVisible(m)) - { - matched.set(m); - } - } - - SuperposeData[] structures = new SuperposeData[files.length]; - for (int f = 0; f < files.length; f++) - { - structures[f] = new SuperposeData(alignment.getWidth(), f); - } - - /* - * Calculate the superposable alignment columns ('matched'), and the - * corresponding structure residue positions (structures.pdbResNo) - */ - int candidateRefStructure = findSuperposableResidues(alignment, - matched, structures); - if (refStructure < 0) - { - /* - * If no reference structure was specified, pick the first one that has - * a mapping in the alignment - */ - refStructure = candidateRefStructure; - } - - int nmatched = matched.cardinality(); - if (nmatched < 4) - { - return MessageManager.formatMessage("label.insufficient_residues", - nmatched); - } - - /* - * Generate select statements to select regions to superimpose structures - */ - String[] selcom = new String[files.length]; - for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++) - { - final int modelNo = pdbfnum + (chimeraX ? 1 : 0); - // todo correct resolution to model number - String chainCd = "." + structures[pdbfnum].chain; - int lpos = -1; - boolean run = false; - StringBuilder molsel = new StringBuilder(); - if (chimeraX) - { - molsel.append("/" + structures[pdbfnum].chain + ":"); - } - - int nextColumnMatch = matched.nextSetBit(0); - while (nextColumnMatch != -1) - { - int pdbResNum = structures[pdbfnum].pdbResNo[nextColumnMatch]; - if (lpos != pdbResNum - 1) - { - /* - * discontiguous - append last residue now - */ - if (lpos != -1) - { - molsel.append(String.valueOf(lpos)); - if (!chimeraX) - { - molsel.append(chainCd); - } - molsel.append(","); - } - run = false; - } - else - { - /* - * extending a contiguous run - */ - if (!run) - { - /* - * start the range selection - */ - molsel.append(String.valueOf(lpos)); - molsel.append("-"); - } - run = true; - } - lpos = pdbResNum; - nextColumnMatch = matched.nextSetBit(nextColumnMatch + 1); - } - - /* - * and terminate final selection - */ - if (lpos != -1) - { - molsel.append(String.valueOf(lpos)); - if (!chimeraX) - { - molsel.append(chainCd); - } - } - if (molsel.length() > 1) - { - selcom[pdbfnum] = molsel.toString(); - selectioncom.append("#").append(String.valueOf(modelNo)); - if (!chimeraX) - { - selectioncom.append(":"); - } - selectioncom.append(selcom[pdbfnum]); - // selectioncom.append(" "); - if (pdbfnum < files.length - 1) - { - selectioncom.append("|"); - } - } - else - { - selcom[pdbfnum] = null; - } - } - - StringBuilder command = new StringBuilder(256); - for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++) - { - final int modelNo = pdbfnum + (chimeraX ? 1 : 0); - if (pdbfnum == refStructure || selcom[pdbfnum] == null - || selcom[refStructure] == null) - { - continue; - } - if (command.length() > 0) - { - command.append(";"); - } - - /* - * Form Chimera match command, from the 'new' structure to the - * 'reference' structure e.g. (50 residues, chain B/A, alphacarbons): - * - * match #1:1-30.B,81-100.B@CA #0:21-40.A,61-90.A@CA - * - * @see - * https://www.cgl.ucsf.edu/chimera/docs/UsersGuide/midas/match.html - */ - command.append(chimeraX ? "align " : "match "); - command.append(getModelSpec(modelNo)); - if (!chimeraX) - { - command.append(":"); - } - command.append(selcom[pdbfnum]); - command.append("@").append( - structures[pdbfnum].isRna ? PHOSPHORUS : ALPHACARBON); - // JAL-1757 exclude alternate CA locations - ChimeraX syntax tbd - if (!chimeraX) - { - command.append(NO_ALTLOCS); - } - command.append(chimeraX ? " toAtoms " : " ") - .append(getModelSpec(refStructure + (chimeraX ? 1 : 0))); - if (!chimeraX) - { - command.append(":"); - } - command.append(selcom[refStructure]); - command.append("@").append( - structures[refStructure].isRna ? PHOSPHORUS : ALPHACARBON); - if (!chimeraX) - { - command.append(NO_ALTLOCS); - } - } - if (selectioncom.length() > 0) - { - if (debug) - { - System.out.println("Select regions:\n" + selectioncom.toString()); - System.out.println( - "Superimpose command(s):\n" + command.toString()); - } - // allComs.append("~display all; "); - // if (chimeraX) - // { - // allComs.append("show ").append(selectioncom.toString()) - // .append(" pbonds"); - // } - // else - // { - // allComs.append("chain @CA|P; ribbon "); - // allComs.append(selectioncom.toString()); - // } - if (allComs.length() > 0) { - allComs.append(";"); - } - allComs.append(command.toString()); - } - } - - String error = null; - if (selectioncom.length() > 0) - { - // TODO: visually distinguish regions that were superposed - if (selectioncom.substring(selectioncom.length() - 1).equals("|")) - { - selectioncom.setLength(selectioncom.length() - 1); - } - if (debug) - { - System.out.println("Select regions:\n" + selectioncom.toString()); - } - allComs.append(";~display all; "); - if (chimeraX) - { - allComs.append("show @CA|P pbonds; show ") - .append(selectioncom.toString()).append(" ribbons; view"); - } - else - { - allComs.append("chain @CA|P; ribbon "); - allComs.append(selectioncom.toString()).append("; focus"); - } - // allComs.append("; ~display all; chain @CA|P; ribbon ") - // .append(selectioncom.toString()).append("; focus"); - List chimeraReplies = executeCommand(allComs.toString(), - true); - for (String reply : chimeraReplies) - { - if (reply.toLowerCase().contains("unequal numbers of atoms")) - { - error = reply; - } - } - } - return error; - } - - /** * Helper method to construct model spec in Chimera format: *