def zinc_molecule_filter(mol): """ Flags molecules based on problematic functional groups as provided set of ZINC rules from http://blaster.docking.org/filtering/rules_default.txt. :param mol: rdkit mol object :return: Returns True if molecule is okay (ie does not match any of therules), False if otherwise """ params = FilterCatalogParams() params.AddCatalog(FilterCatalogParams.FilterCatalogs.ZINC) catalog = FilterCatalog(params) return not catalog.HasMatch(mol)
def init(): global catalog params = FilterCatalogParams() params.AddCatalog(FilterCatalogParams.FilterCatalogs.PAINS_A) params.AddCatalog(FilterCatalogParams.FilterCatalogs.PAINS_B) params.AddCatalog(FilterCatalogParams.FilterCatalogs.PAINS_C) catalog = FilterCatalog(params)
# https://www.rdkit.org/docs/source/rdkit.Chem.rdfiltercatalog.html import pandas as pd from rdkit import Chem from rdkit.Chem.FilterCatalog import FilterCatalog, FilterCatalogParams from rdkit.Chem import Draw # from rdkit.Chem.Draw import IPythonConsole # Read list with SMARTS for PAINS pains_list = pd.read_csv("../pains/wehi_pains.csv", header=None) pains_list.columns = ["SMARTS", "ID"] # initialize filter params = FilterCatalogParams() params.AddCatalog(FilterCatalogParams.FilterCatalogs.PAINS) catalog = FilterCatalog(params) def pass_pains(smiles): # Returns True if mol has no PAINS substructures mol = Chem.MolFromSmiles(smiles) entry = catalog.GetFirstMatch(mol) # Get first matching PAINS # entry.GetDescription().capitalize() if entry: return False return True def pains_highlight(smiles): # Returns image of molecule with PAINS highlighted # Note: maybe some SMARTS strings will throw errors: https://github.com/rdkit/rdkit/issues/3912