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])
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])
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)
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)