Skip to content

Anchored docking

Diogo edited this page Jul 20, 2022 · 3 revisions

Anchored docking with AutoDock-GPU and Meeko

Please keep in mind this tutorial requires a lot of manual intervention, and hasn't been tested extensively.

This tutorial describes docking while anchoring specific ligand atoms to target coordinates in space. The ligand atoms can be specified using SMARTS patterns as described in step 2. The defined ligand atoms will be penalized by large energies if they deviate from the target coordinates. It is critical that the SMARTS pattern matches only one atom in each ligand.

Requirements

  • autogrid executable binary (download here)
  • autodock-gpu, download binary or compile (GitHub)
  • meeko, easy install with "pip install meeko" (GitHub)
  • prepare_receptor4.py, from ADFR suite, found in folder CCSBpckgs/AutoDockTools/Utilities24 (download here)

1. Prepare the receptor

The first step is to prepare the receptor according to the Vina totorial. Here, we will start with receptor.pdbqt already prepared

2. Modify parameters.json to add a new atom type and a new SMARTS

Add a new type OX to phenol oxygens that are ortho to a carbonyl. The SMARTS is "[#1][O]ccC=O". The "IDX": [2] attribute makes Meeko type the 2nd atom in the SMARTS.

SMARTS must match a maximum of one atom in each ligand.

If more than one atom are subjected to the anchoring potential, it will likely be impossible to fit more than a single atom near the target coordinates. Since the docking scores will force all matching atoms to be as close as possible to the target coordinates, unreasonable binding modes are likely. In ligand.sdf there are two phenol oxygens, but only one is ortho to a carbonyl, so the provided SMARTS matches only one atom. The number of matched atoms can be verified in the ligand PDBQT file written in step 3.

3. Prepare the PDBQT of the ligand

mk_prepare_ligand.py -p parameters.json -i ligand.sdf -o ligand.pdbqt

See options --multimol_outdir and optionally --multimol_prefix for processing input files (SDF/mol2) with multiple molecules

4. Define the size of the search space in a text file

We called this file boxsize.txt. Its contents are:

size_x = 25
size_y = 25
size_z = 25
center_x = 0
center_y = 10
center_z = 27

5. Write a configuration file for autogrid (rec.gpf)

./scripts/write-gpf.py receptor.pdbqt -b boxsize.txt --mapprefix rec

6. Run autogrid to precalculate the grid maps

autogrid4 -p rec.gpf -l rec.glg

7. Create a new map with a penalty

The penalty is a high score (kcal/mol) everywhere except near the target coordinates. By default, a 1.2 A radius is used for the un-penalized volume.

./scripts/addbias.py -i rec.OA.map -o rec.OX.map -x -3 11 25.2

8. Add OX map to FLD file

./scripts/insert_type_in_fld.py rec.maps.fld --newtype OX

9. Dock

adgpu-v1.5.3_linux_ocl_128wi -L ligand.pdbqt -M rec.maps.fld -T OX=OA

10. Convert output DLG into SDF

mk_copy_coords.py ligand.dlg -o ligand_docked.sdf

parameters.json

{
    "ATOM_PARAMS": {
        "ad4": [
            {"smarts": "[#1]",                  "atype": "H", "comment": "invisible"},
            {"smarts": "[#1][#7,#8,#9,#15,#16]","atype": "HD"},
            {"smarts": "[#5]",              "atype": "B"},
            {"smarts": "[C]",               "atype": "C"},
            {"smarts": "[c]",               "atype": "A"},
            {"smarts": "[#7]",              "atype": "NA"},
            {"smarts": "[#8]",              "atype": "OA"},
            {"smarts": "[#9]",              "atype": "F"},
            {"smarts": "[#12]",             "atype": "Mg"},
            {"smarts": "[#14]",             "atype": "Si"},
            {"smarts": "[#15]",             "atype": "P"},
            {"smarts": "[#16]",             "atype": "S"},
            {"smarts": "[#17]",             "atype": "Cl"},
            {"smarts": "[#20]",             "atype": "Ca"},
            {"smarts": "[#25]",             "atype": "Mn"},
            {"smarts": "[#26]",             "atype": "Fe"},
            {"smarts": "[#30]",             "atype": "Zn"},
            {"smarts": "[#35]",             "atype": "Br"},
            {"smarts": "[#53]",             "atype": "I"},
            {"smarts": "[#7X3v3][a]",       "atype": "N",  "comment": "pyrrole, aniline"},
            {"smarts": "[#7X3v3][#6X3v4]",  "atype": "N",  "comment": "amide"},
            {"smarts": "[#7+1]",            "atype": "N",  "comment": "ammonium, pyridinium"},
            {"smarts": "[SX2]",             "atype": "SA", "comment": "sulfur acceptor"},

            {"smarts": "[#1][O]ccC=O", "IDX": [2], "atype": "OX", "comment": "types 2nd atom in the smarts (oxygen)"}
        ]
    }
}

scripts.zip

ligand.sdf.zip