1
2
3
4
5
6
7 """ functions to match a bunch of fragment descriptors from a file
8
9 No user-servicable parts inside. ;-)
10
11 """
12 import os
13 from rdkit import RDConfig
14 from rdkit import Chem
15
16
17 defaultPatternFileName = os.path.join(RDConfig.RDDataDir,'FragmentDescriptors.csv')
18
23
24 fns = []
26 if fileName is None:
27 fileName = defaultPatternFileName
28 try:
29 inF = open(fileName,'r')
30 except IOError:
31 pass
32 else:
33 for line in inF.readlines():
34 if len(line) and line[0] != '#':
35 splitL = line.split('\t')
36 if len(splitL)>=3:
37 name = splitL[0]
38 descr = splitL[1]
39 sma = splitL[2]
40 descr=descr.replace('"','')
41 ok=1
42 try:
43 patt = Chem.MolFromSmarts(sma)
44 except:
45 ok=0
46 else:
47 if not patt or patt.GetNumAtoms()==0: ok=0
48 if not ok: raise ImportError,'Smarts %s could not be parsed'%(repr(sma))
49 fn = lambda x,y=1,z=patt:_CountMatches(x,z,unique=y)
50 fn.__doc__ = descr
51 name = name.replace('=','_')
52 name = name.replace('-','_')
53 fns.append((name,fn))
54
55 _LoadPatterns()
56 for name,fn in fns:
57 exec('%s=fn'%(name))
58 fn=None
59