Bond Perception via Python

Avogadro2 (v1.93) is doing a great job of perceiving bonds and bond orders (currently in structures read in from Gromacs .gro files containing no bond information at all) using Extensions/Open Babel/Perceive Bonds. How do I do this from a python workflow with either Avogadro itself or directly in OpenBabel? I can’t seem to find any commands/methods that do this. How does Avogadro do it? Thanks for any direction.

The easiest would be with Open Babel in Python (e.g. Pybel).

from openbabel import pybel

mol = next(pybel.readfile('xyz', filename)) # readfile returns an iterator
mol.OBMol.ConnectTheDots() # perceives bonding between atoms
mol.OBMol.PerceiveBondOrders() # guesstimates bond orders

My group is working on an improved ML-based bond perception code - hopefully we can release that soon… it won’t depend (much) on the underlying toolkit.

Thanks very much for those pointers and hats off to whomever came up with the method name “ConnectThe Dots”.