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

Revisions №59846

branch: master 「№59846」
Commited by: Vikram K. Mulligan
GitHub commit link: 「f1e2a9699a09cb93」 「№2291」
Difference from previous tested commit:  code diff
Commit date: 2017-11-04 03:46:21

Merge pull request #2291 from RosettaCommons/vmullig/hbnet_score Add a nonpairwise, packer-compatible score term giving a nonlinear bonus based on hydrogen bond network size **Description** This pull request adds a new score term, `hbnet`, that gives a bonus to each hydrogen bond network in a pose, which ramps nonlinearly with the size of the network. This is a non-pairwise-decomposible but still fast-to-compute score, which, thanks to Alex Ford's multiplex annealer framework, can be made packer-compatible. This allows the packer to do what Scott Boyken's HBNet algorithm currently does: find buried hydrogen bond networks, but with the advantage that it can do this while _simultaneously_ optimizing for all the pairwise-decomposible score terms (so that we can design hydrogen bond networks and hydrophobic cores at the same time). This can also be done in the context of anything that calls the packer (_e.g._ FastDesign), allowing flexible backbone design, off-rotamer packing, _etc._. **How it works:** At each step in the packer's simulated annealing run, the energy: - Constructs a graph in which nodes correspond to residues and edges indicate at least one hydrogen bond between residues. (See note below.) - Calculates the size of all connected components in the graph. - Sums the squares of the sizes of the connected components, and returns the negative of this as the energy. Note that the first step is currently done by a crude distance check between all polar hydrogen atoms and hbond acceptors in all pairs of neighbouring residues. This can be improved by: - Only updating the edges to the node of the currently-considered substitution (for speed). - Using the true hbond calculator (for accuracy, at the expense of some speed; currently, some hydrogen bond geometry is bad). - Using it in conjunction with Scott's nonpairwise buried unsat energy (currently in development) to ensure that buried networks don't have unsaturated donors/acceptors. Even in crude form, the energy is working to give me hydrogen bond networks, straight out of the packer. This works particularly well when used in conjunction with `aa_composition`, allowing one to set up problems that might be stated in English as, for example, "Design the core with as many core hydrogen bond networks as possible, subject to the constraint that half the core be hydrophobic and that no more than 5% of residues be serine or threonine". ![hbnet_energy_example](https://cloud.githubusercontent.com/assets/4205776/26509689/bc763fae-420e-11e7-8591-6e8a1ea96c17.png) **Tasks:** - [x] Add the energy. - [x] Improve speed by only updating hydrogen bonds to a residue for which a substitution is being considered. - [x] Update the `ResidueArrayAnnealableEnergy` base class appropriately, and the other derived classes (`AACompositionEnergy` and `AARepeatEnergy`). - [x] Make sure that symmetry is supported. - [x] Unit tests. - [x] Asymmetric. - [x] Symmetric. - [x] Integration tests. - [x] Asymmetric. - [x] Symmetric. - [x] Beauty. - [x] Documentation. - [x] Mention in HBNet mover documentation, too. **For the future:** - Switch this so that it can use the true hbonds calculator instead of the crude approximation that it uses now.