1
2
3
4
5 """ Various bits and pieces for calculating Molecular descriptors
6
7 """
8
9 import re
10
11 from rdkit.Chem import Descriptors as DescriptorsMod
12 from rdkit.ML.Descriptors import Descriptors
13 from rdkit.RDLogger import logger
14 from rdkit.six.moves import cPickle
15
16 logger = logger()
17
18
20 """ used for calculating descriptors for molecules
21
22 """
23
24 - def __init__(self, simpleList, *args, **kwargs):
25 """ Constructor
26
27 **Arguments**
28
29 - simpleList: list of simple descriptors to be calculated
30 (see below for format)
31
32 **Note**
33
34 - format of simpleList:
35
36 a list of strings which are functions in the rdkit.Chem.Descriptors module
37
38 """
39 self.simpleList = tuple(simpleList)
40 self.descriptorNames = tuple(self.simpleList)
41 self.compoundList = None
42 self._findVersions()
43
45 """ returns a tuple of the versions of the descriptor calculators
46
47 """
48 self.descriptorVersions = []
49 for nm in self.simpleList:
50 vers = 'N/A'
51 if hasattr(DescriptorsMod, nm):
52 fn = getattr(DescriptorsMod, nm)
53 if hasattr(fn, 'version'):
54 vers = fn.version
55 self.descriptorVersions.append(vers)
56
58 """ Writes this calculator off to a file so that it can be easily loaded later
59
60 **Arguments**
61
62 - fileName: the name of the file to be written
63
64 """
65 try:
66 f = open(fileName, 'wb+')
67 except Exception:
68 logger.error('cannot open output file %s for writing' % (fileName))
69 return
70 cPickle.dump(self, f)
71 f.close()
72
74 """ calculates all descriptors for a given molecule
75
76 **Arguments**
77
78 - mol: the molecule to be used
79
80 **Returns**
81 a tuple of all descriptor values
82
83 """
84 res = [-666] * len(self.simpleList)
85 for i, nm in enumerate(self.simpleList):
86 fn = getattr(DescriptorsMod, nm, lambda x: 777)
87 try:
88 res[i] = fn(mol)
89 except Exception:
90 import traceback
91 traceback.print_exc()
92 return tuple(res)
93
95 """ returns a tuple of the names of the descriptors this calculator generates
96
97 """
98 return self.descriptorNames
99
101 """ returns a tuple of summaries for the descriptors this calculator generates
102
103 """
104 res = []
105 for nm in self.simpleList:
106 fn = getattr(DescriptorsMod, nm, lambda x: 777)
107 if hasattr(fn, '__doc__') and fn.__doc__:
108 doc = fn.__doc__.split('\n\n')[0].strip()
109 doc = re.sub('\ *\n\ *', ' ', doc)
110 else:
111 doc = 'N/A'
112 res.append(doc)
113 return res
114
116 """ returns a tuple of the functions used to generate this calculator's descriptors
117
118 """
119 res = []
120 for nm in self.simpleList:
121 fn = getattr(DescriptorsMod, nm, lambda x: 777)
122 res.append(fn)
123 return tuple(res)
124
126 """ returns a tuple of the versions of the descriptor calculators
127
128 """
129 return tuple(self.descriptorVersions)
130