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

Revisions №61458

branch: master 「№61458」
Commited by: Andrew Leaver-Fay
GitHub commit link: 「b07f96d1c81473ee」 「№4924」
Difference from previous tested commit:  code diff
Commit date: 2020-10-22 12:17:27

Merge pull request #4924 from RosettaCommons/aleaverfay/dof_deriv_bugfix Fix score/deriv mismatch w/ DOF derivs in cart min Terms like RamaPrePro and Dunbrack and P_AA_PP are three body energies that masquerade as one- and two-body energies. Because they depend on both phi and psi, and phi extends into the previous residue and psi extends into the next restidue, they depend on the coordinates of three residues. The DOFs that they define, however, live within a single residue in the atom tree. The N atom's atom-tree torsion defines phi; the CA atom's atom-tree torsion defines psi. So we usually just call these terms one-body energies (or in RamaPrePro's case, a two-body energy). When we run atom-tree minimization on residue i (and not residue i+1), then when residue i's DOF's change, residue i's energies are updated and residue i+1's energies are not. This is OK because residue i+1's DOFs are not changing, even though the coordinates for residue i are moving. When we run cartesian minimization on residue i (and not on residue i+1), however, then residue i+1's DOFs do change. Until the introduction of RamaPrePro, cartesian minimization had a discrepancy between the score function that it was optimizing and the true score function for the structure, but did not have a derivative/score function discrepancy. The DOFs for residue i+1 were changing, but neither the score for residue i+1 nor the derivatives for those DOFs were evaluated. RamaPrePro, however, is a two-body energy. The energy for RamaPrePro is evaluated on edges in the minimization graph (e.g. the edge from i to i+1), but the DOF derivatives are evaluated for the lower residue. This meant, when residue i-1 was held fixed and residue i was allowed to move, that the changing score for the i/i+1 interaction was evaluated but the derivatives for this changing score were not. The (fairly involved) solution for this bug is to have DOF-derivative-defining (DDD) energy methods report which atoms define the DOFs that they examine for a particular residue, and then activate energy methods for certain residues if these atoms are moving. To report what atoms define a DOF off the edge of a residue, I have created a new class: the PartialAtomID, which can either refer to a particular atom, or to an atom defined relative to an inter-residue connection. This code works properly now for my original test case that relied on cartesian minimization of a subset of the Pose (no more inaccurate G! messages), as well as (asymmetric) cartesian minimization unit tests, and new unit tests for symmetric cartesian minimization.

...