예제 #1
0
    def test1(self):
        suppl = Chem.SDMolSupplier(
            os.path.join(RDConfig.RDCodeDir, 'Chem', 'Subshape',
                         'test_data/5ht3ligs.sdf'))
        builder = SubshapeBuilder.SubshapeBuilder()
        builder.gridDims = (20., 20., 10)
        builder.gridSpacing = 0.5
        builder.winRad = 4.

        ms = []
        shapes = []
        for m in suppl:
            m = Chem.AddHs(m, addCoords=True)
            AllChem.CanonicalizeConformer(m.GetConformer())
            ms.append(m)
            shape = builder(m, terminalPtsOnly=True)
            shapes.append(shape)

        self.assertTrue(len(ms) == 4)
        self.assertTrue(len(shapes) == 4)
        self.assertTrue([len(x.skelPts) for x in shapes] == [5, 5, 5, 5])

        refShape = builder.GenerateSubshapeShape(ms[0])
        self.assertTrue(len(refShape.skelPts) == 15)

        aligner = SubshapeAligner.SubshapeAligner()
        aligner.shapeDistTol = .30

        algStore = []
        for i, s1 in enumerate(shapes):
            if not i or not s1:
                algStore.append([])
                continue
            m1 = ms[i]
            alignments = aligner.GetSubshapeAlignments(ms[0], refShape, m1, s1,
                                                       builder)
            algStore.append(alignments)
        self.assertEqual([len(x) for x in algStore], [0, 2, 39, 0])

        algStore = []
        for i, s1 in enumerate(shapes):
            if not i or not s1:
                algStore.append([])
                continue
            m1 = ms[i]
            alignments = list(aligner(ms[0], refShape, m1, s1, builder))
            algStore.append(alignments)
        self.assertTrue([len(x) for x in algStore] == [0, 2, 39, 0])

        pruned = []
        for i, mi in enumerate(ms):
            alignments = algStore[i]
            pruned.append(
                SubshapeAligner.ClusterAlignments(mi,
                                                  alignments,
                                                  builder,
                                                  neighborTol=0.15))
        self.assertTrue([len(x) for x in pruned] == [0, 2, 29, 0])
예제 #2
0
    def test1(self):
        filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                'test_data', '5ht3ligs.sdf')
        suppl = Chem.SDMolSupplier(filename)
        builder = SubshapeBuilder.SubshapeBuilder()
        builder.gridDims = (20., 20., 10)
        builder.gridSpacing = 0.5
        builder.winRad = 4.

        ms = []
        shapes = []
        for m in suppl:
            m = Chem.AddHs(m, addCoords=True)
            AllChem.CanonicalizeConformer(m.GetConformer())
            ms.append(m)
            shape = builder(m, terminalPtsOnly=True)
            shapes.append(shape)

        self.assertEqual(len(ms), 4)
        self.assertEqual(len(shapes), 4)
        self.assertEqual([len(x.skelPts) for x in shapes], [5, 5, 5, 5])

        refShape = builder.GenerateSubshapeShape(ms[0])
        self.assertEqual(len(refShape.skelPts), 16)

        aligner = SubshapeAligner.SubshapeAligner()
        aligner.shapeDistTol = .30

        algStore = []
        for i, s1 in enumerate(shapes):
            if not i or not s1:
                algStore.append([])
                continue
            m1 = ms[i]
            alignments = aligner.GetSubshapeAlignments(ms[0], refShape, m1, s1, builder)
            algStore.append(alignments)
        self.assertEqual([len(x) for x in algStore], [0, 5, 28, 0])

        algStore = []
        for i, s1 in enumerate(shapes):
            if not i or not s1:
                algStore.append([])
                continue
            m1 = ms[i]
            alignments = list(aligner(ms[0], refShape, m1, s1, builder))
            algStore.append(alignments)
        self.assertEqual([len(x) for x in algStore], [0, 5, 28, 0])

        pruned = []
        for i, mi in enumerate(ms):
            alignments = algStore[i]
            pruned.append(SubshapeAligner.ClusterAlignments(
                mi, alignments, builder, neighborTol=0.15))
        self.assertEqual([len(x) for x in pruned], [0, 4, 12, 0])
예제 #3
0
  cPickle.dump(s2,file('test_data/square2.shp.pkl','wb+'))
  ns1 = b.CombineSubshapes(s1,s2)
  b.GenerateSubshapeSkeleton(ns1)
  cPickle.dump(ns1,file('test_data/combined.shp.pkl','wb+'))
else:
  s1 = cPickle.load(file('test_data/square1.shp.pkl','rb'))
  s2 = cPickle.load(file('test_data/square2.shp.pkl','rb'))
  #ns1 = cPickle.load(file('test_data/combined.shp.pkl','rb'))
  ns1=cPickle.load(file('test_data/combined.shp.pkl','rb'))

v = MolViewer()
SubshapeObjects.DisplaySubshape(v,s1,'shape1')
SubshapeObjects.DisplaySubshape(v,ns1,'ns1')
#SubshapeObjects.DisplaySubshape(v,s2,'shape2')

a = SubshapeAligner.SubshapeAligner()
pruneStats={}
algs =a.GetSubshapeAlignments(None,ns1,m1,s1,b,pruneStats=pruneStats)
print len(algs)
print pruneStats

import os,tempfile
from rdkit import Geometry
fName = tempfile.mktemp('.grd')
Geometry.WriteGridToFile(ns1.coarseGrid.grid,fName)
v.server.loadSurface(fName,'coarse','',2.5)
os.unlink(fName)
fName = tempfile.mktemp('.grd')
Geometry.WriteGridToFile(ns1.medGrid.grid,fName)
v.server.loadSurface(fName,'med','',2.5)
os.unlink(fName)
예제 #4
0
    def test1(self):
        # computeCanonicalTransform returns more approximate eigenvalues/eigencvectors
        # when built against the native RDKit PowerEigenSolver, so unit test results
        # differ slightly
        builtAgainstEigen3 = hasattr(AllChem, 'ComputePrincipalAxesAndMomentsFromGyrationMatrix')
        if builtAgainstEigen3:
            expectedSkelPts = 15
            expectedAlgs = [0, 5, 21, 0]
            prunedAlgs = [0, 4, 11, 0]
        else:
            expectedSkelPts = 16
            expectedAlgs = [0, 5, 28, 0]
            prunedAlgs = [0, 4, 12, 0]
        filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                'test_data', '5ht3ligs.sdf')
        suppl = Chem.SDMolSupplier(filename)
        builder = SubshapeBuilder.SubshapeBuilder()
        builder.gridDims = (20., 20., 10)
        builder.gridSpacing = 0.5
        builder.winRad = 4.

        ms = []
        shapes = []
        for m in suppl:
            m = Chem.AddHs(m, addCoords=True)
            AllChem.CanonicalizeConformer(m.GetConformer())
            ms.append(m)
            shape = builder(m, terminalPtsOnly=True)
            shapes.append(shape)

        self.assertEqual(len(ms), 4)
        self.assertEqual(len(shapes), 4)
        self.assertEqual([len(x.skelPts) for x in shapes], [5, 5, 5, 5])

        refShape = builder.GenerateSubshapeShape(ms[0])

        self.assertEqual(len(refShape.skelPts), expectedSkelPts)

        aligner = SubshapeAligner.SubshapeAligner()
        aligner.shapeDistTol = .30

        algStore = []
        for i, s1 in enumerate(shapes):
            if not i or not s1:
                algStore.append([])
                continue
            m1 = ms[i]
            alignments = aligner.GetSubshapeAlignments(ms[0], refShape, m1, s1, builder)
            algStore.append(alignments)
        self.assertEqual([len(x) for x in algStore], expectedAlgs)

        algStore = []
        for i, s1 in enumerate(shapes):
            if not i or not s1:
                algStore.append([])
                continue
            m1 = ms[i]
            alignments = list(aligner(ms[0], refShape, m1, s1, builder))
            algStore.append(alignments)
        self.assertEqual([len(x) for x in algStore], expectedAlgs)

        pruned = []
        for i, mi in enumerate(ms):
            alignments = algStore[i]
            pruned.append(SubshapeAligner.ClusterAlignments(
                mi, alignments, builder, neighborTol=0.15))
        self.assertEqual([len(x) for x in pruned], prunedAlgs)