Merge pull request #5652 from RosettaCommons/roccomoretti/atomistic_energy_ouput
Add interface to get atomistic energies from EnergyMethods
Energies in Rosetta are officially residue-based: all the main interfaces give the energies decomposed at the residue level. This makes things efficient for general usage, but sometimes it's nice to be able to get energy information for individual atoms. (For example, the LJ energies are defined on the atom level, not the residue level.)
This PR adds an interface to the EnergyMethod class which allows subclasses to hook into a common interface for providing such atom-level energies. In deference to the fact that not all energies are necessarily going to be atomistic, the implementation of these functions is optional, and there's a has_atomistic_energies() function which allows you to query the method about whether it supports the interface.
The "standard" terms from ref2015 have been hooked into this framework, or at least those terms which have sensible atomistic energies. Terms like ref and fa_dun aren't really atomistic, and so they do not support the interface. (Existing residue-based implementations should be unchanged, so there shouldn't be an execution speed concern.) A atom_energy_breakdown utility (mirroring the residue_energy_breakdown utility) has also been created to provide a command line interface to the data, and utility functions in src/core/scoring/util.hh provide C++/PyRosetta-level access.