rdkit.Chem.FragmentCatalog

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

# Source Code for Module rdkit.Chem.FragmentCatalog

     1  # $Id$
     2  #
     3  #  Copyright (C) 2003-2008 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  import sys
    12
    13  from rdkit import Chem
    14  from rdkit.Chem.rdfragcatalog import *
    15
    16
    17 -def message(msg,dest=sys.stdout):
    18    dest.write(msg)
    19
    20
    21 -class BitGainsInfo(object):
    22    id=-1
    23    description=''
    24    gain=0.0
    25    nPerClass=None
    26
    27 -def ProcessGainsFile(fileName,nToDo=-1,delim=',',haveDescriptions=1):
    28    inFile = open(fileName,'r')
    29    nRead = 0
    30    res = []
    31    for line in inFile.xreadlines():
    32      nRead += 1
    33      splitL = [x.strip() for x in line.split(delim)]
    34      if nRead != 1 and len(splitL):
    35        bit = BitGainsInfo()
    36        bit.id = int(splitL[0])
    37        col = 1
    38        if haveDescriptions:
    39          bit.description = splitL[col]
    40          col += 1
    41        bit.gain = float(splitL[col])
    42        col += 1
    43        nPerClass = []
    44        for entry in splitL[col:]:
    45          nPerClass.append(int(entry))
    46        bit.nPerClass = nPerClass
    47        res.append(bit)
    48        if len(res)==nToDo:
    49          break
    50    return res
    51
    52 -def BuildAdjacencyList(catalog,bits,limitInclusion=1,orderLevels=0):
    53    adjs = {}
    54    levels = {}
    55    bitIds = [bit.id for bit in bits]
    56    for bitId in bitIds:
    57      entry = catalog.GetBitEntryId(bitId)
    58      tmp = []
    59      order = catalog.GetEntryOrder(entry)
    60      s = levels.get(order,set())
    61      s.add(bitId)
    62      levels[order] = s
    63      for down in catalog.GetEntryDownIds(entry):
    64        id = catalog.GetEntryBitId(down)
    65        if not limitInclusion or id in bitIds:
    66          tmp.append(id)
    67          order = catalog.GetEntryOrder(down)
    68          s = levels.get(order,set())
    69          s.add(id)
    70          levels[order] = s
    71      adjs[bitId] = tmp
    72    if orderLevels:
    73      # we'll play a little game and sort the indices in each level by
    74      #  the number of downlinks they have:
    75      for order in levels.keys():
    76        ids = levels[order]
    77        counts = [len(adjs[id]) for id in ids]
    78        countOrder = argsort(counts)
    79        l = [ids[x] for x in countOrder]
    80        l.reverse()
    81        levels[order] = l
    82    return adjs,levels
    83
    84 -def GetMolsMatchingBit(mols,bit,fps):
    85    res = []
    86    if isinstance(bit,BitGainsInfo):
    87      bitId = bit.id
    88    else:
    89      bitId = bit
    90    for i,mol in enumerate(mols):
    91      fp = fps[i]
    92      if fp[bitId]:
    93        res.append(mol)
    94    return res
    95