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