# $Id$
#
# Copyright (C) 2003-2006 greg Landrum and Rational Discovery LLC
#
#   @@ All Rights Reserved @@
#  This file is part of the RDKit.
#  The contents are covered by the terms of the BSD license
#  which is included in the file license.txt, found at the root
#  of the RDKit source tree.
#
""" This functionality gets mixed into the BitEnsemble class

"""
from rdkit.DataStructs.BitEnsemble import BitEnsemble

def _InitScoreTable(self,dbConn,tableName,idInfo='',actInfo=''):
  """ inializes a db table to store our scores

    idInfo and actInfo should be strings with the definitions of the id and
    activity columns of the table (when desired)

  """
  if idInfo:
    cols = [idInfo]
  else:
    cols = []
  for bit in self.GetBits():
    cols.append('Bit_%d smallint'%(bit))
  if actInfo  :
    cols.append(actInfo)
  dbConn.AddTable(tableName,','.join(cols))
  self._dbTableName=tableName

def _ScoreToDb(self,sig,dbConn,tableName=None,id=None,act=None):
  """ scores the "signature" that is passed in and puts the
  results in the db table
  
  """
  if tableName is None:
    try:
      tableName = self._dbTableName
    except AttributeError:
      raise ValueError('table name not set in BitEnsemble pre call to ScoreToDb()')
  if id is not None:
    cols = [id]
  else:
    cols = []
  score = 0 
  for bit in self.GetBits():
    b = sig[bit]
    cols.append(b)
    score += b
  if act is not None:
    cols.append(act)
  dbConn.InsertData(tableName,cols)  

BitEnsemble.InitScoreTable = _InitScoreTable
BitEnsemble.ScoreToDb = _ScoreToDb

