Difference between revisions of "2025 DOCK tutorial 1 with PDBID 1O86"

From Rizzo_Lab
Jump to: navigation, search
(Visualizing The Results)
(Visualizing The Results)
Line 1,371: Line 1,371:
  
 
Now the best scoring molecule that was grown is at the top of the list and here's what it looks like:
 
Now the best scoring molecule that was grown is at the top of the list and here's what it looks like:
 +
 
[[File:bg.png|600px]]
 
[[File:bg.png|600px]]
 +
 +
Load in the <code> 1O86_fixed_protein.pdb </code> and the <code> 1O86_ligand_nH_ncH.mol2 </code>.
 +
On Chimera, select Actions --> Ribbon --> hide.
 +
This will give a clear picture of the ligand having slight overlap with the grown ligand:
 +
 +
[[File:overlap.png|600px]]

Revision as of 21:55, 7 March 2025

DOCK Tutorial using PDB 1O86

This tutorial is a series of modules designed to familiarize a new user with the basic functions and features of DOCK6, as well as provide guidance on its execution and analysis of results. Modules should be read in a linear fashion, as each module builds on the prior one.

The the full DOCK manual contains much more information than this tutorial, and as such is recommended as a resource if the information provided herein proves unsatisfactory.

000: Foundations

Chimera

UCSF Chimera is a python-based, open-source molecular visualization and manipulation software suite. It is extremely helpful for both preparing molecules/receptors for docking and for visually analyzing the results of those calculations.

It can be downloaded from the official UCSF site; make sure to select the version that matches your operating system (Mac or Windows). Although Chimera is no longer under active development, it remains a relevant software for molecular modeling.

Once Chimera has installed, you can open it to find a blank blue-ish window, with a row of tabs along the top. Throughout this tutorial, you will be instructed to perform different actions contained within these tabs. We will denote the specific tab and sub-tab to be accessed by >> signs. For example, File >> Open PDB would indicate that you should click on the File tab, then mouse to and click Open PDB. This is necessary because some actions are nested in multiple sub-tabs (for instance, selecting all hydrogens in a model would require Select >> Chemistry >> element >> H, as shown below)

ChimeraMenu.png

More extensive documentation on Chimera and its functions is available on the official site.

Seawulf

To complete this tutorial as a Stony Brook student, you will need an account on Seawulf. A ticket to obtain an account can be submitted on the Seawulf website; Dr. Rizzo will need to provide approval for account activation.

The Seawulf website also has a list of best practices for using a High Performance Computing (HPC) cluster. We recommend reading through them before attempting to run any intensive programs on Seawulf. Of particular note is the job management system SLURM - we provide a full tutorial on this system in section 008 of this tutorial if you want to read up on it now, but it will not be necessary for this tutorial until that point.

SSH

You will need to use a Secure Shell (SSH) connection to connect to Seawulf remotely. A guide to this process is available on the Seawulf website.

Basic Unix Commands and Environment

Seawulf uses a terminal-based Unix operating system. If you have never used a terminal-based OS before, you should familiarize yourself with some basic Unix tutorials. Broadly, you should know how to:

  • List your working directory with pwd, change your working directory with cd, make new directories with mkdir, remove directories with rmdir, and list the contents of a directory with ls
  • Edit files using the text editor vim (use the vimtutor to read about basic functionality)
  • Create an empty file with touch, move files and directories around with mv, copy directories and files with cp, and (very carefully!) remove directories and files with rm
  • Determine if commands are available with which
  • Understand how to use commands and how flags/input parameters should be formatted

You should also understand the concept of filepaths, and how they are used by commands. Much of DOCK relies on you using the correct filepaths to pass files and parameters into the program, and if the paths are wrong, then the program will not work. When possible, it is advisable to use absolute filepaths (paths that start at the root directory), as opposed to paths relative to your current working directory. For example, if you are in the directory /gpfs/home/yourusername/tutorial/002_spheres, referencing the absolute path /gpfs/home/yourusername/tutorial/001_structure/important_structure.pdb for a needed structure file is more reliable than the relative path ../001_structure/important_structure.pdb, as the latter path is relative to 002_spheres/, and meaningless outside of that context. The command realpathwill return the absolute path of any file passed to it, which is useful for quickly and accurately determining the absolute path of any file.

To work with DOCK6, it may also be necessary to add a path to your config file that tells Unix where to look for DOCK-related commands. You can check if you need to do this using the command which dock6. If which informs you that no dock6 can be found, you will need to edit your .bashrc file:

  1. Move to your home directory by either entering cd or cd ~
  2. Use the command vi .bashrc to start editing your personal config file
  3. At the bottom of the file, add the following line:

export PATH=$PATH:/Path/To/Your/DOCK6/bin

where Path/To/Your/DOCK6/ should be replaced with whatever the path is to your local DOCK installation (note: the full path should end with /bin). At the time of this writing, there is a compiled version of DOCK6.12 at /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/, but if this does not work then ask Dr. Rizzo or a lab member where a compiled instance can be found

4. Save and exit the file, then enter the command source .bashrc into the terminal.
5. Now when you request which dock6, the terminal should return the path to the directory you just provided.

After all this, you should have a good understanding of how to navigate the Unix terminal, and have the DOCK6 suite ready to use in your environment.

SCP File Transfer

Another important aspect of working on Seawulf is uploading and downloading files to your local machine. This is accomplished using the Secure Copy Protocol (scp) terminal command. See the pertinent section on the Seawulf website. For Windows, it may be advisable to download a third party program; FileZilla works for this task.

Directory setup

Finally, assuming all necessary base Unix knowledge has been obtained, you will want to set up a set of directories for the work you will be doing in this tutorial. The directories will help you compartmentalize your work and help to prevent important files from being overwritten or lost. For the modules of this tutorial, we recommend setting up this directory structure, and setting up folders on your local machine with the same names for ease of file transfer:

~/001_structure
~/002_spheres
~/003_gridbox
~/004_energy_min
~/005_rigid_dock
~/006_flex_dock
~/007_footprint
~/008_virtual_screen
~/009_gen_alg
~/010_de_novo

A Note on Troubleshooting

Finally, despite our best efforts at accuracy, a healthy amount of this tutorial will likely not go smoothly for you. There will be errors and inconsistencies between what you see here and what happens on Seawulf, and there may not be an immediate answer for what you should do to fix them. The instinct when this happens is to find someone who knows what might have happened and ask them for advice, and while this will usually be helpful, it may be inefficient. As such, we advise you to first please troubleshoot. No program you will use in this tutorial is intended to be a black box. All of them do their best to return errors that tell you what is going wrong, and where to look to fix it. If you get an error, read it! Often it will tell you that it can't find a particular file ("doesn't exist" is the favorite wording), or that some piece of the input is giving it trouble— these tell you what paths to check or lines of a file to review. Also, copy-pasting an entire error into Google (or ChatGPT if you must) is a completely valid line of inquiry, and often yields helpful results.

Having said that, here are some common errors and tactics you can use to fix them:

"[File] could not be opened" or "[file] does not exist" usually indicates that a path you gave the program is not accurate. You can "sanity check" paths by copying them directly from the input and putting them into an ls command. If it throws an error, fix the path!

"version `GLIBCXX_whatever' not found" is generally an issue with how the DOCK installation was compiled. Try to find a different version (/gpfs/projects/AMS536/zzz.programs usually has several versions available) or try running the command on a different node (Milan or Login)

Errors mentioning FORTRAAN: Make sure the input files are named correctly(ex INSPH for sphgen) and there are no extra spaces or lines anywhere in the input files. Sometimes they sneak in at the start or end of a line and are parsed literally.

Often, output is sent into a .out file instead of written to the console. If the program terminates immediately but does not return expected files, check whatever .out file was written for errors at the very bottom.

001: Structure Prep

Downloading the PDB

Having setup your necessary environment to work on Seawulf, let's navigate to your local computer and begin the protein preparation process:

To begin protein preparation you will need the 1O86 PDB file. Using this link: https://www.rcsb.org/structure/1O86, you will see the RCSB main page opened to our protein of choice:

1O86 RCSB 1.png

Next, you'll want to navigate to the top right corner where it says Download Files. Then, select the dropdown arrow. The following dropdown menu will appear on the screen:


1O86 RCSB 2.png


Select 'Download PDB'. Now the PDB file is downloaded to your local computer.

Now that you have the PDB file, lets navigate to Chimera program to open the file.

Protein Isolation

Now that you have the downloaded PDB, the first step is to isolate and modify our protein, if necessary.

First, open the PDB in Chimera, zoom into where the ligand is, hold the control key and click to select an atom on the ligand, and press the up arrow key to highlight the ligand. Then go to Actions >> Focus.

The ligand should now be highlighted in green; you will see it is surrounded by water molecules:

Ligand Embed.png

We're going to get rid of the ligand and the water molecules.

First, since the ligand is highlighted, go to Actions >> Atoms/Bonds >> Delete

Next, to get rid of the water molecules, navigate to Select >> Residue >> HOH

You'll notice that all of the water molecules are highlighted:

Water.png

Just like the ligand, navigate to Actions >> Atoms/Bonds >> Delete

Now you have just a protein:

Protein only.png

Inspecting the Protein

With just the protein file, lets inspect if there are any missing loops along the exterior.

You'll notice that there is a missing loop towards the right side of the protein.

Missing loop.png

To refine the missing loop, go to Tools --> Structure Editing --> select Model/Refine Loops

The following pop up menus will appear:

Residue List.png

This is a list of the residues in the protein. The residues 435-438 boxed in red denote the ones involved with the missing loop.

Model refine.png

This is the Modeller/Refine Menu. You can leave everything selected as is. Once you select apply, wait a couple of minutes. The program is generating different refinements to the missing loops. The residue menu will say "Running Modeller Web Service". Additionally, you'll be able to track the process completed on the search bar menu on the bottom part of the screen on Chimera.

Once the modeler is 100% completed, the following popup menu will appear on Chimera:

Modeller menu.png

You can see that the modeller program generated five alternative protein models that refined the missing loop. If you press the shift key and highlight all of the model numbers you will see the following proteins with fixed loops.

Fixed loop.png

Now, using the drop down menu, from earlier, you'll want to assess what's the best model to choose that has refined loops. Sometimes the difference in scores are negligible and you may want to select based on zDope, which would mean any loop is sufficient. However, there may be another score that could narrow your decision making.

In the 'Modeller Results' menu, select Fetch Scores. You'll see in your chimera window that a job was submitted. This is signaling to the program to retrieve the scores from the program. Once the job is finished, the Estimated RMSD and Estimated Overlap columns will contain values:

Scores.png

From adding more scores, you'll notice that the models differ in their Estimated RMSD values. Based on these values, Models 1.2 or 1.5 are a good choice based on RMSD. So, lets choose model 1.2 as our protein model to use in this tutorial. We will also save this model as our new PDB file.

Go to File --> Save PDB. When the save menu appears, make sure that only the second model is selected like so:

Save Menu.png

Lets also give this PDB a new title, the one supplied is 1O86_fixed_protein.pdb . Additionally, we will need the original PDB for ligand preparation.

Press save and now you have a refined protein to prepare.

Protein Preparation

On Chimera, open the 1O86_fixed_protein.pdb

In order to use this protein for docking calculations, we will need to generate mol2 files.

The first mol2 file will be of this particular protein.

Go to File >> Save Mol2. You will want to give this mol2 file a title that describes the fact that the protein doesn't have hydrogens or charges. So lets name this file 1O86_protein_nH_ncH.mol2

The nH refers to "no hydrogens" and the ncH refers to "no charges".

Now that the mol2 is saved, return to the 1O86_fixed_protein.pdb on Chimera so that we can generate the second mol2 file. The second mol2 file will contain the protein with hydrogens and charges.

Adding Hydrogens

Go to Tools >> Structure Editing >> AddH

The following menu will appear:

Wm.png

All the defaults that are selected are acceptable. Select OK.


You will get a confirmation message on the chimera text bar that says 'Hydrogens Added'. Now you have added hydrogens to the protein file. The last thing to do is to add charges.

Adding Charges

Before we can save the second mol2 for the protein we must also add charges to the protein.

Go to Tools >> Structure Editing >> press Add Charge

The following menu will appear:

Cm.png

By default Chimera selects AM1-BCC charges, but for this tutorial we are going to use Gasteiger charges. Every other selection on the menu is okay, so after changing the charge type, go ahead and select apply. You'll notice another pop up menu appears:

Specify.png

This deals with ions. Just as before, make sure that Gasteiger is selected. All other defaults are okay. Select OK. The Chimera window will inform you that standard charges are added.

Now that your protein has hydrogens and charges, we can go ahead and generate the second mol2 file.

Go to File >> Save Mol2. This time the name should reflect that the protein has hydrogens and charges. Lets name it 1O86_protein_wH_wcH.mol2 .

Now our protein files are prepared for docking, let's now turn our attention to preparing the ligand.

Isolating the Ligand

Having made a Protein PDB and generated two mol2 files, lets now do the same thing for the ligand. The first step is to File >> Close Session to clear the current environment, then open the original PDB file that we downloaded.

Just like in the protein section, press control and select an atom on the ligand. Then press the up arrow to highlight the entire ligand:

Ligand Embed.png

Go to Select >> Invert (selected models)

All highlight.png

You'll notice that everything around the ligand is highlighted.

Now go to Actions >> Atoms/Bonds >> delete

Now we have a file that just contains the ligand.

1O86 ligand.png

Go to File >> Save PDB and name the file 1O86_ligand.pdb

This will be the file that we will use to prepare the mol2 files for the dock program.

You can now close your current session on Chimera by going to File >> Close Session

Preparing the Ligand

Now that we have a ligand only PDB, lets go ahead and generate the two mol2 files with the ligand.

The first step is to go to open the 1O86_ligand.pdb on chimera.

Go to File >> Save Mol2

Lets give the title of this first mol2 to denote no hydrogens or charge on the ligand.

Call it 1O86_ligand_nH_ncH.mol2

Running Dock Prep

To generate the second mol2 you are more than welcome to revisit the steps taken to generate the second protein mol2. In the case of the ligand, we will introduce an alternative with a program called Dock Prep.

First, return to 1O86_ligand.pdb on chimera:

Go to Tools >> Structure Editing >> DockPrep

The following pop-up menu will appear:

600

All of the default parameters are sufficient. Select OK.

The next set of drop down menus will be the same as adding hydrogens and charges to a protein.

Remember all of the defaults are okay for adding hydrogens, but make sure you switch from

AM1-BCC to Gasteiger charges when adding the charges for the ligand.

All other defaults are sufficient for each of the other pop-up menus.

The following images show the pop-up menus that will appear after you accept using Dock Prep and contain the acceptable defaults:

600

The Hydrogen Menu

600

The Charge Menu

600

The Net Charge Menu

What's neat about Dock Prep is that the last pop-up menu will be the Save Mol2 menu:

600

Lets give this mol2 a file name that specifies that it has hydrogens and charges.

Call it 1O86_ligand_wH_wcH.mol2

Congratulations, you've generated all the necessary mol2 files to advance to the next steps of this tutorial.

Lets transfer the mol2 files onto seawulf using the following command

  scp *mol2 yourusername@stonybrook.edu:'/gpfs/home/yourusername/tutorial/001_structure'

002: Spheres

Generate the Required Surface File

  1. Open 1O86 protein only file (with no hydrogens, no charges) in chimera and hit Actions >> Surface >> Show
  2. Write the DMS file by choosing Tools > Structure Editing > Write DMS
  3. Upload the DMS file to your directory
  4. Create a sphere input file using the following command:
vi INSPH
5. Paste the following into your input file:
./1O86.dms
R
X
0.0
4.0
1.4
1O86.sph
6. Run the program with the following command
sphgen -i INSPH -o OUTSPH
7. Download the output file to your local directory and open and overlay with protein file in Chimera

File:Screenshot 2025-02-19 130820.png

Based on the overlay the ribbons are aligned with the spheres indicating the generation of surface spheres was successful.

Selecting Spheres Localized on Binding Site

  1. Run program on dock 6 called sphere_selector
sphere_selector 1O86.sph 1o86_ligand_hydrogens_charges.mol2 10.0 
2. Output file will automatically be written as selected_spheres.sph
3. Download this file to your local computer and overlay the file with your original protein file to ensure the spheres are localized over your ligand
4. Select and hide binding spheres to ensure they are where the ligand is located

003: Grid/box

Generating box and grid. The box and grid generation specify the 3-D space where the docking simulation will take place. The box defines the 3-D space where the docking algorithm will search for binding orientations and conformations of the ligand. The box size should be large enough to include the binding space, but not too large to conserve computational cost. The grid pattern allows for energy calculations between protein and ligand. A smaller grid step would allow for more precise calculations but would be computationally expensive and time consuming. A larger grid step would be computationally cheaper but would be lower in accuracy.

Generating the Box

Create an input file for generating a box around the ligand binding site.

vi showbox.in

Insert the following code into the file:

Y
8.0
selected_spheres.sph
1
1o86.box.pdb

This will construct a box that will enclose the binding spheres that are localized on the binding side. The box will have dimensions of 8.0 Angstroms from the binding spheres.

Run the input file using the following command:

 showbox < showbox.in

An output file titled 1o86.box.pdb will be generated in your local directory.

Generating the Grid

vi grid.in 

Insert the following into your input file:

allow_non_integral_charges                no
compute_grids                             yes
grid_spacing                              0.4
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                             1o86_rec.mol2
box_file                                  1o86.box.pdb
vdw_definition_file                       /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/vdw_AMBER_parm99.defn
score_grid_prefix                         grid

Save the file and run using the following command:

 grid -i grid.in -o 1o86_grid.out

An output file with your Grid generation will appear in your directory.

004: Minimization

Before moving toward preforming docking of any fragments/ligands onto your receptor of interest it is important that your original ligand is energy-minimized. This is important before dock is able to calculate any energy interactions between atoms on the rector and ligand.

Ligand Minimization

Create an input file using the following command:

vi min.in

Use the following script for the input file:

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
bump_filter                                                  no
score_molecules                                              yes
contact_score_primary                                        no
grid_score_primary                                           yes
grid_score_rep_rad_scale                                     1
grid_score_vdw_scale                                         1
grid_score_es_scale                                          1
grid_score_grid_prefix                                       grid
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                                                /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/vdw_AMBER_parm99.defn
flex_defn_file                                               /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/flex.defn
flex_drive_file                                              /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/flex_drive.tbl
ligand_outfile_prefix                                        1o86.lig.min
write_orientations                                           no
num_scored_conformers                                        1
rank_ligands                                                 no

Run the following command:

dock6 -i min.in -o min.out

Or alternatively run using the following slurm script:

#!/bin/bash
#SBATCH --job-name=1o86_min           # Name of the job
#SBATCH --output=min.txt  # Standard output file
#SBATCH --error=1o86_error.txt    # Standard error file
#SBATCH --ntasks-per-node=1        # Number of tasks (adjust as needed)
#SBATCH --mail-user=vanie.seecharan@stonybrook.edu          # user
#SBATCH --nodes=1                   # nodes
#SBATCH --time=4:00:00            # Maximum walltime (adjust as needed)
#SBATCH --partition=short-40core    # Correct partition name
# Ensure the input file exists before running the program
if [ ! -f min.in ]; then
   echo "Error: grid.in file not found!"
   exit 1
fi
# Run the program
/gpfs/projects/AMS536/zzz.programs/dock6.10/bin/dock6 -i min.in -o min.out 10.0

The ligand minimized mol2 file should be produced in your directory with the name "1o86.lig.min_scored.mol2" download this file. Open the energy minimized ligand file in chimera and overlay with your original ligand file.

[Insert Image of overlayed ligand and energy minimized ligand]

005: Rigid Docking

Rigid docking allows the ligand to be treated as a rigid molecule (no confirmational changes) and determines best orientation for molecule to fit directly into the receptor site.

create an input file using the following command

vi rigid.in

Add the following script:

use_ligand_spheres                                           no
bump_filter                                                  no
score_molecules                                              yes
contact_score_primary                                        no
grid_score_primary                                           yes
grid_score_rep_rad_scale                                     1
grid_score_vdw_scale                                         1
grid_score_es_scale                                          1
grid_lig_efficiency                                          no
grid_score_grid_prefix                                       grid
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_final_min                                            no
simplex_random_seed                                          0
simplex_restraint_min                                        no
atom_model                                                   all
vdw_defn_file                                                /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/vdw_AMBER_parm99.defn
flex_defn_file                                               /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/flex.defn
flex_drive_file                                              /gpfs/projects/AMS536/zzz.programs/dock6.10/parameters/flex_drive.tbl
ligand_outfile_prefix                                        rigid.out
write_mol_solvation                                          no
write_orientations                                           no
num_scored_conformers                                        100
write_conformations                                          yes
cluster_conformations                                        yes
cluster_rmsd_threshold                                       2.0
score_threshold                                              100.0
rank_ligands                                                 no

Run using the following command:

dock6 -i rigid.in -o rigid.out

Or run using the following slurm script:

#!/bin/bash
#SBATCH --job-name=1o86_rigid           # Name of the job
#SBATCH --output=rigid.txt  # Standard output file
#SBATCH --error=1o86_error.txt    # Standard error file
#SBATCH --ntasks-per-node=1        # Number of tasks (adjust as needed)
#SBATCH --mail-user=vanie.seecharan@stonybrook.edu          # user
#SBATCH --nodes=1                   # nodes
#SBATCH --time=4:00:00            # Maximum walltime (adjust as needed)
#SBATCH --partition=short-40core    # Correct partition name
# Ensure the input file exists before running the program
if [ ! -f grid.in ]; then
   echo "Error: grid.in file not found!"
   exit 1
fi
# Run the program
/gpfs/projects/AMS536/zzz.programs/dock6.10/bin/dock6 -i rigid.in -o rigid.out 10.0

The following output files will be produced in your directory:

  • 1o86.rigid.out_scored.mol2
  • rigid.out

Download the mol2 file to your computer and visualize with chimera.

006: Flexible Docking

Flexible docking accounts for the conformational flexibility of both the ligand and the receptor.

Navigate to a separate directory for flexible docking and create an input file using the following command:

vi flex.in

Add the following script:

conformer_search_type                                        flex
write_fragment_libraries                                     no
user_specified_anchor                                        no
limit_max_anchors                                            no
min_anchor_size                                              5
pruning_use_clustering                                       yes
pruning_max_orients                                          1000
pruning_clustering_cutoff                                    100
pruning_orient_score_cutoff                                  1000.0
pruning_conformer_score_cutoff                               100.0
pruning_conformer_score_scaling_factor                       1.0
use_clash_overlap                                            no
write_growth_tree                                            no
use_internal_energy                                          yes
internal_energy_rep_exp                                      12
internal_energy_cutoff                                       100.0
ligand_atom_file                                             ../004_dock/2w26_lig_min_scored.mol2
limit_max_ligands                                            no
skip_molecule                                                no
read_mol_solvation                                           no
calculate_rmsd                                               yes
use_rmsd_reference_mol                                       yes
rmsd_reference_filename                                      ../004_dock/2w26_lig_min_scored.mol2
use_database_filter                                          no
orient_ligand                                                yes
automated_matching                                           yes
receptor_site_file                                           ../002_surface_spheres/selected_spheres.sph
max_orientations                                             1000
critical_points                                              no
chemical_matching                                            no
use_ligand_spheres                                           no
bump_filter                                                  no
score_molecules                                              yes
contact_score_primary                                        no
grid_score_primary                                           yes
grid_score_rep_rad_scale                                     1
grid_score_vdw_scale                                         1
grid_score_es_scale                                          1
grid_lig_efficiency                                          no
grid_score_grid_prefix                                       ../003_grid/grid
minimize_ligand                                              yes
minimize_anchor                                              yes
minimize_flexible_growth                                     yes
use_advanced_simplex_parameters                              no
minimize_flexible_growth_ramp                                yes
simplex_max_cycles                                           1
simplex_score_converge                                       0.1
simplex_initial_score_coverge                                5
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                                  500
simplex_grow_tors_premin_iterations                          0
simplex_final_min                                            no
simplex_random_seed                                          0
simplex_restraint_min                                        no
atom_model                                                   all
vdw_defn_file                                                /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/vdw_AMBER_parm99.defn
flex_defn_file                                               /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/flex.defn
flex_drive_file                                              /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/flex_drive.tbl
ligand_outfile_prefix                                        flex.out
write_mol_solvation                                          no
write_orientations                                           no
num_scored_conformers                                        1
score_threshold                                              100.0
rank_ligands                                                 no


Explanation of .in for flex docking and A&G algorithm (Chimera visuals after)

007: Footprint Scoring

Explanation of .in for FPS, use of Python script to generate graph

008: 5K Virtual Screening

In this section, you will conduct a virtual screening on a set of druglike potential leads against the 1O86 receptor. Virtual screening of large ligand libraries is one of the main uses of DOCK and other molecular docking suites in drug discovery, as it allows for lead compound identification at much lower cost than traditional in vitro assays.

Input File

Because this section generates a high volume of molecule poses, you may need to make use of your scratch directory on Seawulf. While your home directory has a maximum storage volume of 20 gigabytes, scratch has a storage volume of 20 TERAbytes, so it will easily accommodate the output of your virtual screen. Your scratch directory should be located at /gpfs/scratch/yourusername/. Move there and create a directory for your virtual screening.

Copy the input file from your 006_flex_dock directory into your present directory. We can re-use the majority of input from this file because the docking process is the same in both cases; the only difference is in the number of molecules to be docked. If you like, you can re-name the input file using mv to something like flex_vs.in for clarity.

The only parameter that needs to be changed in the input file is the ligand_atom_file parameter. Instead of the single 1O86 ligand .mol2, we want to dock a .mol2 file that contains multiple potential drug candidates. You should be able to find several such .mol2 files in /gpfs/projects/AMS536/zzz.programs/VS_libraries/. For this tutorial, we will screen the 5,000 molecule library (VS_library_5K.mol2), but you can elect to do the 100- (or 25,000) molecule library by simply changing the input file name. Just copy the path to the file (should be /gpfs/projects/AMS536/zzz.programs/VS_libraries/VS_library_5K.mol2), open the .in file, delete the current value for ligand_atom_file, and paste in the path. If you don't want to deal with the long filepath, you can also copy the VS_library file to your working directory, and just have the filename as the parameter instead. It is probably also advisable to change the names of other output files in the .in file so that the output is distinguishable from the previous flexible docking.

Note that if you have moved to your scratch directory and used relative paths in the .in file for the receptor sphere file, gridbox, et cetera, those will also need to be changed to reflect your new location. Absolute paths will likely be the most efficient solution for this.

Slurm and Job Submission

Up until this point, you have probably been running dock6 on the head node of Seawulf. This is fine for short, low-intensity jobs, like docking a single molecule or (debatably) generating a grid. However, the head node caters to all users currently accessing Seawulf, and has limited computing power at its disposal. As such, attempting to run a longer job (such as a 5,000 molecule screen) will fully consume the head node's limited resources, slowing down or completely killing all user sessions in the process. To safely utilize the full computing power of Seawulf, you need to submit a job to one of its high-powered nodes using its queueing system. This system tracks all jobs that have been submitted by various users and allocates them to processors as they are freed up, maximizing the productivity and efficiency of the computing cluster. The system Seawulf uses for this queue tracking is called Slurm (Simple Linux Utility and Resource Management).

Slurm is implemented as a module on Seawulf, and needs to be loaded into your environment before it can be used. You can load it by typing module load slurm into your terminal from any directory. Of note, you will need to do this every time you start a new SSH session. If you want the module to always be loaded when you log in, you can add the command to your .bashrc file (see section 000 for instructions on how to modify your .bashrc).

Once the module has loaded, you can use the command sinfo to view what processors are present on Seawulf. If you are on Milan, you should see 40- and 96-core queues of varying lengths (short, medium, long), as well as some specialized GPU cores and high memory cores. The Seawulf website has some good descriptions of what cores are available and the duration of jobs allowed on them. sinfo --state=idle allows you to see what queues have cores idle; this is helpful for knowing where a job can start running immediately.

To submit a job to a queue, you need to create a special job script file that will tell the queue everything it needs to know about the job, as well as what commands to run. Here is what that file will look like for our VS run:

#!/bin/bash
#
#SBATCH --job-name=1o86_vs
#SBATCH --output=vs_output.txt
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=96
#SBATCH --time=48:00:00
#SBATCH -p long-96core

dock6 -i flex_vs.in -o flex_vs.out

A line-by-line breakdown of this file:

  • #!/bin/bash is called a shebang, and is used in unix shell scripts to indicate that bash should be used to interpret and execute the script.
  • #SBATCH --job-name=1o86_vs tells slurm what our job is called; this can be changed to whatever strikes your fancy without consequence
  • #SBATCH --output=vs_output.txt tells slurm where to output information about the job itself. If jobs are not running properly, check this file for errors.
  • #SBATCH --nodes=1 tells slurm how many computing nodes we want for this job. 1 is appropriate here because we are not using any parallel processing functionality.
  • #SBATCH --ntasks-per-node=96 tells slurm how many tasks it should expect to run per node. There are no strict guidelines on this, but setting it equal to the number of cores in the node (96 or 40 on Milan) is a good default.
  • #SBATCH --time=48:00:00 tells slurm the maximum amount of time it should allocate for this job. The best thing to do here is request the maximum time possible for the queue; check the Seawulf website for each queue's parameters.
  • #SBATCH -p long-96core tells slurm which queue we would like to submit to; in this case, we are submitting to the long-term 96-core queue.
  • dock6 -i flex_vs.in -o flex_vs.out is the actual command we would like to run in the job. This can be multiple lines of commands, just like a regular shell script, but in this case we are just performing a single virtual screening, so we only call dock6 once.

Now that you have a sense of what we're trying to do, create a text file with a recognizable name (ex, job.sh) and either copy-paste or re-type the above input into the file, making any modifications to the dock path or input filename as needed. Save and exit the file.

Finally, you are ready to submit your first job to the queue. Use the command sbatch job.sh to submit your job file. If slurm accepts it, you will be provided a job number.

JobSubmitted.png

You can use the command squeue -u yourusername to check the status of your job. If you do not see it in the queue directly after submitting, it has likely encountered an error, and you will need to troubleshoot.

JobRunning.png

Otherwise, it will likely start as PD (pending) for a short time before switching to R (running). As it runs, you should see .mol2 files spontaneously created in the directory. Make sure to check semi-regularly that the job is still running. It will likely take 40 hours to finish; if you want to try to speed the process up, you can look at previous tutorials that make use of Message-Passing Interface (MPI) parallelization to use more nodes at once for greater efficiency.

Once the virtual screen has finished, you should have a .mol2 file in your directory that contains the best poses of the 5,000 ligands that were screened, according to purely grid-based docking.

Re-scoring Docked Molecules

Although grid scoring provides a good initial look at the most favorable poses of the given molecules, it is generally a good idea to re-score the poses provided by a different criteria to determine a final order. In this case, we will use footprint similarity scoring (FPS) as our re-scoring function. Once again, we can copy the input file that we used in the single-molecule footprint scoring example, and change the ligand_atom_file parameter from the 1O86 ligand to the output poses from the virtual screening. You should also change ranked_ligands to yes (towards the end of the file), and add a line with the parameter max_ranked_ligands set to 500 at the end of the file. This will ensure that the final .mol2 is a manageable size, while retaining the best poses of the docking. Finally, set the ligand_outfile_prefix parameter to something that will distinguish it from the other output already in the directory. Write and exit the file, and rename it to something appropriate like rescore.in.

Because this re-scoring uses rigid docking and no grid calculations, it should be relatively lightweight and safe to run on the head node. If you want to be safe (or if it is still running after a couple minutes), you can cancel it and use the command srun -p short-96core -t 1:00:00 --pty bash to instead open up an interactive bash session on one of the computing nodes. This will let you use an interactive terminal in a manner identical to the head node, but direct all processing requests to an available computing node instead of using the head node's resources.

Once you run the re-scoring using dock6 -i rescore.in -o rescore.out, you should see a re-scored ligand file in the directory with the prefix indicated in the rescore.in file. If you want, you can copy this .mol2 file to your home directory so that it is not purged after 30 days (a convenient feature of the scratch directory). After that, download it to your local machine using scp.

Viewing VS Results in Chimera

Thanks to our infallible foresight, we have saved only the 500 best ligands to visualize in Chimera, as opposed to the original, crash-inducing number of 5,000. To analyze the poses of these ligands, launch Chimera and File >> Open your receptor .mol2 file. Then, navigate to Tools >> Surface/Binding Analysis >> ViewDock, and open the 500-ligand .mol2 file that you have just downloaded. Chimera may lag for a minute depending on your system specs, but should eventually provide a dialogue box and display one ligand in (hopefully) your receptor's binding site.

VS ViewDock.png

The dialogue box allows you to select one or multiple ligands at a time to view, and displays their scores in a nice table format. You can view additional columns of data in the dialogue box by navigating to Column >> Show and selecting the desired parameter, and view multiple ligands at a time by clicking one, then holding shift and clicking another.

Congratulations! You have successfully conducted a virtual screening, learned how to use slurm in the process, and now have results for potential lead compounds targeting this receptor.

009: Genetic Algorithm

In addition to providing a platform for traditional virtual screening methods, DOCK also implements several unique algorithms for de novo-type drug design. One of these is the genetic algorithm (GA), which accepts one or several "parent" molecules and "mutates" them with basic substitutions, insertions, or deletions using a standard molecular fragment library before culling the resultant "population" based on user-specified metrics. The intent is to iteratively improve molecules over several "generations" of mutation-cull steps so that new chemical space can be explored, and more potent ligands found.

In order for the GA to mutate the provided parent molecules, it needs a standard library of molecular fragments to draw from. DOCK provides a foundational library that is generally effective in most GA applications, but can also accept .mol2 files to fragment and use as a custom library. To make this tutorial as educational as possible, you will learn how to fragment a molecule and add it to the foundational fragment library before running the genetic algorithm.

First, move to your 009_genetic_algorithm directory and create a directory within it called fraglib/. Then, move into that directory in preparation for creating the fraglib generation input file.

Generating Fragments

The overall goal in this section is to use DOCK to fragment the ligand present in the 1O86 system, and add those fragments to the foundational library. The backbone of this operation is the write_fragment_libraries option in the DOCK input file. Below is what a sample input file would look like; you may copy and paste it directly, but we recommend moving through DOCK's decision tree and understanding what defaults the program has that we are changing. In this instance, we override several defaults such as orient_ligand and score_molecule, as these are unnecessary for the pure operation of generating ligand fragments. We will refer to the input file as fraglib_gen.in

conformer_search_type                                    	flex
write_fragment_libraries                                 	yes
fragment_library_prefix                                  	1o86_lig_fraglib
fragment_library_freq_cutoff                             	1
fragment_library_sort_method                             	freq
fragment_library_trans_origin                            	no
use_internal_energy                                      	no
ligand_atom_file                                         	FILL IN 1O86 LIGAND MOL2
limit_max_ligands                                        	no
skip_molecule                                            	no
read_mol_solvation                                       	no
calculate_rmsd                                           	no
use_database_filter                                      	no
orient_ligand                                            	no
bump_filter                                              	no
score_molecules                                          	no
atom_model                                               	all
vdw_defn_file                                            	FILL IN VDW.DEFN FILEPATH
flex_defn_file                                           	FILL IN FLEX.DEFN FILEPATH
flex_drive_file                                          	FILL IN FLEX_DRIVE FILEPATH
ligand_outfile_prefix                                    	1o86_fraglib
write_mol_solvation                                      	no
write_orientations                                       	no
num_scored_conformers                                    	1
score_threshold                                          	100.0
rank_ligands                                             	no

Once you have created this input file and inserted the relevant filepaths, you can run DOCK to generate the fragments:

dock6 -i fraglib_gen.in -o fraglib_gen.out

Because we are only fragmenting one molecule, this program should be fine to run on the head node, and should finish in a couple seconds. Once it finishes, you should see present in the directory:

  • Four .mol2 files containing "linker", "rigid", "scaffold", and "sidechain" in their names; will be referred to as 1o86_fraglib_TYPE.mol2
  • A file ending in "torenv.dat" (referred to as 1o86_lig_torenv.dat hereafter)
  • An output_scored.mol2 file
  • A .out file with whatever name you specified

The set of four .mol2 files contain all the fragments that DOCK was able to generate from the original molecule, and the *torenv.dat file is a record of all the torsion-able bonds that DOCK cleaved to generate the fragments.

Combining Fragment Libraries

Now that we have generated fragments and associated torsions from our ligand, we need to combine them with the standard DOCK fragment library and associated torsion environments. The torsion environment combination can be accomplished via a python script.

First, determine the path to the default DOCK torsion environment collection. It should be located in the parameters folder associated with your DOCK installation. At the time of writing, the full path is /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_torenv.dat

Next, determine the path for the python script used to combine torsion environments. It should be in the same bin directory as your dock6 command. At the time of writing, there is an instance at /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/bin/combine_torenv.py

Once you have found paths that work for both of these files, you can combine the standard torsion environment with the newly generated custom one by running

python insert_path_here/combine_torenv.py ./1o86_lig_torenv.dat insert_path_here/fraglib_torenv.dat

(note that you may need to use the command module load python if you encounter a python-related error in running this) Once the script finishes, you should have a full_fraglib.dat, full_sorted_fraglib.dat and unique_full_sorted_fraglib.dat files in your directory. We will be using the "unique" variant for our genetic algorithm process.

We also need to combine the .mol2 files that we have generated from our ligand with the standard DOCK-provided ones. Because .mol2 files just contain lists of molecules without any special header/footer text, they can just be concatenated together by a shell script. Combine the linker, scaffold, and sidechain .mol2 files with their counterparts in the parameters/ folder using cat; an example would be:

cat insert_path_here/parameters/fraglib_linker.mol2 ./1o86_fraglib_linker.mol2 >> combined_fraglib_linker.mol2

(Note that we do not do anything with the "rigid" .mol2; this set of fragments is not needed to run the GA). After you do this process for all three variants of the fraglib .mol2s, you will be ready to run the genetic algorithm. It may be advisable to move the ligand-specific fragment library mol2s to a sub-directory in order to prevent cluttering/confusion.

Running the GA

With all preparation completed, we can now start optimizing molecules using the genetic algorithm. We will use our original ligand as the "parent" molecule for the first generation, and allow the algorithm to mutate it into new molecules for fifty generations.

Aside from the filepaths/filenames for the various fraglibs, ligand, protein spheres, and .defn files, the only parameters we are changing from default in the .in file are ga_max_generations and ga_mutate_parents. Maximum generations are lowered to 50 for computational tractability, and parents must be mutable because we only have one molecule to start with; the population would grow very slowly or even die off if we did not allow parental recombination. A full sample input file is given below (but as always, do please try to do it yourself):

conformer_search_type                                    	genetic
ga_molecule_file                                         	ORIGINAL 1O86 LIGAND MOL2
ga_utilities                                             	no
ga_fraglib_scaffold_file                                 	FRAGLIB_SCAFFOLD MOL2
ga_fraglib_linker_file                                   	FRAGLIB_LINKER MOL2
ga_fraglib_sidechain_file                                	FRAGLIB_SIDECHAIN MOL2
ga_torenv_table                                          	FRAGLIB TORENV DAT
ga_max_generations                                       	50
ga_xover_on                                              	yes
ga_xover_sampling_method_rand                            	yes
ga_xover_max                                             	150
ga_bond_tolerance                                        	0.5
ga_angle_cutoff                                          	0.14
ga_check_overlap                                         	no
ga_mutate_addition                                       	yes
ga_mutate_deletion                                       	yes
ga_mutate_substitution                                   	yes
ga_mutate_replacement                                    	yes
ga_mutate_parents                                        	yes
ga_pmut_rate                                             	0.3
ga_omut_rate                                             	0.7
ga_max_mut_cycles                                        	5
ga_mut_sampling_method                                   	rand
ga_num_random_picks                                      	15
ga_max_root_size                                         	5
ga_energy_cutoff                                         	100
ga_heur_unmatched_num                                    	1
ga_heur_matched_rmsd                                     	0.5
ga_constraint_mol_wt                                     	500
ga_constraint_rot_bon                                    	10
ga_constraint_H_accept                                   	10
ga_constraint_H_don                                      	5
ga_constraint_formal_charge                              	2
ga_ensemble_size                                         	200
ga_selection_method                                      	elitism
ga_elitism_combined                                      	yes
ga_elitism_option                                        	max
ga_max_num_gen_with_no_crossover                         	25
ga_name_identifier                                       	1o86_ga
ga_output_prefix                                         	1086_ga_out
use_internal_energy                                      	yes
internal_energy_rep_exp                                  	12
internal_energy_cutoff                                   	100.0
use_database_filter                                      	no
orient_ligand                                            	yes
automated_matching                                       	yes
receptor_site_file                                       	RECEPTOR SPHERES .SPH
max_orientations                                         	1000
critical_points                                          	no
chemical_matching                                        	no
use_ligand_spheres                                       	no
bump_filter                                              	no
score_molecules                                          	yes
contact_score_primary                                    	no
grid_score_primary                                       	yes
grid_score_rep_rad_scale                                 	1
grid_score_vdw_scale                                     	1
grid_score_es_scale                                      	1
grid_lig_efficiency                                      	no
grid_score_grid_prefix                                   	GRID PATH
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                              	500
simplex_grow_tors_premin_iterations                      	0
simplex_final_min                                        	no
simplex_random_seed                                      	0
simplex_restraint_min                                    	no
atom_model                                               	all
vdw_defn_file                                            	VDW DEFN FILE
flex_defn_file                                           	FLEX DEFN FILE
flex_drive_file                                          	FLEX_DRIVE FILE

We will also need to create a batch file to run the GA using slurm, as it is an intensive process that will take a number of hours to run. A sample is provided below; you should adopt yours to the appropriate queue, job name, time to run, DOCK path, and input filename:

#!/bin/bash
#
#SBATCH --job-name=1o86_GA
#SBATCH --output=ga_output.txt
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=40
#SBATCH --time=4:00:00
#SBATCH -p short-40core

change_this_to_your_path_to_dock/bin/dock6 -i genalg.in -o genalg.out

Use sbatch job.sh to submit this per usual, and check up on it regularly. The first few generations should go relatively quickly, with a slowdown as the molecular population increases past generation 8-10. If you want to track the population growth, you can use grep -c "Name" *mol2 to view the molecule populations of every .mol2 file that has been written so far.

Analysis

Once the genetic algorithm has finished running, you can view the final generation's best molecules and poses in Chimera via the same process outlined in section 008. To review, this will entail downloading the final .mol2 to your local machine (generation 50 in this case), launching Chimera, opening the receptor .mol2 via File >> Open, and using the Tools >> Structure/Binding Analysis >> ViewDock tool to load the ligand .mol2 file in a conveniently viewable format. An example of this can be seen below:

GA ViewDock.png

010: De Novo Design Example

De Novo Design

De Novo Design is a dock based algorithm that generates new ligands from scratch. This is done by selecting a dummy atom, which is the 'seed' that 'grows' scaffolds, linkers, or side chains based on user defined parameters. For example, say you only wanted to use de novo design to only 'grow' drug-like molecules. The way this is accomplished is ensuring the input file contains parameters that bias the algorithm to abide by Lipinski's Rule of 5 The guiding principle for using De Novo design is because there is a limit to the amount of new molecules that you could generate using a general virtual screening. Nevertheless, this method will certainly aid in enhancing your search space in generating numerous new compounds.

In this tutorial, you will be guided through a Denovo refinement calculation. This kind of calculation involves deleting a part of a ligand, creating a dummy atom, and using the De Novo design algorithm to 'regrow' that part of the ligand based on user defined parameters. The way in which the 'regrow' process happens comes from the algorithm pulling molecules from fragment libraries that contain scaffolds, linkers, and sidechains. The user defined parameters will dictate which libraries the algorithm can pull from.

The outcome will be a series of refinements that will retain a desired interaction in 1O86.

Selecting a Dummy Atom

To prepare our molecule for a De Novo calculation, we must first select a dummy atom to 'grow' from. To do this, first open your 1O86_fixed_protein_H_cH.mol2 file, then your 1O86_ligand_H_cH.mol2. The rationale for this is we would like to delete an atom on the ligand that contains a group that interacts with the protein. This will help to produce meaningful results, from a drug design standpoint:

Ligand In 1O86 DN.png

As you can see it is a little difficult to see which atoms are interacting with the protein. To refine this inspection, hit Control and select an atom on the ligand. Then, hit the up arrow to highlight the entire ligand. Next, hit Select >> Zone and the following menu appears:

1O86 Zone.png

Lets modify the Zone and change the number from 5.0 angstroms to 3.0 angstroms. Additionally, make sure that that the third box is checked off entitled that selects neighboring residues. Then, press okay. You will notice that your ligand and the neighboring residues are highlighted:

Highlight.png

To modify this image even further: Go to Actions >> Atoms/Bonds >> Show Next, navigate to Select >> Invert(selected models), here you'll notice most of the protein is highlighted Lastly, Return to Actions >> Atoms/Bonds >> delete You now see that there is a clearer picture of specifically, which atoms are interacting closely with the protein

Clear picture.png

You'll notice that there are two oxygens interacting with neighboring residues in the protein. Tracing your cursor in between the oxygens, you'll highlight a Carbon atom labeled C9. This will be the atom of choice for this tutorial.

Generating a Dummy Atom

Now that we have our atom of choice, we need to modify the ligand as well as the mol2 file itself.

First, open the 1O86_ligand_H_cH.mol2 in Chimera.

Locate the C9 atom >> select the two oxygens attached to C9 >> Atoms/Bonds >> delete. Then, save the mol2 file, lets call it 1O86_ligand_Du.mol2.

Finally, we must open the mol2 file on our terminal and change the atom type of C9 to Du:

First in the terminal, type the command

  vi 1O86_ligand_Du.mol2 

Find the C9 atom and modify the atom type. Your input file should look like this:

Input file.png

Save it.

Now lets verify this change by opening the mol2 file on Chimera:

New dummy Ligand.png

As you can see C9 is now a dummy atom as shown in purple

Now, the mol2 is ready for De Novo calculations

As a last step, transfer the mol2 to your working directory on seawulf

 scp 1O86_ligand_Du.mol2 yourusername@login.seawulf.stonybrook.edu:'/gpfs/yourusername/010_de_novo'

Running The Denovo Calculation

In your 010_De_Novo folder create an empty input file:

  touch DN.in 

Then prompt the question tree with the dock program:

  dock6 -i DN.in 

Follow the question tree and use the following sample input file as a template

  conformer_search_type                                        denovo
  dn_fraglib_scaffold_file                                     /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_scaffold.mol2
  dn_fraglib_linker_file                                       /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_linker.mol2
  dn_fraglib_sidechain_file                                    /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_sidechain.mol2
  dn_user_specified_anchor                                     yes
  dn_fraglib_anchor_file                                       1O86_ligand_Du.mol2
  dn_torenv_table                                              ../ga_calc/unique_full_sorted_fraglib.dat
  dn_name_identifier                                           denovo
  dn_sampling_method                                           graph
  dn_graph_max_picks                                           30
  dn_graph_breadth                                             3
  dn_graph_depth                                               2
  dn_graph_temperature                                         100.0
  dn_pruning_conformer_score_cutoff                            100.0
  dn_pruning_conformer_score_scaling_factor                    2.0
  dn_pruning_clustering_cutoff                                 100.0
  dn_remove_duplicates                                         yes
  dn_max_duplicates_per_mol                                    0
  dn_write_pruned_duplicates                                   no
  dn_advanced_pruning                                          yes
  dn_prune_initial_sample                                      yes
  dn_sample_torsions                                           yes
  dn_prune_individual_torsions                                 yes
  dn_prune_combined_torsions                                   yes
  dn_random_root_selection                                     no
  dn_mol_wt_cutoff_type                                        soft
  dn_upper_constraint_mol_wt                                   1000
  dn_lower_constraint_mol_wt                                   0.0
  dn_mol_wt_std_dev                                            35.0
  dn_constraint_rot_bon                                        15
  dn_constraint_formal_charge                                  2.0
  dn_heur_unmatched_num                                        1
  dn_heur_matched_rmsd                                         2.0
  dn_unique_anchors                                            1
  dn_max_grow_layers                                           1
  dn_max_root_size                                             25
  dn_max_layer_size                                            25
  dn_max_current_aps                                           5
  dn_max_scaffolds_per_layer                                   1
  dn_max_successful_att_per_root                               50000
  dn_write_checkpoints                                         yes
  dn_write_prune_dump                                          yes
  dn_write_orients                                             no
  dn_write_growth_trees                                        no
  dn_output_prefix                                             DN.out
  use_internal_energy                                          yes
  internal_energy_rep_exp                                      12
  internal_energy_cutoff                                       100.0
  use_database_filter                                          no
  orient_ligand                                                no
  bump_filter                                                  no
  score_molecules                                              yes
  contact_score_primary                                        no
  grid_score_primary                                           yes
  grid_score_rep_rad_scale                                     1
  grid_score_vdw_scale                                         1
  grid_score_es_scale                                          1
  grid_lig_efficiency                                          no
  grid_score_grid_prefix                                       ../003_gridbox/grid
  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                                  500
  simplex_grow_tors_premin_iterations                          0
  simplex_final_min                                            no
  simplex_random_seed                                          0
  simplex_restraint_min                                        no
  atom_model                                                   all
  vdw_defn_file                                                /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/vdw_AMBER_parm99.defn
  flex_defn_file                                               /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/flex.defn
  flex_drive_file                                              /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/flex_drive.tbl


Once you've filled out the input file, you can then go ahead and run the calculation

  dock6 -i DN.in -o DN.out

After running the calculations, the following output files will be generated:

 DN.out
 DN.out.anchor_1.root_layer_1.mol
 DN.out.completed.denovo_build.mol2
 DN.out.denovo_build.mol2

Examining the output file you can see how many molecules were grown.

Attach out.png

In this case there are 21 different attached molecules.

Now, copy over the DN.out.completed.denovo_build.mol2 to your home computer

   scp yourusername@login.seawulf.stonybrook.edu:'/gpfs/yourusername/010_de_novo/DN.out.completed.denovo_build.mol2' .

Visualizing the Molecules in Chimera

Head over to Chimera and go to Tools >> Surface/Binding Analysis >> Scroll down to where you see ViewDock and select it

Then select the DN.out.completed_denovo.mol2

The following menu will appear:

View Dock.png

You can navigate through the list of molecules that were grown from the calculations.

You'll notice that the best scoring ligand retained the oxygens from the original ligand:

Best Scoring Ligand.png

Opening the original ligand mol2, you'll see that the molecules are almost identical

Overlap Ligand.png

If you return to the ViewDock menu and highlight all of the ligands. You will be able to see a depiction of all of the different refinements.

This can be done by going to Tools >> ViewDock >> Raise Now that the menu has been prompted hold down your shift key and select the first ligand, then scroll down and select the last ligand. All your molecules will be shown overlapping on Chimera:

Refinements.png

Well done, you've now completed a simple denovo calculation!

Running a Generic De Novo Calculation

In this part of the tutorial, you will be running a generic denovo calculation. What this means is that you take an anchor, or don't specify one, and grow a ligand around parts of the molecule. These parts of the molecule are dictated by the selected spheres that were calculated in the second part of the VS tutorial. The end result becomes a series of newly 'grown' ligands based on the user defined parameters. These parameters are what will bias the denovo growth to meet a certain criterian (i.e. a specific molecular weight). For this tutorial, you will select an anchor and use that to grow a series of ligands, which you will then be able to see on chimera.

To start, lets create a new directory in your 010_de_novo directory. Lets call it generic.

   mkdir generic

Selecting an Anchor

Now that you have a working directory for this calculation, lets go ahead and create an anchor

file to run the generic denovo calculation. For our anchor of choice, we will use the most popular

sidechain from dock6's current library. To start off, copy the library mol2 file to your home directory from

seawulf:

    scp yourusername@milan.seawulf.stonybrook.edu:'/gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_sidechain.mol2' .

It's a pretty hefty file and the way you are going to open the file is by using ViewDock on Chimera.

Navigate to Chimera and select Tools --> Surface/Binding Analysis --> View Dock

Select the fraglib_sidechain.mol2 file.

On chimera you'll see a methyl-ethyl sidechain popup and the View Dock menu to toggle through other sidechains:

Methyl ethyl.png

View dock frag.png

As mentioned before, you are going to use the most popular sidechain as the anchor for this calculation.

On the View Dock Menu go to Column --> Show --> FREQ

This is the frequency in which these particular sidechains occur in the dock6 testset:

Freq.png

Ironically, the methy ethyl sidechain appears to be the most popular sidechain. This will be the anchor of choice.

Go to File --> Save Mol2

Lets call it Anchor.mol2

Additionally, make sure that only the first model is selected in the Select Model panel like so:

Save anch.png

Select Save. You can also verify that there is only one sidechain in the mol2 by viewing it on the terminal

  vi Anchor.mol2

The file should look like this:

Vi anch.png

Now you can go ahead and copy this file over to the generic directory in seawulf

 scp Anchor.mol2 yourusername@milan.stonybrook.edu:'/gpfs/yourusername/tutorial/010_de_novo_/generic'

Running the Calculations

Now that you're on seawulf in the generic directory with your Anchor.mol2 file,

lets create the necessary files to run the generic denovo calculation.

First, create an input file, lets call it GDN.in.

Just like when running the refinement calculation, you are encouraged to create an empty input file and follow the dock6 question tree.

To create an empty input file run the following command:

    touch GDN.in 

Then, use dock6 to initiate the question tree:

    dock6 -i GDN.in

Use the following sample input file as a template when navigating the question tree:

  conformer_search_type                                        denovo
  dn_fraglib_scaffold_file                                     /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_scaffold.mol2
  dn_fraglib_linker_file                                       /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_linker.mol2
  dn_fraglib_sidechain_file                                    /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_sidechain.mol2
  dn_user_specified_anchor                                     yes
  dn_fraglib_anchor_file                                       ../generic/Anchor.mol2
  dn_torenv_table                                              /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/fraglib_torenv.dat
  dn_name_identifier                                           generic
  dn_sampling_method                                           graph
  dn_graph_max_picks                                           30
  dn_graph_breadth                                             3
  dn_graph_depth                                               2
  dn_graph_temperature                                         100.0
  dn_pruning_conformer_score_cutoff                            100.0
  dn_pruning_conformer_score_scaling_factor                    2.0
  dn_pruning_clustering_cutoff                                 100.0
  dn_remove_duplicates                                         yes
  dn_max_duplicates_per_mol                                    0
  dn_write_pruned_duplicates                                   no
  dn_advanced_pruning                                          yes
  dn_prune_initial_sample                                      yes
  dn_sample_torsions                                           yes
  dn_prune_individual_torsions                                 yes
  dn_prune_combined_torsions                                   yes
  dn_random_root_selection                                     no
  dn_mol_wt_cutoff_type                                        soft
  dn_upper_constraint_mol_wt                                   550.0
  dn_lower_constraint_mol_wt                                   0.0
  dn_mol_wt_std_dev                                            35.0
  dn_constraint_rot_bon                                        15
  dn_constraint_formal_charge                                  2.0
  dn_heur_unmatched_num                                        1
  dn_heur_matched_rmsd                                         2.0
  dn_unique_anchors                                            1
  dn_max_grow_layers                                           9
  dn_max_root_size                                             25
  dn_max_layer_size                                            25
  dn_max_current_aps                                           5
  dn_max_scaffolds_per_layer                                   1
  dn_max_successful_att_per_root                               50000
  dn_write_checkpoints                                         yes
  dn_write_prune_dump                                          no
  dn_write_orients                                             no
  dn_write_growth_trees                                        no
  dn_output_prefix                                             generic
  use_internal_energy                                          yes
  internal_energy_rep_exp                                      12
  internal_energy_cutoff                                       100.0
  use_database_filter                                          no
  orient_ligand                                                yes
  automated_matching                                           yes
  receptor_site_file                                           ../002_spheres/selected_spheres.sph
  max_orientations                                             1000
  critical_points                                              no
  chemical_matching                                            no
  use_ligand_spheres                                           no
  bump_filter                                                  no
  score_molecules                                              yes
  contact_score_primary                                        no
  grid_score_primary                                           yes
  grid_score_rep_rad_scale                                     1
  grid_score_vdw_scale                                         1
  grid_score_es_scale                                          1
  grid_lig_efficiency                                          no
  grid_score_grid_prefix                                       ../003_gridbox/grid
  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                                  500
  simplex_grow_tors_premin_iterations                          0
  simplex_final_min                                            no
  simplex_random_seed                                          0
  simplex_restraint_min                                        no
  atom_model                                                   all
  vdw_defn_file                                                /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/vdw_de_novo.defn
  flex_defn_file                                               /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/flex.defn     
  flex_drive_file                                              /gpfs/projects/AMS536/zzz.programs/dock6.12_ams536/parameters/flex_drive.tbl

After creating the input file, you will need to create a slurm input file to run this calculation.

 vi gdn.slurm 

Type the following into the slurm file:

 #!/bin/bash
 #
 #SBATCH --job-name=1O86_generic_de_novo
 #SBATCH --output=generic_dn_output.txt
 #SBATCH --ntasks-per-node=24
 #SBATCH --nodes=4
 #SBATCH --time=4:00:00
 #SBATCH -p short-96core
 dock6 -i GDN.in -o GDN.out

To run the calculation submit a job with the slurm file:

   sbatch gdn.slurm

The job itself may take awhile to finish. It is highly recommended that you check to see if your job is still running and that your .out file to see if there are any errors.

After the calculations have run, the following files will show up in your directory:

 GDN.out                             generic_dn_output.txt
 generic.anchor_1.root_layer_1.mol2  generic.anchor_1.root_layer_5.mol2      
 generic.anchor_1.root_layer_2.mol2  generic.anchor_1.root_layer_6.mol2
 generic.anchor_1.root_layer_3.mol2  generic.anchor_1.root_layer_7.mol2
 generic.anchor_1.root_layer_4.mol2  generic.completed.denovo_build.mol2
                                     generic.denovo_build.mol2

These illustrate the different layers of growth that were specified in the input file, the generic.completed.denovo_build.mol2 contains all of the finished molecules regardless of how many layers of growth. To view how many molecules are in this output file, type the following line in your terminal:

  grep -c "SMALL" generic.completed.denovo_build.mol2 

You'll notice that the number of molecules in this file come out to be 2350. That's okay, go ahead and transfer this file onto your home computer:

   scp yourusername@milan.stonybrook.edu:'gpfs/yourusername/tutorial/010_de_novo/generic/generic.completed.denovo_build.mol2' .

Visualizing The Results

To view the molecules that were grown, use the View Dock tool in Chimera. The procedure is the same as when you were selecting an anchor. You should wait about 30 seconds as there are a large chunk of molecules being loaded into chimera. Once Chimera is finished loading you will see an image of a finished sidechain and the View Dock Menu:

First side chain.png

Sc menu.png

You want to view the sidechains that have better overall grid scores. On the View Dock menu, go to Column --> Show --> Grid_Score. You'll see that the Grid_Score column is columned. Let's sort the Grid_Score column in descending order(i.e. from greatest to least). To do this, click on the Grid_Score title, you'll notice that there's now an arrow head over the column. Keep clicking on the column until you see that the arrow head is pointing up:

Sort.png

Now the best scoring molecule that was grown is at the top of the list and here's what it looks like:

Bg.png

Load in the 1O86_fixed_protein.pdb and the 1O86_ligand_nH_ncH.mol2 . On Chimera, select Actions --> Ribbon --> hide. This will give a clear picture of the ligand having slight overlap with the grown ligand:

Overlap.png