def testFlattenedFunctionalGroupHierarchy(self): queryDefs = FilterCatalog.GetFlattenedFunctionalGroupHierarchy() items = sorted(queryDefs.items()) matches = [(Chem.MolFromSmiles("CCl"), [ 'Halogen', 'Halogen.Aliphatic', 'Halogen.NotFluorine', 'Halogen.NotFluorine.Aliphatic' ]), (Chem.MolFromSmiles("c1ccccc1Cl"), [ 'Halogen', 'Halogen.Aromatic', 'Halogen.NotFluorine', 'Halogen.NotFluorine.Aromatic' ]), (Chem.MolFromSmiles("c1ccccc1F"), ['Halogen', 'Halogen.Aromatic']), (Chem.MolFromSmiles("CBr"), [ 'Halogen', 'Halogen.Aliphatic', 'Halogen.Bromine', 'Halogen.Bromine.Aliphatic', 'Halogen.NotFluorine', 'Halogen.NotFluorine.Aliphatic', ])] # test the normalized groups for mol, res in matches: hits = [name for name, pat in items if mol.HasSubstructMatch(pat)] self.assertEquals(hits, res) queryDefs = FilterCatalog.GetFlattenedFunctionalGroupHierarchy( normalized=True) items = sorted(queryDefs.items()) matches = [(Chem.MolFromSmiles("CCl"), [ 'halogen', 'halogen.aliphatic', 'halogen.notfluorine', 'halogen.notfluorine.aliphatic' ]), (Chem.MolFromSmiles("c1ccccc1Cl"), [ 'halogen', 'halogen.aromatic', 'halogen.notfluorine', 'halogen.notfluorine.aromatic' ]), (Chem.MolFromSmiles("c1ccccc1F"), ['halogen', 'halogen.aromatic']), (Chem.MolFromSmiles("CBr"), [ 'halogen', 'halogen.aliphatic', 'halogen.bromine', 'halogen.bromine.aliphatic', 'halogen.notfluorine', 'halogen.notfluorine.aliphatic', ])] for mol, res in matches: hits = [name for name, pat in items if mol.HasSubstructMatch(pat)] self.assertEquals(hits, res)
def test17bAddRecursiveQueriesToReaction(self): from rdkit.Chem import FilterCatalog rxn = rdChemReactions.ReactionFromSmarts("[C:1][O:2].[N:3]>>[C:1][N:2]") self.assertTrue(rxn) rxn.Initialize() rxn.GetReactantTemplate(0).GetAtomWithIdx(0).SetProp('query', 'carboxylicacid') querydefs = {k.lower(): v for k, v in FilterCatalog.GetFlattenedFunctionalGroupHierarchy().items()} self.assertTrue('CarboxylicAcid' in FilterCatalog.GetFlattenedFunctionalGroupHierarchy()) rxn.AddRecursiveQueriesToReaction(querydefs, 'query') q = rxn.GetReactantTemplate(0) m = Chem.MolFromSmiles('C(=O)[O-].N') self.assertTrue(m.HasSubstructMatch(q)) m = Chem.MolFromSmiles('C.N') self.assertFalse(m.HasSubstructMatch(q))