Merge pull request #3448 from RosettaCommons/vmullig/qpacker_io
Add I/O modules to allow experimentation with external annealers for packing
Half of the packer is easy to parallelize; the other half is hard. Interaction graph setup can be split over many threads or processes, but the simulated annealing trajectory is inherently difficult to parallelize, since each step depends on completion of the previous step. Of course, one could use completely new annealing or optimization strategies -- but that being the case, we shouldn't limit ourselves, especially when experimenting with different optimization strategies. It would be convenient to have an easy way to export the precomputed interaction graph from Rosetta so that an external optimization strategy can be attempted, and then to re-import the external optimizer's result into Rosetta to generate a final structure. To that end, this pull request adds:
- A new `StringMetric` that allows output of a precomputed interaction graphs from Rosetta, in a convenient ASCII format that it should be easy to get an external optimizer to read.
- A new `ExternalPackerResultLoader` mover that allows the output of an external optimizer to be read back into Rosetta, again using a simple ASCII format that it should be easy to get an external optimizer to write.
TODO:
- [x] Switch the COPs to COP instances to make Andy happy.
- [x] Option to also dump short version of file, without information needed to reconstruct long version.
- [x] Integration test.
- [x] Documentation.
@weitzner, you'll be interested in this.