{ "cells": [ { "cell_type": "markdown", "id": "dce99f55", "metadata": {}, "source": [ "# Molecular filters" ] }, { "cell_type": "markdown", "id": "9ef0cf7f", "metadata": {}, "source": [ "Molecular filters are predefined sets of conditions, used to remove unwanted molecules, e.g. too large ones. scikit-fingerprints implements many molecular filters, designed for different applications.\n", "\n", "They are generally divided into two types, depending on what they use for defining filter conditions:\n", "1. **Physicochemical properties** - define allowed numerical ranges of properties like molecular weight, formal charge, or number of rings. A molecule fulfills the filter condition and is kept if all its properties are contained in those ranges.\n", "2. **Molecular substructures** - define unwanted substructures, functional groups, toxicity-inducing patterns etc. A molecule fulfills the filter condition and is kept if it does not contain any of the substructures.\n", "\n", "Physicochemical properties filters can therefore be thought of as \"inclusion\" filters, and substructure filters as \"exclusion\" filters.\n", "\n", "Let's see some examples of both." ] }, { "cell_type": "markdown", "id": "0b23e770", "metadata": {}, "source": [ "## Physicochemical filters" ] }, { "cell_type": "markdown", "id": "e2526029", "metadata": {}, "source": [ "Let's see a few examples of physicochemical filters:\n", "\n", "1. **Molecular weight** ([docs](https://scikit-fingerprints.readthedocs.io/latest/modules/generated/skfp.filters.MolecularWeightFilter.html#skfp.filters.MolecularWeightFilter)):\n", " - simply checks if a total molecular mass is inside a given range\n", " - by default, the range is $[0, 1000]$, corresponding roughly to most small molecules\n", "2. **Lipinski Rule of 5** ([docs](https://scikit-fingerprints.readthedocs.io/latest/modules/generated/skfp.filters.LipinskiFilter.html#skfp.filters.LipinskiFilter)):\n", " - one of the most famous molecular filters, checking for oral bioavailability\n", " - tries to select molecules that are small and lipophilic\n", " - by default, allows breaking one rule\n", " - molecular weight $\\leq 500$\n", " - number of hydrogen bond acceptors (HBA) $\\leq 10$\n", " - number of hydrogen bond donors (HBD) $\\leq 5$\n", " - logP $\\leq 5$\n", "3. **Beyond Rule of 5** ([docs](https://scikit-fingerprints.readthedocs.io/latest/modules/generated/skfp.filters.BeyondRo5Filter.html#skfp.filters.BeyondRo5Filter)):\n", " - designed to cover novel orally bioavailable drugs\n", " - less strict than Lipinski filter\n", " - molecular weight $\\leq 1000$\n", " - logP in range $[−2, 10]$\n", " - HBA $\\leq 15$\n", " - HBD $\\leq 6$\n", " - topological polar surface area (TPSA) $\\leq 250$\n", " - number of rotatable bonds $\\leq 20$\n", "4. **Rule of 3** ([docs](https://scikit-fingerprints.readthedocs.io/latest/modules/generated/skfp.filters.RuleOfThreeFilter.html#skfp.filters.RuleOfThreeFilter)):\n", " - optimised to search for fragment-based lead-like compounds with desired properties\n", " - there is also an extended rule, including TPSA and rotatable bonds conditions\n", " - molecular weight $\\leq 300$\n", " - HBA $\\leq 3$\n", " - HBD $\\leq 3$\n", " - logP $\\leq 3$\n", " - extended rules: TPSA $\\leq 60$, number of rotatable bonds $\\leq 3$\n", "\n", "All filters include the `allow_one_violation` argument. If True, molecules still pass the filter even if one of their physicochemical properties falls outside the defined range. Vast majority of filters have default value False for this parameter, except for Lipinski filter." ] }, { "cell_type": "code", "execution_count": 1, "id": "116b5e59", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ ":241: RuntimeWarning: to-Python converter for boost::shared_ptr already registered; second conversion method ignored.\n" ] } ], "source": [ "import pandas as pd\n", "from rdkit import Chem\n", "\n", "from skfp.filters import (\n", " BeyondRo5Filter,\n", " LipinskiFilter,\n", " MolecularWeightFilter,\n", " RuleOfThreeFilter,\n", ")" ] }, { "cell_type": "markdown", "id": "7cd0123e", "metadata": {}, "source": [ "For starters, let us prepare some example data." ] }, { "cell_type": "code", "execution_count": 2, "id": "0f8eefe0", "metadata": {}, "outputs": [], "source": [ "smiles = [\n", " \"CC(=O)OC1=CC=CC=C1C(=O)O\", # Aspirin\n", " \"CN1C=NC2=C1C(=O)N(C(=O)N2C)C\", # Caffeine\n", " \"CC(C)CC1=CC=C(C=C1)C(C)C(=O)\", # Ibuprofen\n", " \"C[C@H](CCC(=O)O)CC1=CC=CC=C1\", # Cholesterol\n", "]" ] }, { "cell_type": "code", "execution_count": 3, "id": "3137351a", "metadata": {}, "outputs": [], "source": [ "mw_filter = MolecularWeightFilter()\n", "lipinski_filter = LipinskiFilter()\n", "beyond_ro5_filter = BeyondRo5Filter()\n", "ro3_filter = RuleOfThreeFilter()" ] }, { "cell_type": "code", "execution_count": 4, "id": "ab862891", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['CC(=O)OC1=CC=CC=C1C(=O)O',\n", " 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C',\n", " 'CC(C)CC1=CC=C(C=C1)C(C)C(=O)',\n", " 'C[C@H](CCC(=O)O)CC1=CC=CC=C1']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mw_filtered_smiles = mw_filter.transform(smiles)\n", "mw_filtered_smiles" ] }, { "cell_type": "code", "execution_count": 5, "id": "93f94568", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['CC(=O)OC1=CC=CC=C1C(=O)O',\n", " 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C',\n", " 'CC(C)CC1=CC=C(C=C1)C(C)C(=O)',\n", " 'C[C@H](CCC(=O)O)CC1=CC=CC=C1']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lipinski_filtered_smiles = lipinski_filter.transform(smiles)\n", "lipinski_filtered_smiles" ] }, { "cell_type": "code", "execution_count": 6, "id": "cab9fc95", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['CC(=O)OC1=CC=CC=C1C(=O)O',\n", " 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C',\n", " 'CC(C)CC1=CC=C(C=C1)C(C)C(=O)',\n", " 'C[C@H](CCC(=O)O)CC1=CC=CC=C1']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beyond_ro5_filtered_smiles = beyond_ro5_filter.transform(smiles)\n", "beyond_ro5_filtered_smiles" ] }, { "cell_type": "code", "execution_count": 7, "id": "19a21c0e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['CC(=O)OC1=CC=CC=C1C(=O)O', 'C[C@H](CCC(=O)O)CC1=CC=CC=C1']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ro3_filtered_smiles = ro3_filter.transform(smiles)\n", "ro3_filtered_smiles" ] }, { "cell_type": "markdown", "id": "9626c9b6", "metadata": {}, "source": [ "By default, filters return a subset of molecules. Alternatively, by setting `return_indicators=True`, they can return a vector of booleans, with True value corresponding to molecules fulfilling the filter rules. This allows more sophisticated analyzes of results, e.g. by saving the results in a dataframe." ] }, { "cell_type": "code", "execution_count": 8, "id": "02a47287", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/jakub/PycharmProjects/scikit-fingerprints/skfp/bases/base_filter.py:109: UserWarning: return_indicators is deprecated and will be removed in 2.0, use return_type instead\n", " warnings.warn(\n" ] } ], "source": [ "mw_mask = MolecularWeightFilter(return_indicators=True)\n", "lipinski_mask = LipinskiFilter(return_indicators=True)\n", "beyond_ro5_mask = BeyondRo5Filter(return_indicators=True)\n", "ro3_mask = RuleOfThreeFilter(return_indicators=True)" ] }, { "cell_type": "code", "execution_count": 9, "id": "4d53f1e4", "metadata": {}, "outputs": [], "source": [ "data = [\n", " {\"name\": \"Aspirin\", \"smiles\": \"CC(=O)OC1=CC=CC=C1C(=O)O\"},\n", " {\"name\": \"Caffeine\", \"smiles\": \"CN1C=NC2=C1C(=O)N(C(=O)N2C)C\"},\n", " {\"name\": \"Ibuprofen\", \"smiles\": \"CC(C)CC1=CC=C(C=C1)C(C)C(=O)O\"},\n", " {\"name\": \"Cholesterol\", \"smiles\": \"C[C@H](CCC(=O)O)CC1=CC=CC=C1\"},\n", " {\"name\": \"Glucose\", \"smiles\": \"C(C1C(C(C(C(O1)O)O)O)O)O\"},\n", "]\n", "\n", "df = pd.DataFrame(data)" ] }, { "cell_type": "code", "execution_count": 10, "id": "307f6e05", "metadata": {}, "outputs": [], "source": [ "df[\"mw_filter_pass\"] = mw_mask.transform(df[\"smiles\"])\n", "df[\"lipinski_filter_pass\"] = lipinski_mask.transform(df[\"smiles\"])\n", "df[\"beyond_rule_of_5_pass\"] = beyond_ro5_mask.transform(df[\"smiles\"])\n", "df[\"rule_of_3_pass\"] = ro3_mask.transform(df[\"smiles\"])" ] }, { "cell_type": "code", "execution_count": 11, "id": "11970880", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesmilesmw_filter_passlipinski_filter_passbeyond_rule_of_5_passrule_of_3_pass
0AspirinCC(=O)OC1=CC=CC=C1C(=O)OTrueTrueTrueTrue
1CaffeineCN1C=NC2=C1C(=O)N(C(=O)N2C)CTrueTrueTrueFalse
2IbuprofenCC(C)CC1=CC=C(C=C1)C(C)C(=O)OTrueTrueTrueFalse
3CholesterolC[C@H](CCC(=O)O)CC1=CC=CC=C1TrueTrueTrueTrue
4GlucoseC(C1C(C(C(C(O1)O)O)O)O)OTrueTrueFalseFalse
\n", "
" ], "text/plain": [ " name smiles mw_filter_pass \\\n", "0 Aspirin CC(=O)OC1=CC=CC=C1C(=O)O True \n", "1 Caffeine CN1C=NC2=C1C(=O)N(C(=O)N2C)C True \n", "2 Ibuprofen CC(C)CC1=CC=C(C=C1)C(C)C(=O)O True \n", "3 Cholesterol C[C@H](CCC(=O)O)CC1=CC=CC=C1 True \n", "4 Glucose C(C1C(C(C(C(O1)O)O)O)O)O True \n", "\n", " lipinski_filter_pass beyond_rule_of_5_pass rule_of_3_pass \n", "0 True True True \n", "1 True True False \n", "2 True True False \n", "3 True True True \n", "4 True False False " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "id": "f24f3503", "metadata": {}, "source": [ "## Substructural filters" ] }, { "cell_type": "markdown", "id": "a581bb4f-ba1e-4d96-afcc-c219afd442ac", "metadata": {}, "source": [ "Substructural filters use sets of SMARTS patterns to define unwanted substructures. An example is Brenk filter ([docs](https://scikit-fingerprints.readthedocs.io/latest/modules/generated/skfp.filters.BrenkFilter.html)), designed to filter out molecules containing substructures with undesirable pharmacokinetics or toxicity, e.g. sulfates, phosphates, nitro groups. Other filters from this group often work based on similar principles, but differing in how aggressively they filter the molecules." ] }, { "cell_type": "code", "execution_count": 12, "id": "b0285ab1", "metadata": { "scrolled": true }, "outputs": [], "source": [ "from skfp.filters import BrenkFilter\n", "\n", "brenk_filter = BrenkFilter()" ] }, { "cell_type": "markdown", "id": "9af3ce4f", "metadata": {}, "source": [ "Meanings of filter conditions are available through `.get_feature_names_out()` method. Generally, they are interpretable names given by creators, rather than raw SMARTS patterns." ] }, { "cell_type": "code", "execution_count": 13, "id": "94b2989e-f6ac-46a7-b1d6-17662b8a4579", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array(['>_2_ester_groups', '2-halo_pyridine', 'acid_halide',\n", " 'acyclic_C=C-O', 'acyl_cyanide', 'acyl_hydrazine', 'aldehyde',\n", " 'Aliphatic_long_chain', 'alkyl_halide', 'amidotetrazole',\n", " 'aniline', 'azepane', 'Azido_group', 'Azo_group', 'azocane',\n", " 'benzidine', 'beta-keto/anhydride', 'biotin_analogue',\n", " 'Carbo_cation/anion', 'catechol', 'charged_oxygen_or_sulfur_atoms',\n", " 'chinone_1', 'chinone_2', 'conjugated_nitrile_group',\n", " 'crown_ether', 'cumarine', 'cyanamide',\n", " 'cyanate_/aminonitrile_/thiocyanate', 'cyanohydrins',\n", " 'cycloheptane_1', 'cycloheptane_2', 'cyclooctane_1',\n", " 'cyclooctane_2', 'diaminobenzene_1', 'diaminobenzene_2',\n", " 'diaminobenzene_3', 'diazo_group', 'diketo_group', 'disulphide',\n", " 'enamine', 'ester_of_HOBT', 'four_member_lactones',\n", " 'halogenated_ring_1', 'halogenated_ring_2', 'heavy_metal',\n", " 'het-C-het_not_in_ring', 'hydantoin', 'hydrazine', 'hydroquinone',\n", " 'hydroxamic_acid', 'imine_1', 'imine_2', 'iodine', 'isocyanate',\n", " 'isolated_alkene', 'ketene', 'methylidene-1,3-dithiole',\n", " 'Michael_acceptor_1', 'Michael_acceptor_2', 'Michael_acceptor_3',\n", " 'Michael_acceptor_4', 'Michael_acceptor_5', 'N_oxide',\n", " 'N-acyl-2-amino-5-mercapto-1,3,4-_thiadiazole', 'N-C-halo',\n", " 'N-halo', 'N-hydroxyl_pyridine', 'nitro_group', 'N-nitroso',\n", " 'oxime_1', 'oxime_2', 'Oxygen-nitrogen_single_bond',\n", " 'Perfluorinated_chain', 'peroxide', 'phenol_ester',\n", " 'phenyl_carbonate', 'phosphor', 'phthalimide',\n", " 'Polycyclic_aromatic_hydrocarbon_1',\n", " 'Polycyclic_aromatic_hydrocarbon_2',\n", " 'Polycyclic_aromatic_hydrocarbon_3', 'polyene',\n", " 'quaternary_nitrogen_1', 'quaternary_nitrogen_2',\n", " 'quaternary_nitrogen_3', 'saponine_derivative', 'silicon_halogen',\n", " 'stilbene', 'sulfinic_acid', 'Sulfonic_acid_1', 'Sulfonic_acid_2',\n", " 'sulfonyl_cyanide', 'sulfur_oxygen_single_bond', 'sulphate',\n", " 'sulphur_nitrogen_single_bond', 'Thiobenzothiazole_1',\n", " 'thiobenzothiazole_2', 'Thiocarbonyl_group', 'thioester',\n", " 'thiol_1', 'thiol_2', 'Three-membered_heterocycle', 'triflate',\n", " 'triphenyl_methyl-silyl', 'triple_bond'], dtype='_2_ester_groups\", \"C(=O)O[C,H1].C(=O)O[C,H1].C(=O)O[C,H1]\"),\n", " (\"2-halo_pyridine\", \"n1c([F,Cl,Br,I])cccc1\"),\n", " (\"acid_halide\", \"C(=O)[Cl,Br,I,F]\"),\n", " (\"acyclic_C=C-O\", \"C=[C!r]O\"),\n", " (\"acyl_cyanide\", \"N#CC(=O)\"),\n", " (\"acyl_hydrazine\", \"C(=O)N[NH2]\"),\n", " (\"aldehyde\", \"[CH1](=O)\"),\n", " (\"Aliphatic_long_chain\", \"[R0;D2][R0;D2][R0;D2][R0;D2]\"),\n", "]" ] }, { "cell_type": "code", "execution_count": 86, "id": "742259d1", "metadata": {}, "outputs": [ { "data": { "image/png": "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UqdOnXfeeUdRlM8++8zR0fH//u//rKys1M+/vn375uTkqJPZuXOnvb29ubl5vXr1TExM3n///bL7nwA8vuXLl9esWdPKyko9uRw0aJBer1cU5Z///GeNGjUKhi1evNjGxsbU1NTe3l79/f/nP/+pPrV///5GjRqZmZnZ2trqdDr1w1TtHuHt7e3o6Ghvb29paVmnTp2DBw8qipKbm9uoUaOJEycWHPzevXvm5ubLly9XFOXq1atdunQREVtbWzXv2draqsPS0tJGjBghInZ2dqampo6OjlevXq2gHxO0ISUlxcrK6oMPPsjLy2vSpEnhM0MzM7OPP/5YUZS33367Xr16iqKo9wm9vb2trKxcXV3Vv/zBwcGKoqxZs0ZEJk2aVLt27WeeecbKysrR0TExMVFRlNzc3Pbt21tZWT3zzDONGzc2MzPz8/NTX6JRo0aWlpY6na5evXr16tWbP3++WraalJSkKEpOTs748eNFpFmzZvb29lZWVmvXri3he/nkk08KokRGRsaQIUNExNHR0c7OzszM7IsvvlCfatCggY+PT8uWLR0dHZs2bVqjRg1/f3/1qZycHPWc2d7evk2bNur7cc2aNSX/DLOzs8eNG6fO087OzsrKat26dceOHRORcePGqT+Q2rVr29vbR0REqF8yZMgQMzOzNm3aODo66nS6uXPnqo8/88wzEyZMUBTF39+/du3a77zzjo2NzTPPPGNpaeni4qKeHmsBgfDx7dixQ33/ZGRkvPjiiw4ODurjX375pYgsX748Ly8vPT397bff3rt3r6IokydPbtSoUW5urjpswYIFNWvWTE1NLU0gNBgMnTt3btq06fnz5xVFuXTp0pQpU+Li4tSc6evrWzDSw8ND/c2Oj4//+eef1Ze7dOmStbW1+tu/bt06EenTp090dLSiKMePH9fpdGrSKxwI165dq54TZ2ZmKopy69atgkAYGRlpZWU1YsSItLQ0RVHef/99ExOTixcvltUPFnjQ9u3b1c6f6enpffr0adq0qfq4+mm0YsUKg8GQlpY2d+5c9XRw7NixzZs3NxgMBcNq166dmZlZ+kA4dOjQO3fuKIqye/duEVm5cqX66rVq1Xr77bcLBru5uU2aNEn5X1acM2eO+paJjY0tHAhF5P33309ISIiKilIUJTo6+tChQ3l5eYqinD592szM7N///neRaXzxxRdmZmbqB3/hQKieHCQkJCiKol4S+uGHHxRFuXnzZs2aNYcOHZqamqooygcffKDT6dS/GEDlunz5csGFy59//llEAgIClD8Gwk2bNonIG2+8oV5eSUpKKgiE8fHxderU6d+/v/pH4IsvvhCREydOqIGwQYMG6odscnKyq6trjx491AP6+vra2NioR1MUZcWKFaampnFxcXq93tnZuVWrVqGhoYqi5ObmTpkypSAQzpw508LCYt++fYqiREdHOzg4eHt7V9CPCdqgnl+Fh4crivLmm2/Wr1+/4KLewwJhq1atIiMjFUWJi4tzdXVt3bp1bm6uGghHjRqlvi/OnTtnYmKifugoihIcHKz+8hsMhilTplhaWqanp6tPvfvuu5aWlgXzKRwI1TfX/7d350FNHu8DwDfkICDIIUc4DII15VCqWMADsUrBo4w6VSuHB6JIraIW70r96tSilipQlFGnM9ZWhODJUcU6oxUPBFQYkGDktFAHhRKOBHLv74/9+c7bBBAUe/F8/iLvvpv3JZN93/fJ7j77448/koqHDx++c+dOH/8LPSDcsWMHk8m8fPkyxlij0WzatInBYOTn52OMbWxsLCwsyN1Zo9HMnTvXxsaG1Nq7dy91QcAYV1VV9ScgPHjwIEKIBKtarfbbb7+9e/cuCQhJbyr5rMzMzKKiokiV0tJS8kFhjOPj4xkMxuPHj/GfA0IST5IgsLi4GCH03Xff9X0m/xkQEA6O1NRUhNCLFy8wxl5eXn5+fvr7kLsguc1gjH19fUNDQzHG/QkIRSIRQig1NVW/aMWKFVScSbpBcnNz9Xfz9/cPCAjALwNCevxmb2+/evVq/OeA0MvLa9y4ceSBFWNMMvWTgDApKYnBYJB4EmMskUgYDEZ8fHzf/wIAg4UEbOTu5eHhMXPmTP19srKyEELUnczT0zMyMhJj3P+AkESDGGOtVsvlcrdu3UpehoeHjxw5kjQNMvgkLy8PY+zt7e3h4UE1GTIIjQoI+Xx+H0f08PDQeeh8+PAhh8M5cOAAeakTEJKQD2OsVCoZDMbevXsxxikpKQihuro6UtTR0cFkMqkOFgD+OaysrGJiYvCfA0I/Pz+BQED9ZkpyHpIv8MmTJxFCZWVlpEipVJImSQLCr776inrn9evXk8dojHFhYSFC6Ny5c+RlUFDQ3Llz8cvI89KlS1StmJgYKiC0tLRcuXIlVbR582YOh0O1awDe3EcffTRu3Djy9/379xFCJIjCvQeEiYmJVHWSYEwkEpGAsKqqiiri8XhU/ENHvvPU74N9BIS+vr5Tpkzp//9CDwgFAkFwcDBV1NXVZWpqSvo/bWxsPv30U6qIdJy0tbVptVoej0caJkHyab8yIPTx8Zk6darORhIQXrlyhdri5+c3Y8YM/eqlpaUIoYsXL2K9gLChoYHazdzcnFyphgJIKvP6Hjx4sHz5ck9PT1tb261btyKEyCNgdXU1meCnIyAgwN7ePj09HSH022+/FRUVkf7u/iAtZPz48fpF4eHhTU1NN2/eRAhlZGSYm5sHBgYihDDGp06dCgwMdHV1tbS0LCgooE+TIBOiCDLniv6eGOPy8nI/Pz/63CQKufrw+XwGg0FGHWCM3zzxMQB9KC4uXrZsGWluJL2KVCrVarU1NTU9Nrc5c+aMGDGCNDexWFxWVtb/5kZQbYTBYHC5XKVSSV6GhYU1NDSQG49QKLS2tibrWJSVlU2ZMqXHJoMQouZmEGq1+tixYzNnzhwzZoylpaVYLKY3T7lcvmLFCl9f3y1btvR9bmw2m8lkknMjVwkyo5jBYAwfPlyj0UDDBP8E3d3diYmJ/v7+Li4ulpaWra2t+tP2ysrKJk+eTL83Uch329PTk3y3ORyOXC6nvtv0KkZGRtTtzMfHRyAQZGRkIIRaWlquX79OLgJlZWUIoWnTpukfqLW1tbW19eTJk4yXDh06pFQqnz9//uYfAgAIodbW1mvXrmk0mujo6Ojo6BMnTrDZ7N5Sy1DokwYFAgFCqK6ujrykUkgghAwNDanVI+7evbtgwQJHR0c2m71w4UKEUFdX1ytPr6amxsPDY4D/E0IIaTSauro6el0yhJVaMIl+nmRcqEqlam1tbWpq8vX1Hejh+jjP3j6QysrKZcuWjRo1isvlksfpHj+Q3qr/50FSmddUVFQ0ffr0wMDAffv28Xi8y5cvk15vhBCTydRqtfpVDAwMFi9efOrUqaNHj5LIbdasWf08HHma1Gg0+kUBAQEODg4ZGRkzZ84UCoWLFy8mLe2LL744fPjwzp07/f39zczMYmJiejyrPo5oaGjYYxGbzTY2Ni4vL6dvHFB2HAAGpKCgYMaMGbNnz/76669tbW1zcnL27duHEDIwMGCxWD1+sdls9qJFi4RCYWJiYkZGho2NzQcffDAoJxMUFGRra5uenj5t2rTMzMxPPvmENE82m83lcvv5JuvWrTt9+vSXX345adIkU1PT5cuX00tjY2MbGhpyc3N7fDjuDZvNNjQ0rKiooN/PoGGCf4KwsLD8/Pzdu3ePHz/exMQkODhYf58+WhCbzWYwGCKRiJ7fxdjY+JXHDQ0NPXjwYHt7+/nz51ks1rx589DL+2mPxyJF27dvX7NmDX07NacRgDd04cIFlUrl5uYmkUjIlgkTJly6dEkqlfbzck1GU/d9uyktLQ0ICAgODk5LS3NwcLh58+bq1av78+ZGRkZyubw/e+pgMplcLlenbnd3d9/t1MjIiMFg9PZDat8VB3SeTU1N06dPd3NzO3HihJOTU0NDA+k7ARQICF9TRkaGoaHhxYsXyRMbGdJJuLq6FhQUYIzpj2VEeHh4cnLy1atXhULhokWL+p+7jGRDKigo8PPz0ymi4syYmJiysrLk5GSy/dSpUxEREXv27CEvzczMqKvPKzEYDBcXF9KlTtDTHwsEgq6uLrlc7u7u3s83BOBNpKenm5iYXLhwgdw2yA/8hEAgKCgo6LFWWFjY8ePHb9y4kZmZGRISotNH99pYLBYJNaOioioqKsggE4RQH01Gh1qt/umnnzZu3EitJEH/9TcvL+/YsWNnzpwZaI5QgUCgUChkMpmnp+eAKgLwVkkkkqysrEOHDm3cuJFs6fHe10cLIrMq/vjjj6lTp9KrvPKJcOnSpXv37s3OzhYKhfPmzSN5hska9CUlJdS7UZ2Nw4cPt7Ozq66u1sliCsBgSU9P9/b2PnfuHLXl6dOnzs7OWVlZ9LUB+5Cbm2toaOjl5UWSO/QoJydHrVafPn2a/LJfWVlJL2WxWGQUtP5jqru7+507d9Rq9WvcMV1dXW/fvk29bGxsrKurW7JkSR9VjI2N7ezsyLhZgswhfKWBnueNGzeam5tv3bpFHqcH1EEyRMCQ0ddkYmLS3d0tFos1Gs3t27dJfwURHR1dWlq6Y8eOFy9edHZ2Xr16lQoXvb29BQLB/v37Hz58GBIS0v/Dubi4BAYGHjhwIDs7u7u7+/fffz958iTGmJSGhYVJJJI1a9bY29v7+/tTZygWi7u6ujo7O1NSUq5fvz6gfzA0NPTXX39NTU2VyWQikWjlypVU0eLFi0eMGBEZGVlRUaFQKJ48eZKQkEANqANg0JmYmMhksidPnqjV6vz8/Pj4eKooOjq6qKgoLi6uubm5o6PjypUr1Fqa06ZN4/P5u3fvFolEA2purxQeHt7S0vLZZ5/x+XySOxQhFBoaeuvWrSNHjkil0srKyoiIiN6qM5lMIyMjkUikVCrb2tri4+MfPnxIipqamlasWDFr1iwfH5/a2tra2tr+j/lcuHChtbX16tWrHz16pFAoqqqqEhISXu+3XgAGEZfLZbFY5eXlGo2mubl527ZtPf5cEhoaWlhYmJiYKJVKxWIxScVEBAcHOzo6rl27tqSkRKFQ1NTUHD58uKOj45WHfuedd7y9vVNSUvLz86mLwOzZsy0sLGJjY6uqqmQyWVJSUnZ2NlUlOjr64sWLqamp7e3tEonk8uXLP//88xt/BgAghBCZ4KMTIzk5OU2ePLnvUaOVlZVisbiqqmrPnj0//PDD559/bm5u3sf+1tbWarX62rVr7e3teXl5GzZsoJe6ubmpVKrvv/++tLS0vr6eXhQTE1NbWxsZGfno0aP6+nqhUKif+7o369evf/DgQWxsbHV1dXFxcWhoqKGh4apVq/quFRERkZOTk5SU9PTp019++SU6Oro/x9qwYUNNTc2qVavIeWZkZJA5w70hi81cvXpVKpXeuXOHfnkB/+9vm734L9fc3ExmLnG5XAcHB9IvV1tbS0oTEhKotmpnZ3f+/Hmq4v/+9z+ykZo6389lJ1paWhYsWEANIZs0aRKV9AJjTH7ziI2Npbbk5uaamZmRKUZBQUFRUVG+vr74ZVIZsVhM7eni4rJs2TL856QySqVy7dq15HdcNpsdFxfH5/OpZScKCwup7kEDA4OgoCAqxwwAg+758+dkzRUul+vo6JiYmIgQIl85rVYbHx9PLTXm4OCQnZ1NVdy+fTtCyMnJiUo32v+kMiSNJ2Fubk7P5avVakkHAn1lC6VSuW7dOtJkWCzWzp07nZ2dqaQyLi4u9EOkpaUZGxtzOBwDA4OPP/44JCSEzKpPSkrSuUSTbDQ6SWWoxIkYYxaLtWvXLulg9KgAAAYSSURBVPL3/fv3x44dSzXMDz/8kCSmA+DvlZKSwuFwyCC3yMjIOXPmkMQt9KQyarV648aNpEODyWRu2bLl3XffpbIilZeXe3l5ke82g8GYPn26WCwmSWXoKc22bt1qbGxMPzS5XJAkw9TGmzdvkn5ChJCHh8eWLVuopDIqlWrz5s3UjAkej5eUlPRWPxwwdCQnJzMYDP3L8tGjR1ksVlNTk5GREfnOb9++3draGr9MKkONJuXxeAcOHCD9eySpDH1ZFCcnp4iICIyxXC6fP38+qeLs7Hzu3DkGg0FyVmOMVSpVaGgoi8ViMpnJycnHjx9nMplUBs60tDSyUqiBgYGbmxs9/ZK+/fv3s1gs6uWRI0d4PB457oQJE6i8bjY2NmvXrqV2o99kFQrFhg0byDMzj8eLi4tD/Ugqo3Oe7u7uWVlZZG4/SfNGBAQEkCyPWq123bp1ZJCRlZVVWlqatbV1WloaxtjT05OsT0PG+5AMpYStrS09F85/GwO/7GUCA6XRaEQikVwuf++999hsdltbm5mZGTUSWq1WNzY2UssuUVQq1bhx4+bMmUPuUgihrq4ujUZjamqqUql66w2gbl2dnZ3Nzc06K24jhO7duzd58uSioiJvb29qY0dHh0gkGjFixJgxYxQKhVKpNDU1VSqVMpls+PDhVGzZ3t7OYrGGDRsml8sVCgV9GV+VSlVbW8vj8czMzDo7O3XmeDQ0NJBVhnVOBoBBp9FoSI/0+PHjWSxWj82NLBtIr6VUKgUCQVhYGNWp2NXVpdVqTUxMFApFj+NtDAwM7O3tu7q6zM3NqeE0bW1tHA6HPhfi1q1b/v7+JSUlOqmeSJOxtbU1NzenmoxMJlOr1fSWhRCSSCSPHz/m8XjOzs5yuVytVpOz0pnmbmBgYGZm1t7ebmhoSGZodHd3089NIpFwuVz64rmNjY0dHR18Ph8mEIJ/jubm5qqqKj6f7+jo2N3drdVqhw0bplAo5HK5zk2nrq7O2trawsJCKpWyWCz6TefZs2cSiYTP55uamiKEMMZtbW1GRkbUPt3d3QqFgt55olarp06d6u7uTlKV0j1//ryzs3P06NFqtVomk9FryWSy+vp6CwsLHo/3GhOcABgsjY2NI0eOPHHixNKlS6VSqZWVlf44z960tLR0dHSMGjWqx+8wSVLNZrN7rCuTyTgcDimVSqUVFRX6+7BYrIkTJ+psxBg3NzdzuVwyQrv/JBKJhYWFWCx2dXVNT08PCQkRi8VtbW36ezo5OVFhJ/08X6m9vf3FixfOzs6DNYXkvwQCwr/a48eP3dzcdCI3gjSDHmtpNJq+70m7du0SCoVVVVX9v1IA8J93//59b2/v8vJyqt+MUlxc7OPjo19l2LBh+vkP9W3bti0nJ0dnYgYA4J+moaFh1KhReXl5kEMC/BtRAWFUVNTfdQ6ky0F/+/Dhw8maZIMoOzt7/vz5hYWFPj4+s2bNIgu26UhMTNy0adPgHhdAiPxXO3PmzOjRo99//339ImdnZ3q2DLpX/kKZmZkZHh4O0SAAdEKh0N3dXT8aRAiNHTu2x+bWn8SeGOOzZ89GRkYOwikCAN6mzMxMKyurGTNm/N0nAsC/1cSJE589e6a/fVA6zxMSEkQi0fz58+3t7evr6+Pi4gQCwYQJExBC6enpOouiETrDbcCggIDwr3b27NmwsLAeIzcOh0MmSg1UcXFxdXV136mcABhqSNjW2wx1IyOj12tuCKF79+7V19cPbqIaAMDbIBQKlyxZAiPEwL+UgYGBhYVFb8uA/TXYbLadnd1benNvb++SkpLNmzc/e/bM1tbW19f3m2++IUNALS0t39JBgT4YMgoAAAAAAAAAQxRMlQYAAAAAAACAIQoCQgAAAAAAAAAYoiAgBAAAAAAAAIAhCgJCAAAAAAAAABiiICAEAAAAAAAAgCEKAkIAAAAAAAAAGKIgIAQAAAAAAACAIQoCQgAAAAAAAAAYoiAgBAAAAAAAAIAhCgJCAAAAAAAAABiiICAEAAAAAAAAgCEKAkIAAAAAAAAAGKIgIAQAAAAAAACAIQoCQgAAAAAAAAAYov4PO8bDL+oJjwcAAAEselRYdHJka2l0UEtMIHJka2l0IDIwMjQuMDkuNQAAeJx7v2/tPQYgEABiJgYI4AFiTiBuYGQT0AAJMElyAEnHkvzckMqCVEUpNqhCGQZtDuwqOJBVgDm4FTBAFbBBFfgXycsw4bKQCyru4ZxfmleiKMWIMGfUsbRyLDcDowSTJChJOOXnpfgXpaQWOaLwFKWYkGxlEpAUATKDM/PSc1L9ixyL8nMTSzKTQarRtSFZwsRMljYWVhKcxsJGlh1s7GRp4+AkwWkcXGTZwcVNljaQFgbxWUACJsjA86BA0v76pWf7QJxvyX/tO49x24HYQPH9QHE7qPh+oPg+qLj9ti077WHq5QqZHGDqBfvFHGDqZ314aA9TL9gfBhO3v6JaA1f/WLEDrp55bRaYLQYAHY3ft3l0EqwAAAF7elRYdE1PTCByZGtpdCAyMDI0LjA5LjUAAHicnVPLboMwELzzFauc2qpYXj8W+8CBAE2jlkeAVIqqfkDv/X/VbpTYpCSHWFiyl9nR7M46Ab+G6u37B85LVEkCwG981lr4kJzzpAF/gHW92bZQTsX6FCm7fTuNgAIsSJd0AS2mrjlFEErgTFsrMwspZ0pzIzIX4n8rpAroAJnNLKGjZChJ+9//cNLh0jPjDUIFT5CeGdMblDrWiNcZKZYoGJcGtVrAZTOJgkktlBELQDOTiCwjjVovAG2sUF4nRB5LlMxKa7hdAuJMo2JCK5RLRTuTY5GSEZHBpTbWbTWz/jgM666twjAIv4Pl5K4yOEtuq+CfcM5QMInczoIX5PpsQsv9LGLUWfJ3DA0kXzOKWGws7Sh23Azdvg9yq2Jy4+2LGvMHBPUIu309HKZDX+djUwzTuDtGuj7P4WVbv1cupchXn+XzK36tQqUXTOZeJnnJhOJeKt+CecE+cnrn7pz8AkYZ3L60wFOtAAAAiXpUWHRTTUlMRVMgcmRraXQgMjAyNC4wOS41AAB4nE3MSwrDMAxF0a102Ab7YX1tETLqArKhLL6h4FgTIR7cs53f48S27ut6V0L0cCq1gcSt7PdjEdKjNKi1wb3sz1TXNsOnmwOhu5FniSHGOhJEf0cWw2gyKDsCdx+UHQWbkiZHpryqkLirz/UDNr4w+XcH72sAAAD+elRYdHJka2l0UEtMMSByZGtpdCAyMDI0LjA5LjUAAHice79v7T0GIBAAYiYGCGCH4gZG9gAOkIAkiHQsyc8NqSxIVZR6zwxRJ8OgzYZVwTuEAgYBiAI2qAL/InkZJtwcVHM4GWDmoIoL4hBXxiFuChcn7GA6KOBmYIzgkRQBcoIz89JzUv2LHIvycxNLMpOd8vNSHEG+BjH8i1JSixSlGBGOZ2QSIEsbM3nWMbOQp4+FlTx9rGzk6WNjIE+fCIjNxsDGysLMKB4HZMPkGNg9Jy3Z99Bt2X4QZ5JK536YhOcklQMMDA7LIGywGnsQO+/2NHsE+xuIVkMSB+sXAwBizqxCyTxhAwAAAPN6VFh0TU9MMSByZGtpdCAyMDI0LjA5LjUAAHicfVHLisMwDLz7K+YDEiPbiV0f8+gupdSBbraXZT+g0FPp/7NWSqqUBUsWWPZIHo0V2M7j8frAy+yoFECFFWPExRGROoE36Pefh4Rh7vr1ZJi+0/yFkJ3Y35HdPJ3WE4OEmrSzprERtdE2RnI7kKbFpNZi4HsKC1Lu/wEdfj6q4Vb19+rwi9rq9llSF2oabv6iUWDRZqDRJuxy0xLOL7hoF1zh4bDtVxp/n8Y34Z5S9lMaRUqfw4pePocTVThtZGCfo5WxPIewZw9CMicwWyrbhzlffz/v1R8CEHH7gmllAAAAAGZ6VFh0U01JTEVTMSByZGtpdCAyMDI0LjA5LjUAAHicTYyxDYAwDARXoQTkWH7HkbEyTnomyPBA4/DV6U76c2C8u7HNvSg3h1US6gUsycJVYRoE1ggx6mD41fwvQj8hq5WM6yDdMR9XqhmDDIBXQgAAAMZ6VFh0cmRraXRQS0wyIHJka2l0IDIwMjQuMDkuNQAAeJx7v2/tPQYgEABiJgYIYIayGxjZBDRAAkySHEDSsSQ/N6SyIFVRig2qUIZBmwO7Cg6ECgYBMEeSDarAv0hehgk3B9UcQbg5qOLKOMRNcYhzItzDzcAowSQJEnDKz0vxL0pJLXJE4SlKMSFUMzAJSIoAmcGZeek5qf5FjkX5uYklmckg1ejaGBHaQFoYxPWABEwQHKogYA8iHrotA9IN+6Ds/TC2GACCvT8dPgDSBAAAALR6VFh0TU9MMiByZGtpdCAyMDI0LjA5LjUAAHicjVBBCsIwELznFfOANmw3VMyxSaoUaQIavYgPEDyJ/8dEiW0PirMbmB1mYIhAxt7trg98wE4IgH6s1honRURiRCYw/XbwsLEzRbHh6OMBCpwSaZbOLoaxKA0sSNILibSFFKX4GAGNZK1JrVGT5PaLUeFsb5W5V0O1uaD+K9N7tyj1rmmCd1NNzm9qs0qnmufn7nyX70hcPAFRmUZQ207QygAAAEF6VFh0U01JTEVTMiByZGtpdCAyMDI0LjA5LjUAAHic03K29Veo0dA11DOytDQw0dE10DMy1bE20DHQA1Koopo1AOE5CYNeAREvAAAAzXpUWHRyZGtpdFBLTDMgcmRraXQgMjAyNC4wOS41AAB4nHu/b+09BiAQAGImBghghrIbGNkEMkACTEySHEDKsSQ/N6SyIFVRig2qUoZBm01AA6xEkh2qwjEvRU6GCZd6Lqi4Z15QZl66tKIUI8IoDgGQLgY0uzgQCrgZGCWYJDmBHKf8vBT/opTUIkcUnqIUE0I1I5OApAiQGQy0KCfVv8ixKD83sSQzGaQaXRuSK0BaGMT1gARMkIH5oduy/cDw2MeAAPYgAihuDxMXAwDZxjPBv59SJwAAAOt6VFh0TU9MMyByZGtpdCAyMDI0LjA5LjUAAHicjVBBasMwELzrFdMcSnuIWUukVAcdZEsJobXlSHIhlD4g9/yfrjCOnUJLFwmGYWZ2WIEy0b1drriNdEIA9MfTWuNDEZHoUAAafzj2aLNtZqYNY58TFCRq9vxQ2hy6manRYltXUmtSr9hSJXeczJaKaAKzUrJyYasd/aJTCPhXoO/dXZWpXBN6t5Qr/eXS4IW/WvvX6smfDjGMw5LgbOYLlD3JPHHYM06jj+d8HrxJnY05nSYmDMZgf/Tvji3WbD7bx4f4tVlvu88uzHx0xuIbADRfBPK9AW8AAABBelRYdFNNSUxFUzMgcmRraXQgMjAyNC4wOS41AAB4nHO2dfZXqNHQNdQzsrQ0MNHRNdAzMtWxNtAx0ANSqKKaNQDlsQmc5h2s4QAAAM16VFh0cmRraXRQS0w0IHJka2l0IDIwMjQuMDkuNQAAeJx7v2/tPQYgEABiJgYIYAFiZiBuYGQX0AAJMEtyAEnHkvzckMqCVEUpdqhCGQZtNuwq2DBUMOFWwYFdBQdCBTcDowSzJCeQ45Sfl+JflJJa5IjCU5RiRqhmZBKQFAEygzPz0nNS/Ysci/JzE0syk0Gq0bUxIrQxMUsw4beDCaEYZD6DuBWQgJnAwPIt+a995zHufSDOgwJJ++uXntlB2fuBbLA4UM1+oBqwuBgACvFElPT7DKUAAAC/elRYdE1PTDQgcmRraXQgMjAyNC4wOS41AAB4nH1Q0QqDMAx871fcDyhpU3V5VCtjDFvY3P5h7/t/Fje0CsO0gctx1yQ1mOMWrq831nDBGIAOrojgyURkRswA3XC+RPRT2y1Mnx5xusOD1aFnr2ynNC6MRYQtpZHaMgoqLdcVqaOkb2SrQ69sJcKNKPAVnVzzR8eqK1ZhcaD0SCjW3gethxh2M/+26FIMeQvWdHnWWpPzSFrAb5/bmud6+TzF5gP9f04J388GugAAAFp6VFh0U01JTEVTNCByZGtpdCAyMDI0LjA5LjUAAHic81N2drb1V6jRMNSzNLc0M9TRNdAzNDYz1bE20DO1tDQ2t9Qx0DMxNbAwMtex1oWL6SIJwnRCNWrWAADtURFq4aScNAAAAOV6VFh0cmRraXRQS0w1IHJka2l0IDIwMjQuMDkuNQAAeJx7v2/tPQYgEABiJgYIYAFiZiBuYGQT0AAJMElyAEnHkvzckMqCVEUpNqhCGQZtDuwqOBAq2AXAHDQF7EgKDCzARjBJskOVOOalyMkw4dLABRX3cM4vzStRlGJCGMXNwCjBJMkJ5Djl56X4F6WkFjmi8FBUMzAJSIoAmcGZeek5qf5FjkX5uYklmckg1ejaGBHamJjJ0gbSwiBuBSRgggwsDwok7a9femYH4nxL/mvfeYx7H4gNFN8PFN8HFd8PFAerEQMAyApQJPf2G6gAAAEDelRYdE1PTDUgcmRraXQgMjAyNC4wOS41AAB4nH1Ry26DMBC8+ytGOVTtIcgvoD5wAEzTqMUm2ESKon5A7/1/1S4lJq3EyiuNd3dmd22CaKN++/zCzbgmBKAbRymFs6CUkh4RoOkOR4PW180Sae1kvIOEAAucP5W1t/0SYWhBs1wpUaoAZE6feRkA/bHE5LBgmSpVwQT2NGOiyGP+X6GAiflfxf2GpIyVN80Nyc7ou5nnLRprdNqCR0/DFuEq0khFcLmWW5NnOXcY7TQkQV378HKxraseGeQTTlM3Xvxl6CrX16N3pzlih6rCy7F714FSV7ureXjlH7t1t3vtGFk+K2DyDZMracgrJVl8AAAAXHpUWHRTTUlMRVM1IHJka2l0IDIwMjQuMDkuNQAAeJyL9vMwivVztvVXqNHQNdSzNLc0M9Qx0DM0NjPVsdY10DO1tDQ2t9QBskxMDSyMzHWs4WIIIZg+XahGzRoASpgShKz+VvMAAACkelRYdHJka2l0UEtMNiByZGtpdCAyMDI0LjA5LjUAAHice79v7T0GIBAAYiYGCADRjEDcwMhmYAESYGSWZAdSjiX5uY55KXIyTBxQXkhlQaqiFBtUnwwDF1Tcwzm/NK9EUYoRLqPNIaABNlsSVS8HQgU3A6MEkyQnkOOUn5fiX5SSWuSIwlOUYkKoFgHR4kpQp8Lc7bAf6GwVCNfBHsheAmKJAQDQSx8oPdb3kAAAANV6VFh0TU9MNiByZGtpdCAyMDI0LjA5LjUAAHicfVC7DoMgFN35ihOHph00aNM0Dgwo1JpWUcAmpukHdO//pxDjc/DCcHM4j3sh8KXF4/vDVIkgBKA7N01TvM6UUlLBN8hkUdbILc9GJFddbQ0SxO5QbJjcqmpEYuQIaXS9OD9HjCjdNCMxgcLEC3eIsharhCEzU7WYM/1gyVKwfB4EptCqa2aJ4NZt4o0NO7q1Tmg7qXvbN5KZimtr2gFRDWO4lfIpnISz4J0f7vEnWKatvT0yfp7ryR9M71TSMzP+PgAAADZ6VFh0U01JTEVTNiByZGtpdCAyMDI0LjA5LjUAAHici3b2iLX1V6jR0DXQMzfVMdCxhtKaNQBcowZF9AYHuwAAANR6VFh0cmRraXRQS0w3IHJka2l0IDIwMjQuMDkuNQAAeJx7v2/tPQYgEABiJgYIYAFiZiBuYGQQ4AAJSLIDCceS/FzHvBQ5GSYeKM8zzy8oMy+9WFMKqpFBhkEIKudaUZCTmZxZ4pKaXpSaqijFBFehPcIN5WZgFJAUAbKDgZpzUv2LHIvycxNLMpOd8vNSHDmBEiCGf1FKapGiFCNCHyMTWdqYmMnSBtLCIG4FJGCCDCzfkv/u7zzGvQ/EeVAguf/6pWd2ULY9kA0WB6qxB6oBi4sBAG78fAzXBiZHAAABF3pUWHRNT0w3IHJka2l0IDIwMjQuMDkuNQAAeJydks1qwzAMx+9+CtHD2AYJsp2P+eCDU2elbInTxBmUsQfYfe/P5IXEbRg5RFgg5L9+koUZBOvt2/cPLCYsYwC4cZRS8CERkTUQAqjq07mFozfVnDm6sfUDZCDJEVZK410zZzg8Q8JTVaqCS0gw5bLIkUpS/LNYK4IS01wpWSq6z3J8EeU/QknCRZdsCDMSLq03OtetvZt5ekXlWhtfUZCLOGpBLuNARVjELe62eMINp96NXQRa42lzoe2gHznwJ7iMdX/1167WQ2N6P1ymjOu0htdz/W6pxOjDZ48PVnwd4jArlNiNkmuU3I3K1qhsNyrs8357ITN/R4rZL6iOockhx6d7AAAAV3pUWHRTTUlMRVM3IHJka2l0IDIwMjQuMDkuNQAAeJzT0tLSUqjR0DXUszS3NDPU0TXQMzQ2M9WxBjJMLS2NzS11DPRMTA0sjMx1rOFCuggxmEaoPs0aAKVFEI9R4LYLAAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from rdkit.Chem import Draw\n", "\n", "mols = []\n", "titles = []\n", "\n", "for name, smarts in patterns:\n", " mol = Chem.MolFromSmarts(smarts)\n", " if mol is not None:\n", " mols.append(mol)\n", " titles.append(name)\n", "\n", "img = Draw.MolsToGridImage(mols, legends=titles, molsPerRow=4, subImgSize=(300, 300))\n", "img" ] }, { "cell_type": "markdown", "id": "6300c985", "metadata": {}, "source": [ "Let's focus on aldehydes. One of the simplest aldehydes is acrolein. Let's see its structural formula." ] }, { "cell_type": "code", "execution_count": 100, "id": "34577b50", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiorm5t7O3e4up4oIIxl5JXCqo9STwK4W7+KVre3L2Pg/SrzxJeqdrPbDy7aM/7Uzcflke9AHf0yKaKdS0MqSKCVJRgRkdRxXnE3grxd4xQ/8Jf4iOn2L9dL0X5AR6PK2S3uMEelQTfDrUfBF5/bHw8nZUCj7VolzKWiugB1VmOVf3PfuBkEA9RormvCfjbTPFkMscIktNStvlu9OuRtmgbvkdxnuP0PFdLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRWB4w8TReFdCe9ZBJO7eXBETwzn19gBk/wD164nS/CXiTxhbJqmva9c20U43xW0WfunoduQF49ifWsZ1rS5Iq7PSw2XKpR+sVpqEL2Tabbfkkeq0V5XqXgrxF4Wtn1Lw9r93P5A3vbSfxKOuBkq30I+ldf4J8Vp4r0X7QyLHdwt5dxGvQHsR7H/GiFa8uSSsx4nLlCj9YoVFOF7N2aafmn+Z0tFFFbHmBRRRQAUUUUAFFFFABRXIa78SvDmiXX2COeXU9UJwthpsZnmJ9CBwp+pBrJx8RvF3U2/hHTH7DFxesP8A0FM/mKAOu17xTofhi1+0a1qdvZoRlVkb53/3VHzN+Arkf+E08V+Kfk8HeHGtrRumq61mKPHqkQ+ZvY/mK1tB+GvhzQrn7cbaTUdTJ3Nf6i/nzE+uTwD7gCuvoA8/tvhdDqVwl74z1i88RXSncsMp8q1jP+zEvH59fSu6tLO2sLZLazt4reCMYSKFAiqPYDgU64uIbSB57maOGFBl5JGCqo9ST0rhLv4p2V3dPYeEdMvPEt8pwTaDZbxn/bmbgD3G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p+fxh4ja1s266VouYkI9HlPzN7jp6GvQba2gs7dLe1gjggQYSOJAqqPQAcCpaAMjQfC2h+GLb7PoumW9mpGGZF+d/wDeY/M34mteiigAooooAKKKKACiiigAooooAKKKKACs3XdA0vxLpcum6vZx3VrJ/C45U/3lPUH3FaVFAHmC33iD4XMItVa41zwiDiO+A3XNgvYSgffQf3h0/IV6Np+o2erWEN9p9zFc2sy7o5Ym3Kwqwyq6lWAZSMEEZBFec6h4N1bwhfy634CK+VI2+80GVsQT+pi/55v+n4DBAPR65HX/AIf2PijWvtetahqNzYBVCaWJyltuH8RC4LH8at+FPGml+LbaT7KXt7+3O27sLgbJ7duhDKe2e/T8eK6J3WNGd2CqoyWJwAKAKmm6Vp+j2a2mm2VvZ269I4Iwi/XA7+9XK4bVPinosN42m6FDdeItUH/LvpieYq/70n3QPfnFUxovxA8W863q0XhrTm62WlHfcsPRpjwp91/KgDo/Efjnw54VG3VNSiS4P3LWL95M5PTCLk8+p4rDtNf8a+Kpj/Zmhf2BpbA4vNUObhvQrCOn/AuPetvw54D8N+Fj5mmabGLo8vdzfvJnJ6ku2Tz6DAro6TV1YqEnCSkunfX8Dl7LwLpy3C3mrzT6zejnzb1tyr/up0A9ua6dVVFCooVQMAAYAFLRSjCMdka1sTVru9SV/wAl6LZfIKKKKowCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4zxn8P7bxLPDq2nXT6T4itebbUYOCf9mQfxL29s9xkHLt/hrqWuBZPHviW61nB/wCPC2P2e168bgmC59+Pxr0eigCnpmk6dotmtnpljb2duvSOCMIPqcdT71coooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z", "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAIAAAD2HxkiAAAQ9klEQVR4nO3de1BU1x3A8QuiooIIiIpvQxzUcWp912jERHzEkInWUI0zdPJot9OJs81YM9vpP9T+kdk6GSXWznQbG0PrREM6E0s0EjHRSGJHgWhjqBqRpL4Q0AgoL3E5nZtL9qJFZWH3/vbx/Yx/xGbv3p3qN3vuueceIpRSGgA5kYLnBkCEgDwiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII0JAGBECwogQEEaEgDAiBIQRISCMCAFhRAgII8JuOnHixKZNm44dOyb9QRD0oqQ/QPDZvn37q6++Wl5ebvz2xRdf3LZtm/SHgt/cvKkdPKj9619aVZV29ap265Y2eLCWmKhNmKAtWaKNG+eDUyh0TVNT05YtW/r37+/5v65v377GP6Smpl67dk36A8LXTp5Uy5er3r2Vpt3z14QJ6u9/V253T85DhA92+fLl7OzspKQkI7mIiIgZM2YcOXJEKfXCCy94giwuLpb+pPCR1la1dq2KjLxffh1/TZmizp7t9tki9BBxD6Wlpa+//vquXbtaW1s1TZs6deqKFSteeumlhIQEz2t27969evXqlpaWmJgYl8u1Zs0a0Y+MHmto0Fat0vbuNf+XXr20WbO0OXO0oUO16GitpkY7fVrbv1+rrzdfk5Sk7dmjv6wbfPXfjlDS3Nycm5s7ZcqU7/8IemVkZBQWFt7r9ZWVlatWrTJenJWV1dDQYO3nhU/95CfmV1yvXupnP1OXLnXyspYW9ac/qcRE88UJCerChW6ckAjvcPHixezs7MTERKOooUOHOhyO8+fPd+XY3Nxc44px0qRJX375pf8/LPzgrbfMqPr0UXl5D3j9f/+rUlLMQ+bP78b1IRG2KyoqyszMjIpqny6ePn26y+VqbGz06k3KysomTZqkaVpsbOzbb7/ttw8L/2hqUoMHm0X95S9dOqqiQsXGmkf94x/enjbcI7xx44bL5Zo8ebLRXp8+fTIzMz/99NNuv2F9ff2zzz7L0DQovfmm2dKCBaqtrasHbtliHpiW5u1pwzfC8vJyh8PhmWIZNmyYw+G4ePGiT97cMzSdOnXq2R7Mm8FSP/qR2dLu3V4c2NSk4uPNY0+f9uq0YReh2+0uLCzMzMzs1auXZ+SZm5t769Yt357o888/f/jhh42h6c6dO3375vC9hgYVFdVeUWKi8vbvwy9/6fU4NgwjrKurc7lcxjWbcWcvKyvr+PHj/jtjfX396tWrPUNTb68wYamDB82Kli71+vAdO8zDn3/eq0PDIsKvvvrK4XAMGjTI6GH48OHZ2dk1NTXWnD03N7dfv36apk2bNo2haeDa0uG67je/8frwsjLz8OnTvTpUC/mRZ0ZGRkREhJHf3Llz8/LyWltbLf4kpaWlxtB04MCBu3btsvjs6JLsbLOiP/5Reauuzjx83DivDg3NCGtra3NycsZ9v7g2Ojo6Kyvriy++EPxIdXV1nhv6NputublZ8MOEtaYmtXNnJzOfv/qVWdFbb3n9tm1t5jK3QYPCOsJTp07Z7fYBAwYYf91TUlKcTmfgrK52uVzGsu9p06aVl5dLf5wwc/my/nWXlKR3UlBw97/9+c/NCB94j75TAwa0Hx4VFY4Rut3u/Pz89PR0Y+QZERGRnp6el5d3+/ZtFWBKS0tTUlKMoek777wj/XHCw8GDauVKc/Jz+nR14MDdr1m3zoxw+3avT+F2m9+ECQnhFWF1dbXT6RwzZozx1RcbG2uz2fy6aqysrKyHX2J1dXWZmZmeoWlLS4vvPh06aG5Wubn6Iw6eZWiZmepea4A3bDAj3LJFeau21jw8JSVcIiwtLbXZbMbEo6Zp48ePdzqd169ft2Ca57nnnuv5G7pcrj59+hg3Ks+dO+eLz4jvVVQoh8NcXT10qP7b+68B3rrVrOiVV5S3Tp40D581K8QjbGlpycvLS09PN9qLjIxMT0/Pz89v6/oiIy9du3Zt48aNY8eONc4YExPz8ssv++SdS0pKHnroIWNomte96xDcpahI/7rrOPJ0ufTJmAcqKjIrWrxYeetvfzMP/8UvQjbCK1euOJ3OUaNGGTEMHDjQZrOdOnUqqKd56urqnnnmGeM61m63MzTtphs39NgmT75j5PnZZ168Q2Oj+RB9QkKPVsy8+WYIRlhSUmKz2aKjo40YUlNTc3Jybt68GRrTPG1tbTk5OcbQdMaMGQxNvXP2rD7UTEhoDyA5Wf9t99YAz5ljhpSf78WBzc3m0DciQnn5J6gF/sjzkUce8Yw8jYdr/TfytH6ax6O4uNi4sRkXF/fuu+9acMbg5nbrUyyZmfpzt56RZ26u199gHf31r2aEixZ5ceC2beaB6enenlYLim1dBg0aZLfbv/nmm5CZ5ulUbW3typUrGZo+QF2dPvKcNKn9L33fviorS504oXqusdH8RtU01cUnQqur73gK0avHLwIzwpKSkqysrN69exsxTJ061eVy+e+pPOunebo+NJ05c2ZFRYXIxwhQZ84ou13FxLT/dR8+XL/57ts1wH/+s5lT//73vJ/hcf26mj3bPGThQi+eQgy0CO/a1qV3796ZmZn32dYlGKd5uu7YsWPG0DQxMXHPnj0qzLm/G3lmZOiXW8bf9blz9UUt/lgD3Namli0zo4qOVr//vf4N2amCAjV+vPniQYMecBckYCPsybYuQTHN0z1Xr1598sknPUNTnz/uGBxqa1VOjr4e2pNEVpby9xrga9fumKHRNH20+dOf6l+S//yn2rdPvxvx29+qH/zgjtfExalDh7p3Qi3Yt3UJ5GkenwxNjZH5zJkzv/76axU+Tp3SR56e1ZgpKcrp1POwRkODWrHijsbu/2vsWPXvf3f7bFoIbOsSgNM8PnT06FFjnUBiYuLevXtVaHO79XsD6entI8+ICP2f8/KU/9YA19aqzZvVj3/cyb8qKFA//OED8ouPV3/4Q5cWAwRIhH7d1iUQpnn8pKamZtmyZSE+NK2q0r/rRo9u/8sdG6tsNv1JWf8pK9PvsHumee51Z/8//1GbNunrv+fNU6mpaswYNXOmft34yiv6KnBfzGBrobStS7d37w18HYems2bNCqWhaXFx8T6HQ7/TYMQwcaK+qW59fShM8wRChNZv63Lp0iWLp3msdPjw4REjRmiaNnjw4A8++EAFs443hxL69WtLTNRHnvn53Zji926aZ+zY9vZiYvQvW9FHvf0bofXbulg8zSOlpqbmiSeeCOqhqXGJPmzYMONPKj4+fv369Vf9+t0uO81jcYTWb+ti/TRPQA1N58+ff6nTn5QQkKy+OeS2fJpHNkLrt3WxfponoHzyySfDhw83hqb79u1TAay5uTkvL2/OnDnW3RyqsnyaRzZCi7d1sX6aJ2BVV1cvXbo0kIemAjeHSkv13vr1a89v/Hi9RmvXAFsXofXbutTX11s8zRMsQ1PjSjgtLS1whqZW3xxqadHHmenp7e1FRvp9mkc2Quuf95HdvTfwHTp0yBiaJiUlFfz/PmIhvQZYVVbq33UjR5rLx+x2fXuL4KEFy7Yu1kzzBK/q6uolS5YYQxKHw2H9NnMVFRUOh8PSm0MlJfpSUs/j8Kmp+h2IAFsD7OMIjx496rmwfuqpp/bv3++/C+sA3L038LW1tTmdTuNSecGCBZcvX7bmvJ3eHGrq2Uqu+2lu1keenjXWkZH6nffCwqAYefrgm/DRRx9dv369X/dfOH36dCDv3hv4Dh48mJycbAxNP/zwQ/+dqNObQ595ta1LT3bv1b57dMhuV0GyBjigH2UKut17A19VVdXixYv9NzQ9e/asw+GIj4838ktOTvb7zaGS70aenj3Upk3TH64PtjXAgRvh9evXc3JyRLZ1CZOh6WOPPearoWlBQcHSpUs9l+jz58/37yV6U5O+bYznyb37794btCQj7HSa59tvvxX8SCHm448/NoamQ4YM2b9/f8/fcM2aNZ6bQyd8sq3LPbSdO6d+/Wvzx98mJ6vf/U4fjoYigQgDbVuX0FZVVbVo0SLjUZLs7Gy3292TdysuLt64caNfL9GLvpvm2b1ggde79wYtSyMM5G1dQtjt27ezs7MjIyONoWllZaUKPPX19Vu3bp0wYUL7sGjIEPfzz+uXgmHAogiDYluX0PbRRx8ZDy4MGTIkoB6tPPt/0zzZ2dnV1dUqbPg3wqDb1iW0XblyxbgK8MnQtIdYA+z3CIN6W5cwGZo+/vjjIkNT41HviRMndlwDfMKf0zxhF2FobOsS2g4cOGAMTUeMGHH48GHLznvmzBm73R4TE9NxDfDVq1dVePNZhKG3rUtou3jx4rx58zRNi4qK8vfQlDXAfo/Q2NZl8ODB1q3chS+0trZ6hqYLFy68cuWKn9YAd/zRjjab7eTJkz4/UfhGWFJS8vTTT3surGfPnr1jxw5+jElwKSwsHDp0qKZpI0eOLCoq8tXbHj9+3Gaz9e/fnzXA/o1wz549YbKtS2i7cOHC3LlzfTI09awB7rgSgzXAfozQ7XZv3ry5qqqqJ2+CQBuaZmRkdGOypKqqyul0jh49uuMa4LJA3dYloMgv4EbgeP/9942nckeNGtX1oY2xEkP2RzsGNSLEHc6fP9/FoSlrgH2FCHG/oemwYcPKy8vvekFlZaXT6Rw5cqSRX1xcnN1u5+eZdhsRonPvvfee0WFUVNQbb7zR6UqMCRMmsAa45yL0EIHOHDlyZMmSJTdv3jR6u3DhQkNDg5Hl8uXL165dm5aWJv0ZQwER4n4aGxvT0tJKSkqM30ZHR9tstnXr1nl2QkDPESEebMOGDUePHh0xYsRrr70WFxcn/XFCDRECwvQrbwCCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAWFECAgjQkAYEQLCiBAQRoSAMCIEhBEhIIwIAU3W/wA9vz/ucb1PgwAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "acrolein_smiles = \"C=CC=O\"\n", "\n", "mol = Chem.MolFromSmiles(acrolein_smiles)\n", "img = Draw.MolToImage(mol, size=(300, 300))\n", "img" ] }, { "cell_type": "markdown", "id": "0595bcc1", "metadata": {}, "source": [ "Obviously, it has a carbonyl group, which is characteristic of aldehydes. Thus, it should be filtered out by the Brenk filter." ] }, { "cell_type": "code", "execution_count": 101, "id": "c4618f55", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "brenk_filter = BrenkFilter()\n", "smiles = [acrolein_smiles]\n", "\n", "filtered_smiles = brenk_filter.fit_transform(smiles)\n", "filtered_smiles" ] }, { "cell_type": "markdown", "id": "cd31b11e", "metadata": {}, "source": [ "## Custom filters" ] }, { "cell_type": "markdown", "id": "491229de", "metadata": {}, "source": [ "By inheriting from `BaseFilter`, you can create your own molecular filters. The main element is the `_apply_mol_filter` method, which should return True if a molecule fulfills the filter rules and should be kept, or False otherwise.\n", "\n", "Let's create a simple physicochemical filter, which will keep molecules below `max_weight` and having at most `num_heavy_atoms` heavy atoms. This is a slightly simplified example, without fully-featured parameter validation - see [scikit-learn code](https://github.com/scikit-learn/scikit-learn/blob/687e84a126965b4179b02d86041a9e997eba87c9/sklearn/utils/_param_validation.py#L27) if you want to learn more about that.\n", "\n", "Further, all filters have arguments:\n", "- `allow_one_violation` - if you want to tolerate a single violation\n", "- `return_indicators` - whether to return molecules or a boolean mask\n", "- `n_jobs` - how many processes to use for filtering in parallel\n", "- `batch_size` - for finer control over batch size for parallelism\n", "- `verbose` - controls verbosity of TQDM progress bar\n", "\n", "You can omit those arguments, but it will also disable some of the functionalities that you can expect from scikit-fingerprints filters." ] }, { "cell_type": "code", "execution_count": 100, "id": "ca686a6e", "metadata": {}, "outputs": [], "source": [ "from rdkit.Chem import Mol\n", "from rdkit.Chem.Descriptors import MolWt\n", "from rdkit.Chem.rdMolDescriptors import CalcNumHeavyAtoms\n", "\n", "from skfp.bases.base_filter import BaseFilter\n", "\n", "\n", "class CustomMolecularFilter(BaseFilter):\n", " def __init__(\n", " self,\n", " max_weight: int = 250,\n", " num_heavy_atoms: int = 50,\n", " allow_one_violation: bool = False,\n", " return_indicators: bool = False,\n", " n_jobs: int | None = None,\n", " batch_size: int | None = None,\n", " verbose: int | dict = 0,\n", " ):\n", " super().__init__(\n", " allow_one_violation=allow_one_violation,\n", " return_indicators=return_indicators,\n", " n_jobs=n_jobs,\n", " batch_size=batch_size,\n", " verbose=verbose,\n", " )\n", " # create attributes from custom parameters\n", " self.max_weight = max_weight\n", " self.num_heavy_atoms = num_heavy_atoms\n", "\n", " def _apply_mol_filter(self, mol: Mol) -> bool:\n", " # define the filter rules and check them\n", " rules = [\n", " MolWt(mol) <= self.max_weight,\n", " CalcNumHeavyAtoms(mol) <= self.num_heavy_atoms,\n", " ]\n", "\n", " # calculate how many rules have passed\n", " passed_rules = sum(rules)\n", "\n", " # check final filter status\n", " if self.allow_one_violation:\n", " return passed_rules >= len(rules) - 1\n", " else:\n", " return passed_rules == len(rules)" ] }, { "cell_type": "code", "execution_count": 101, "id": "d15cbb5d", "metadata": {}, "outputs": [], "source": [ "smiles = [\n", " \"CC(=O)OC1=CC=CC=C1C(=O)O\", # Aspirin\n", " \"CN1C=NC2=C1C(=O)N(C(=O)N2C)C\", # Caffeine\n", " \"CC(C)CC1=CC=C(C=C1)C(C)C(=O)\", # Ibuprofen\n", " \"C[C@H](CCC(=O)O)CC1=CC=CC=C1\", # Cholesterol\n", "]" ] }, { "cell_type": "code", "execution_count": 102, "id": "797419f7", "metadata": {}, "outputs": [], "source": [ "custom_filter = CustomMolecularFilter(verbose=True)" ] }, { "cell_type": "code", "execution_count": 103, "id": "f62e82a4", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 22919.69it/s]\n" ] }, { "data": { "text/plain": [ "['CC(=O)OC1=CC=CC=C1C(=O)O',\n", " 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C',\n", " 'CC(C)CC1=CC=C(C=C1)C(C)C(=O)',\n", " 'C[C@H](CCC(=O)O)CC1=CC=CC=C1']" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "custom_filtered_smiles = custom_filter.fit_transform(smiles)\n", "custom_filtered_smiles" ] }, { "cell_type": "code", "execution_count": null, "id": "b81368ee-af91-4472-a9fe-12e0a76e4e12", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" } }, "nbformat": 4, "nbformat_minor": 5 }