I'm trying to dock three chains with RosettaScripts with Rosetta 3.3. Docking chain C to chains AB. I.E. the partner string would be AB_C. It appears that no matter what jump number I use in the docking tag in RosettaScripts, it always tries to dock the second and third chains to the first chain of the structure (always 1_23) corresponding to a jump number of 1. Is this a known issue with the docking mover in Rosetta Scripts?
I can solve this problem by including the commandline flag -docking:partners AB_C. But I'd like to call it to everyone's attention if it is indeed an issue with the code for RosettaScripts and/or Docking.
There's a second set (?) of docking movers that may alleviate this problem. (http://www.rosettacommons.org/content/speeding-docking-large-complex#com...)
Generally speaking, the parters flag is doing more than just selecting a jump number, it's fiddling with the fold tree, so the two functionalities may not be equivalent.
It's becoming apparent to me that this is also problematic for other non-docking movers, for example I see the same incorrect behavior with MinMover. Jump=2 for chains ABC, moves BC relative to A, not C relative to AB. Unfortunately with MinMover, passing the docking partner flag isn't an option as a workaround.
The numbering of jumps doesn't *quite* correspond to PDB chains, and can vary if the FoldTree is set up differently from the default. (Basically, you get a jump anytime you have a non-covalent connection between any two residues.)
It's hard to tell off-hand, but one possibility is if chain A is not a single peptide. For example, if your chain A is like a number of PDBs, and has something like a coordinated magnesium ion. In that case, Rosetta will make jump 1 the connection between the protein of chain A and the Mg of chain A, jump 2 will be between the Mg of chain A and the protein of chain B, etc.
An additional complication is that there are several movers which can rearrange/reorder the FoldTree, so even if you start with a "standard" FoldTree, depending on what your protocol is, things might get rearranged so that the jumps aren't set up the standard way. (For example, if you introduce a chainbreak in chain A, it might get represented as a jump, and thus shift the numbering.)
I'm not aware of an easy way to debug how Rosetta is representing the input protein, although there is an AtomTree mover which has a "simple_ft" option (at least for 3.4 but apparently not for 3.3), which will create a "normal" foldtree, and more importantly, will print a representation of the foldtree to the standard tracer output for debugging. For example, a result of the "docking_ft" option would be something like:
FOLD_TREE EDGE 1 86 -1 EDGE 86 262 -1 EDGE 86 274 1 EDGE 274 343 -1 EDGE 274 263 -1
means that there is a polymeric connection (-1) from (pose numbered) residues 1-86, 86-262, 274-343, and 274-263 and a non-polymeric connection (a jump) between residues 86 and 274. Basically, it's a pose of two proteins, one from 1-262 and one from 263-343 which are connected like an H between residues 86 and 274.
Ok that's very helpful, especially about how to interpret the Fold tree output as I'm still getting familiar with the foldtree concept. Let me do some debugging and see if I can get to the bottom of this and I'll report back. I don't think it's an issue of chain breaks as rearranging the chain order still results in chain 2 and 3 being moved relative to chain 1, regardless of what jump I specify.
Thanks for the help.
Maybe my problem is I just need a clarification about how jumps are defined. If I have a protein complex with 3 chains, ABC (in that order in the pdb file), jump=1 is between A and B, and jump=2 is between B and C according to the fold tree output. But what is the jump number for the interface between C and A? More to the point, how would I define the interface between C and BA, or A and BC, such that I could get the MinMover mover in RosettaScripts to do a rigid body minimization over either of these interfaces? This is particularly relevant to antibody-antigen interactions.
If you have a standard FoldTree, with chains ABC in that order, there isn't a jump between chains A and C. (See the FoldTree overview and the AtomTree overview) Basically, the FoldTree and the AtomTree are trees which show how all the resides (FoldTree) or atoms (AtomTree) connect. The concept is that when converting between internal (distance, angle, dihedral) coordinates and Cartesian coordinate, you start at the root of the tree and changes propagate to the leaves. Note that that's why specifying jumps is relevant in minimization - the standard minimizer minimizes in internal coordinate space (typically minimizing just the diehdrals and the jumps)
While most of the edges in the FoldTree are typically polymeric connections, when you connect two non-covalent molecular entities you need to describe how the position and orientation of one chain is related to the position of the other chain - this is a jump. It's an edge in the fold/atom tree which describes a non-covalent ridgid body transform. Because of the tree nature and the propagation to leaves, there's only one jump which defines the position and orientation of the chain. (If you define the position of B based on a jump from A, and C based on a jump from B, the position of C is precisely defined, and a jump from A to C would over-define the system, and introduce loops in the tree.)
So to correctly specify which jump you need, you need to determine which jump is defining the rigid body orientation of the chains you want to adjust relative to each other. So in a standard FoldTree, to minimize the rigid body orientation of the BC complex with respect to chain A, you would minimize over jump 1 - the jump that defines the position of chain B relative to chain A (chain C would come along for the ride with chain B). To minimize C with respect to complex AB, you would minimize over jump 2 - the jump that defines the position of chain C relative to chain B (and the orientations of chain A and B would be fixed). (To minimize the rigid body orientation of chain B with respect to an AC complex, you would have to change the FoldTree such that B would be on a branch by itself.)
If you don't minimize over jump 1 (or jump 2) you would keep the orientations of the AB chains (or BC, respectively) fixed with respect to each other, barring any lever-arm downstream propagation effects from minimizing backbone degrees of freedom in chains A and/or B. As a practical matter, if you're allowing backbone minimization on the AB (or BC) complex (with standard AtomTree setup sidechains are on branches by themselves and the changes don't propagate to other residues), you probably want to allow all the jumps to minimize, as the propagation of lever-arm effects mean that keeping the jump fixed probably doesn't result in the fixed orientation that you think it does. (Strictly speaking, the jump only defines the relative orientation of the last atom on one chain to the first atom of the other, and if those move, the jump moves with them.)