DiffLinker / src /delinker_utils /calc_SC_RDKit.py
igashov
DiffLinker code
95ba5bc
raw
history blame
1.45 kB
import os
from rdkit import Chem
from rdkit.Chem import AllChem, rdShapeHelpers
from rdkit.Chem.FeatMaps import FeatMaps
from rdkit import RDConfig
# Set up features to use in FeatureMap
fdefName = os.path.join(RDConfig.RDDataDir, 'BaseFeatures.fdef')
fdef = AllChem.BuildFeatureFactory(fdefName)
fmParams = {}
for k in fdef.GetFeatureFamilies():
fparams = FeatMaps.FeatMapParams()
fmParams[k] = fparams
keep = ('Donor', 'Acceptor', 'NegIonizable', 'PosIonizable',
'ZnBinder', 'Aromatic', 'Hydrophobe', 'LumpedHydrophobe')
def get_FeatureMapScore(query_mol, ref_mol):
featLists = []
for m in [query_mol, ref_mol]:
rawFeats = fdef.GetFeaturesForMol(m)
# filter that list down to only include the ones we're intereted in
featLists.append([f for f in rawFeats if f.GetFamily() in keep])
fms = [FeatMaps.FeatMap(feats=x, weights=[1] * len(x), params=fmParams) for x in featLists]
fms[0].scoreMode = FeatMaps.FeatMapScoreMode.Best
fm_score = fms[0].ScoreFeats(featLists[1]) / min(fms[0].GetNumFeatures(), len(featLists[1]))
return fm_score
def calc_SC_RDKit_score(query_mol, ref_mol):
fm_score = get_FeatureMapScore(query_mol, ref_mol)
protrude_dist = rdShapeHelpers.ShapeProtrudeDist(query_mol, ref_mol,
allowReordering=False)
SC_RDKit_score = 0.5 * fm_score + 0.5 * (1 - protrude_dist)
return SC_RDKit_score