Can openbabel detect intramolecular Hydrogen bonds? If not, would it be worth
including in OBMol? I put together the python function below which uses
OBMol functions to find the number of intramolecular hydrogen bonds based on
a user define angle and distance cutoff.

def getHBondList(obmol):
    """Returns list of H bonds (atoms involved, angle and distance) based on
user defined angle and distance cutoff"""
    # Make list of H atoms, their donor atoms and possible Acceptor atoms
    HD_atom_idx_list=[]; A_atom_idx_list=[]; HD_D_idx_dict={}   # HD means H
atom bonded to Donor atom (D), A=acceptor
    for atom in OBMolAtomIter(obmol):
        idx=atom.GetIdx()
        if atom.GetAtomicNum()==1:                      # hydrogen atoms
            for nn_atom in OBAtomAtomIter(atom):        # nn_atom=nearest
neighbour atom
                if nn_atom.IsHbondDonor():
                    HD_atom_idx_list.append(idx)        # list of H atoms
bonded to D atoms
                    HD_D_idx_dict[idx]=nn_atom.GetIdx() # dictionary of H
atom idx and its D atom idx
        if atom.IsHbondAcceptor():
            A_atom_idx_list.append(idx)                 # list of A atoms
    # Check distance and angle between HD and A atoms and make list of H
bonds (atoms involved, angle and distance)
    Hbond_list=[]
    for HD_atom_idx in HD_atom_idx_list:
        HD_atom=obmol.GetAtom(HD_atom_idx)
        D_atom_idx=HD_D_idx_dict[HD_atom_idx]
        D_atom=obmol.GetAtom(D_atom_idx)
        HD_atom_coords=numpy.array([HD_atom.GetX(), HD_atom.GetY(),
HD_atom.GetZ()])
        for A_atom_idx in A_atom_idx_list:
            if A_atom_idx == D_atom_idx:        # don't consider the H
atom's D atom as A atom
                pass
            else:
                A_atom=obmol.GetAtom(A_atom_idx)
                A_atom_coords=numpy.array([A_atom.GetX(), A_atom.GetY(),
A_atom.GetZ()])
                Hbond_angle=obmol.GetAngle(D_atom, HD_atom, A_atom)
                Hbond_dist=numpy.linalg.norm(HD_atom_coords-A_atom_coords)
                if Hbond_angle > Hbond_angle_cutoff and Hbond_dist <
Hbond_dist_cutoff:
                    Hbond_list.append([D_atom_idx, HD_atom_idx, A_atom_idx,
Hbond_dist, Hbond_angle])
    return Hbond_list



--
View this message in context: 
http://forums.openbabel.org/Intramolecular-Hydrogen-bond-detection-tp4656069.html
Sent from the General discussion mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
OpenBabel-discuss mailing list
OpenBabel-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-discuss

Reply via email to