You are here

Hydrogen Bonding Distances and Atom identification

2 posts / 0 new
Last post
Hydrogen Bonding Distances and Atom identification
#1

We are using PyRosetta 2.83 to identify hydrogen bonds between atoms.  For example, take the following code:

pose = pose_from_pdb("/Users/kmolloy/Downloads/2ezk.pdb")
hbond_set = pose.get_hbonds()
hbond_set.show(pose, 5)
hbond_set.show(pose,7)

This results of running this code are shown below:

#Dch Dn Dres Da  Ach An Ares Aa  length AHDang BAHang  BAtor weight energy
#A   82  LEU  N  A   80  PRO  O    2.41  117.2  108.5 -140.3  1.000 -0.025
#Dch Dn Dres Da  Ach An Ares Aa  length AHDang BAHang  BAtor weight energy
#A   82  LEU  N  A   80  PRO  O    2.41  117.2  108.5 -140.3  1.000 -0.025

 

However, the distance between the N (from res #82) atom and the O atom (from res #80) is NOT 2.41.  However, the distance between the H atom in res #82 and the O atom in res #80 is 2.41.  Iterating through the hond_set shows that this pattern continues.  

Interestied if I am interpretting this correctly, since the distances and atoms seem to be mismatched.

Category: 
Post Situation: 
Fri, 2021-06-25 08:15
kmolloy717

The methods that calculate the distance is more clear:

pyrosetta.rosetta.core.scoring.hbonds.HBond(...).get_HAdist()

https://graylab.jhu.edu/PyRosetta.documentation/pyrosetta.rosetta.core.scoring.hbonds.html#pyrosetta.rosetta.core.scoring.hbonds.HBond

A peculiarity is that the donor atom index does not seem to have a getter method as most calculations are off the base_atom of the acceptor. For the first point:

hbond_set = pose.get_hbonds()
hbond = hbond_set.hbonds()[1]
print(dir(hbond))

Returns 

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'acc_atm', 'acc_atm_is_backbone', 'acc_atm_is_protein_backbone', 'acc_index', 'acc_npd_weight', 'acc_res', 'acc_res_is_dna', 'acc_res_is_protein', 'assign', 'atom_is_acceptor', 'atom_is_donorH', 'derivs', 'don_hatm', 'don_hatm_is_backbone', 'don_hatm_is_protein_backbone', 'don_index', 'don_npd_weight', 'don_res', 'don_res_is_dna', 'don_res_is_protein', 'energy', 'eval_tuple', 'eval_type', 'get_AHDangle', 'get_BAHangle', 'get_BAtorsion', 'get_HAdist', 'get_self_ptr', 'hbond_energy_comparer', 'index', 'show', 'weight']

don_hatm is the hydrogen atom (not heavy atom) and one has to get it manually

don = pose.residue(hbond.don_res())
donor_atom_index = don.bonded_neighbor(hbond.don_hatm())[1]

The getter methods that require a pose ( 'get_AHDangle', 'get_BAHangle', 'get_BAtorsion', 'get_HAdist') have A for acceptor, H for hydrogen and B.

I had a gander in `HBondSet.cc` and found out it is for Base atom of the acceptor atom not Bonded atom of the donor's hydrogen (i.e. the donor atom). Hence why get_AHDangle and a get_BAHangle are different and give different values.

Wed, 2021-06-30 09:02
matteoferla