Force field/xtb helpers for BUSTER

Introduction

BUSTER has supported the Direct use of weighted Quantum Chemical or Force Field Energy for ligand refinement, since 2011 as explained at https://www.globalphasing.com/buster/wiki/index.cgi?AutobusterLigandQM

The weighted-QM energy restraint function provides a second opinion compared to conventional geometrical restraints. It is handy in situations where it is suspected that a particular conformation observed in a complex structure is due to the restraints used.

From May 2025, BUSTER includes additional helper applications that re-use Grade2 code, as described below.

grade2_rdkit_force_field_helper

The helper grade2_rdkit_force_field_helper allows the use of the force fields supplied as part of RDKit. The helper will be used by default if the BUSTER -forcefield command line option is used (from the May 2025 BUSTER release). T

The helper grade2_rdkit_force_field_helper will by default use the MMFF94s force field (Halgren, 1999) implemented as part of RDKit by Tosco, Stiefl and Landrum (2014). As an alternative, the RDKit implementation of the UFF force field (Rappe et al., 1992) can be used.

For the helper to work it is (currently) necessary to set an environment variable BDG_TEMP_RESTRAINT_CIF_xyz, where xyz is the PDB chemical component ID (aka residue name or 3-letter code) for the ligand to the full path of CIF restraint dictionary. For example, for a ligand with the three-letter residue code LIG and a Grade2 restraint directory LIG.restraints.cif in the current directory, then BUSTER refine can be run:

$ export BDG_TEMP_RESTRAINT_CIF_LIG=`pwd`/LIG.restraints.cif
$ refine -p model.pdb -m data.mtz -d 01 -l $BDG_TEMP_RESTRAINT_CIF_LIG -forcefield LIG > 01.log

Here the pwd command is used to obtain the current working directory.

The structure being refined must include hydrogen atoms for the ligand for the force field to work properly.

For a charged ligand there is no need to specify the total charge of the ligand as part of the force field. Atom charges are taken from CIF dictionary.

Options for grade2_rdkit_force_field_helper

By default, the helper will use the MMFF94s force field, but it is possible to use another force field:

  • To use the UFF force field (that supports a broader range of elements) instead, specify the refine option -qm_method UFF.

  • To use the MMFF94 instead of the MMFF94s variant, specify the refine option -qm_method MMFF94.

By default, the MMFF94s and MMFF94 force fields are run with the electrostatics term disabled, using SetMMFFEleTerm(state=False)., as for isolated molecules, electrostatics are unlikely to be helpful. To turn on the use of electrostatics, then set the environment variable BDG_GRADE2_RDKIT_FORCE_FIELD_MMFF94_DIELECTRIC. For example, to turn on full in vacuo electrostatics/ then set a dielectric constant of 1:

$ export BDG_GRADE2_RDKIT_FORCE_FIELD_MMFF94_DIELECTRIC=1.0

Note

Setting the environment variable BDG_TEMP_RESTRAINT_CIF_xyz is a rather ugly workaround, as it is tricky to get refine to supply the restraint dictionary location to the helper directly. If you find the helper useful, it should be possible to eliminate the need to set the environment variable. Please send a request to buster-develop@GlobalPhasing.com if you would find this helpful.

xtb_qm_helper

The xtb_qm_helper is included as part of the BUSTER package together with Grade2. The helper uses the xtb program https://github.com/grimme-lab/xtb via the tblite Python API. The helper allows ligands to be represented using the GFN2-xTB quantum chemical method (Bannwarth, Ehlert and Grimme, 2019). GFN2-xTB is a accurate semiempirical method that gives good results for all elements up to radon.

To use the xtb helper then specify the refine option -qm_helper "${BDG_home}/scripts/qm-mm-helpers/xtb_qm_helper.sh". For example, for the QM advanced tutorial example: raloxifene bound to 2qxs:

$ refine -p 2qsx_aB_hydrogenate.pdb -m pdb/r2qxssf.mtz -d xtb_refine \
         -l RAL.restraints.cif
         -qm RAL+1 -qm_helper "${BDG_home}/scripts/qm-mm-helpers/xtb_qm_helper.sh" \
         -autoncs -M TLSbasic -M HydrogenHybridModel \
         > xtb_refine.log

Note here as raloxifene RAL carries a charge of +1 the -qm option is specified as RAL+1.