「view this page in B3 βῆτα server」

Revisions №58522

branch: master 「№58522」
Commited by: Vikram K. Mulligan
GitHub commit link: 「695a350c034e01f1」 「№1104」
Difference from previous tested commit:  code diff
Commit date: 2016-03-04 18:54:54

Merge pull request #1104 from RosettaCommons/dimaio/mirrorsymm Add mirror symmetry support to Rosetta This adds support for mirror symmetries to Rosetta. This was a collaboration completed by Frank Dimaio and Vikram K. Mulligan. Here's Frank's description of the changes: --- This PR adds the ability for Rosetta to model symmetries with mirror operations. This builds upon Vikram's previous PR (#956) but attempts to address some of the concerns of Andrew. Specifying mirror symmetry: Mirror symmetry is specified through the use of an "inverse virtual" residue which defines a left-handed local coordinate system. These inverse virtuals may be used to define mirror symmetries as follows: symmetry_name C2_big__2 E = 2VRT0 + 1(VRT0:VRT1) anchor_residue 13 virtual_coordinates_start xyz VRT0 1.0,0.0,0.0 0.0,1.0,0.0 0.0,0.0,0.0 xyzM VRT1 1.0,0.0,0.0 0.0,1.0,0.0 0.0,0.0,0.0 virtual_coordinates_stop .. Above, xyzM declares an inverse virtual residue. Connecting this inverse virtual to a subunit makes the connected subunit inverted. The above snippet declares a Cs symmetric system with a mirror plane in XY. MirrorSymmetricConformation is a new class derived from SymmetricConformation, and has additional data members that remember which subunits and which jumps are linked by mirroring. It overrides a handful of conformation manipulation functions. It also ensures that the correct chirality type is maintained for symmetric copies. MirrorSymmetricConformation is created by default when make_symmetric_pose encounters a symmdef file with mirrored virtuals. Kinematics are handled entirely by the AtomTree. This is done by adding two booleans to Jump specifying the handedness of the upstream and the downstream stubs. The functions make_jump, from_stubs, and fold_in_rb_deltas have been updated accordingly, and a tiny bit of logic is added to JumpAtom when starting refolding from an inverted residue. Note that if the upstream and downstream handedness are different, then the jump "rotation" is no longer a rotation but a reflection. The variable names have not been updated to reflect this. Packing is handled by modifying SymmetricRotamerSet_ so that orient_rotamer_set_to_symmetric_partner uses the Conformation-computed symmetric transforms instead of orient_onto_residue. This allows for the same code to be used with both mirrored and non-mirrored symmetric conformations, and does not require peptoid-specific code as there is currently. However, this change will lead to small numeric changes in symm packing tests. Since everything is added to the atomtree framework, derivatives/minimization works as-is (at least using Phil's new_sym_min framework, which I'm hoping to make default). Note that the current code assumes that there are NO mirror virtuals within the asymmetric unit. If there is a want/need for such support (I'm not sure I see what advantage it offers) it can be done, but I think JumpAtom::get_dof_axis_and_end_pos needs to be aware of the jump handedness for derivatives to work correctly. MirrorSymm specific code has been added to ensure that the proper type of conformation is created from setup_symmetric_code, and for dumping silent files. Other than these two instances, the conformation should work transparently in any other mover that works with symmetric conformations. In theory, it should work fine with various docking protocols, multicomp, etc., but I have not tested these. Finally, I'm using this PR as an opportunity to update some of the SymAtomTreeMinimizer logic. Phil's -new_symm_min flag is now default (pending a few more tests) ... it no longer requires scalefactors on interactions occurring through multiple cloned jumps. The old behavior available through -old_symm_min. --- Tasks: - [x] Add core functionality to allow one to get a mirror-image type efficiently (and without any string parsing). - [x] Add clone_flipping_chirality() function to Residue class. - [x] Revert my reversion (9c8a8ee) to re-merge my changes into Frank's branch (Vikram). - [x] Unit tests for this. - [x] Add MirrorSymmetricConformation class. - [x] Finish the flip_chirality() function (Vikram). - [x] I can't assume that the asymmetric unit is symmetry copy 1. Fix this in MirrorSymmetricConfromation::update_residue_identities(). (See line marked "Assumes that the asymmetric unit is copy 1."). (Vikram). *fixed -fpd* - Finish the detect_disulfides() function (Vikram). -- <b>Put off to a future pull request</b> - Unit test for detect_disulfides() (Vikram). -- <b>Put off to a future pull request</b> - [x] Update packer to handle mirrored symmetry (Frank). - [x] Update Atomtree to handle inverted stubs (Frank). - [x] Get derivatives working (make sure *get_dof_axis_and_end_pos* is right for inverted stubs) (Frank). - [x] Unit tests for three cases above (Frank). - [x] Make aa_composition_energy (or, more generally, ResidueArrayAnnealableEnergies) symmetry-aware (Vikram). - [x] Unit test: aa_composition energy + design. - [x] Revert a6eae0ea471c964a369e8fc640b33b3476bef9fe and d007c35d0b9bbc2546b84fc35d8ca76905b58c80 (in that order). These were added temporarily to disable the post-packing step at which residue types were inverted. - [x] Revisit this -- this will be broken again, since residue-type flipping was taken out of SymmetricRotamerSet_::orient_rotamer_set_onto_symmetric_copy(). - [x] Fix the node list -- issue when prevent_repacking used on some residues. - [x] Add unit test for this (prevent_repacking used on a subset of residues + aa_composition). - [x] Document this. - [x] Fix issue with creating covalent bonds between symmetry subunits (Vikram). - [x] Make this part of the integration test. - [x] Integration test. - [x] Address integration tests currently failing to run (INV_VRT issue). - [x] Fix PyRosetta build. - [x] Ensure that SymmetricConformation::declare_chemical_bond() works properly with mirror symmetry. - [x] Documentation. - [x] Beauty. Also: - [x] Strips out a little more of the old Lua junk. - [x] Fixes D-amino acid base name to be the D-name rather than the L-name. - [x] Fixes a bug in SymmetricConformation::declare_chemical_bond. Previously, not all symmetry copies were properly getting the bond. Now they all do. - [x] Fixes aa_composition and other ResidueArrayAnnealableEnergies so that they work properly with symmetry.

...