Dear all, I am new to working with the Pharm3D module and I have a question regarding pharmacophore matching: Is it possible to match a molecule to a pharmacophore that requires one atom to match to two different features (e.g. H-bond acceptor and donor)? Here is a dummy code example for a case where I am trying to match ethanol back to all of its pharmacophore features (I am using rdkit version 2022.09.4):
import os from rdkit import Chem, RDConfig from rdkit.Chem import AllChem, ChemicalFeatures, rdDistGeom from rdkit.Chem.Pharm3D import Pharmacophore, EmbedLib feature_definition_file = os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef') featFactory = ChemicalFeatures.BuildFeatureFactory(feature_definition_file) m1 = Chem.MolFromSmiles('CCO') # ethanol m1 = Chem.AddHs(m1) AllChem.EmbedMolecule(m1) features = featFactory.GetFeaturesForMol(m1) # This is to keep track of features for i in features: print(i.GetFamily()) #features = features[1:] #removing donor feature will make it work print() for i in features: print(i.GetFamily()) pcophore = Pharmacophore.Pharmacophore(features) m2 = Chem.MolFromSmiles('CCO') # ethanol again m2 = Chem.AddHs(m2) AllChem.EmbedMolecule(m2) bool_match, matches = EmbedLib.MatchPharmacophoreToMol(m2, featFactory, pcophore) print("bool_match =", bool_match) boundsMat = rdDistGeom.GetMoleculeBoundsMatrix(m2) failed, boundsMatMatched, matched, matchDetails = EmbedLib.MatchPharmacophore(matches, boundsMat, pcophore, useDownsampling=True) print("matched =", matched) MatchPharmacophore() appears to be working only by removing one of the two features derived from the oxygen. Am I doing something wrong or is there a neat way to fix this? Kind regards, Mattis
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss