/Meeko

A new Python package to prepare small molecules for docking.

Primary LanguagePythonApache License 2.0Apache-2.0

Meeko: preparation of small molecules for AutoDock

License API stability PyPI version fury.io

Meeko reads a chemoinformatics molecule object (currently Open Babel) and writes a string (or file) in PDBQT format for use with AutoDock-Vina and AutoDock-GPU. Additionally, it has tools for post-processing of docking results which are not yet fully developed. Meeko supports the following features:

  • Docking with explicit water molecules attached to the ligand (paper)
  • Sampling of macrocyclic conformations during docking (paper)
  • Creation of RDKit molecules with docked coordinates from PDBQT or DLG files without loss of bond orders.

Meeko is developed by the Forli lab at the Center for Computational Structural Biology (CCSB) at Scripps Research.

Dependencies

  • Python (>=3.5)
  • Numpy
  • Scipy
  • Openbabel (>=3)
  • RDKit

Conda or Miniconda can install the dependencies:

conda install -c conda-forge numpy scipy openbabel rdkit

Installation (from PyPI)

$ pip install meeko

If using conda, pip installs the package in the active environment.

Installation (from source)

$ git clone https://github.com/forlilab/Meeko
$ cd Meeko
$ pip install .

Optionally include --editable. Changes in the original package location take effect immediately without the need to run pip install . again.

$ pip install --editable .

Examples using the command line scripts

mk_prepare_ligand.py -i molecule.sdf -o molecule.pdbqt
mk_prepare_ligand.py -i multi_mol.sdf --multimol_outdir folder_for_pdbqt_files
mk_copy_coords.py vina_results.pdbqt -o vina_results.sdf
mk_copy_coords.py adgpu_results.dlg -o adgpu_results.sdf

Quick Python tutorial

1. flexible macrocycle with attached waters

from meeko import MoleculePreparation
from meeko import obutils

input_molecule_file = 'example/BACE_macrocycle/BACE_4.mol2'
mol = obutils.load_molecule_from_file(input_molecule_file)

preparator = MoleculePreparation(keep_nonpolar_hydrogens=False, macrocycle=True, hydrate=True)
preparator.prepare(mol)
preparator.show_setup()

output_pdbqt_file = "test_macrocycle_hydrate.pdbqt"
preparator.write_pdbqt_file(output_pdbqt_file)

2. RDKit molecule from docking results

Assuming that 'docked.dlg' was written by AutoDock-GPU and that Meeko prepared the input ligands.

from meeko import PDBQTMolecule

with open("docked.dlg") as f:
    dlg_string = f.read()
pdbqt_mol = PDBQTMolecule(dlg_string, is_dlg=True)

# alternatively, read the .dlg file directly
pdbqt_mol = PDBQTMolecule.from_file("docked.dlg", is_dlg=True)

for pose in pdbqt_mol:
    rdkit_mol = pose.export_rdkit_mol()

For Vina's output PDBQT files, omit is_dlg=True.

pdbqt_mol = PDBQTMolecule.from_file("docking_results_from_vina.pdbqt")