2011 DOCK tutorial with Streptavidin
For additional Rizzo Lab tutorials see DOCK Tutorials. This tutorial is based on the 2010 DOCK tutorial with Streptavidin with minor modifications. This tutorial was developed collaboratively by the AMS 536 class of 2011.
Contents
About DOCK
DOCK was developed by Irwin D. "Tack" Kuntz, Jr., PhD and colleagues at UCSF. Please see the webpage at UCSF DOCK.
DOCK is a molecular docking program used in drug discovery. This program, given a protein active site and a small molecule, tries to predict the correct binding mode of the small molecule in the active site, and the associated binding energy. Small molecules with highly favorable binding energies could be new drug leads. This makes DOCK a valuable drug discovery tool. DOCK is typically used to screen massive libraries of millions of compounds against a protein to isolate potential drug leads. These leads are then further studied, and could eventually result in a new, marketable drug. DOCK is works well as a screening procedure for generating leads, but not nearly as well for optimization of those leads. Original DOCK used only rigid body docking, DOCK 4.0, however, introduced flexible ligand docking by either a)incremental construction or b)random search.
Incremental construction (aka anchor and grow) could be roughly described by a three step process: 1) rigid portion of ligand (anchor) is docked by geometrical methods 2) non-rigid segments added; energy minimized 3) the resulting configurations are 'pruned' and energy re-minimized, yielding the docked configurations
Random search method involves docking random conformations of ligand as independent rigid objects. The number of conformations allowed per rotatable bond is arbitrary and user controlled. The receptor is always held rigid in DOCK 4.0.
About Streptavidin & Biotin
Streptavidin is a tetrameric prokaryotic protein that binds the ligand biotin with an extremely high affinity. The streptavidin monomer is composed of eight antiparallel beta-strands which folds to give a beta barrel tertiary structure. A biotin binding-site is located at one end of each β-barrel, which has a high affinity as well as a high avidity for biotin. Four identical streptavidin monomers associate to give streptavidin’s tetrameric quaternary structure. The biotin binding-site in each barrel consists of residues from the interior of the barrel, together with a conserved Trp120 from neighbouring subunit. In this way, each subunit contributes to the binding site on the neighboring subunit, and so the tetramer can also be considered a dimer of functional dimers.
Biotin is a water soluble B-vitamin complex (organic small molecule) which is composed of an ureido (tetrahydroimidizalone) ring fused with a tetrahydrothiophene ring. It is a co-enzyme that is required in the metabolism of fatty acids and leucine. It is also involved in gluconeogenisis.
Preparing the Enzyme and Ligand in Chimera
The part about downloading and building the initial receptor and ligand structures have already been covered as part of the AMBER tutorial. In this tutorial, we will be using the dockprep tool in chimera. You will need the following files:
- 1DF8.lig.mol2 - Biotin molecule, with hydrogens and am1bcc partial charges.
- 1DF8.rec.mol2 - Streptavidin receptor, with hydrogens and amber charges.
- 1DF8.rec.noH.mol2 - Receptor without hydrogen atoms.
Generation of Enzyme Surface, Spheres, and Grid for DOCK
Enzyme Surface
To generate an enzyme surface, first open the receptor pdb file with the hydrogen atoms removed (1DF8.rec.noH.pdb). Next, go to Actions -> Surface -> Show. Previous years, we had used the dms program to do this, but now chimera can generate the molecular surface itself. Note that for dock it is necessary to use the protein without hydrogens.
Recent versions of Chimera include a Write DMS tool that facilitates calculation of the molecular surface. Go to Tools -> Structure Editing -> Write DMS. Save the surface as 1DF8.receptor.dms.
The Write DMS tool will "roll" a small probe (default radius = 1.4 Angstroms = Size of a water molecule) over the surface of the enzyme and calculate the surface normal at each point. Note that this can also be accomplished with a separate dms program, as described in DOCK tutorials from previous years. DMS (distributed molecular surface) files are subsequently used as input for sphgen.
Spheres
To generate docking spheres, we need to use command line program called sphgen. To run the sphgen, we need a input file named INSPH.
1DF8.receptor.dms R X 0.0 4.0 1.4 1DF8.receptor.sph
1DF8.receptor.dms is the surface file we got from the previous step. (Change the file name to what you named the dms output something else). 1DF8.receptor.sph is the spheres file we want to generate in this step.
Use this command to generate spheres file
sphgen -i INSPH -o OUTSPH
You should get the OUTSPH similar to this
density type = X reading 1DF8.receptor.dms type R # of atoms = 881 # of surf pts = 10771 finding spheres for 1DF8.receptor.dms dotlim = 0.000 radmax = 4.000 Minimum radius of acceptable spheres? 1.4000000 output to 1DF8.receptor.sph clustering is complete 27 clusters
You can open the spheres file (1DF8_receptor.sph) with vim, as it is text file. There are over 700 spheres in this file. However, we're only interested in docking the ligand into the active site. Therefore we need to select only those spheres which are inside the active site, using sphere_selector command.
sphere_selector 1DF8.receptor.sph 1DF8.lig.mol2 10.0
1DF8.lig.mol2 is the ligand file we created earlier. sphere_selector will retain all spheres within 10.0A of the ligand as specified above. You should get a file called selected_spheres.sph. You can open it in vim. The number of spheres is drop down to 47 (check the first line).
Grid
The energy grid approximates the intermolecular interaction between the receptor and a dummy probe. This speeds up the evaluation of the intermolecular score between the receptor and the ligand.
Create a showbox.in file as following:
Y 5.0 selected_spheres.sph 1 1DF8.box.pdb
Type 'showbox < showbox.in'
Now create a grid.in file with a 0.3 grid spacing. The van der Waals components are a 6-9 instead of 6-12. It should look like this:
compute_grids yes grid_spacing 0.3 output_molecule no contact_score no energy_score yes energy_cutoff_distance 9999 atom_model a attractive_exponent 6 repulsive_exponent 9 distance_dielectric yes dielectric_factor 4 bump_filter yes bump_overlap 0.75 receptor_file 1DF8.rec.mol2 box_file 1DF8.box.pdb vdw_definition_file /opt/software/AMS536software/dock6/parameters/vdw_AMBER_parm99.defn score_grid_prefix grid
You can run grid on your local machine as
grid -i grid.in -o grid.out
(Optional) To run this on the queue on seawulf use a script such as
#PBS -l nodes=1:ppn=1 #PBS -l walltime=24:00:00 #PBS -N 1DF8.grid #PBS -j oe #PBS -o pbs.out cd /nfs/user03/sudipto/1DF8_setup grid -i grid.in -o grid.out
This creates the output files grid.bmp grid.nrg
Running DOCK
You can run dock with either a rigid or flexible ligand. For either one, you need to create an input file.
Lets start with a rigid ligand. We need to first make the input file by typing in:
vi rigid.in
The rigid.in file is:
ligand_atom_file 1DF8.lig.mol2 limit_max_ligands no skip_molecule no read_mol_solvation no calculate_rmsd yes use_rmsd_reference_mol no use_database_filter no orient_ligand yes automated_matching yes receptor_site_file selected_spheres.sph max_orientations 1000 critical_points no chemical_matching no use_ligand_spheres no use_internal_energy yes internal_energy_rep_exp 12 flexible_ligand no bump_filter no score_molecules yes contact_score_primary no contact_score_secondary no grid_score_primary yes grid_score_secondary no grid_score_rep_rad_scale 1 grid_score_vdw_scale 1 grid_score_es_scale 1 grid_score_grid_prefix grid dock3.5_score_secondary no continuous_score_secondary no gbsa_zou_score_secondary no gbsa_hawkins_score_secondary no amber_score_secondary no minimize_ligand yes simplex_max_iterations 1000 simplex_tors_premin_iterations 0 simplex_max_cycles 1 simplex_score_converge 0.1 simplex_cycle_converge 1.0 simplex_trans_step 1.0 simplex_rot_step 0.1 simplex_tors_step 10.0 simplex_random_seed 0 simplex_restraint_min no atom_model all vdw_defn_file /nfs/user03/sudipto/dock6/parameters/vdw_AMBER_parm99.defn flex_defn_file /nfs/user03/sudipto/dock6/parameters/flex.defn flex_drive_file /nfs/user03/sudipto/dock6/parameters/flex_drive.tbl ligand_outfile_prefix rigid write_orientations no num_scored_conformers 5000 write_conformations no cluster_conformations yes cluster_rmsd_threshold 2.0 rank_ligands no
This assumes that vdw_defn_file, flex_defn_file and flex_drive_file is in the current directory. You can copy these files from /nfs/user03/sudipto/dock6/parameters/
The following gives an explanation of what the PBS commands mean to the queue:
#PBS -l nodes=1:ppn=2 # use one nodes with 2 processors #PBS -l walltime=01:00:00 # run for a maximum of 1 hour #PBS -N dock6 # call this job dock6 #PBS -M user@ic.sunysb.edu # your email address (optional) #PBS -j oe # join the output and error files #PBS -o pbs.out # call the output of the script pbs.out
Now you can run this file through a c shell script. We made ours like this:
vi dock6.rigid.csh
#!/bin/csh #PBS -l nodes=1:ppn=2 #PBS -l walltime=01:00:00 #PBS -N dock6 #PBS -M user@ic.sunysb.edu #PBS -j oe #PBS -o pbs.out cd /nfs/user03/username/DOCK_Tutorial /nfs/user03/sudipto/dock6/bin/dock6 -i rigid.in -o rigid.out
Now we do something similar with flexible binding:
vi flex.in
ligand_atom_file 1DF8.lig.mol2 limit_max_ligands no skip_molecule no read_mol_solvation no calculate_rmsd yes use_rmsd_reference_mol no use_database_filter no orient_ligand yes automated_matching yes receptor_site_file selected_spheres.sph max_orientations 1000 critical_points no chemical_matching no use_ligand_spheres no use_internal_energy yes internal_energy_rep_exp 12 flexible_ligand yes min_anchor_size 40 pruning_use_clustering yes pruning_max_orients 100 pruning_clustering_cutoff 100 pruning_conformer_score_cutoff 25.0 use_clash_overlap no write_growth_tree no bump_filter no score_molecules yes contact_score_primary no contact_score_secondary no grid_score_primary yes grid_score_secondary no grid_score_rep_rad_scale 1 grid_score_vdw_scale 1 grid_score_es_scale 1 grid_score_grid_prefix grid dock3.5_score_secondary no continuous_score_secondary no gbsa_zou_score_secondary no gbsa_hawkins_score_secondary no amber_score_secondary no minimize_ligand yes minimize_anchor yes minimize_flexible_growth yes use_advanced_simplex_parameters no simplex_max_cycles 1 simplex_score_converge 0.1 simplex_cycle_converge 1.0 simplex_trans_step 1.0 simplex_rot_step 0.1 simplex_tors_step 10.0 simplex_anchor_max_iterations 500 simplex_grow_max_iterations 20 simplex_grow_tors_premin_iterations 20 simplex_random_seed 0 simplex_restraint_min no atom_model all vdw_defn_file /nfs/user03/sudipto/dock6/parameters/vdw_AMBER_parm99.defn flex_defn_file /nfs/user03/sudipto/dock6/parameters/flex.defn flex_drive_file /nfs/user03/sudipto/dock6/parameters/flex_drive.tbl ligand_outfile_prefix flex write_orientations no num_scored_conformers 5000 write_conformations no cluster_conformations yes cluster_rmsd_threshold 2.0 rank_ligands no
The main difference between the rigid docking and flex docking input file is that flexible_ligand is set to yes.
Now you can run this file through a .csh. We made ours like this:
vi dock6.flex.csh
#!/bin/tcsh #PBS -l nodes=1:ppn=1 #PBS -l walltime=01:00:00 #PBS -N dock6 #PBS -M user@ic.sunysb.edu #PBS -j oe #PBS -o pbs.out cd /nfs/user03/tbalius/DOCK_Tutorial /nfs/user03/sudipto/dock6/bin/dock6 -i flex.in -o flex.out
Docking Results
Rigid Dock
Virtual Screening
On compute, copy the file as:
scp ~sudipto/zinc/3_t60.mol2 sw:DOCK_Tutorial
Sample flex docking input file
ligand_atom_file 3_t60.mol2 limit_max_ligands no skip_molecule no read_mol_solvation no calculate_rmsd no use_database_filter yes dbfilter_max_heavy_atoms 999 dbfilter_min_heavy_atoms 0 dbfilter_max_rot_bonds 999 dbfilter_min_rot_bonds 0 dbfilter_max_molwt 9999.0 dbfilter_min_molwt 0.0 dbfilter_max_formal_charge 10.0 dbfilter_min_formal_charge -10.0 orient_ligand yes automated_matching yes receptor_site_file selected_spheres.sph max_orientations 1000 critical_points no chemical_matching no use_ligand_spheres no use_internal_energy yes internal_energy_rep_exp 9 flexible_ligand yes min_anchor_size 5 pruning_use_clustering yes pruning_max_orients 100 pruning_clustering_cutoff 100 pruning_conformer_score_cutoff 100.0 use_clash_overlap no write_growth_tree no bump_filter no score_molecules yes contact_score_primary no contact_score_secondary no grid_score_primary yes grid_score_secondary no grid_score_rep_rad_scale 1 grid_score_vdw_scale 1 grid_score_es_scale 1 grid_score_grid_prefix grid dock3.5_score_secondary no continuous_score_secondary no gbsa_zou_score_secondary no gbsa_hawkins_score_secondary no amber_score_secondary no minimize_ligand yes minimize_anchor yes minimize_flexible_growth yes use_advanced_simplex_parameters no simplex_max_cycles 1 simplex_score_converge 0.1 simplex_cycle_converge 1.0 simplex_trans_step 1.0 simplex_rot_step 0.1 simplex_tors_step 10.0 simplex_anchor_max_iterations 1000 simplex_grow_max_iterations 500 simplex_grow_tors_premin_iterations 0 simplex_random_seed 0 simplex_restraint_min no atom_model all vdw_defn_file vdw_AMBER_parm99.defn flex_defn_file flex.defn flex_drive_file flex_drive.tbl ligand_outfile_prefix vs write_orientations no num_scored_conformers 1 rank_ligands yes max_ranked_ligands 20000
For larger virtual screens, it would make sense to turn off ranking. DOCK waits to write out the docked poses when ranking is turned on. For larger databases, you may want to break up your database into multiple chunks and run them independently. Ranking can be performed as an additional step that simply rescores all the docked poses on the grid with rank_ligands=yes.
Sample script with openmpi using 8 processors on seawulf
#! /bin/tcsh #PBS -l nodes=4:ppn=2 #PBS -l walltime=200:00:00 #PBS -o zzz.qsub.out #PBS -j oe #PBS -V set nprocs = `wc -l $PBS_NODEFILE | awk '{print $1}'` echo "Running on ${nprocs} processors" cd /nfs/user03/sudipto/DOCK_Tutorial cp /nfs/user03/sudipto/dock6/parameters/vdw_AMBER_parm99.defn . cp /nfs/user03/sudipto/dock6/parameters/flex* . mpirun -np $nprocs dock6.mpi -i vs.in -o vs.out