rearrange fingerprint generation

This commit is contained in:
Greg Landrum
2009-07-13 11:50:48 +00:00
parent 0c745b2b60
commit d648ffba08
4 changed files with 47 additions and 39 deletions

View File

@@ -68,6 +68,7 @@ logger = logger()
import cPickle,sys,os
from rdkit.Chem.MolDb.FingerprintUtils import BuildSigFactory,LayeredOptions
from rdkit.Chem.MolDb import FingerprintUtils
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
from optparse import OptionParser
@@ -266,10 +267,6 @@ def run():
if options.doFingerprints:
fpCurs.execute('create table %s (%s varchar not null primary key,rdkfp blob)'%(options.fpTableName,
options.molIdName))
from rdkit.Chem.Fingerprints import FingerprintMols
details = FingerprintMols.FingerprinterDetails()
fpArgs = details.__dict__
if options.doLayered:
colDefs=','.join(['Col_%d integer'%(x+1) for x in range(LayeredOptions.nWords)])
fpCurs.execute('create table %s (%s varchar not null primary key,%s)'%(options.layeredTableName,
@@ -279,7 +276,6 @@ def run():
if options.doPharm2D:
fpCurs.execute('create table %s (%s varchar not null primary key,pharm2dfp blob)'%(options.pharm2DTableName,
options.molIdName))
from rdkit.Chem.Pharm2D import Generate
sigFactory = BuildSigFactory(options)
if options.doGobbi2D:
fpCurs.execute('create table %s (%s varchar not null primary key,gobbi2dfp blob)'%(options.gobbi2DTableName,
@@ -289,12 +285,10 @@ def run():
if options.doMorganFps :
fpConn = DbConnect(os.path.join(options.outDir,options.fpDbName))
fpCurs=fpConn.GetCursor()
try:
fpCurs.execute('drop table %s'%(options.morganFpTableName))
except:
pass
fpCurs.execute('create table %s (%s varchar not null primary key,morganfp blob)'%(options.morganFpTableName,
options.molIdName))
morganRows = []
@@ -340,8 +334,8 @@ def run():
if not mol: continue
if options.doPairs:
pairs = Pairs.GetAtomPairFingerprint(mol)
torsions = Torsions.GetTopologicalTorsionFingerprint(mol)
pairs = FingerprintUtils.BuildAtomPairFP(mol)
torsions = FingerprintUtils.BuildTorsionsFP(mol)
pkl1 = DbModule.binaryHolder(pairs.ToBinary())
pkl2 = DbModule.binaryHolder(torsions.ToBinary())
row = [id,pkl1,pkl2]
@@ -353,7 +347,7 @@ def run():
pairConn.Commit()
if options.doFingerprints:
fp2 = Chem.RDKFingerprint(mol)
fp2 = FingerprintUtils.BuildRDKitFP(mol)
pkl = DbModule.binaryHolder(fp2.ToBinary())
row = [id,pkl]
fpRows.append(row)
@@ -386,7 +380,8 @@ def run():
descrConn.Commit()
if options.doPharm2D:
fp= Generate.Gen2DFingerprint(mol,sigFactory)
FingerprintUtils.sigFactory=sigFactory
fp= FingerprintUtils.BuildPharm2DFP(mol)
pkl = DbModule.binaryHolder(fp.ToBinary())
row = (id,pkl)
pharm2DRows.append(row)
@@ -396,7 +391,8 @@ def run():
pharm2DRows = []
fpConn.Commit()
if options.doGobbi2D:
fp= Generate.Gen2DFingerprint(mol,Gobbi_Pharm2D.factory)
FingerprintUtils.sigFactory=Gobbi_Pharm2D.factory
fp= FingerprintUtils.BuildPharm2DFP(mol)
pkl = DbModule.binaryHolder(fp.ToBinary())
row = (id,pkl)
gobbi2DRows.append(row)
@@ -407,7 +403,7 @@ def run():
fpConn.Commit()
if options.doMorganFps:
morgan = rdMolDescriptors.GetMorganFingerprint(mol,4)
morgan = FingerprintUtils.BuildMorganFP(mol)
pkl1 = DbModule.binaryHolder(morgan.ToBinary())
row = [id,pkl1]
morganRows.append(row)

View File

@@ -57,6 +57,7 @@ logger=logger()
import cPickle,zlib
from rdkit import Chem
from rdkit.Chem.MolDb import FingerprintUtils
from rdkit.Chem.MolDb.FingerprintUtils import supportedSimilarityMethods,BuildSigFactory,DepickleFP
from CreateDb import LayeredOptions
@@ -64,23 +65,7 @@ from rdkit.Chem.AtomPairs import Torsions
from rdkit.Chem.AtomPairs import Pairs
from rdkit import DataStructs
def BuildPharm2DFP(mol):
global sigFactory
from rdkit.Chem.Pharm2D import Generate
try:
fp=Generate.Gen2DFingerprint(mol,sigFactory)
except IndexError:
print 'FAIL:',Chem.MolToSmiles(mol,True)
raise
return fp
# ----------------------------------------
# Morgan (circular) fingerprints
from rdkit.Chem.Descriptors import rdMolDescriptors
def BuildMorganFP(mol):
fp = rdMolDescriptors.GetMorganFingerprint(mol,4)
fp._sumCache = fp.GetTotalVal()
return fp
def GetNeighborLists(probes,topN,pool,
simMetric=DataStructs.DiceSimilarity,
@@ -153,19 +138,19 @@ def GetMolsFromSDFile(dataFilename,errFile,nameProp):
def RunSearch(options,queryFilename):
global sigFactory
if options.similarityType=='AtomPairs':
fpBuilder=Pairs.GetAtomPairFingerprint
fpBuilder=FingerprintUtils.BuildAtomPairFP
simMetric=DataStructs.DiceSimilarity
dbName = os.path.join(options.dbDir,options.pairDbName)
fpTableName = options.pairTableName
fpColName = options.pairColName
elif options.similarityType=='TopologicalTorsions':
fpBuilder=Torsions.GetTopologicalTorsionFingerprint
fpBuilder=FingerprintUtils.BuildTorsionsFP
simMetric=DataStructs.DiceSimilarity
dbName = os.path.join(options.dbDir,options.torsionsDbName)
fpTableName = options.torsionsTableName
fpColName = options.torsionsColName
elif options.similarityType=='RDK':
fpBuilder=Chem.RDKFingerprint
fpBuilder=FingerprintUtils.BuildRDKitFP
simMetric=DataStructs.FingerprintSimilarity
dbName = os.path.join(options.dbDir,options.fpDbName)
fpTableName = options.fpTableName
@@ -173,26 +158,26 @@ def RunSearch(options,queryFilename):
options.fpColName='rdkfp'
fpColName = options.fpColName
elif options.similarityType=='Pharm2D':
fpBuilder=BuildPharm2DFP
fpBuilder=FingerprintUtils.BuildPharm2DFP
simMetric=DataStructs.DiceSimilarity
dbName = os.path.join(options.dbDir,options.fpDbName)
fpTableName = options.pharm2DTableName
if not options.fpColName:
options.fpColName='pharm2dfp'
fpColName = options.fpColName
sigFactory = BuildSigFactory(options)
FingerprintUtils.sigFactory = BuildSigFactory(options)
elif options.similarityType=='Gobbi2D':
from rdkit.Chem.Pharm2D import Gobbi_Pharm2D
fpBuilder=BuildPharm2DFP
fpBuilder=FingerprintUtils.BuildPharm2DFP
simMetric=DataStructs.TanimotoSimilarity
dbName = os.path.join(options.dbDir,options.fpDbName)
fpTableName = options.gobbi2DTableName
if not options.fpColName:
options.fpColName='gobbi2dfp'
fpColName = options.fpColName
sigFactory = Gobbi_Pharm2D.factory
FingerprintUtils.sigFactory = Gobbi_Pharm2D.factory
elif options.similarityType=='Morgan':
fpBuilder=BuildMorganFP
fpBuilder=FingerprintUtils.BuildMorganFP
simMetric=DataStructs.DiceSimilarity
dbName = os.path.join(options.dbDir,options.morganFpDbName)
fpTableName = options.morganFpTableName

View File

@@ -210,7 +210,7 @@ class TestCase(unittest.TestCase):
inF = file('testData/bzr/search.out','r')
lines=inF.readlines()
inF=None
self.failUnless(len(lines)==49)
self.failUnlessEqual(len(lines),49)
os.unlink('testData/bzr/search.out')
if os.path.exists('/dev/null'):
@@ -262,7 +262,7 @@ class TestCase(unittest.TestCase):
inF = file('testData/bzr/search.out','r')
lines=inF.readlines()
inF=None
self.failUnless(len(lines)==5)
self.failUnlessEqual(len(lines),5)
os.unlink('testData/bzr/search.out')
p = subprocess.Popen(('python', 'SearchDb.py','--dbDir=testData/bzr',

View File

@@ -68,6 +68,33 @@ similarityMethods={'RDK':DataStructs.ExplicitBitVect,
}
supportedSimilarityMethods=similarityMethods.keys()
def BuildAtomPairFP(mol):
from rdkit.Chem.AtomPairs import Pairs
fp=Pairs.GetAtomPairFingerprintAsIntVect(mol)
fp._sumCache = fp.GetTotalVal()
return fp
def BuildTorsionsFP(mol):
from rdkit.Chem.AtomPairs import Torsions
fp=Torsions.GetTopologicalTorsionFingerprintAsIntVect(mol)
fp._sumCache = fp.GetTotalVal()
return fp
def BuildRDKitFP(mol):
fp=Chem.RDKFingerprint(mol)
return fp
def BuildPharm2DFP(mol):
global sigFactory
from rdkit.Chem.Pharm2D import Generate
try:
fp=Generate.Gen2DFingerprint(mol,sigFactory)
except IndexError:
print 'FAIL:',Chem.MolToSmiles(mol,True)
raise
return fp
def BuildMorganFP(mol):
from rdkit.Chem import rdMolDescriptors
fp = rdMolDescriptors.GetMorganFingerprint(mol,4)
fp._sumCache = fp.GetTotalVal()
return fp
def DepickleFP(pkl,similarityMethod):
try: