1
2
3
4
5
6
7
8
9
10
11 from rdkit.Chem import ChemicalFeatures
12
13
15 weight = 0.0
16 featDirs = None
17
21
23 """
24 >>> from rdkit import Geometry
25 >>> sfeat = ChemicalFeatures.FreeChemicalFeature('Aromatic','Foo',Geometry.Point3D(0,0,0))
26 >>> fmp = FeatMapPoint()
27 >>> fmp.initFromFeat(sfeat)
28 >>> fmp.GetFamily()==sfeat.GetFamily()
29 True
30 >>> fmp.GetType()==sfeat.GetType()
31 True
32 >>> list(fmp.GetPos())
33 [0.0, 0.0, 0.0]
34 >>> fmp.featDirs == []
35 True
36
37 >>> sfeat.featDirs = [Geometry.Point3D(1.0,0,0)]
38 >>> fmp.initFromFeat(sfeat)
39 >>> len(fmp.featDirs)
40 1
41
42 """
43 self.SetFamily(feat.GetFamily())
44 self.SetType(feat.GetType())
45 self.SetPos(feat.GetPos())
46 if hasattr(feat, 'featDirs'):
47 self.featDirs = feat.featDirs[:]
48
50 """
51 >>> from rdkit import Geometry
52 >>> sfeat = ChemicalFeatures.FreeChemicalFeature('Aromatic','Foo',Geometry.Point3D(0,0,0))
53 >>> fmp = FeatMapPoint()
54 >>> fmp.initFromFeat(sfeat)
55 >>> fmp.GetDist2(sfeat)
56 0.0
57 >>> sfeat.SetPos(Geometry.Point3D(2,0,0))
58 >>> fmp.GetDist2(sfeat)
59 4.0
60 """
61 return (self.GetPos() - other.GetPos()).LengthSq()
62
64 """
65 >>> from rdkit import Geometry
66 >>> sfeat = ChemicalFeatures.FreeChemicalFeature('Aromatic','Foo',Geometry.Point3D(0,0,0))
67 >>> fmp = FeatMapPoint()
68 >>> fmp.initFromFeat(sfeat)
69 >>> fmp.GetDirMatch(sfeat)
70 1.0
71
72 >>> sfeat.featDirs=[Geometry.Point3D(0,0,1),Geometry.Point3D(0,0,-1)]
73 >>> fmp.featDirs=[Geometry.Point3D(0,0,1),Geometry.Point3D(1,0,0)]
74 >>> fmp.GetDirMatch(sfeat)
75 1.0
76 >>> fmp.GetDirMatch(sfeat,useBest=True)
77 1.0
78 >>> fmp.GetDirMatch(sfeat,useBest=False)
79 0.0
80
81 >>> sfeat.featDirs=[Geometry.Point3D(0,0,1)]
82 >>> fmp.GetDirMatch(sfeat,useBest=False)
83 0.5
84
85 >>> sfeat.featDirs=[Geometry.Point3D(0,0,1)]
86 >>> fmp.featDirs=[Geometry.Point3D(0,0,-1)]
87 >>> fmp.GetDirMatch(sfeat)
88 -1.0
89 >>> fmp.GetDirMatch(sfeat,useBest=False)
90 -1.0
91
92
93 """
94 if not self.featDirs or not other.featDirs:
95 return 1.0
96
97 if not useBest:
98 accum = 0.0
99 else:
100 accum = -100000.0
101 for sDir in self.featDirs:
102 for oDir in other.featDirs:
103 d = sDir.DotProduct(oDir)
104 if useBest:
105 if d > accum:
106 accum = d
107 else:
108 accum += d
109
110 if not useBest:
111 accum /= len(self.featDirs) * len(other.featDirs)
112
113 return accum
114
115
116
117
118
119
121 import sys
122 import doctest
123 failed, _ = doctest.testmod(optionflags=doctest.ELLIPSIS, verbose=verbose)
124 sys.exit(failed)
125
126
127 if __name__ == '__main__':
128 _runDoctests()
129