mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
rearrange fingerprint generation
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user