Commit c6f169a3 authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Changes

parent c200dc48
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
import itertools
import numpy as np
from deepchem.utils.geometry_utils import compute_pairwise_distances
from deepchem.utils.rdkit_util import compute_charges


def get_partial_charge(atom):
@@ -11,6 +12,18 @@ def get_partial_charge(atom):
  ----------
  atom: rdkit atom or `AtomShim` object
    Either an rdkit atom or `AtomShim`

  Note
  ----
  This function requires RDKit to be installed.

  Examples
  --------
  >>> from rdkit import Chem
  >>> mol = Chem.MolFromSmiles("CC")
  >>> atom = mol.GetAtoms()[0]
  >>> get_partial_charge(atom)
  0
  """
  from rdkit import Chem
  if isinstance(atom, Chem.Atom):
@@ -35,6 +48,15 @@ class MolecularFragment(object):

  Ideally, we'd be able to do this in RDKit direct, but manipulating
  molecular fragments doesn't seem to be supported functionality. 

  Examples
  --------
  >>> import numpy as np
  >>> from rdkit import Chem
  >>> mol = Chem.MolFromSmiles("C")
  >>> coords = np.array([[0.0, 0.0, 0.0]])
  >>> atom = mol.GetAtoms()[0]
  >>> fragment = MolecularFragment([atom], coords)
  """

  def __init__(self, atoms, coords):
+28 −1
Original line number Diff line number Diff line
import os
import unittest
import numpy as np
from deepchem.utils import rdkit_util
from deepchem.utils.fragment_util import get_contact_atom_indices
from deepchem.utils.fragment_util import merge_molecular_fragments
from deepchem.utils.fragment_util import get_partial_charge
from deepchem.utils.fragment_util import strip_hydrogens
from deepchem.utils.fragment_util import MolecularFragment
from deepchem.utils.fragment_util import AtomShim


class TestFragmentUtil(unittest.TestCase):
@@ -27,9 +31,32 @@ class TestFragmentUtil(unittest.TestCase):
    assert len(mol_rdk.GetAtoms()) == len(fragment.GetAtoms())
    assert (fragment.GetCoords() == mol_xyz).all()

  def test_strip_hydrogens(self):
    mol_xyz, mol_rdk = rdkit_util.load_molecule(self.ligand_file)
    fragment = MolecularFragment(mol_rdk.GetAtoms(), mol_xyz)

    # Test on RDKit
    frag = strip_hydrogens(mol_xyz, mol_rdk)

  def test_merge_molecular_fragments(self):
    mol_xyz, mol_rdk = rdkit_util.load_molecule(self.ligand_file)
    fragment1 = MolecularFragment(mol_rdk.GetAtoms(), mol_xyz)
    fragment2 = MolecularFragment(mol_rdk.GetAtoms(), mol_xyz)
    joint = merge_molecular_fragments([fragment1, fragment2])
    assert len(mol_rdk.GetAtoms()) * 2 == len(joint.GetAtoms())

  def test_get_partial_charge(self):
    from rdkit import Chem
    mol = Chem.MolFromSmiles("CC")
    atom = mol.GetAtoms()[0]
    partial_charge = get_partial_charge(atom)
    assert partial_charge == 0

  def test_atom_shim(self):
    atomic_num = 5
    partial_charge = 1
    atom_coords = np.array([0., 1., 2.])
    shim = AtomShim(atomic_num, partial_charge, atom_coords)
    assert shim.GetAtomicNum() == atomic_num
    assert shim.GetPartialCharge() == partial_charge
    assert (shim.GetCoords() == atom_coords).all()
+12 −1
Original line number Diff line number Diff line
@@ -93,9 +93,20 @@ Molecular Fragment Utilities

It's often convenient to manipulate subsets of a molecule. The :code:`MolecularFragment` class aids in such manipulations.

.. autoclass:: deepchem.utils.MolecularFragment
.. autoclass:: deepchem.utils.fragment_util.MolecularFragment
  :members:

.. autoclass:: deepchem.utils.fragment_util.AtomShim
  :members:

.. autofunction:: deepchem.utils.fragment_util.strip_hydrogens

.. autofunction:: deepchem.utils.fragment_util.merge_molecular_fragments

.. autofunction:: deepchem.utils.fragment_util.get_contact_atom_indices

.. autofunction:: deepchem.utils.fragment_util.reduce_molecular_complex_to_contacts

Coordinate Box Utilities
------------------------