Package rdkit :: Package Chem :: Module Fragments
[hide private]
[frames] | no frames]

Source Code for Module rdkit.Chem.Fragments

 1  # $Id$ 
 2  # 
 3  # Copyright (C) 2002-2010 greg Landrum and Rational Discovery LLC 
 4  # 
 5  #   @@ All Rights Reserved @@ 
 6  #  This file is part of the RDKit. 
 7  #  The contents are covered by the terms of the BSD license 
 8  #  which is included in the file license.txt, found at the root 
 9  #  of the RDKit source tree. 
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  defaultPatternFileName = os.path.join(RDConfig.RDDataDir, 'FragmentDescriptors.csv') 
21   
22   
23 -def _CountMatches(mol, patt, unique=True):
24 return len(mol.GetSubstructMatches(patt, uniquify=unique))
25 26 27 fns = [] 28 29
30 -def _LoadPatterns(fileName=None):
31 if fileName is None: 32 fileName = defaultPatternFileName 33 try: 34 with open(fileName, 'r') as inF: 35 for line in inF.readlines(): 36 if len(line) and line[0] != '#': 37 splitL = line.split('\t') 38 if len(splitL) >= 3: 39 name = splitL[0] 40 descr = splitL[1] 41 sma = splitL[2] 42 descr = descr.replace('"', '') 43 patt = Chem.MolFromSmarts(sma) 44 if not patt or patt.GetNumAtoms() == 0: 45 raise ImportError('Smarts %s could not be parsed' % (repr(sma))) 46 fn = lambda mol, countUnique=True, pattern=patt: _CountMatches(mol, pattern, unique=countUnique) 47 fn.__doc__ = descr 48 name = name.replace('=', '_') 49 name = name.replace('-', '_') 50 fns.append((name, fn)) 51 except IOError: 52 pass
53 54 55 _LoadPatterns() 56 for name, fn in fns: 57 exec('%s=fn' % (name)) 58 fn = None 59