ORDER!: Returning bond order information to your docked poses

John Bercow Order Remix - YouTube

Common docking software, such as AutoDock Vina or AutoDock 4, require the ligand and receptor files to be converted into the PDBQT format. Once a correct pose has been identified, the pose will be produced also as a .pdbqt file.

PDBQT and PDB file formats do not contain bond order information and so the software used to view a .pdb/.pdbqt file will have to make an educated guess as to how the atoms bond to each other. It does through a database of known bond lengths which are used to predict where bonds might exist based on distances between atoms. Sometimes it will get this wrong sadly

The internet has many solutions to this problem and many are unnecessarily convoluted – luckily there is another way.

RDKit has a simple function for Python 3 however that can return this bond information using a template of the ligand that contains this bond information, for example a SMILES string. These SMILES strings can be found on RSCB if the ligand is known or has been used before.

from rdkit.Chem import AllChem
string = "c1cnccc1[NH]C(=O)Oc2cc(OC)cc(Cl)c2" #A SMILES STRING OF THE DOCKED LIGAND
template = AllChem.MolFromSmiles(string)
docked_pose = "docked.pdb" #PDB FILE OF THE DOCKED POSE WITHOUT THE BOND ORDER INFORMATION
mol = AllChem.MolFromPDBFile(docked_pose ,removeHs=True)
newMol = AllChem.AssignBondOrdersFromTemplate(template, mol)
outputfile = "docked_with_bond_order.sdf" # FILE NAME FOR NEW FILE THAT CONTAINS THIS BOND INFORMATION AND THE 3D COORDINATES OF THE DOCKED POSE COMBINED TOGETHER
Chem.MolToMolFile(newMol, outputfile)

It is important to note that if the output file is in the PDB format, the bond information will be lost again! I would recommend using the SDF format.

E.g.

Before this using this command:

After using this command:

Author