Ligand docking with Smina

Esben Jannik Bjerrum/ April 28, 2016/ Autodock Vina, Blog, Computational Chemistry, docking/ 10 comments

1OYT docking with Smina, animated
Moleculer Docking is a powerful technique for studying potential ligand-receptor interactions. It can be done with free tools. In this blog post I showcase the docking program Smina, a fork of Autodock Vina.
Automated docking is the process of prediction of how one molecule binds to another in a stable complex. For small drug-like molecules this process has been used in drug discovery project for evaluation of proposed ligands and also for in silico screening of virtual compound libraries to find potential ligands for a protein target with a known molecular structure.
In this blog post I’ll take a free program for a test drive. Autodock Vina ( is an open-source program for molecular docking of small ligands to protein targets. Since it was open sourced there have been a couple of forks. Quick Vina 2 aims at accelerating Autodock Vina , VinaLC added MPI for parallel execution on clusters, and Smina added better control of scoring terms as well as a range of convenience functions for easy use from the command line ( Smina, open-babel and PyMOL will be used. Smina comes with a static version for Linux, so it should just be placed in the path of the command line, No dependicies and libraries 😉
For this test the PDB file 1OYT is used. It is a complex between RECOMBINANT HUMAN THROMBIN and FLUORINATED INHIBITOR. Thrombin is involved in the coagulation cascade and an inhibitor for this protein could potentially as a “blood thinner” to prevent or dissolve blood cloths in stroke and to prevent myocardial infarction.
Pymol is used to download the PDB file, remove water molecules and split it into the ligand and receptor molecule.

fetch 1OYT
remove resn HOH
h_add elem O or elem N
select 1OYT-FSN, resn FSN #Create a selection called 1OYT-FSN from the ligand
select 1OYT-receptor, 1OYT and not 1OYT-FSN #Select all that is not the ligand
save 1OYT-FSN.pdb, 1OYT-FSN
save 1OYT-receptor.pdb, 1OYT-receptor

Previously I have always used the and
scripts that come as part of Autodock Tools, but newer versions of numerical python have dropped support for oldnumeric which was a module that was made for backward compatibility years ago. Instead open-babel can be used to convert from .pdf format into .pdbqt format. The format is similar to PDB format, but also contains information about what torsions should be active and the assigned charge for each atom. Vina and Smina does not use the same scoring function as Autodock and do not use the charges at all for the default scoring function. Open-babel fast gives us the two needed .pdbqt files.

obabel 1OYT-receptor.pdb -xr -O 1OYT-receptor.pdbqt
obabel 1OYT-FSN.pdb -O 1OYT-FSN.pdbqt

Docking with Smina is done from the command line and is very easy to script thanks to the possibility to calculate the box from an existing ligand. The –autobox_ligand and –autobox_add switches are used to define a docking box that is 8Å greater than the ligand specified. The –exhaustiveness 16 switch tells Smina to use more time on finding the best scoring binding mode of the ligand in the binding site, default is 8.

smina.static -r 1OYT-receptor.pdbqt -l 1OYT-FSN.pdbqt --autobox_ligand 1OYT-FSN.pdbqt --autobox_add 8 --exhaustiveness 16 -o 1OYT-redock.pdbqt

After a couple of minutes Smina has docked the ligand. The .pdbqt file can be loaded in Pymol and compared with the already known binding mode.

pymol 1OYT-receptor.pdb 1OYT-redock.pdbqt 1OYT-FSN.pdb

Best scoring pose found by Smina in redocking experiment based on PDB file 1OYT.As can be seen on the image to the right, Smina did a good job of finding the correct binding mode as the top scoring pose. However, the test was a redocking which is the easiest among tests of docking performance. Using other proteins, ligands and PDB file alternatives can give other results. The docking algorithm also has a inherent dependence on the initial states and thus on the random seed, so proceed with caution 😉

Share this Post


  1. Pingback: Never use re-docking for estimation of docking accuracy | Wildcard Pharmaceutical Consulting

  2. Pingback: Machine Learning optimization of Smina cross docking accuracy | Wildcard Pharmaceutical Consulting

  3. Pingback: Docking with rDock 1OYT | Wildcard Pharmaceutical Consulting

  4. Thank you for your useful post!
    Hello, I’m graduated student.
    I’m studying docking with autodock tools and chimera in Linux.
    I used to seperate ligand and receptor with chimera, and I make the pdbqt files and check grid box in autodock tools and then docking with python(openbabel, rdkit). This process takes lots of times, so I want to use smina.
    I’m wondering how to use smina.
    I read your code carefully, but I don’t know how to use your code(especially pymol code).
    What format, and how to implement that code?
    I hope your comment.
    Thank you.

    1. OK, There is actually no python code in the blog post. The first code block are Pymol commands, the ones typed directly in the interface, and then the rest of the codeblocks are from the command line (bash).
      However, iyt’s also possible to control pymol from a python script/session, but the syntax is a bit differently
      Typing “fetch 1OYT” in the command prompt in pymol will fecth the PDB file with ID 1OYT
      but in a python session its “pymol.cmd.fetch(‘1OYT’)” after importing and launching the pymol object.
      I suggest you read more about it at the PymolWIKI

  5. Thank you for sharing your knowledge. Your post is very helpful!
    I’m a newbie in docking. I know that PDB often lack hydrogen atoms. So we need to add polar hydrogen as they are required for correct docking. Could you please clarify why do you add H only to O or N (“h_add elem O or elem N”)? What about C and S? Is it because of non polar bounds between C,S and H?

    1. CH is not considered a polar bond or hydrogen bond donor under normal circumstances. SH hydrogen bonds are also a lot weaker than the ones involving NH and especially OH, so they are also often not considered as such in docking functions like Sminas. If your docking site or ligands contains SH, you can add them with “h_add elem O or elem N or elem S” and check how the performance difference is in your case.

  6. Thank you! It is clear now)

  7. Many Thanks for sharing your knowledge. Your post have very helpful content.

    Considering add H to PDB structure, how to avoid misadding H atoms. I use propka but for very large molecules, how to ensure?

    1. Yes, it’s a primitive and error-prone way to add hydrogen atoms to the ligand as well as receptor. Propka may be better finding the right protonation states. I’m not aware of an open-source implementation that is completely error free, given the all the interesting PDBs out there. For proteins I sometimes used Salilabs modeller to remodel the protein.

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>