1
2
3
4
5
6
7
8
9
10
11 """ Hybrid EState-VSA descriptors (like the MOE VSA descriptors)
12
13 """
14 import numpy
15 from rdkit.Chem.EState.EState import EStateIndices as EStateIndices_
16 from rdkit.Chem.MolSurf import _LabuteHelper as VSAContribs_
17 import bisect
18
19 """
20
21 These default VSA bins were chosen using the PP3K solubility data
22 set. An arbitrary number of bins were selected and the
23 boundaries were selected to give an approximately equal number of
24 atoms per bin
25
26 """
27 vsaBins=[4.78,5.00,5.410,5.740,6.00,6.07,6.45,7.00,11.0]
29 """ *Internal Use Only*
30 """
31 if not force and hasattr(mol,'_vsaEState'):
32 return mol._vsaEState
33
34 if bins is None: bins = estateBins
35 propContribs = EStateIndices_(mol,force=force)
36 volContribs = VSAContribs_(mol)
37
38 ans = numpy.zeros(len(bins)+1,numpy.float)
39 for i,prop in enumerate(propContribs):
40 if prop is not None:
41 bin = bisect.bisect_right(bins,volContribs[i+1])
42 ans[bin] += prop
43 mol._vsaEState=ans
44 return ans
45
46
47 """
48
49 These default EState bins were chosen using the PP3K solubility data
50 set. An arbitrary number of bins (10) were selected and the
51 boundaries were selected to give an approximately equal number of
52 atoms per bin
53
54 """
55 estateBins=[-0.390,0.290,0.717,1.165,1.540,1.807,2.05,4.69,9.17,15.0]
57 """ *Internal Use Only*
58 """
59 if not force and hasattr(mol,'_eStateVSA'):
60 return mol._eStateVSA
61
62 if bins is None: bins = estateBins
63 propContribs = EStateIndices_(mol,force=force)
64 volContribs = VSAContribs_(mol)
65
66 ans = numpy.zeros(len(bins)+1,numpy.float)
67 for i,prop in enumerate(propContribs):
68 if prop is not None:
69 bin = bisect.bisect_right(bins,prop)
70 ans[bin] += volContribs[i+1]
71 mol._eStateVSA=ans
72 return ans
74 for i in range(len(vsaBins)):
75 fn = lambda x,y=i:VSA_EState_(x,force=0)[y]
76 if i > 0:
77 fn.__doc__="VSA EState Descriptor %d (% 4.2f <= x < % 4.2f)"%(i+1,vsaBins[i-1],vsaBins[i])
78 else:
79 fn.__doc__="VSA EState Descriptor %d (-inf < x < % 4.2f)"%(i+1,vsaBins[i])
80 name="VSA_EState%d"%(i+1)
81 fn.version="1.0.0"
82 globals()[name]=fn
83 i+=1
84 fn = lambda x,y=i:VSA_EState_(x,force=0)[y]
85 fn.__doc__="VSA EState Descriptor %d (% 4.2f <= x < inf)"%(i+1,vsaBins[i-1])
86 name="VSA_EState%d"%(i+1)
87 fn.version="1.0.0"
88 globals()[name]=fn
89 fn=None
90
91 for i in range(len(estateBins)):
92 fn = lambda x,y=i:EState_VSA_(x,force=0)[y]
93 if i > 0:
94 fn.__doc__="EState VSA Descriptor %d (% 4.2f <= x < % 4.2f)"%(i+1,estateBins[i-1],estateBins[i])
95 else:
96 fn.__doc__="EState VSA Descriptor %d (-inf < x < % 4.2f)"%(i+1,estateBins[i])
97 name="EState_VSA%d"%(i+1)
98 fn.version="1.0.1"
99 globals()[name]=fn
100 i+=1
101 fn = lambda x,y=i:EState_VSA_(x,force=0)[y]
102 fn.__doc__="EState VSA Descriptor %d (% 4.2f <= x < inf)"%(i+1,estateBins[i-1])
103 name="EState_VSA%d"%(i+1)
104 fn.version="1.0.1"
105 globals()[name]=fn
106 fn=None
107
108
109 _InstallDescriptors()
110