ReliaSolve / cctbx_project

Computational Crystallography Toolbox
https://cctbx.github.io
Other
0 stars 0 forks source link

Probe2 differences in Ca1exr_calmodulin_1 #190

Closed russell-taylor closed 2 years ago

russell-taylor commented 2 years ago

Several of the atom pairs seem to have been renamed between the two runs, but the symmetric distances indicate that there is probably not actual shift to the positions.

russell-taylor commented 2 years ago

@todo: There are more potential dots in Probe than Probe2, and also more O close contacts and Hydrogen bonds.

russell-taylor commented 2 years ago

@todo: There are overlap (H bond, presumably) dots between H? HOH 2127 A and OE2 GLU 67 A in Probe that look like they are real, perhaps too far away to be checked in Probe2? Increasing the maximum distance by 1 did not help. The distance between them is 2.253 Angstroms, so it should be plenty close to be found. There is a hydrogen placed facing OE2, so it must be marked as an acceptor. No other atoms seem to be close enough to block... but the nearby CA ion may be causing the atoms to be considered bonded to each other.

@todo: Some one-sided clashes and close contact dots from O HOH 2127 A and OD2 ASP 58 A in Probe are not seen in Probe2, probably hidden by the Phantom Hydrogen? A few one-sided clashes for that same atom are seen in Probe2, but most of them are hidden.

image image

russell-taylor commented 2 years ago

Making Phantom Hydrogens have no bonded neighbors rather than being bonded to their Oxygen did not have an impact on either of the extra-dot problems listed above.

Limiting the recursion depth to 1 in getAtomsWithinNBonds() for atoms that are Phantom Hydrogens did put marks on the Hydrogen side of the hydrogen-bond target. It also put extra dots on other targets. So it looks like the Phantom Hydrogens are somehow being marked as being bonded... perhaps in the ionic-bonding code?

@todo: Removing the Phantom Hydrogens from consideration inside the ionic bonding code did solve both of the problems listed above, but it also added spurious dots in Probe2 on the surfaces of various atoms surrounding the Hydrogens. these are one-sided dots on the Oxygens, no matching dots are found on the Phantom Hydrogens. Two-sided bonds to the hydrogens from other nearby Oxygens (which are not themselves close to the ion) are present. Making no bonds to either side for Phantom Hydrogens has no impact on 1bti but changes 1xso scores by adding O H-bonds. Avoiding the addition of ionic Phantom Hydrogen bonds has no impact on 1bti or 1xso.

Atoms less than 2.5 Angstroms from the CA ions have the extra marks. The one potential atom that is greater than this distance is the one that has double hydrogen-bond dots in both Probe and Probe2; this atom is further from the Water so there should be more hydrogen bonds with the atom that has extra dots if it were to have double hydrogen-bond dots.

We presumably don't see dots on the Phantom Hydrogens because the remote Oxygens are counted as bonded (due to them being less than 3 hops from their bonded Water Oxygen. Probe is presumably missing both sets of dots because the atoms are seen as being bonded in both directions. So this was presumably the wrong way to fix the problem.

russell-taylor commented 2 years ago

@todo: Perhaps the distance threshold from the CA is what is causing the difference between Probe and Probe2 by causing slightly-further atoms from the CA to be considered among those bonded. The CA radius is 0.99 in both cases.

Removing the 0.2 extra expected distance for bonding in the ionic-bond code (which was in the markBonds code) caused a bunch of extra contacts between the ion and nearby Oxygens to show up in Probe2. It turns out that this 0.2 is actually in the code, just not in the tooclose calculation but rather in the nearpt calculation, so it should indeed be 0.2.

Adding an extra check matching atomsClose() with atomic radii plus twice the probe radius did not fix the original behavior (this would always be a less restrictive test than the original one testing over by 0.2 because it tests over by 0.5).

A hack of switching the 0.2 distance to 0.1 did not solve the original problem.

@todo: A change of the bonded-within-N code to set the maximum range at 0.2 more than expected rather than 2 probe radii beyond expected (to match what we see in markBonds()). The hope was that it would restore the dots between the Phantom Hydrogen and OE2, which it did. It also caused more dots to appear in Probe2 near the CA atoms but also far from the CA atoms (N APHE 68 A and CB GLU 67 A), so it seems like it is not a correct change to make. Not sure where the original 2x probe radius formula came from. Changing this to 0.2 more also breaks the test for 1bti so it looks like this isn't the right way to go.

russell-taylor commented 2 years ago

@todo: Are we missing some corner case in the markBonds() code that should prevent the Phantom Hydrogens on a water from being bonded to an atom in another group?

@todo: Are we missing some code that checks to make sure that a Phantom Hydrogen cannot block bonds from its Oxygen?

russell-taylor commented 2 years ago

The solution of removing Phantom Hydrogens from bonding chains when they are further than one hop (to their parent water oxygen) and of not adding new ionic bonds to Phantom Hydrogens fixes the missing hydrogen bonds. It also puts in place similar bonds that the original Probe did not have, but should have. Getting Probe2 to exactly match Probe is going to be a problem because of the fact that the original code used distance-based bonding but the new code uses a mix of dictionary and ionic-bonding calculations. Planning to use the approach that has Probe2 finding more actual hydrogen bonds unless countermanded.

russell-taylor commented 2 years ago

Jane and Dave approved