1
2
3
4 """ Various bits and pieces for calculating Molecular descriptors
5
6 """
7 import RDConfig
8 from ML.Descriptors import Descriptors
9 from Chem import AvailDescriptors
10 AvailDescriptors.Desensitize()
11 import re
12
14 """ used for calculating descriptors for molecules
15
16 """
17 - def __init__(self,simpleList,*args,**kwargs):
18 """ Constructor
19
20 **Arguments**
21
22 - simpleList: list of simple descriptors to be calculated
23 (see below for format)
24
25 **Note**
26
27 - format of simpleList:
28
29 a list of strings which are keys into _AvailDescriptors.descDict_
30
31 """
32 self.simpleList = simpleList[:]
33 self.descriptorNames = self.simpleList[:]
34 self.compoundList = None
35
37 """ Writes this calculator off to a file so that it can be easily loaded later
38
39 **Arguments**
40
41 - fileName: the name of the file to be written
42
43 """
44 import cPickle
45 try:
46 f = open(fileName,'wb+')
47 except:
48 print 'cannot open output file %s for writing'%(fileName)
49 return
50 cPickle.dump(self,f)
51 f.close()
52
54 """ calculates all descriptors for a given molecule
55
56 **Arguments**
57
58 - mol: the molecule to be used
59
60 **Returns**
61 a tuple of all descriptor values
62
63 """
64 res = [None]*len(self.simpleList)
65 for i in range(len(self.simpleList)):
66 nm = self.simpleList[i]
67 fn = AvailDescriptors.descDict.get(nm,lambda x:777)
68
69 try:
70 res[i] = fn(mol)
71 except:
72 import traceback
73 traceback.print_exc()
74 res[i]=-666
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
108 if __name__ == '__main__':
109 from Chem import *
110 from ML.Descriptors import MoleculeDescriptors
111 descs = ['MolLogP','IWd','Chi1v']
112 smis = ['CCOC','CC=O','CCC(=O)O']
113 calc = MoleculeDescriptors.MolecularDescriptorCalculator(descs)
114 calc.SaveState('test_data/molcalc.dsc')
115 print calc.GetDescriptorNames()
116
117 for smi in smis:
118 mol = MolFromSmiles(smi)
119 print smi,calc.CalcDescriptors(mol)
120