Merge pull request #5801 from RosettaCommons/roccomoretti/lDDT
Add functions to compute lDDT.
Code to compute lDDT of two structures. The default settings give results which match that given by https://swissmodel.expasy.org/lddt
Unlike the website, this can handle substructures (by passing a residue map), as well as ligand/non-protein residues. You can also pass an rmsd Predicate object to select only certain atoms within the residue (e.g. backbone only or Calpha only). You can also get atom-level statistics, if you want.
Not implemented is any consideration for penalties for bond/angle deviations. I also haven't implemented the one-to-many comparison. (Run it multiple times with multiple references and pick the lowest.)
It's probably going to be slower than an rmsd calculation. I tried to keep efficiency in mind, but things are slowed down by the need to consider alternate states (e.g. PHE ring flips) to match the official implementation. There's an option to turn that off if you don't want it, or if you're using an atom set (e.g. backbone-only) where it's not relevant. There's probably also other ways of improving the efficiency, but I don't have time at the moment to do efficiency profiling.