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
    21  defaultPatternFileName = os.path.join(RDConfig.RDDataDir,'FragmentDescriptors.csv')
    22
    23 -def _CountMatches(mol,patt,unique=True):
    24    return len(mol.GetSubstructMatches(patt,uniquify=unique))
    25
    26  fns = []
    27 -def _LoadPatterns(fileName=None):
    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              ok=1
    41              try:
    42                patt = Chem.MolFromSmarts(sma)
    43              except:
    44                ok=0
    45              else:
    46                if not patt or patt.GetNumAtoms()==0: ok=0
    47              if not ok: raise ImportError('Smarts %s could not be parsed'%(repr(sma)))
    48              fn = lambda mol,countUnique=True,pattern=patt:_CountMatches(mol,pattern,unique=countUnique)
    49              fn.__doc__ = descr
    50              name = name.replace('=','_')
    51              name = name.replace('-','_')
    52              fns.append((name,fn))
    53    except IOError:
    54      pass
    55
    56  _LoadPatterns()
    57  for name,fn in fns:
    58    exec('%s=fn'%(name))
    59  fn=None
    60