diff --git a/Projects/DbCLI/CreateDb.py b/Projects/DbCLI/CreateDb.py index d8d0a244c..f2d52cb89 100644 --- a/Projects/DbCLI/CreateDb.py +++ b/Projects/DbCLI/CreateDb.py @@ -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) diff --git a/Projects/DbCLI/SearchDb.py b/Projects/DbCLI/SearchDb.py index ac71c0b3b..f86d88ff0 100644 --- a/Projects/DbCLI/SearchDb.py +++ b/Projects/DbCLI/SearchDb.py @@ -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 diff --git a/Projects/DbCLI/TestDbCLI.py b/Projects/DbCLI/TestDbCLI.py index bdcfc0696..f2dc95745 100644 --- a/Projects/DbCLI/TestDbCLI.py +++ b/Projects/DbCLI/TestDbCLI.py @@ -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', diff --git a/rdkit/Chem/MolDb/FingerprintUtils.py b/rdkit/Chem/MolDb/FingerprintUtils.py index 04520068b..5d0eacf1e 100644 --- a/rdkit/Chem/MolDb/FingerprintUtils.py +++ b/rdkit/Chem/MolDb/FingerprintUtils.py @@ -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: