Merge pull request #5119 from RosettaCommons/vmullig/trRosetta_into_Rosetta
Put trRosetta into Rosetta to allow protocol development on top, and to provide access to Foldit
*Note: since incremental merges 1-3 are now merged (pull requests #5308, #5309, and #5314), this PR only adds the trRosetta application and puts an option in for the AbinitioRelax application to use trRosetta. Most of the files changed are unit test files (though they're in the integration test suite since we lack a dedicated unit test suite for the Tensorflow build.)*
This is something that we talked about a while back; apologies for only getting to it now. This PR aims to:
- [x] Add trRosetta to the Rosetta database. (Note: since the model is 91 MB, this has been added as a submodule that gets pulled automatically only if the `extras=tensorflow` or `extras=tensorflow_gpu` options are used). The trRosetta licence is the MIT licence, which is compatible with the Rosetta licence, and I've talked to Sergey, Ivan, and Jianyi to get their blessing for this.
- [x] Add hooks to the protocols layer for passing in the trRosetta inputs (sequences) and receiving back outputs (distance and angle constraints) as objects compatible with downstream Rosetta manipulation, tied in to the `RosettaTensorflowManager`.
- [x] Add a standard way of adding the constraints to a pose (a constraints generator).
- [x] CitationManager functions for constraints generator.
- [x] Add distance constraints.
- [x] Add phi constraints.
- [x] Add theta constraints.
- [x] Add omega constraints.
- [x] Options for adding each of these independently.
- [x] Options for controlling the probability cutoffs for distance, omega, phi, and theta constraints.
- [x] Documentation for options making it clear that "phi", "omega", etc. don't have their usual meanings, here.
- [x] Convert the Python minimization protocol to a Rosetta mover.
- [x] `parse_my_tag()` function.
- [x] `provide_xml_schema()` function.
- [x] `provide_citation_info()` function.
- [x] `apply()` function.
- [x] Fullatom refinement steps.
- [x] Compute RMSD to native.
- [x] Options for controlling the probability cutoffs for distance, omega, phi, and theta constraints.
- [x] Add settings for scorefunctions for the various stages:
- [x] Initialize from options system.
- [x] Initialize from XML.
- ~~Handle gapped FASTAs:~~ --> Put off to future PR, where I'll add residue selector support.
- ~~Check that the FASTA width _with_ gaps matches the MSA width.~~
- ~~Map constraints from MSA numbering to _ungapped_ FASTA numbering. (Need to set up a map for this.)~~
- [x] Add option of using trRosetta constraints in classic _ab initio_.
- [x] In fullatom phase as well.
- [x] Citations.
- [x] Documentation.
- [x] Add an app for running the trRosetta minimization protocol.
- [x] Suitable error if not compiled with `extras=tensorflow` or `extras=tensorflow_gpu`, with instructions for compilation. (Put code for writing the instructions in `basic::tensorflow_manager`.)
- [x] Fix compilation when `extras=tensorflow` is not used.
- [x] Check `tensorflow_gpu` performance. --> A quick test on my laptop shows about a fourfold speedup on the laptop GPU compared to the CPU.
- [x] Unit tests (pass/fail tests in `integration.tensorflow` suite).
- [x] Constraints generator.
- [x] Distance constraints.
- [x] Check error in distance constraints. It still seems higher than it should be. --> Little mistake fixed.
- [x] Phi constraints.
- [x] Theta constraints.
- [x] Omega constraints.
- [x] Integration tests:
- [x] RosettaScripts.
- [x] trRosettaProtocol mover.
- [x] Check why this does not output RMSD values. --> Fixed in pull request #5301.
- [x] Constraints generator.
- [x] trRosetta app.
- [x] With Ramachandran initialization.
- [x] With initialization by bins.
- [x] Classic ab initio app.
- [x] Make `hb_cen_soft` into an option that can be set from code/RosettaScripts.
- [x] Documentation --> RosettaCommons/documentation#44 adds documentation for the C++ trRosetta.
- [x] Beauty.
As a guide, here's what will ultimately be in master. The stuff in basic is already there. PR #5308 adds the stuff in protocols.2. PR #5309 adds the trRosettaConstraintGenerator. Once those are merged, the trRosettaProtocolMover, the trRosetta app, and the changes to AbinitioRelax are what remain.
![image](https://user-images.githubusercontent.com/4205776/112569688-08256000-8dbb-11eb-8cfc-2eb28fe9d3dc.png)
Before merging this:
- [x] Revert change to `.vscode/c_cpp_properties.json`.
- [x] Pull request #4606 must be merged.
- [x] Pull request #4855 must be merged.
- [x] Pull request #5224 must be merged.
- [x] Pull request #5225 must be merged.
- [x] Pull request #5301 must be merged.
- [x] Pull request #5236 must be merged.
- [x] Pull request #5308 must be merged. This is an incremental merge that cherry-picks the `trRosettaProtocolBase` and `trRosettaProtocol_v1` classes from this one, along with their associated tests.
- [x] Pull request #5309 must be merged. This is an incremental merge that cherry-picks the `trRosettaConstriantGenerator` class from this one, along with its associated tests.
- [x] Pull request #5314 must be merged. This is an incremental merge that cherry-picks the `trRosettaProtocolMover` from this PR, along with its tests.
Note:
- Pull request #5235 is an efficiency tweak that will benefit the stuff implemented in this PR, but it does not have to be merged before this PR.
![image](https://user-images.githubusercontent.com/4205776/101086651-2e5e9000-357f-11eb-880f-0f780f8f70b3.png)