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