Пример #1
0
 def test7UniformGridIndices(self):
     ugrid = geom.UniformGrid3D(20, 18, 15)
     idx = ugrid.GetGridIndex(3, 2, 1)
     xi, yi, zi = ugrid.GetGridIndices(idx)
     self.assertEqual(xi, 3)
     self.assertEqual(yi, 2)
     self.assertEqual(zi, 1)
Пример #2
0
def ComputeMolShape(mol,
                    confId=-1,
                    boxDim=(20, 20, 20),
                    spacing=0.5,
                    **kwargs):
    """ returns a grid representation of the molecule's shape
  """
    res = rdGeometry.UniformGrid3D(boxDim[0],
                                   boxDim[1],
                                   boxDim[2],
                                   spacing=spacing)
    EncodeShape(mol, res, confId, **kwargs)
    return res
Пример #3
0
    def test5GridOps(self):
        grd = geom.UniformGrid3D(10, 10, 10)
        grd.SetSphereOccupancy(geom.Point3D(-2.0, -2.0, 0.0), 1.0, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(-2.0, 2.0, 0.0), 1.0, 0.25)

        grd2 = geom.UniformGrid3D(10, 10, 10)
        grd2.SetSphereOccupancy(geom.Point3D(2.0, -2.0, 0.0), 1.0, 0.25)
        grd2.SetSphereOccupancy(geom.Point3D(2.0, 2.0, 0.0), 1.0, 0.25)

        self.assertTrue(geom.TanimotoDistance(grd, grd) == 0.0)
        self.assertTrue(geom.TanimotoDistance(grd, grd2) == 1.0)

        grd3 = copy.deepcopy(grd)
        grd3 |= grd2
        self.assertTrue(geom.TanimotoDistance(grd3, grd) == .5)
        self.assertTrue(geom.TanimotoDistance(grd3, grd2) == .5)

        grd3 = copy.deepcopy(grd)
        grd3 += grd2
        self.assertTrue(geom.TanimotoDistance(grd3, grd) == .5)
        self.assertTrue(geom.TanimotoDistance(grd3, grd2) == .5)

        grd3 -= grd
        self.assertTrue(geom.TanimotoDistance(grd3, grd) == 1.0)
        self.assertTrue(geom.TanimotoDistance(grd3, grd2) == 0)

        grd4 = geom.UniformGrid3D(10, 10, 10)
        grd4.SetSphereOccupancy(geom.Point3D(-2.0, -2.0, 0.0), 1.0, 0.25)
        grd4.SetSphereOccupancy(geom.Point3D(-2.0, 2.0, 0.0), 1.0, 0.25)
        grd4.SetSphereOccupancy(geom.Point3D(2.0, -2.0, 0.0), 1.0, 0.25)
        self.assertTrue(feq(geom.TanimotoDistance(grd4, grd), .3333))
        self.assertTrue(feq(geom.TanimotoDistance(grd4, grd2), .75))

        grd4 &= grd2
        self.assertTrue(feq(geom.TanimotoDistance(grd4, grd), 1.0))
        self.assertTrue(feq(geom.TanimotoDistance(grd4, grd2), .5))
Пример #4
0
    def test4GridPickles(self):
        grd = geom.UniformGrid3D(10.0, 9.0, 8.0, 0.5)
        self.assertTrue(grd.GetNumX() == 20)
        self.assertTrue(grd.GetNumY() == 18)
        self.assertTrue(grd.GetNumZ() == 16)
        grd.SetSphereOccupancy(geom.Point3D(-2.0, -2.0, 0.0), 1.5, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(-2.0, 2.0, 0.0), 1.5, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(2.0, -2.0, 0.0), 1.5, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(2.0, 2.0, 0.0), 1.5, 0.25)

        self.assertTrue(geom.TanimotoDistance(grd, grd) == 0.0)

        grd2 = pickle.loads(pickle.dumps(grd))
        self.assertTrue(grd2.GetNumX() == 20)
        self.assertTrue(grd2.GetNumY() == 18)
        self.assertTrue(grd2.GetNumZ() == 16)
        self.assertTrue(geom.TanimotoDistance(grd, grd2) == 0.0)
Пример #5
0
def ComputeMolVolume(mol, confId=-1, gridSpacing=0.2, boxMargin=2.0):
  """ Calculates the volume of a particular conformer of a molecule
  based on a grid-encoding of the molecular shape.

  """
  mol = rdchem.Mol(mol)
  conf = mol.GetConformer(confId)
  CanonicalizeConformer(conf)
  box = ComputeConfBox(conf)
  sideLen = (box[1].x - box[0].x + 2 * boxMargin, box[1].y - box[0].y + 2 * boxMargin,
             box[1].z - box[0].z + 2 * boxMargin)
  shape = rdGeometry.UniformGrid3D(sideLen[0], sideLen[1], sideLen[2], spacing=gridSpacing)
  EncodeShape(mol, shape, confId, ignoreHs=False, vdwScale=1.0)
  voxelVol = gridSpacing**3
  occVect = shape.GetOccupancyVect()
  voxels = [1 for x in occVect if x == 3]
  vol = voxelVol * len(voxels)
  return vol
Пример #6
0
    def test3UniformGrid(self):
        ugrid = geom.UniformGrid3D(20, 18, 15)
        self.failUnless(ugrid.GetNumX() == 40)
        self.failUnless(ugrid.GetNumY() == 36)
        self.failUnless(ugrid.GetNumZ() == 30)
        dvect = ugrid.GetOccupancyVect()
        ugrid = geom.UniformGrid3D(20, 18, 15, 0.5,
                                   DataStructs.DiscreteValueType.TWOBITVALUE)
        dvect = ugrid.GetOccupancyVect()
        self.failUnless(
            dvect.GetValueType() == DataStructs.DiscreteValueType.TWOBITVALUE)

        grd = geom.UniformGrid3D(10.0, 10.0, 10.0, 0.5)
        grd.SetSphereOccupancy(geom.Point3D(-2.0, -2.0, 0.0), 1.5, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(-2.0, 2.0, 0.0), 1.5, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(2.0, -2.0, 0.0), 1.5, 0.25)
        grd.SetSphereOccupancy(geom.Point3D(2.0, 2.0, 0.0), 1.5, 0.25)

        geom.WriteGridToFile(grd, "junk.grd")
        grd2 = geom.UniformGrid3D(10.0, 10.0, 10.0, 0.5)
        grd2.SetSphereOccupancy(geom.Point3D(-2.0, -2.0, 0.0), 1.5, 0.25)
        grd2.SetSphereOccupancy(geom.Point3D(-2.0, 2.0, 0.0), 1.5, 0.25)
        grd2.SetSphereOccupancy(geom.Point3D(2.0, -2.0, 0.0), 1.5, 0.25)

        dist = geom.TanimotoDistance(grd, grd2)
        self.failUnless(dist == 0.25)
        dist = geom.ProtrudeDistance(grd, grd2)
        self.failUnless(dist == 0.25)
        dist = geom.ProtrudeDistance(grd2, grd)
        self.failUnless(dist == 0.0)

        grd2 = geom.UniformGrid3D(10.0, 10.0, 10.0, 0.5,
                                  DataStructs.DiscreteValueType.FOURBITVALUE)
        grd2.SetSphereOccupancy(geom.Point3D(-2.0, -2.0, 0.0), 1.5, 0.25, 3)
        grd2.SetSphereOccupancy(geom.Point3D(-2.0, 2.0, 0.0), 1.5, 0.25, 3)
        grd2.SetSphereOccupancy(geom.Point3D(2.0, -2.0, 0.0), 1.5, 0.25, 3)
        self.failUnlessRaises(ValueError,
                              lambda: geom.TanimotoDistance(grd, grd2))

        grd2 = geom.UniformGrid3D(10.0, 10.0, 10.0, 1.0)
        self.failUnlessRaises(ValueError,
                              lambda: geom.TanimotoDistance(grd, grd2))

        grd2 = geom.UniformGrid3D(11.0, 10.0, 10.0, 1.0)
        self.failUnlessRaises(ValueError,
                              lambda: geom.TanimotoDistance(grd, grd2))
Пример #7
0
  def testSymmetry(self):
    grd = geom.UniformGrid3D(10.0, 10.0, 10.0, 0.5)
    grd.SetSphereOccupancy(geom.Point3D(-2.2, -2.0, 0.0), 1.65, 0.25)
    grd.SetSphereOccupancy(geom.Point3D(2.2, -2.0, 0.0), 1.65, 0.25)

    bPt1 = geom.Point3D(-4.0, -2.0, -2.0)
    bPt2 = geom.Point3D(4.0, -2.0, -2.0)
    for k in range(8):
      bPt1 += geom.Point3D(0.0, 0.0, 0.5)
      bPt2 += geom.Point3D(0.0, 0.0, 0.5)
      for j in range(8):
        bPt1 += geom.Point3D(0.0, 0.5, 0.0)
        bPt2 += geom.Point3D(0.0, 0.5, 0.0)
        for i in range(8):
          bPt1 += geom.Point3D(0.5, 0.0, 0.0)
          bPt2 -= geom.Point3D(0.5, 0.0, 0.0)
          self.assertTrue(grd.GetValPoint(bPt1) == grd.GetValPoint(bPt2))

        bPt1.x = -4.0
        bPt2.x = 4.0
      bPt1.y = -2.0
      bPt2.y = -2.0
Пример #8
0
def get_molec_shape(mol, conf, confId, vdwScale=1.0,
                    boxMargin=2.0, spacing=0.2):
    """
    Get the shape of a conformer of a molecule as a grid
    representation.

    """
    box = Chem.ComputeConfBox(conf)
    sideLen = (box[1].x-box[0].x + 2*boxMargin,
               box[1].y-box[0].y + 2*boxMargin,
               box[1].z-box[0].z + 2*boxMargin)
    shape = rdGeometry.UniformGrid3D(2*sideLen[0],
                                     2*sideLen[1],
                                     2*sideLen[2],
                                     spacing=spacing)
    Chem.EncodeShape(
        mol,
        shape,
        confId=confId,
        ignoreHs=False,
        vdwScale=vdwScale
    )
    return box, sideLen, shape
Пример #9
0
def ComputeMolVolume(mol, confId=-1, gridSpacing=0.2, boxMargin=2.0):
    """ Calculates the volume of a particular conformer of a molecule
  based on a grid-encoding of the molecular shape.

  A bit of demo as well as a test of github #1883:

  >>> from rdkit import Chem
  >>> from rdkit.Chem import AllChem
  >>> mol = Chem.AddHs(Chem.MolFromSmiles('C'))
  >>> AllChem.EmbedMolecule(mol)
  0
  >>> ComputeMolVolume(mol)
  34...
  >>> mol = Chem.AddHs(Chem.MolFromSmiles('O'))
  >>> AllChem.EmbedMolecule(mol)
  0
  >>> ComputeMolVolume(mol)
  23...

  """
    mol = rdchem.Mol(mol)
    conf = mol.GetConformer(confId)
    CanonicalizeConformer(conf, ignoreHs=False)
    box = ComputeConfBox(conf)
    sideLen = (box[1].x - box[0].x + 2 * boxMargin,
               box[1].y - box[0].y + 2 * boxMargin,
               box[1].z - box[0].z + 2 * boxMargin)
    shape = rdGeometry.UniformGrid3D(sideLen[0],
                                     sideLen[1],
                                     sideLen[2],
                                     spacing=gridSpacing)
    EncodeShape(mol, shape, confId, ignoreHs=False, vdwScale=1.0)
    voxelVol = gridSpacing**3
    occVect = shape.GetOccupancyVect()
    voxels = [1 for x in occVect if x == 3]
    vol = voxelVol * len(voxels)
    return vol
Пример #10
0
    def test1Shape(self):
        fileN = os.path.join(RDConfig.RDBaseDir, 'Code', 'GraphMol',
                             'ShapeHelpers', 'test_data', '1oir.mol')
        m = Chem.MolFromMolFile(fileN)
        rdmt.CanonicalizeMol(m)
        dims1, offset1 = rdshp.ComputeConfDimsAndOffset(m.GetConformer())
        grd = geom.UniformGrid3D(30.0, 16.0, 10.0)
        rdshp.EncodeShape(m, grd, 0)
        ovect = grd.GetOccupancyVect()
        self.failUnless(ovect.GetTotalVal() == 9250)

        m = Chem.MolFromMolFile(fileN)
        trans = rdmt.ComputeCanonicalTransform(m.GetConformer())
        dims, offset = rdshp.ComputeConfDimsAndOffset(m.GetConformer(),
                                                      trans=trans)
        dims -= dims1
        offset -= offset1
        self.failUnless(feq(dims.Length(), 0.0))
        self.failUnless(feq(offset.Length(), 0.0))

        grd1 = geom.UniformGrid3D(30.0, 16.0, 10.0)
        rdshp.EncodeShape(m, grd1, 0, trans)
        ovect = grd1.GetOccupancyVect()

        self.failUnless(ovect.GetTotalVal() == 9250)

        grd2 = geom.UniformGrid3D(30.0, 16.0, 10.0)
        rdshp.EncodeShape(m, grd2, 0)

        fileN2 = os.path.join(RDConfig.RDBaseDir, 'Code', 'GraphMol',
                              'ShapeHelpers', 'test_data', '1oir_conf.mol')
        m2 = Chem.MolFromMolFile(fileN2)

        rmsd = rdMolAlign.AlignMol(m, m2)
        self.failUnless(feq(rdshp.ShapeTanimotoDist(m, m2), 0.2813))

        dist = rdshp.ShapeTanimotoDist(mol1=m,
                                       mol2=m2,
                                       confId1=0,
                                       confId2=0,
                                       gridSpacing=0.25,
                                       stepSize=0.125)
        self.failUnless(feq(dist, 0.3021))

        m = Chem.MolFromMolFile(fileN)
        cpt = rdmt.ComputeCentroid(m.GetConformer())
        dims, offset = rdshp.ComputeConfDimsAndOffset(m.GetConformer())

        grd = geom.UniformGrid3D(dims.x, dims.y, dims.z, 0.5,
                                 DataStructs.DiscreteValueType.TWOBITVALUE,
                                 offset)
        dims -= geom.Point3D(13.927, 16.97, 9.775)
        offset -= geom.Point3D(-4.353, 16.829, 2.782)
        self.failUnless(feq(dims.Length(), 0.0))
        self.failUnless(feq(offset.Length(), 0.0))
        rdshp.EncodeShape(m, grd, 0)

        ovect = grd.GetOccupancyVect()

        self.failUnless(ovect.GetTotalVal() == 9275)
        geom.WriteGridToFile(grd, '1oir_shape.grd')

        m = Chem.MolFromMolFile(fileN)
        lc, uc = rdshp.ComputeConfBox(m.GetConformer())
        rdmt.CanonicalizeMol(m)
        lc1, uc1 = rdshp.ComputeConfBox(m.GetConformer())

        lc2, uc2 = rdshp.ComputeUnionBox((lc, uc), (lc1, uc1))
        lc -= geom.Point3D(-4.353, 16.829, 2.782)
        uc -= geom.Point3D(9.574, 33.799, 12.557)
        self.failUnless(feq(lc.Length(), 0.0))
        self.failUnless(feq(uc.Length(), 0.0))

        lc1 -= geom.Point3D(-10.7519, -6.0778, -3.0123)
        uc1 -= geom.Point3D(8.7163, 5.3279, 3.1621)
        self.failUnless(feq(lc1.Length(), 0.0))
        self.failUnless(feq(uc1.Length(), 0.0))

        lc2 -= geom.Point3D(-10.7519, -6.0778, -3.01226)
        uc2 -= geom.Point3D(9.574, 33.799, 12.557)
        self.failUnless(feq(lc2.Length(), 0.0))
        self.failUnless(feq(uc2.Length(), 0.0))