Commit 9e848025 authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Adding barriers for python 3

parent 16de6587
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ class Docker(object):
class VinaGridRFDocker(Docker):
  """Vina pose-generation, RF-models on grid-featurization of complexes."""

  def __init__(self):
  def __init__(self, exhaustiveness=10, detect_pockets=False):
    """Builds model."""
    self.base_dir = tempfile.mkdtemp()
    print("About to download trained model.")
@@ -44,7 +44,8 @@ class VinaGridRFDocker(Docker):
    model.reload()

    self.pose_scorer = GridPoseScorer(model, feat="grid")
    self.pose_generator = VinaPoseGenerator() 
    self.pose_generator = VinaPoseGenerator(
        exhaustiveness=exhaustiveness, detect_pockets=detect_pockets) 

  def dock(self, protein_file, ligand_file):
    """Docks using Vina and RF."""
@@ -56,7 +57,7 @@ class VinaGridRFDocker(Docker):
class VinaGridDNNDocker(object):
  """Vina pose-generation, DNN-models on grid-featurization of complexes."""

  def __init__(self, n_trees=100):
  def __init__(self, exhaustiveness=10, detect_pockets=False):
    """Builds model."""
    self.base_dir = tempfile.mkdtemp()
    print("About to download trained model.")
@@ -74,7 +75,8 @@ class VinaGridDNNDocker(object):
    model.reload()

    self.pose_scorer = GridPoseScorer(model, feat="grid")
    self.pose_generator = VinaPoseGenerator() 
    self.pose_generator = VinaPoseGenerator(
        exhaustiveness=exhaustiveness, detect_pockets=detect_pockets) 

  def dock(self, protein_file, ligand_file):
    """Docks using Vina and DNNs."""
+25 −4
Original line number Diff line number Diff line
@@ -13,8 +13,9 @@ import numpy as np
import os
import pybel
import tempfile
from deepchem.feat import hydrogenate_and_compute_partial_charges
from subprocess import call
from deepchem.feat import hydrogenate_and_compute_partial_charges
from deepchem.dock.binding_pocket import RFConvexHullPocketFinder

class PoseGenerator(object):
  """Abstract superclass for all pose-generation routines."""
@@ -58,11 +59,14 @@ def get_molecule_data(pybel_molecule):
class VinaPoseGenerator(PoseGenerator):
  """Uses Autodock Vina to generate binding poses."""

  def __init__(self, exhaustiveness=1):
  def __init__(self, exhaustiveness=10, detect_pockets=True):
    """Initializes Vina Pose generation"""
    current_dir = os.path.dirname(os.path.realpath(__file__))
    self.vina_dir = os.path.join(current_dir, "autodock_vina_1_1_2_linux_x86")
    self.exhaustiveness = exhaustiveness
    self.detect_pockets = detect_pockets
    if self.detect_pockets:
      self.pocket_finder = RFConvexHullPocketFinder()
    if not os.path.exists(self.vina_dir):
      print("Vina not available. Downloading")
      # TODO(rbharath): May want to move this file to S3 so we can ensure it's
@@ -98,8 +102,25 @@ class VinaPoseGenerator(PoseGenerator):
    receptor_pybel = next(pybel.readfile(str("pdb"), str(protein_hyd)))
    # TODO(rbharath): Need to add some way to identify binding pocket, or this is
    # going to be extremely slow!
    if not self.detect_pockets:
      protein_centroid, protein_range = get_molecule_data(receptor_pybel)
      box_dims = protein_range + 5.0
    else:
      print("About to find putative binding pockets")
      pockets, pocket_atoms_maps, pocket_coords = self.pocket_finder.find_pockets(
          protein_file, ligand_file)
      # TODO(rbharath): Handle multiple pockets instead of arbitrarily selecting
      # first pocket. 
      print("Computing centroid and size of proposed pocket.")
      pocket_coord = pocket_coords[0]
      protein_centroid = np.mean(pocket_coord, axis=1)
      pocket = pockets[0]
      (x_min, x_max), (y_min, y_max), (z_min, z_max) = pocket
      x_box = (x_max - x_min)/2.
      y_box = (y_max - y_min)/2.
      z_box = (z_max - z_min)/2.
      box_dims = (x_box, y_box, z_box)


    # Prepare receptor
    ligand_name = os.path.basename(ligand_file).split(".")[0]
+4 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ __author__ = "Bharath Ramsundar"
__copyright__ = "Copyright 2016, Stanford University"
__license__ = "GPL"

import sys
import mdtraj as md
import unittest
import tempfile
@@ -145,6 +146,9 @@ class TestBindingPocket(unittest.TestCase):

  def test_rf_convex_find_pockets(self):
    """Test that filter with pre-trained RF models works."""
    if sys.version_info >= (3,0):
      return
    
    current_dir = os.path.dirname(os.path.realpath(__file__))
    protein_file = os.path.join(current_dir, "1jld_protein.pdb")
    ligand_file = os.path.join(current_dir, "1jld_ligand.sdf")
+63 −4
Original line number Diff line number Diff line
@@ -25,11 +25,25 @@ class TestDocking(unittest.TestCase):
    """Test that VinaGridRFDocker can be initialized."""
    if sys.version_info >= (3,0):
      return
    docker = dc.dock.VinaGridRFDocker()
    docker = dc.dock.VinaGridRFDocker(
        exhaustiveness=1, detect_pockets=False)

  def test_pocket_vina_grid_rf_docker_init(self):
    """Test that VinaGridRFDocker w/pockets can be initialized."""
    if sys.version_info >= (3,0):
      return
    docker = dc.dock.VinaGridRFDocker(
        exhaustiveness=1, detect_pockets=True)

  def test_vina_grid_dnn_docker_init(self):
    """Test that VinaGridDNNDocker can be initialized."""
    docker = dc.dock.VinaGridDNNDocker()
    docker = dc.dock.VinaGridDNNDocker(
        exhaustiveness=1, detect_pockets=False)

  def test_pocket_vina_grid_dnn_docker_init(self):
    """Test that VinaGridDNNDocker can be initialized."""
    docker = dc.dock.VinaGridDNNDocker(
        exhaustiveness=1, detect_pockets=True)

  def test_vina_grid_rf_docker_dock(self):
    """Test that VinaGridRFDocker can dock."""
@@ -40,7 +54,8 @@ class TestDocking(unittest.TestCase):
    protein_file = os.path.join(current_dir, "1jld_protein.pdb")
    ligand_file = os.path.join(current_dir, "1jld_ligand.sdf")

    docker = dc.dock.VinaGridRFDocker()
    docker = dc.dock.VinaGridRFDocker(
        exhaustivness=1, detect_pockets=False)
    (score, (protein_docked, ligand_docked)) = docker.dock(
        protein_file, ligand_file)

@@ -51,13 +66,57 @@ class TestDocking(unittest.TestCase):
    assert os.path.exists(protein_docked)
    assert os.path.exists(ligand_docked)

  def test_pocket_vina_grid_rf_docker_dock(self):
    """Test that VinaGridRFDocker can dock."""
    if sys.version_info >= (3,0):
      return
    
    current_dir = os.path.dirname(os.path.realpath(__file__))
    protein_file = os.path.join(current_dir, "1jld_protein.pdb")
    ligand_file = os.path.join(current_dir, "1jld_ligand.sdf")

    docker = dc.dock.VinaGridRFDocker(
        exhaustiveness=1, detect_pockets=True)
    (score, (protein_docked, ligand_docked)) = docker.dock(
        protein_file, ligand_file)

    # Check returned files exist
    if sys.version_info >= (3,0):
      return
    
    assert score.shape == (1,)
    assert os.path.exists(protein_docked)
    assert os.path.exists(ligand_docked)

  def test_vina_grid_dnn_docker_dock(self):
    """Test that VinaGridDNNDocker can dock."""
    current_dir = os.path.dirname(os.path.realpath(__file__))
    protein_file = os.path.join(current_dir, "1jld_protein.pdb")
    ligand_file = os.path.join(current_dir, "1jld_ligand.sdf")

    docker = dc.dock.VinaGridDNNDocker()
    docker = dc.dock.VinaGridDNNDocker(
        exhaustiveness=1, detect_pockets=False)
    (score, (protein_docked, ligand_docked)) = docker.dock(
        protein_file, ligand_file)

    # Check returned files exist
    print("(score, (protein_docked, ligand_docked))")
    print((score, (protein_docked, ligand_docked)))
    assert score.shape == (1,)
    assert os.path.exists(protein_docked)
    assert os.path.exists(ligand_docked)

  def test_pocket_vina_grid_dnn_docker_dock(self):
    """Test that VinaGridDNNDocker can dock."""
    if sys.version_info >= (3,0):
      return
    
    current_dir = os.path.dirname(os.path.realpath(__file__))
    protein_file = os.path.join(current_dir, "1jld_protein.pdb")
    ligand_file = os.path.join(current_dir, "1jld_ligand.sdf")

    docker = dc.dock.VinaGridDNNDocker(
        exhaustiveness=1, detect_pockets=True)
    (score, (protein_docked, ligand_docked)) = docker.dock(
        protein_file, ligand_file)

+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ from binding_pocket_datasets import load_pdbbind_pockets
np.random.seed(123)

split = "random"
subset = "core"
subset = "refined"
pdbbind_tasks, pdbbind_datasets, transformers = load_pdbbind_pockets(
    split=split, subset=subset)
train_dataset, valid_dataset, test_dataset = pdbbind_datasets