{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Are the Starting Materials for Synthesizing Your Target Molecules Commercially Available?" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This utility reports whether the starting materials are commercially available for a set of synthesis targets given reactions. You give it your synthesis targets and the reaction to create each, it determines the starting materials, checks whether they are commercially available, and tells you whether each target is accessible--whether all its starting materials are commercially available.\n", "\n", "Modern pharmaceutical and materials chemistry involves screening many candidate compounds. While much can now be done *in silico* (on a computer), promising compounds still need to be synthesized to check their properties experimentally. [Divergent synthesis](https://en.wikipedia.org/wiki/Divergent_synthesis) can create a library of related compounds. One approach is to start with a diversity of commercially-available molecules, run the same reaction on them using the same co-reactant(s), and produce a diversity of target molecules that have a promising scaffold (core structure). A key question is, which starting materials are commercially available?\n", "\n", "Here's an example graphical summary:" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "![Three reactions, each in a row. First column: Target molecule and whether it's accessible based on commercial availability of reactants. Subsequent columns: Each reactant and whether it's commercial available.](../images/reaction-accessible.jpg)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "*[Download this notebook from GitHub by right-clicking and choosing Save Link As...](https://raw.githubusercontent.com/bertiewooster/bertiewooster.github.io/main/_notebooks/2023-02-07-Are-the-Starting-Materials-for-Synthesizing-Your-Target-Molecules-Commercially-Available.ipynb)*" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "import asyncio\n", "\n", "import aiohttp\n", "import rdkit\n", "from codetiming import Timer\n", "from rdkit.Chem import AllChem as Chem\n", "from rdkit.Chem import Draw\n", "from rdkit.Chem import rdChemReactions" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "In this scenario, imagine we have a promising scaffold in mind:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Chem.MolFromSmiles(\"C1Cc2ccccc2C(C*)N1\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "and want to test the bioactivity of various rings linked through the `*`:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "targets = [\"OCN1C2CC(C=C2)C1CC1NCCc2ccccc12\", \"c1ccc(NCC2NCCc3ccccc32)cc1\", \"[O-][N+](=O)C1=CC=C(C2NCCc3ccccc23)C2=C1C=CC=C2\"]\n", "target_labels = [\"bicyclic\", \"aniline\", \"naphthyl\"]\n", "mols = [Chem.MolFromSmiles(smiles) for smiles in targets]\n", "Draw.MolsToGridImage(mols=mols, legends=target_labels)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "So we want to determine if we can synthesize those three target molecules using commercially-available starting materials with two different reaction types, described below." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This utility uses\n", "- [RDKit's ChemicalReaction class](http://rdkit.org/docs/cppapi/classRDKit_1_1ChemicalReaction.html) to reverse a reaction from target to starting materials.\n", "- the free [PubChem APIs](https://pubchem.ncbi.nlm.nih.gov/docs/programmatic-access) to determine whether those starting materials are commercially available. PubChem gathers availability from multiple vendors, so we can call just one API source rather than calling dozens of suppliers.\n", "- [Python's asyncio library](https://docs.python.org/3/library/asyncio.html) to speed getting API results back by making the API calls concurrently.\n", "- [Semaphore](https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphore) to limit the number of concurrent API calls." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Why Make API Calls Asynchronously\n", "\n", "API calls an appreciable amount of time, perhaps 0.4-1 second, because they go over the Internet. So when making API calls, we want to minimize the number of calls to reduce both run time and the load on the server. This code thus gathers all the reactants from multiple reactions, then removes duplicates, so it doesn't make redundant API calls for a given molecule. Because each call can be done independently, it saves time to do them asynchronously. Asynchronous programming involves sending out a group of tasks to be completed independently, and accepting results whenever they come back. By contrast, synchronous programming has a known order of task execution, but is slower if you're waiting for each task to complete before you start the next one.\n", "\n", "In this example, we make up to two API calls per molecule:\n", "- First, to check if the molecule is in PubChem, and if so obtain its identifier (CID). This call uses PubChem like a catalog to find the molecule.\n", "- Second, if the molecule exists in PubChem, to retrieve its commercial availability.\n", "\n", "These two calls need to happen sequentially: We first need to get the molecule's identifier if it's in PubChem, then we use that identifier to make a second call to obtain the desired properties. So we can't make those two calls in parallel.\n", "\n", "These figures demonstrate how we can save time by running API calls asynchronously: The asynchronous approach might take 0.8 seconds, while the synchronous approach might take 1.2 seconds. (For simplicity, we assume that each API call takes 0.4 s; in reality, the time for each call can vary based on the Internet connection, how busy the server is, etc.)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\"Two" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\"Two" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Tip on calling asynchronous functions (called coroutines): If you get an error such as `coroutine not subscriptable`, you may have forgotten to `await` the coroutine. Python is thus returning not the result of running the coroutine, but a reference to the coroutine code. This is similar to how if you call a method and forget to put the parentheses after it, for example `my_object.my_method` rather than `my_object.my_method()`, Python returns a reference to the method rather than the result of running the method." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Why Not To Make Too Many Concurrent API Calls\n", "[PubChem asks you to limit API requests to 5 per second](https://pubchem.ncbi.nlm.nih.gov/docs/programmatic-access#section=Request-Volume-Limitations), so we shouldn't make API calls for too many reactants simultaneously. Each reactant needs at least one, and typically two, API calls.\n", "\n", "[Asycnio's Semaphore](https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphore) lets you limit the number of concurrent tasks. It may be helpful to think of multiple pipes, where each pipe can run only one task at a time. So you can vary the number of pipes from:\n", "- 1: No concurrent tasks; equivalent to synchronous (all calls in serial)\n", "- In between: Some simultaneous tasks\n", "- Number of tasks: Fully simultaneous tasks--each task can run concurrently\n", "\n", "It's thus advantageous to write your code asynchronously and use Semaphore. That way, you can easily adjust the degree of concurrency once your code is working and you need to adjust to limit the number of API calls per second." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\"Four" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "If you let each task run concurrently, the total time will be roughly the time of the longest task, for example 0.8 s.\n", "\n", "If you allow some simultaneous tasks, for example two pipes for four tasks (reactants), several things are different:\n", "- There is no guarantee of the order that the tasks will run in; it depends on the queueing that asyncio chooses. This is fine as long as you wait for all tasks to complete. (With a larger set of target molecules where the API calls would take longer in total, you could process and present results to the user as they came in.)\n", "- Until all tasks are started, a new task enters (starts running in) a pipe when a pipe has completed its previous task.\n", "- The total time is not deterministic, but should be roughly minimized given the constraint of fewer pipes than tasks." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\"Four" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "By the way, the specific request type we use here [`aiohttp` also has a way to limit the number of concurrent connections](https://stackoverflow.com/questions/35196974/aiohttp-set-maximum-number-of-requests-per-second/43857526#43857526). For generality, we use Semaphore instead because it can be applied to any type of task." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## PubChem API Call Results\n", "To demystify API calls, it's useful to think of them as corresponding to the information you could get interactively by clicking on links. (In fact, a modern development trend is for a web site to call its API to obtain the data, then format it to present to the user.) The difference between API calls and interactively viewing web pages is that APIs return information in a computer-friendly format, which makes it easier for your code to process the results.\n", "\n", "We use two different PubChem APIs. First, we use [PUG (Power User Gateway) REST](https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest) to request the identifier of the molecule. The PUG REST request corresponds to interactively doing a SMILES search, for example [https://pubchem.ncbi.nlm.nih.gov/#query=O=C(C)Oc1ccccc1C(=O)O&input_type=smiles](https://pubchem.ncbi.nlm.nih.gov/#query=O=C(C)Oc1ccccc1C(=O)O&input_type=smiles) where `O=C(C)Oc1ccccc1C(=O)O` is the SMILES string for the molecule of interest, here acetylsalicylic acid (aspirin). We request text format, so PUG REST returns a simple result: the identifier if it exists, or 0 (zero) if not, followed by a linebreak, for example `2244\\n` where 2244 is the PubChem identifier for acetylsalicylic acid. Processing this result to obtain the identifier is simple.\n", "\n", "Second, we use [PUG View](https://pubchem.ncbi.nlm.nih.gov/docs/pug-view) to request data about commercial availability. The PUG View request corresponds to interactively visiting the molecule's page, for example [https://pubchem.ncbi.nlm.nih.gov/compound/2244](https://pubchem.ncbi.nlm.nih.gov/compound/2244), for acetylsalicylic acid. The data is more complicated here. It corresponds to the Chemical Vendors section on the web page. We chose to request XML format. Fortunately, we don't need to process all the data in the result, just check whether there is any vendor data.\n", "\n", "If there is vendor data, the result includes:\n", "\n", "```\n", "Chemical Vendors\n", "\n", "A list of chemical vendors that sell this compound. ...\n", "\n", "```\n", "\n", "If there is no vendor data, the result includes:\n", "\n", "```\n", "PUGVIEW.NotFound\n", "No data found\n", "```\n", "\n", "So if `No data found` is present, we deem that the molecule is not commercially available." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Code" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "%%capture\n", "!pip install aiohttp\n", "!pip install codetiming" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "class Reactant():\n", " \"\"\"Store a reactant's commercial availability.\"\"\"\n", " \n", " def __init__(self, smiles: str):\n", " \"\"\"\n", " Construct a Reactant object to store the commercial availability of a reactant\n", "\n", " :param smiles: SMILES string representing a molecule\n", " \"\"\"\n", " self.smiles = smiles\n", " self.mol = Chem.MolFromSmiles(smiles)\n", "\n", " @property\n", " def in_pubchem(self):\n", " return self._in_pubchem\n", "\n", " @in_pubchem.setter\n", " def in_pubchem(self, value: bool):\n", " \"\"\":param value: whether molecule is in PubChem\"\"\"\n", " self._in_pubchem = value\n", "\n", " @property\n", " def cid(self):\n", " return self._cid\n", "\n", " @cid.setter\n", " def cid(self, value: int):\n", " \"\"\":param value: PubChem CID (identifier) for molecule\"\"\"\n", " self._cid = value\n", "\n", " @property\n", " def commercially_available(self):\n", " return self._commercially_available\n", "\n", " @commercially_available.setter\n", " def commercially_available(self, value: bool):\n", " \"\"\":param value: whether molecule is commercially available, per PubChem\"\"\"\n", " self._commercially_available = value\n", "\n", " @property\n", " def pubchem_page(self):\n", " return self._pubchem_page\n", "\n", " @pubchem_page.setter\n", " def pubchem_page(self, value: str):\n", " \"\"\":param value: URL or PubChem page for molecule\"\"\"\n", " self._pubchem_page = value\n", "\n", " def __str__(self):\n", " \"\"\"User-friendly printout in format:\n", " Reactant SMILES: NCCc1ccccc1, in_pubchem: True, cid: 1001, commercially_available: True, pubchem_page: https://pubchem.ncbi.nlm.nih.gov/compound/1001\n", " \"\"\"\n", " str_print = f\"Reactant SMILES: {self.smiles}\"\n", " str_print += f\", in_pubchem: {self.in_pubchem}\"\n", " if hasattr(self, \"cid\"):\n", " str_print += f\", cid: {self.cid}\"\n", " if hasattr(self, \"commercially_available\"):\n", " str_print += f\", commercially_available: {self.commercially_available}\"\n", " if hasattr(self, \"pubchem_page\"):\n", " str_print += f\", pubchem_page: {self.pubchem_page}\"\n", " return str_print\n" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "class Reaction():\n", " \"\"\"Store a reaction's target, reaction SMARTS, name (type), reactants, and commercial of reactants.\"\"\"\n", "\n", " def __init__(self, target, reaction_smarts, name):\n", " \"\"\"\n", " Construct a Reaction object \n", "\n", " :param target: The molecule to synthesize as a SMILES string\n", " :param reaction_smarts: The reaction SMARTS as e.g. reactant1.reactant2>>product\n", " :param name: Name of the reaction, for user's information, e.g. Amine oxidation\n", " \"\"\"\n", " self.target = target\n", " self.reaction_smarts = reaction_smarts\n", " self.name = name\n", " self.target_mol = Chem.MolFromSmiles(self.target)\n", " self.reactants = dict()\n", "\n", " @property\n", " def reactants(self):\n", " return self._reactants\n", "\n", " @reactants.setter\n", " def reactants(self, value: dict[str, object]):\n", " \"\"\":param value: Dictionary of SMILES:Reactant object pairs\"\"\"\n", " self._reactants = value\n", "\n", " @property\n", " def reactants_commercially_available(self):\n", " return self._reactants_commercially_available\n", "\n", " def tally_all_reactants_commercially_available(self):\n", " \"\"\"\n", " Given the commercial availability of each reactant, determine whether they are all available\n", " Sets self._reactants_commercially_available to, and returns, that boolean value\n", " \"\"\"\n", " for reactant in self.reactants:\n", " if not self.reactants[reactant].commercially_available:\n", " self._reactants_commercially_available = False\n", " return False\n", " self._reactants_commercially_available = True\n", " return True\n", "\n", " def __str__(self):\n", " \"\"\"\n", " User-friendly printout in format:\n", " Reaction Pictet-Spengler target OCN1C2CC(C=C2)C1CC1NCCc2ccccc12, all reactants commercially available: False. Reactants: 1) NCCc1ccccc1 commercially available: True 2) O=CCC1C2C=CC(C2)N1CO commercially available: False\n", " \"\"\"\n", " self.tally_all_reactants_commercially_available()\n", " str_print = f\"Reaction {self.name} target {self.target}\" \n", " str_print += f\", all reactants commercially available: {self._reactants_commercially_available}. Reactants:\"\n", " reactant_number = 0\n", " for smiles, object in self.reactants.items():\n", " reactant_number += 1\n", " str_print += f\" {reactant_number}) {smiles} commercially available: {object.commercially_available}\"\n", " return str_print" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "def reverse_reaction(rxn_fwd):\n", " \"\"\"\n", " Reverse an RDKit reaction\n", " Code adapted from https://www.rdkit.org/docs/Cookbook.html#reversing-reactions by Greg Landrum\n", "\n", " :param rxn_fwd: forward chemical reaction of class rdkit.Chem.rdChemReactions.ChemicalReaction\n", " :returns: reverse chemical reaction of class rdkit.Chem.rdChemReactions.ChemicalReaction\n", " \"\"\"\n", " rxn_rev = Chem.ChemicalReaction()\n", " for i in range(rxn_fwd.GetNumReactantTemplates()):\n", " rxn_rev.AddProductTemplate(rxn_fwd.GetReactantTemplate(i))\n", " for i in range(rxn_fwd.GetNumProductTemplates()):\n", " rxn_rev.AddReactantTemplate(rxn_fwd.GetProductTemplate(i))\n", " rxn_rev.Initialize()\n", " return rxn_rev" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "# Utilities\n", "def flatten_twoD_list(twoD_list: list[list]) -> list:\n", " \"\"\"\n", " Flatten a 2D (nested) list into a 1D (non-nested) list\n", "\n", " :param twoD_list: The 2D list, e.g. [[a], [b, c]]\n", " :returns: 1D list, e.g. [a, b, c]\n", " \"\"\"\n", " flat_list = []\n", " for row in twoD_list:\n", " for item in row:\n", " flat_list += [item]\n", " return flat_list\n", "\n", "def longest_row(twoD_list: list[list]) -> int:\n", " \"\"\"\n", " Find the longest row (sublist) a 2D (nested) list\n", "\n", " :param twoD_list: The 2D list, e.g. [[a], [b, c]]\n", " :returns: Length of the longest row, e.g. 2\n", " \"\"\"\n", " return max(len(row) for row in twoD_list)\n", "\n", "def pad_rows(twoD_list: list[list], row_length: int, filler = \"\") -> list[list]:\n", " \"\"\"\n", " Pad each row (sublist) in a 2D (nested) list to a given length\n", "\n", " :param twoD_list: The 2D list, e.g. [[a], [b, c]]\n", " :param row_length: The length to pad to, e.g. 3\n", " :param filler: The sublist element to pad with, e.g. p\n", " :returns: Padded 2D list, e.g. [[a, p, p], [b, c, p]]\n", " \"\"\"\n", " for row in twoD_list:\n", " padding = row_length - len(row)\n", " row += [filler] * padding\n", " return twoD_list\n", "\n", "# To convert from True to Yes, and from False to No, for user-friendly output\n", "boolean_dict = {True: \"Yes\", False: \"No\"}" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "async def is_commercially_available(smiles):\n", " \"\"\"\n", " Asynchronously check the availability of a SMILES string (chemical) in PubChem\n", " Based on https://realpython.com/python-async-features/#asynchronous-non-blocking-http-calls\n", "\n", " :param smiles: A SMILES string (representing a molecule)\n", " :returns: Class Reactant object with information from PubChem\n", " \"\"\"\n", " async with aiohttp.ClientSession() as session:\n", " # Create Reactant object, which will be populated during this function\n", " reactant = Reactant(smiles)\n", "\n", " timer = Timer(text=f\"{{:.2f}}s for {smiles} PubChem API call(s)\")\n", "\n", " timer.start()\n", "\n", " # Find the PubChem identifier (CID) for this SMILES string\n", " get_cid_URL = f\"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/smiles/{smiles}/cids/TXT\"\n", " try:\n", " async with session.get(get_cid_URL, ssl=False) as response:\n", " get_cid_response = await response.text()\n", " except:\n", " raise ConnectionError\n", " cid_str = get_cid_response.strip(\"\\n\")\n", "\n", " try:\n", " cid = int(cid_str)\n", " except ValueError:\n", " cid = 0\n", "\n", " if cid == 0:\n", " reactant.in_pubchem = False\n", " reactant.commercially_available = False\n", " timer.stop()\n", " return reactant\n", " else:\n", " reactant.cid = cid\n", " reactant.in_pubchem = True\n", " reactant.pubchem_page = f\"https://pubchem.ncbi.nlm.nih.gov/compound/{cid}\"\n", "\n", " # Get the compound's PubChem page\n", " compound_url = f\"https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/{cid}/XML?heading=Chemical-Vendors\"\n", "\n", " async with session.get(compound_url, ssl=False) as response:\n", " compound_vendors_response = await response.text()\n", "\n", " timer.stop()\n", "\n", " if \"No data found\" in compound_vendors_response:\n", " reactant.commercially_available = False\n", " else:\n", " reactant.commercially_available = True\n", " return reactant" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "# Set the number of simultaneous tasks to 2.\n", "# For synchronous (only one task at a time), instead set to 1.\n", "# For fully simultaneous, instead set to greater than or equal to the number of tasks.\n", "sem = asyncio.Semaphore(2)\n", "\n", "async def safe_calls(smiles):\n", " \"\"\"Run a limited number of concurrent tasks\n", " Adapted from https://stackoverflow.com/questions/48483348/how-to-limit-concurrency-with-python-asyncio#48486557\n", " \n", " :param smiles: A SMILES string (representing a molecule)\n", " :returns: Class Reactant object with information from PubChem \n", " \"\"\"\n", " async with sem: # semaphore limits num of simultaneous API calls\n", " return await is_commercially_available(smiles)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "async def check_avail_smiles_set(smiles_set: set[str]) -> dict[str, Reactant]:\n", " \"\"\"\n", " Check set of SMILES strings (chemicals) for their availability in PubChem\n", " Adapted from https://stackoverflow.com/questions/48483348/how-to-limit-concurrency-with-python-asyncio#48486557\n", "\n", " :param smiles_set: Set of SMILES strings (representing molecules)\n", " :returns: Dictionary of SMILES:reactant pairs, where reactant is class Reactant object\n", " \"\"\"\n", " # Determine commercial availability of each reactant\n", " with Timer(text=\"-----\\n{:.2f}s total elapsed time for PubChem API calls\"):\n", " tasks = [asyncio.ensure_future(safe_calls(smiles)) for smiles in smiles_set]\n", " reactants = await asyncio.gather(*tasks) # await completion of all API calls\n", " # Note: \"A more modern way to create and run tasks concurrently and wait for their completion is \n", " # asyncio.TaskGroup\" https://docs.python.org/3/library/asyncio-task.html#asyncio.TaskGroup\n", " # but this was only implemented in Python 3.11, so we use a method that is\n", " # compatible with older versions of Python.\n", "\n", " # Put reactants in dictionary of SMILES:Reaction object\n", " smiles_avail = dict()\n", " for reactant in reactants:\n", " smiles_avail[reactant.smiles] = reactant\n", " \n", " return smiles_avail" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "async def check_avail_smiles_list(smiles_list):\n", " \"\"\"Check whether each SMILES in a list is commercially available\n", " \n", " :param smiles_list: List of SMILES strings (representing molecules)\n", " :returns: Dictionary of SMILES:reactant pairs, where reactant is class Reactant object\n", " \"\"\"\n", " smiles_set = set(smiles_list)\n", "\n", " # When running in Jupyter, use this next line:\n", " smiles_avail = await check_avail_smiles_set(smiles_set)\n", " # When running outside Jupyter, use this next line instead:\n", " # smiles_avail = asyncio.run(check_avail_smiles_set(smiles_set))\n", "\n", " return smiles_avail" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "async def check_reactions(target_reaction_list: list[list[str, str, str]]):\n", " \"\"\"\n", " Check whether the starting materials in a list of reactions are commercially available\n", " :param target_reaction_list: List of reactions in format [target (SMILES), reaction SMARTS, reaction name]\n", " :returns: MolGrid drawing with one reaction in each row,\n", " nested list of where each sublist gives for a reaction: [Reaction object, all reactants commercially available]\n", " \"\"\"\n", "\n", " all_reactants_list = []\n", "\n", " # List of Reaction objects\n", " reactions = []\n", " for target_reaction in target_reaction_list:\n", " reaction = Reaction(target_reaction[0], target_reaction[1], target_reaction[2])\n", "\n", " # Create forward reaction\n", " rxn_fwd = Chem.ReactionFromSmarts(reaction.reaction_smarts)\n", "\n", " # Reverse reaction\n", " rxn_rev = reverse_reaction(rxn_fwd)\n", "\n", " # Run reverse reaction to determine starting materials\n", " reactants = rxn_rev.RunReactants([reaction.target_mol])[0]\n", " for reactant_mol in reactants:\n", " reactant_smiles = Chem.MolToSmiles(reactant_mol)\n", " reaction.reactants[reactant_smiles] = None\n", "\n", " # Add starting materials to set of starting materials\n", " for reactant in reaction.reactants:\n", " all_reactants_list.append(reactant)\n", " \n", " # Add reaction to list of reactions\n", " reactions.append(reaction)\n", "\n", " # Check commercial availability of set of starting materials\n", " smiles_avail = await check_avail_smiles_list(all_reactants_list)\n", "\n", " # Distribute Reactant objects into Reaction objects\n", " reaction_reactants_avail = []\n", " for reaction in reactions:\n", " # Add information to Reaction objects\n", " for reactant in reaction.reactants:\n", " # Set value for key of reactant SMILES, to reactant object from smiles_avail\n", " reaction.reactants[reactant] = smiles_avail[reactant]\n", "\n", " reaction.tally_all_reactants_commercially_available()\n", "\n", " # Put Reaction information into nested list--reaction_reactants_avail format is:\n", " # [[reaction object 0, all reactants available], [reaction object 1, all reactants available], ...]\n", " reaction_reactants_avail.append([reaction, reaction._reactants_commercially_available])\n", "\n", " # Create and format molgrid output to graphically summarize \n", " # which targets are accessible and which reactants are commercially available\n", " mols_2D = []\n", " legends_2D = []\n", " for reaction in reactions:\n", " mols_row = []\n", " legends_row = []\n", " mols_row.append(Chem.MolFromSmiles(reaction.target))\n", " legends_row.append(f\"{reaction.name} target accessible: {boolean_dict[reaction._reactants_commercially_available]}\")\n", " for reactant in reaction.reactants:\n", " mols_row.append(Chem.MolFromSmiles(reactant))\n", " legends_row.append(f\"Reactant available: {boolean_dict[reaction.reactants[reactant].commercially_available]}\")\n", " mols_2D.append(mols_row)\n", " legends_2D.append(legends_row)\n", " \n", " # Use MolsMatrixToGridImage if available in the installed version of RDKit\n", " try:\n", " dwg = Draw.MolsMatrixToGridImage(molsMatrix=mols_2D, legendsMatrix=legends_2D)\n", " except AttributeError:\n", " # Create null molecule (has no atoms) as filler for empty molecule cells in molecular grid plot of results\n", " null_mol = Chem.MolFromSmiles(\"\")\n", " pad_rows(mols_2D, longest_row(mols_2D), filler=null_mol)\n", " pad_rows(legends_2D, longest_row(mols_2D))\n", "\n", " mols = flatten_twoD_list(mols_2D)\n", " legends = flatten_twoD_list(legends_2D)\n", "\n", " dwg = Draw.MolsToGridImage(mols=mols, legends=legends, molsPerRow=len(mols_2D[0]))\n", " return dwg, reaction_reactants_avail" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'rdkit.Chem.Draw' has no attribute 'MolsMatrixToGridImage'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[39], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m Draw\u001b[39m.\u001b[39;49mMolsMatrixToGridImage()\n", "\u001b[0;31mAttributeError\u001b[0m: module 'rdkit.Chem.Draw' has no attribute 'MolsMatrixToGridImage'" ] } ], "source": [ "Draw.MolsMatrixToGridImage()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up Your Reactions" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "You specify each reaction as a list of:\n", "- target molecule: The SMILES string of the molecule you want to synthesize, for example \"OCN1C2CC(C=C2)C1CC1NCCc2ccccc12\"\n", "- [reaction SMARTS](https://www.rdkit.org/docs/source/rdkit.Chem.rdChemReactions.html#rdkit.Chem.rdChemReactions.ChemicalReaction): SMARTS strings for the reactant(s) and product(s)\n", "- name, which is simply for labeling for human readability, for example \"Pictet-Spengler\"\n", "\n", "You then provide a list of one or more reactions, where each reaction is a sublist." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Set up targets and reactions\n", "bicyclic_target = \"OCN1C2CC(C=C2)C1CC1NCCc2ccccc12\"\n", "aniline_target = \"c1ccc(NCC2NCCc3ccccc32)cc1\"\n", "naphthyl_target = \"[O-][N+](=O)C1=CC=C(C2NCCc3ccccc23)C2=C1C=CC=C2\"\n", "\n", "# Pictet-Spengler reaction SMARTS from https://www.rdkit.org/docs/Cookbook.html#reversing-reactions by Greg Landrum\n", "pictet_spengler_rxn = '[cH1:1]1:[c:2](-[CH2:7]-[CH2:8]-[NH2:9]):[c:3]:[c:4]:[c:5]:[c:6]:1.[#6:11]-[CH1;R0:10]=[OD1]>>[c:1]12:[c:2](-[CH2:7]-[CH2:8]-[NH1:9]-[C:10]-2(-[#6:11])):[c:3]:[c:4]:[c:5]:[c:6]:1'\n", "pictet_spengler = [pictet_spengler_rxn, \"Pictet-Spengler\"]\n", "\n", "# Amine oxidation reaction SMARTS from https://efficientbits.blogspot.com/2018/04/rdkit-reaction-smarts.html by John Mayfield\n", "amine_oxidation_rxn = \"[*:1][Nh2:2]>>[*:1][Nh0:2](~[OD1])~[OD1]\"\n", "\n", "# Reaction format: [target (SMILES), reaction SMARTS, reaction name]\n", "rxn1 = [bicyclic_target] + pictet_spengler\n", "rxn2 = [aniline_target] + pictet_spengler\n", "rxn3 = [naphthyl_target, amine_oxidation_rxn, \"Amine oxidation\"]\n", "\n", "# Create list of reactions\n", "rxns = [rxn1, rxn2, rxn3]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "RDKit models reactions as SMARTS patterns in the form for example `reactant1Pattern.reactant2Pattern>>productPattern`, so molecules that match those patterns can undergo that reaction. For example, here's the Pictet-Spengler forward (synthesis) reaction where a [\"β-arylethylamine undergoes condensation with an aldehyde or ketone followed by ring closure\"](https://en.wikipedia.org/wiki/Pictet%E2%80%93Spengler_reaction) as a SMARTS pattern." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rxn_fwd = Chem.ReactionFromSmarts(pictet_spengler_rxn)\n", "rxn_fwd" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And here's the Pictet-Spengler reverse reaction that we'll use to find the starting materials for two target molecules:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAACWCAIAAACNeWFmAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVzM6R8A8Gdmui+lkspVOpTVSTqUq4PkapWzyGI3RzYbhbVYi9a1JORYSVodjg4kilJKKLlSKZF0UoruaZ7fH8/+vjumkI6ZqT7v1/7RPPOd7/dTa+Yz3+f4PDSMMQIAAAB6KzqvAwAAAAB4CRIhAACAXg0SIQAAgF4NEiEAAIBeDRIhAACAXg0SIQAAgF4NEiEAAIBeDRIhAACAXg0SIQAAgF4NEiEAAIBeDRIhAACAXg0SIQAAgF4NEiEAAIBeDRIhAACAXg0SIQAAgF4NEiEAAIBeDRIhAACAXg0SIQAAgF4NEiEAAIBeDRIhAACAXg0SIQAAgF6tWybCgoKC0NDQwMDAJ0+etHyWxWLFx8cXFBSwNxYXF1+7dg1jzK0YAQAAdA/dLxGuW7dOXV197969gYGBpqamy5Yto9JbQ0PDkSNHtLS0xo8ff/LkSdL45MmTRYsWDRkyxMbGhslk8i5wAAAA/KibJcKgoKC//vrrypUrqamp165de/z48bhx42g0GnmWxWK9fv3a399/8uTJ1EtycnLMzc2joqJ4FDIAAAC+RutevYWTJk2Sk5M7c+YMR/ubN29kZGTExMTIQzs7u5EjR27ZsoU6ICMjQ19fv7GxUVBQkGvRAgAA4H/d7I7w+fPnRkZGLduHDx8eERHB/XgAAAB0dwK8DuDbVFdXS0hItGxPSUlRUlLifjwAAAC6u26WCIcMGcIxHZTQ0tLifjAAAAB6gG7WNTpq1KizZ882NzfzOhAAAAA9RDdLhF5eXu/evZsyZUpCQsLz588vXrx44sQJhND8+fMTExMRQrm5uWlpaVVVVUVFReSHurq6tLS0Z8+eIYTS09PJDwAAAADRzWaNIoRyc3O3bt2alJTU1NSkpqb2ww8/ODk5ubu7z5s3b9SoUe7u7iQjEvv371dQUJg7dy7VoqmpGRQUxIvAAQAA8KPulwjZFRQUDBo0iNdRAAAA6Ma6WdcopaGhQVFRUV1dva6ujtexAAAA6Ma6ayIUFhbu379/Y2PjvXv3eB0LAACAbqy7JkKEkKmpKUIoOTmZ14EAAADoxiARAgAA6NW68WSZ/Px8VVVVWVnZ8vJyqu42AAAA8E268R2hioqKsrLyu3fvcnJyeB0LAIB7SktL09LSWi0yRSkuLn7x4kV9fT3XogLdVzdOhAghY2NjBL2jAPQaxcXF1tbWSkpKM2fOVFNTs7CwKC4ubnnYixcvtLW11dXVYTIdaIvunQhhmBCA3gNjPH369KqqqoKCgoKCgsrKSgMDg8rKypZHurq6urq6wp5roI26WdFtDnyeCOvq6uLj41+/fq2goDBx4sSW+2YUFRUlJCQ0NDQYGBjo6OjwJEgAuovU1NT79+9nZGQoKysjhMTFxffv39/yMH9//+zs7AsXLuzbt4/rMYJuqXvfERoaGoqJiT179qyiooLXsXC6e/eumpqaq6vrlStXNm7cqKGh8ejRI/YDTpw4oaamdvz48djY2MWLF3/48IFXoQLQLWRlZcnJybX8ynjo0CFqm9LS0lIPDw9fX19xcXGuBwi6q+59RygoKGhoaJiYmJiSkjJlyhReh/OfhoYGe3t7CwuLgIAAISEhhFBAQMDAgQOpA7Kzs5cvXx4YGDh79mzehQlAd1JWViYrK9uy3dLSUlVVlfy8atUqa2trOzs77oYGurfufUeI/t87mpKSwutAPhEfH19SUrJv3z6SBRFCCxculJGRef/+fWFhIUIoJCREW1sbsiAAbVFfX19XV6esrFxUVNTyWU1NzcmTJyOEIiIioqKiVq5c+eLFixcvXmCMi4qKampquB4v6GZ6SCK8ffs2rwP5RG5urrKysqKiIke7r6/vtGnTEEL5+fmDBw9evXq1jo6OkZFRSEgIL8IEgH/V1NQkJSX9+eefVlZWMjIyYWFhOjo61dXVt27d+txLrl69qqSk5OzsbGVlZWVl1dTUtGbNmi8cDwDRvbtGEUKmpqY0Gi01NbWpqYl/Jol9+PCh1SGK5cuXOzs7I4RKS0vv3btnY2OzePHi5OTk+fPnDxo0yMTEhOuRAtAJEhISIiIi3r59O2jQoMWLF1MdlcStW7fOnTtXX19vbGzs5OT0hffpu3fvkpKSbt26lZiY+ODBAyaTSdrpdHpeXp6zs/OUKVOWLFkSEBBgZGTU2NgYGRk5bdq0Bw8e3L9/383N7ciRI+xnExERCQ4ONjc374pfGfQk3f6OUE5OjuxB8fDhQ17H8p8hQ4YUFhayWCyO9r59+5J9o2RlZadOnbp8+XJdXV1XV1cjI6PIyEheRApAR23cuNHKyqqmpkZPTy8vL09XV5d9qbufn9/ChQsHDRqkpaX1xx9/LF26lOPlpaWlUVFRXl5eI0eO7Nev34wZM/bt23fv3j2MsaGhoZubW2hoaHl5+datWxFCwcHB48aNs7KykpCQ6NOnj4+PT2lpaUFBwZ07d7j6O4MeBnd/Li4uCKH9+/fzOpD/5OXl0Wi0c+fOfe6A7du36+joUA/V1NT++OOPrKwsZ2fn8+fPf/z4kSthAtBR9+/fp9Fo58+fp1oyMzPZD4iOjs7OziY/h4aGiomJsVisN2/ehIaGLlu2TFtbm70+Ipn+5unpGRkZ+f79+89dtKmp6e3bt01NTZ87oLm5+cSJE0wms8O/H+gVekIiPHbsGEJo9uzZvA7kEytXrpSSkjp06NDDhw+TkpLWrl1bWVl59uzZVatWYYyLi4tFRUXXr1+fkpKycuVKcXHx3NzcHTt2kI8DERERS0vL/fv3v3nzhte/BwBfsnPnTg0NjZbtCQkJt27d4mj09PQk3/+0tLSo5CcuLm5pabl58+br16/X1dV1SlSurq4IIRcXFxaL1SknBD1btx8jRAiZmZkhhJKSkngdyCcOHDigpaUVGBj4559/ysnJmZmZNTU1ycjIDBgwACHUv3//mJiYzZs3h4SEqKurX79+fejQoY6OjnQ6PSIiIjU1NTY2NjY2ds2aNaNHj54+ffq0adPYPzsA4BMvXrzQ1NRs2X727Fk6nU6Nz/30008ZGRnv3r2Ljo5GCE2fPl1TU9PCwsLCwkJPT4/BYLQ8w4cPHyQlJdsXlbOzc2BgoL+/v5iYmK+vb/tOAnqPbrz7BAVjLCcnV1FR8erVKzICxw9u375dUFAwd+7cdrz27du3V65cuXTpUnR09MePH0mjiorK1KlTp06dOm7cOAGBT77BVFZWbtu2LSYm5u3bt2pqah4eHjNnzqSeLS0tZV9kOXfu3F9++aVdvxMAnJYtW1ZcXBwVFfXlwxISEl68eHHgwAEDA4OTJ09+7rCSkpJ79+7dvn07NjY2MzOzoqJCRESk7cHU1tY2NTX16dMHIXTjxo0pU6bU19e7u7tDiRnwFby+Je0ctra20tLS8fHxvA7kX9HR0WJiYgICAnfu3OnIeWprayMjI5ctW9a/f3/qf5msrKyTk1NoaGh1dTXGuK6uTl9fX0tLKzIy8tGjR4cPH1ZVVX379i11knv37omLi9//P+huBZ3oc12jrcrIyEAIvXz5kr0xLy/v1KlTLi4uampq7B9NoqKijx49anskHz9+nDBhgrGx8YcPH0jL1atXhYWFEUJ//PFH288DeqEekgjfvXvX3NzM6yj+deHCBfL2c3Z2/sJ4/jdhMpnx8fFr1qwZOnQo9UkhJiYWERFx8uRJYWHhwsJC6mCOP0VERETbP6oA+CZpaWk0Gu3ChQufO+DZs2fkGxvG+MGDBwih58+fY4yDg4PnzZtHqoZSpKSkJk+evHPnzqSkpIaGhm+K5PXr14MHD0YITZw4kRprPH/+POk+2b17d3t/RdDzdadEyGKxfHx81NXVSQ5wdHQsLi5mP+DRo0cuLi79+vV7+PAh1Xjw4EFyO6WlpRUXF9fVQR45coROpyOE3NzcqIF66itq20VHR589e7bViXN5eXn79+83MzOj0+kvXrxYvnz5pEmTWh7m7e0dEBCAMfbz8xs5cuTFixf//vvvx48ff2skAHyZl5eXoKCgq6urn5/fli1bTExM6urqfvjhhyVLlmCMFy5cOHz48F27dh0+fFhLS8va2pq8iiyoJcnP0tLS29s7MTGxsbGxI5Hk5uYqKSkhhKytrevr60ljQEAAnU6n0Wh+fn4d/E1BT9WdEuH27dvFxcVPnDhRXFycmZn5/fffnzx5kno2PDxcX19/8+bNZH09aYyPjxcSEgoJCamoqNi0aZOEhERFRUXXRejt7Y0QotFomzdvphoDAgL69+/PMaf8q8aPH48QYjAYZmZm+/fvLygoaHlMaWkpxtjOzm7p0qUtn921a1dgYCDGOCwszMjIaPny5XPmzBEREdm1a9c3RQLAV8XGxrq5uc2dO3fNmjXXrl1jsVgpKSlkXKC5ufn06dOLFi2aP3++j48PlZ9u3rx5+PDhJ0+edO7EzqysLAUFBYSQvb091R9D5svQ6fSgoKBOvBboMbpNIqyrq5OSkmpL/wZ7Ipw9eza1rKK5uXngwIE+Pj5dER6LxVq7di1JXUePHqXa//zzT7JM6uDBg990Qh8fn7Fjx1Kz6Wg0mqGh4datWzMyMjiOXLBgQduXjgQGBgoLC1dVVX1TMAC029WrV5OSkri5pC8jI0NGRoaMTVDDBGS+DIPBCA0N5VokoLvoNokwMzMTIZSXl8fRnp6ePnbsWPYeFfZEOHz48AMHDlBPOTo6Llu2rNNjYzKZS5YsQQiRu0/SyGKxNm/eTHLYX3/91b4zv337NiAgwN7enr1g25AhQ9zc3OLi4shX6S1btqipqbXxgyY7OxshlJOT0754APhW3333HUKIC6MS7FJSUsj2nytWrKAaN27cSN6kV65c4WYwgP91m0QYExODEGq53jY3N3ft2rXsaYA9EcrLy5PuQcLV1XX69OmdG1hDQ8OsWbMQQuLi4tHR0aSRyWSSUlICAgKnTp3q+FXq6uquX7/u5uZGTS5QVlYmiTA7O1tISGj79u3UweXl5RjjZ8+e5efnY4wjIyOzsrLIU2RRI9U9BUCXevXqFRkF/NaZLx0XFxdHll78/PPPVKOHhweZYcA/M8wBP+g2iTAtLQ0hxD438nPYE6G6uvrhw4epp+bNm+fi4tKJUX38+NHa2hohJCMjc/v2bdLY0NDg6OhI3m+d/t2zubk5JSXFy8vL29ubavznn38kJSW1tLTs7e1Hjhw5ePDg5uZmGxsbUsXG3d1dTExs7NixZmZmUlJSly5d6tyQAPicQ4cOIYRmzZrFk6vHxMSQ+dvbtm0jLSwW68cffyS5+e7duzyJCvChbpMIq6qqBAQEzp49+9Uj2ROhjY0Ne9+Inp4e9ZbouIqKCrJfRP/+/amhu48fP9rY2CCEpKWlExMTO+tabQkmMjLS398/Nja2traWREJ+wBjn5+efPXv2woULXTpXCAAOtra2CCF/f39eBRASEsJgMKSkpKjls83NzfPmzSPv0PT0dF4FBvhKt0mEGGMnJ6ehQ4dSBXyLi4srKirKysrOnz/PvnKOPREGBQXJysqSHsKrV68yGAzy87179zo4V62urk5bWxshNHToUGrksqKiguyPqKCg8ODBg46cv30CAwOdnZ1bnWIKup2EhARvb+/ff/89Ojq65T/X+/fv7969e/fu3WlpaTwJ76tqa2vFxMTodDrHMicuCwwMpD4QiMbGxunTp9NotGPHjvEqKsBXulMirKqqmjFjhqCgoK6urr6+vqSkZGRkZHx8vIiICBmBUFNTIxuhKSsrq6qqYoybmpocHR3FxcX19fVFRET27t2L/7+qV15e3snJKTIyst0DZj4+PsOHD6d6a4uKioYPH44QUlFRIUuGuc/Ozg4hBHPEu7vGxsYZM2ZISUnNnj17yZIlAwYMmDlzJvsBfn5+ffr08fT09PT07NOnD39+oJO6a0ZGRrwOpBX19fWXL18mP798+dLFxUVVVVVRUdHGxiYlJYX9yJSUFEM2XygdALqv7lR0W0pK6uLFiwUFBTk5OdXV1ePHjyeTpOvq6sgBwcHBHC8REBAICQnJyckpLCzU1tYmK+tLSkoGDx786tWrwMDAwMBASUlJGxub6dOn29ra9u3bl7zw+fPnly9fLi0tVVFRmTVrFtVONDc3h4eHDx48+N69e6KioqRRXFxcWFhYS0vr2rVrpLI295maml66dCk5OZl0/oBuysfHJy4u7u7du8OGDUMIvXv3Lisri/2AI0eOrFu3bsOGDQghCQmJw4cPt9znj+cuX76MEGKvc8s/hIWFSbdtSUmJsbGxlpbW0aNHZWVlw8PDV65cmZqaSq1cysnJaWxs9Pf3Jw859hwGPQSvM3F73L17V05O7scff+zISdLT07ds2aKvr0/9KQQEBMgK/cOHDwsICEyaNGn16tXm5uYKCgrs1RF9fX2HDBkiLi5ubm7Occ6SkpJ37951JKoOSkhIQAjp6enxMAbQcSYmJm5ubi3bb9++TarImpqa2tvbk1VDS5YssbGx4XaIbUAKnt2/f5/XgXzJ2rVrBw4cyD6plWMl0s6dO2fMmMH1uABXdb9EGBMTQxbVzZgxo4MFmYhXr14dPXrUzs5OSEgoPT09OztbQECAff17TEwM+wjN+fPnMzMz9+zZ0zIR8lxtba2QkBCDwYAl891av379Tpw40bJdVFSU7Pacnp4uLy+vrq6+ZMmS7777jox885WHDx8ihPr370/eOxUVFaQQEr8ZP378L7/80rKdLNXFGK9evdrR0TE4OPjUqVMw+t5T0Xl0I9pO4eHh06dPr6mpWbBgQVhYmKCgYMfPOWjQoGXLlkVFRZWWlurp6V26dElRUZFs7ElYW1vTaLQnT56QRf329vZ8uzWgqKionp5ec3Pz3bt3eR0LaL+GhgYhIaGW7WVlZdOnT0cIJSQkyMvLu7u7v379Oi8v79KlS1yP8SuoflFSWSkgIEBRUXHTpk28jovTq1evWh3IoNFoJPL+/fuXlJQkJiaGhYVpampGRERwPUbQ9Xidib/BqVOnSCH5VatWdd1eEytWrGi1hrWjo6OzszP1kD/vCDHGP//8M0Jo69atvA4EfJva2tr4+HhS/0FPT2/Lli2fO7K4uFhAQCA5OZk8DAoKEhAQ4O3MzJbIdtnU1JKJEycivpzGZWBg8IU/NQcvLy81NbUOXrHbffD2Bt3mjvDAgQMuLi5MJtPT09PHx4fs8NAVGhoaOLa9JYKCgv7+++8uumgnIus3kpOTeR0I+LqamprY2NgtW7ZYWVn17dt33Lhxrq6uTCZzzJgxp06damhoaPVVVVVVTCZTXl6ePDQyMmIymRUVFVwM/CsqKipSU1OFhIQsLS0RQh8/fkxKSmIwGGSJLV9RU1O7d+9eGw82MjJ69eoV7v6bmQNOvM7EX8di4d9++xMhRKfTjxw50tWX2759u7a29lcP49s7wjdv3iCEpKSkuFnmuGdjMrGqKv7pp/9arl3DJiachx08iIcNw3Jy2NYWf2H5THk5vngRr127ydDQkJqaiBBiMBj6+vpubm5VVVUlJSWDBg0yNDQMDAyMjY3du3cvKSRkYmISGxvb3NxsYGAwceLE27dv37lzx9ra2sDAgH/248QYnzlzBiFkZWVFHp47dw4hNGbMGN5G1arLly/TaLSLFy9SLaRCYXp6OhnUPH36dFlZGcaYxWItWrTI2Ni4g1fs4Afv48ePw8LCLl26VFlZ2fLZmpqa+Ph4jlKUT58+pYosttvLly8vXLhw8eLFVnf2bm5uvn37NvlDUZ48eRIaGpqUlNShf5yFhTg8HJ8/j589a/9JvobfEyGTiZcuxYMG5SorDwoODubCFZOSkhBCXy1FyFeJsKysLCIiglrXP2TIEIQQ+6aMoCOamjBCWFAQx8b+23LxIlZW/uQYf38sIoIDA/Hjx3jOHKyhgdknchUX49BQ7OaGDQ0xnY4Rwrq6qxBCAgIChoaGbm5uoaGhHPONS0tLvby8zM3NzczMFi5ceOPGDYzxrl27yCdaeXm5p6fn2LFjTUxM1qxZQ6aS8o+5c+cihPbv308euri4IIR27tzJ26goHNt8btu2TUhIaNSoUbNmzdLW1iY7Jg4cONDPz6+xsXHq1KnS0tI2NjY6OjoDBgzo+Nuq3YmwoqLC0tJSXFzc1NT0u+++69OnD3v+Likp+fXXX+Xk5BBCVMWc6OhoKysrhNCUKVPaHXBTU9OSJUuEhIQMDQ2NjIxERUXZt3Krq6s7cuSIpqYmQoh9hwN3d3dxcXFLS0t5eXkrKyuyXPtpC9mZmfjpU87/cnMxxri5Ga9ejUVFsYkJnjABS0riadPwt+/t2hZ8nQjr6/H332OEsJgYjomp5dp1Fy1aJCkpuX379itXrpw4ccLBwaGxsfGXX37ZsGEDxjg7Ozs0NNTZ2VlLSys0NLTlvkjcR8onUv86ySJCLtw987OOfwWmkES4YgXW0MCk+kLLRDhhAqY2hayowIKCOC4OX7+OFy3CQ4dihP77T0wMjx+P//orPS4urqampoOx7du37969ex08SediMpmysrLo/5ucsFgsslku/2wKPXDgwOHDhxcVFVEthYWFISEhAQEBiYmJpCvl/fv31JqKhw8fnj59+vLly1TNwo5odyKcO3euhoYG6ZvFGJ87d469XOqtW7d27NiRkZHBngg3bdp07tw5Dw+PjiTCnTt39unTh7pWamoqe1WBsrKyX3755datW6NGjaIS4aNHj+h0OilNUFRUpKCgcPLkSRaL1bJLUqNv30/eHuQ/DQ2MMT5wAMvKYqpE1+vXeNgwvGRJu3+RL+DfRPjxI7axwQhhaWmclMTVSzc3NwcEBMyYMWPMmDGOjo4nTpxobGyMiooim0tERUU5sCG7wPNWQEAAQoha7US2IXVycuJtVDwUEhJCp9OdnJxKSko6fjaSCB8+xDo6mMyroBJhQAD+/XeMMR4zBnt4/PcSdXV89CjesePf97WEBLa0xJs34+vXcSfu/BEWFoYQkpWV5Z8cgzG+desWQkhTU5M8JBOYBw4cyNuoKCRVKCoqknUdOTk5c+bM4Wa9mPYlwo8fP7ZabLmxsZH05VIP2RMhsXnz5o4kQk1NTXIPwKG8vJza+hhjbGxsTCVCLy8vU1NT6qlVq1aRfnKtFqyNjLCWFud/trYYY6yhgTkm/Z07h4WEcHV1u3+Xz+HTyjKVlcjODiUnIwUFdPUq0tPj6tXpdLqzs7OzszN7I6leRn6gfuYTHBNkYL5Mfn4+g8EIDAyMior67bffVq5c2fGVNgwG8vVF1tZo9uz/GoWFEaks5OCAtmxBBgZIQQFduIDy8tC7d2j6dCQqiiwskK4uYhsN7DQzZ86cNWvWuXPnJk6cmJCQQMrQ8BxHQRnycOrUqbyMiQ3Huo7IyMjg4GABAYGZM2fyOrQvyc/PZzKZpMo/u9u3b48fP762tpYqcfVlYWFh5ItyWwwePNjf3z8/P9/Y2JjjqZqaGnl5+fj4+LFjx7Z84atXr9j/NWpqapJ99MgKtDaprUU5OWjUqE8ajY1RYyPKzESjR7f1PG3Dj4mwpATZ2KBHj9CQIejaNaSuzuuA+J6amhpZ7ZSbm6umpqajoyMlJZWXl1dcXKyoqMidGMjHCr95//79mjVrRowYQaYvdpC5OZo1C61ahVas+LeFSoorV6LmZuTjg8TF0ezZSFkZKSoibW2krd3xy34Wg8EICgqqqakhQ0G3bt1SUVHpwuu1TauJkH8KrXEzvC+8KVp9Cn9+Pur79+8RQpKSkhzthoaGd+/eJTsvtkVhYSG5ZW8LTU3NmpqaxsbGltcVFRWlSgC29OHDB/aylOLi4h8+fGjjRf9VX48QQlJSnzT26YMQQv+vqdmJujARMpnowwckKYmoxQh1dYjFQmx7rf+rtBQxmYjsOFtUhMaMQfn56LvvUEwMUlLqugC/2bp168LDwy9evEiKa/MVY2Pj8PDw5ORkNTU1BoNhZGQUGxubkpJib2/P69B6lD170LBh6OpVznY6Hbm7I3d3hBAqK0M//cSlL3BCQkLnzp2bPHnyrVu3SC5U4ul7pqSkJDMzU0pKasyYMQihsrKy9PR0UVHRcePG8TAqClnXISwsTNY1VldX3759m8FgkF1F+RmpV/f69WuOuseSkpKjOG6bvsjR0dHAwKCNB4uJiUlJScnIyBQWFnI8RafTv3BdRUXFd+/eUQ/Ly8vJN/KQkBCOI0UZjGnNzZyvl5JC1tZIVBS9efNJe0EBOXsb4/8Gnd7ZSklIwAjhdev+a1m3DnPs0FlYiC0ssIAAFhLCenr4xQvMZGIHBzxqFGbr9+aZqKioyZMnHz16lDycPXs2Qog/K/3v2rULIUTVX/3tt98QQh7sw1a9ibe3N+kLlZaW3rdvXwdL8ZExwidP/n148CAWEPh3jDAvDz969MnBTCZevBhraWFuLmeoqqoin0qampqdMizaEaWlpWSOK8aYLL21s7PjbUiUwMBAhBCZF4oxDg0NRQhZWFhwM4b2ffA2NzcrKip6enp++bCuGCO0tLScPHnyVw9jHyM8fPiwkpIStWrCzs5u6dKl3zxZZvJkbG//yTU2bcKDB+OO7aDXqq7tGhUSQn5+aMECNGJE6wcsXYqYTFRWhkRF0ezZaPFidPMmOn0aMZlIQqJLQ2uT8vLy6OhoMTGxZcuWIYRMTU1DQkKSk5P5sNJ/q8OEt2/f5mVMvKOqqtrc3Ozk5LR7924FBYXOPfny5Sgw8N+vqocOoYcPUWwsSklBCxeiYcPQ06cIYxQZibqs5EMrpKSkrl27NmHChAcPHtjY2Ny8eZNszNKlEhMTjx8/npeXJyMjM3PmTBcXF1Lmol+/fv369UtMTDx06NDz589HjBjBP/dbfN5t+wV0On3btm2urq5SUlKzZs0SFBS8ceOGnp6emJjY77//fvr0aQEBgesbgN0AABpFSURBVPT0dCaTiRB69uwZxtjAwKC4uLioqKi4uLiqqiotLU1JSakdYyVbtmyZMGGCq6vrTz/9JCcnd+fOHWFhYSsrq0WLFv32229aWlpZWVk1NTU1NTWvX79OS0sbNmzYggULfv3119WrV69evTomJubatWt3796l0WiOjo4cJ+8nKtpKVyfp1di2DVlYoLVr0bJlSFgYXbyI9uxB/v6oK0ZhOj21UhISsJQUXr8em5r+++2Y446QycQCAjg09N+Hd+5gGo0vbgQpZO8bBQUF8vD+/fsIIXV1dd5G1ar6+noRERE6nU72oK+qqmIwGMLCwhxLa3uPTlw+wWLh69fxx4//tRQU4Fu3MMa4oQFTf+B793BoKL55E7PtZMBVpaWlZMzG2Nj4Q9cst6KcPn2awWC4urqeO3fO19d3wIABZOcWIiYmpk+fPvv374+OjnZ0dBwwYEB1F8z0+1ZMJpP0K5LtQpubm8mXpKdPn3IzjI588IaGhpqYmEhLSysrK0+ZMiU1NfXZs2cLFixobGxkMpmqbDQ0NDDGBw4cYG9kX+f3TZKSkqytreXk5Pr3729ubh4eHl5fX79gwQKScb///nv2q5A9ye/evWthYdG3b19dXV1SKb49UlOxjQ2WksJiYtjEBEdGtvM8X9PlibC6GispYdKbSCVCe3u8bx9msbCEBKbePkVFGCHMV7tts1gsUsjqxYsXGOOmpiYJCQkajcafdfTJXSBZ44ExHjFiBEIoictLTwBPvX79msyXmTBhQtd9B6qtrZWRkWGfUl9ZWcm+Q8ubN2+of3gfP35kMBgxMTFdFEzbkU3Khg0bRh7euXMHITRo0CAuh9HVdyCgHbq8+0ZSEu3Zg7y8UFnZf43z5iEzM0SjoRUrkKcn2rkTbdmCSPdJTU1XR/QNaDQamTdMuhwFBARGjRqFMU5JSeF1aK3g6B0lVY97be9o7zRgwIDr168rKSnduHFjxowZn6tW2kGZmZmVlZXLly+nWqSlpWk02qNHj3bu3IkQUlJSIv/8EELCwsKMrlg78u1a7RedNm0aL2MC/IEb4xhz5yJ9ffTrr/+1fP89MjJCCKGdO9G+fejlS0SjIbK4ZeBALkT0DbrREj2O2BYsWHDkyJFZs2bxNCjAbUOHDr1x44aCgkJMTMy8efPIoFHnys/PFxYWbjk9taSkJD4+nqMxKipKTEzMiLzheYpsVtUdBwhBl+u6m03SNUo8e4ZFRfGkSZyzRtmdPIllZDBbpQK+wLHnO3nz8Gf54NLSUg8PjytXrlAtubm5u3fv9vT03LdvX6ulcjHGLBbrwIED3t7eZHAR9AwZGRlkvoyzs3On1+OOiopiMBhtmYv7+vVrJSWlQ4cOdW4A7cBkMrds2TJu3DgSdlFREY1GExUV7ZSqad+kqz94QTtwKRFijL28MEL/JsKzZzHZTK26+t+5Bg8f4sGD8aZNXRdOO1F7vpNCvZWVlXQ6XVhYuL4TK2V1jYCAAEFBQRsbm3Xr1tna2kpJST2hVgCw8fPzI0W6SWVI0GOkpKRISEgsWLCgqcPfLlks1uPHjw8dOjRnzpygoCBSH+SrVXazsrKGDh361Rn/PHH8+HGE0LRp03gdCOAL3EuENTVYReXfRDhnDvbxwRhjX18sJoYVFLCoKHZ357vbQWL06NEIoWvXrpGH2traCCFST5ZvvXnzRkREZMeOHVRLQkJCyzuDoqKivn37RkVFQSLskTIzMwsKCu7fv89eYJooKCjI+xTHdzsmk/nkyZOjR486ODiQPQ2IefPmsVis4cOHT5s2jSpLzWKxmpub6+vrqX0wIiMjZWVlye5RfGjGjBkIIWqJMOjlujARNjVhjg2zamo+mYNOVFbivLzOrETc6dzd3RFC1DbWZBHhnj17eBvVl/n7+8vIyLS8bc3KykpNTaUezpgxY9myZZWVlZAIe56cnJzRo0czGIyBAwcKCAjY2dlVVVVRz44aNUrm//r06YMQevDgQX19fWJi4vbt2ydNmsRRVWvAgAHz58/38/PLzs7GGKenpysoKAwfPtzNzW3FihVqampXr149c+aMjIwMxvjgwYM0Gk1HR2fZ/4WHh/PsD9FCfX09+e2onRxAL9eFC+oFBJC09CctYmKtHCYtjaSl0aVLaNs2NGkS2rq16yJqJ1NT07/++ouahGJiYnL8+HH+nDhKefHihbq6urCwMEf7yZMnU1NTyYyGsLCwpKSkZ8+e8SA+0MXq6+snTZqkrq5eVlbWt2/fioqKTZs2VVVVSf2/eCPZFIIIDg7esGHDiBEjtLW1c3JyqHZ1dXVzc/OxY8eam5tzVDHV19fPzs6+ePFibm5u3759T5w4YWFhUVlZeePGDYTQiBEj/Pz8yJENDQ0cM2sqKio46oRxWUJCwocPH/T09AYNGsTDMAAf4XUm/ldkJEYIjx3L6zhaQ/Z8JwtUMcbZ2dmIbZU9f/Ly8jJpuYc6m/fv3yspKZ05cwZjDHeEPc/58+eFhYU/N0OKw+jRo318fDDG8+fPV1VVXbZsWUBAwMuXLzsYA4vF8vDw0NXVZZ+HlZ+fP3ToUHd39w6evCPc3NwQQhs3buRhDICv8EsifPsW02hYVJRnVTm+LD8/n/qZWmVP7QjPh44ePdq/f3/W54vy/fjjjzIyMt7e3t7e3ps3b0YIeXh4FBQUcDNI0HW2b9+uq6vbst3Dw8PBwYG9JSEhQVpamlSi6dz5pZWVlRoaGgghU1PTj/8fFLl8+TIpA7t9+/ZOvNY3UVNTQwglkwl7AHBhQX0bycoiDQ1UV4cePuR1KK0h8yoJGo1GdgXjz9WEhIWFRWlpKdm4tVW6urpkdLCysrKqqgohVF1d3RVrzgBPkB7Rlu1z585duXIle8vevXt//PFHCQkJhBC9UwukSktLx8XFqaioJCcnT5s2rb6+HiFka2tL9v/buHHjnj17OvFybZSVlZWbmysrK8sPSxsBv+B1Jv6PiwtGCO/fz+s42sDb2xsh5OrqytswWq2hdf/+fXIjuH79emFh4fXr11+8ePH48eNTp06trq7etWvX/PnzOV4CXaM9z65du7S0tL56WHZ2trCwcJf2BOTm5pIBQmtra2r21qlTp+h0Oo1G4/68TZJ9nZycuHxdwM/45Y4QIWRqihBCfHyX9R9+qC9z8OBBPT290tJS9sagoCATE5PVq1cjhHbs2BEcHPzy5ctDhw7dvHlz6tSpgoKCZmZmLXcoFBQUdHBwkOCH/T5AJ9HR0cnJySHj2V+wb98+R0fHgV1Zz4mqdHPt2jWq0s3ChQvJqKSrq+s///zTdVdvqba2VkpKytbWlpsXBfyO15n4P5mZGCGspMTrONqArLKn0+lklT33rV+/HiFEp9ODg4OpRl9fX9K1xZ9LmAE3MZnMkSNH6uvrP3z4kMViVVVVBQUFsVisqKio06dPk2Pevn0rLi7OsXddF2m10s2+ffsQQgwGI5Tag6aLNTY21tbWNjY2NnxmMsLHlgu8QC/AR4mQxcJkj8YOz1bjBhsbm8mTJ7NPouEOFotFbvgYDAb7xjekt5ZGo+3evZvLIQH+VFZWNnv2bBEREVFRUSEhIUtLy7dv3+7du5farnnLli0TJ07kWjyk0g1CaMWKFVTjhg0bEEJCQkLspQE7oqamJjEx0dvb29LSkn1a0M2bN42MjMg3xeHDh1+9epXjhT4+PsrKygghMTExcrcKeg8+SoQY4ylTMEL4n394HcfnFRYWZmdntzo419zc/OrVq+Li4q67ekNDw+zZsxFCwsLCFy5cII0sFoss+WcwGCdOnOi6q4PuqKGh4e3bt51ebrR94uLiREREEEI///wz1ejh4UHST3x8fPtOW1lZGRUVtXbtWmNjYzIllejbty8ZL793756goODq1asLCgoqKyt9fX3nzp3LfoajR4/26dMnPDyc/LlaFuIBPRt/JcLt2zFCeOVKXsfRmri4uGHDhjEYDGlpaXFxcY7J34mJiUOHDpWXl5eSkho5cmRXzD6oqamZPHkyQkhCQiI2NpY0NjU1LVq0iKTG9u9+CQC3xMTEkDoP27ZtIy0sFuuHH35ACOnr639hwQ8HJpMZFhbm5uamq6vLPtmV7JW2Zs2aiIgIqt6bg4PDlwvlDxkyhL0eIeht+CsRJiW91tFZbmw8jteBcMrKyhIVFXVzc6upqcEYJycnL168mJoCx2Kx9PX1jx07xmKxamtrzc3Nqe+btbW1nVLevrKykmzw1q9fP2pQp76+fubMmSQ1UqVQAeBz58+fFxAQQAjt2rWLtDCZTE9Pz8LCwrafhMVi9evXj0p+hoaGnp6ekZGRlRx1HTHGGGtqarZaE3Hs2LE3btx4//49Qig+Pv7kyZObN2/urE5a0I3wVyKktnqorq7mdSyfcHd319LS+kL/EpPJpH7ev38/tQv2sWPHREVF7ezsjh492u7+lpKSEj09PYTQ4MGDSaVHjPH79+/Nzc1J/w+fVwAHgENAQABZPuHn59fuk2zbtu33339PSEhodagCY/zhwweyRYaEhERQUFDLA/7444+nT58+fvwYIaSmpubi4rJ69eo+ffr8+uuv7Y4KdEf8lQgxxqNGjUIIUV1/fMLGxmbVqlUt2ydMmHD48GGORg8PD2tra/Kzu7s7jUYj31sZDIa5ufnu3bufP3/e9kvn5+erq6sjhIYNG0b1uJaUlOjr6yOEFBUVHz161K7fCQBe8vX1JTOfL1++3Imnra6uvn79uqenp5mZmZCQkLy8PIvFUlFROXDgwOdekpWVhRB68OABeXjmzBlRUdG27LYIegy+S4RkSuTvv//O60A+oauru3Xr1pbt586de/jwIXtLSUmJnJwc+3BdWVlZQECAnZ0dewlsVVVVNze3xMTEr85iKCgoGDhwoKGhYVlZGWl5+fIlqVylqqrKz2XeAPiyv/76y8LCouPdP8XFxSEhIStXrhwxYgTHeOHo0aPfvn1ra2trb2//uZd/+PCBTqffunWLPIyLi0MI8WplFOAJvkuEISEhCKFJkybxOpBPTJ48efny5V89rLq62sTEZMGCBa0+W1VVFRISMm/ePLKgilBUVMzNzf3yabOysqgPi8zMTLL82cDAoLS09Ft/EQD4SkZGho+Pj7e3d0RERMsNhBsaGkJCQtLS0lq+8M2bN6GhoW5uboaGhlSny+fGC6Oiouh0ur+/P3lYU1Pz7NkzjHFwcDDpZbGzs7O3t2cymUwmc9asWfr6+l33KwM+xHeJkGz1IC0tzScTvom1a9eqq6uzDwS2lJeXp6enN3fuXOr9HBQUdPPmzZZvbyaTmZiY6OnpqaGhISsr++XTsrt37x6p921hYQHfWEF35+HhISgoaGtr6+LioqqqOnr0aGq0r6GhYfv27YqKikJCQtSoRE5OztGjRxcsWMBRCkdSUtLGxuaPP/64detWyz04CV9fX0lJSQUFBV1dXUlJSXJOZWXliIgIjHFmZuaQIUPk5eXl5ORUVFRguKG34btEiDEmm4Q9fvyY14H8Jy8vT1xcfOnSpWRr03fv3pFRzBMnTty5cwdjfPnyZVlZWU9PT2r+N5PJJPt69+3b18HBISAggH1bVMrr16/bGEN1dbWsrCxCaOrUqZ0yExUAHoqKiqLRaNTC9pqamkuXLlHPslgsX1/fnJwcJycnKhF+//337MnP0tLS29s7MTHxc2ViONTW1qampiYnJ7faldLU1JSWlpaWltb2L6agx+DHRDhnzhyEEPer8X5ZUlKSrq4ujUbr16+foKCgi4sLxtje3t7f37+srKxl2f7i4uJ169ZpampSLSIiIra2th2ZPhoWFrZo0aKWt5gAdDsLFy6k5pSxe/jwIXtVCvZEeOrUqdmzZ/v6+j5+/LjtKw4B+CoaxhjxmYMHD7q5uS1cuPDUqVO8juU/N2/eNDc3r6ysrK+vV1RUJAuhCFLLkeN4aWlpMnTx4sWLqKioS5cuxcfHU/scaWtrOzg4TJ061dDQECH0/v37kydPpqWl0Wi0MWPGLF68WEhIiDpVdXW1n59fRkaGrKysk5MTbB8DegBzc3MzMzNSGpCdpqbmTz/9RIolIYScnZ2lpaV9fHy4HiDoRfho9wkK2dshNTWV14H8x9fX19LScunSpfLy8gMHDmTPggghOp0u0wI1gK+qqrp69err16+XlJQEBASQfR4yMzO3bt06bty4+vr6wsJCPT29gIAAHR0dHR2dQ4cOkWIxRG1trZmZ2ZMnT2xsbERFRceMGcPP+yAC0EZ1dXXs86gpd+/eXb58OffjAb2ZwNcP4TpdXd24uDj+ue/5888/vby8aDSatrZ2R84jKyvr7Ozs7OxcW1sbExMTGRkpKCgoIiLi6ekpKSl5584dUVFRhNCKFSs+fvzI/sL169fPmzeP/Hznzp3IyEjyXQGA7ktFRSU/P79le58+fbgfDOjleHNH2NTUdOzYsenTp5ubmzs7O9+/f5/9WQEBgffv3zs5OU2YMOHnn38uKiriSZAIIYyxh4eHl5cXg8E4duzY2rVrO+W0YmJiM2fO9Pf3P3bsGEIoLi5uxYoVJAsihMTFxRUUFOrr6/38/MrLy8XExKgs+O7du+zsbC0trU4JAwAeMjMzCw8PLy8v53UgAPAiEWKMHRwcNmzYYGFh4e7u3q9fPysrq7KyMuqAyMhIZ2dnBweHHTt2FBUVWVlZ8WQgs7m5ecmSJXv37hUSEgoODl6yZElXXKWmpqasrIzUjmFXW1u7Y8eO4uJi8vDOnTt2dnYaGhpOTk7Ozs5dEQkA3PTjjz8OHTrUzMzs9OnTSUlJJ0+e9PT0RAg5ODicPXsWIXT37t2wsLBXr149f/6c/MDrkEGPxYPJMhEREfb29g8ePNDR0SEtlZWV7GvM3dzcnj9/Hh0djRDKyMjQ19cvLCwkW4VxTUNDw7x58y5cuCAuLn7hwgVra+suulB9fb2YmNjVq1e/fImysrL09PSMjAxvb+/w8PBx48Z1UTwAcE11dfX+/ftjY2MbGhoGDBgwa9asuXPn+vr6jhw50tjYeNeuXdevX6cO9vLymjhxIg+jBT0Z9yeqenh4tLolyj///BMZGYkx9vPzk5CQIIuKtm/frqWlxeUFAx8+fLC0tEQIycjIJCcnd/XllJSUvlAIkcOSJUumTp3apfEAAECvwoOu0fz8fFVV1ZbtDx48yMzMRAgtW7Zs3LhxdnZ2ampqe/bsuXz5MscszS5VUVFhaWkZGxurqKiYkJBgYmLS1Ve0tbX19fX98OFDq89ijBMTE6mHpBZwV4cEAAC9Bw9mjYqKitbX17ds37VrF/nBz8/v0aNH9+/fz8rK2rdvn5WVVWpqak5Ozt9//z1t2jQrKytqXkmnKyoqsrGxefLkiYqKyvXr14cOHdpFF2K3fft2CwsLAwODuXPnysrKpqSkqKurr169WlFR8c6dO/Ly8jNnzrSysjIzM8vOzg4ODo6MjORCVAAA0EvwYIxw8+bNYWFhT58+ZS+Vy27IkCGenp6urq4IocbGRhUVlQ0bNjx//vzAgQMIIVFRUTMzMzs7O0dHR0VFxU4MLCsry8bGpqCg4LvvvouJiVFSUurEk39ZbW3tmTNn0tPTBQQENDQ05syZIy0tHR0dPXbsWGlp6eLi4r///vv58+dycnLz5883MDDgWmAAANDj8SARZmRkGBoa+vv7U7Mfm5ubGQwG2QxFXFz8u+++c3Bw2Lx5M0Kovr5+4MCBO3fuNDMzu3DhQkRExP3790nMDAbD1NR02rRpM2bMUFNT62BUaWlpkydPLi8vHz169JUrV/r27dvBEwIAAOgWeFNibffu3evXr7e1tR0+fHhhYeHt27dzcnK+//77/v37Hz169J9//lm6dOnixYuHDBly8eLFqqqq27dvS0lJkdeWl5dHR0eHhYVdv369oaGBNKqqqtrZ2Tk4OJiamrYs+9kWKSkpVlZW48aNCw0NFRMT67RfFQAAAH/jWa3RZ8+eRUdHV1RUKCsrT5o0SUVF5fnz54KCgkOGDKGeffv2raampqOjY6uDgrW1tXFxcZcuXQoPD6eWIcrJyU2ePHnq1Km2trbi4uLUwbm5uS9fvpSUlDQ0NGSfevPy5ct3796RnzMzMzU0NFRVVclWRwAAAHoDfiy6/a2YTGZCQkJERERkZCS16lZCQsLV1XXXrl1lZWVz5sxJTk4eNmxYSUmJqKjo+fPnqWG2X375JTw8nDrVq1ev/Pz8umjtPAAAAD7UExIhu6dPn166dCkqKio5OXnjxo3btm2ztrYuLy+/dOmSsrIyxvivv/6aOHGirq5uy9dmZWUZGBi8ePGif//+3I8cAAAAT/S0REgpKCgQFBSsr69XVVW9cePG+PHj2Z/FGLNYLAaDwd74ww8/0On048ePczdSAAAAvMSP2zB1ikGDBikqKmZnZ9PpdDMzM45nAwMDOW77ysrKzp49S+2CBgAAoJfosYmQqKioEBMTY9/klrCysjp37hx7i4+Pz/jx4zu40RIAAIBuhx/3I+xEAwcO/PjxY1VVFccmZ4qKiuyL8Wtra/38/EJDQ7keIAAAAB7r4XeE2traQkJCYWFhXz7s5MmTysrKHOOIAAAAeoMenghlZWXd3NzWrVv3zz//VFZWlpeXBwQEFBYWpqamrlu3jhzDYrEOHDiwdu3az5V8AwAA0IP18K5RhNCff/4pJye3adOm+fPnS0tLjxw5cuTIkbW1tdTG99euXWMwGI6OjryNEwAAAE/02OUTAAAAQFv08K5RAAAA4MsgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjVIBECAADo1SARAgAA6NUgEQIAAOjV/geAKiW2Kh1q4gAAAel6VFh0cmRraXRSZWFjdGlvblBLTCByZGtpdCAyMDIyLjA5LjEAAHic7ZXNSsNAEMd3N8nmsxBbaZNQhJ5UfIHiQagfoAcriIdetQ010CYltlBvvpCv4KP4CPYV3G22TVKaIVRPYmDCZn+zM5vN/CeLj/dP+xAhgtILo/zzHuML5sfHlYyPycxi9oZp74hPyq7G7p1pNH54nfgt70tKnJvoxCnjQ2i7zcdEdlXh1AkHB02SX0LRaokh5q8volk4bXkEpcHU3wymqUkwLIHB1MJgOBNMp84zH0vYLdrLiWMIJ5axssrILOh3Z+O8p0l728Nlj1Yq4ySXcVLKOFETYcdydfZ4HoWDu3jgxy3PSneNib1JM0dEJIhKMkRlBaIKhShWwU2rGog1HcS6AWID9SCsIGjjDVmM61Um1lqBYHVhTLDzpJxhbaRfFCrnv6Fssquys8H0fynm5KSAiRUKYvozMcJyWgvmVMGJOGxm42jED/H2ccK67JMfYw4KIYGgCkENgjoEJQjKEFQgyLVSq2/rGTwhf1HWM8r/kNrLhrCpqN3EmtaTJchN2L0PwuHLsYcyWQ3NXmYloI619YqqmL+aT0ZBP5he+sPY93P1y5QDljdxyCbOdIO0xM6gozchaIgQtfo+6+kNZt+qvIAYBRJV1wAAAIp6VFh0UmVhY3Rpb25TbWFydHMgcmRraXQgMjAyMi4wOS4xAAB4nH2OsQqAMAxEP0YoOlS8qFUDuujgpOAaMvX//8GmdNXlOALvXSQyFMQSmbT2sruTeNJS5lQud4IXuzA69fBSBQa0MaZXyyHnmDMo07ZJNCqZ/8WUxN8etGUqQ3BPZx+scrsD+gJ0mjADALW0/wAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reverse_reaction(rxn_fwd)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now we can check whether the needed starting materials are available for our three target molecules:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.63s for NCCc1ccccc1 PubChem API call(s)\n", "0.63s for O=CCNc1ccccc1 PubChem API call(s)\n", "0.50s for O=CCC1C2C=CC(C2)N1CO PubChem API call(s)\n", "0.51s for Nc1ccc(C2NCCc3ccccc32)c2ccccc12 PubChem API call(s)\n", "-----\n", "1.15s total elapsed time for PubChem API calls\n" ] }, { "data": { "image/png": "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+fPnAWDQoEG2tra9evX67LPPmp2wsrJy4MCBnp6ew4YNCwgICA8PNzExAYB33nnHz8/P19d34cKFNAP9+uuv48aN8/X1dXR03L59+zPDmzNnjouLi5OTk4eHx7Vr1+Sf0tbW3rNnz5dffunl5eXk5ET7A1owderUO3fu9O7d+9dffw0JCVm/fv3gwYOnT5/+9EwjU1PTX375ZdKkSb6+vosWLaI5z9zcfOvWrRMnTqQB06qhrq7uRx99NHToUNo2K2/+/PnTpk0bOHDghg0bunXrBgATJkwIDg728PDo16+fj49PXl7eypUra2pqnJycvLy83nrrLS6Xu2fPnjVr1tD2gbCwMAB4//33bW1traysunbtGhAQcPToUSsrK1dX159//pl+yikfH58VK1b4+vq6uroGBATIDxSaN2+es7Ozk5OTr6+vr69veno6belt+XJR/v7+YWFhNGYXF5eYmJi7d++6u7u7ubmNHj3666+/bs1JnsnExMTBwYHP57u7u3/66af024HeM23evPmuHPp7X7x48c6dO/ft29fY2FhRUREcHEzPQ19SUVHRmkKnTp2akZFx5coViURSVlbm7Ozc5vjlZWdnT5482c3NLS8vr76+vtn9waxZs6RS6dGjR0+fPl1SUkLrB9euXZsxY8Ybb7xx//79urq62NjYlosIDAzMzc39999/aeS2trbPO7KwsJD+xTHoJTpx4oT8VT106FCb3y894bfffit/wjt37ujo6OjpX/exvQAAIABJREFU6e3duzcvL+/bb7+NioqaNGlSm0tpG/xc4eeqJU+3lkokEvkB8fKTBCj5HiCJRFJUVNRsuPzzuoikUumtW7cuX77MNL47OzufOHHi6TMQQoqKil445qKmpqampiYmJsbZ2ZkQQucRMs+WlpY26+N8HplMxjQuV1dX37t3r4WDpVIpjd/c3DwhIUE+YDp9gvHw4cNnTiQoKSmRb69nTst0cVP19fXykyUIIaWlpUyXAyGkvLycTpZgjs/Pz6cXTSaTMcHQlhlmsLj8U4SQhoaGZnNXWq+pqamoqIi55k1NTfn5+c1ibr1mgxpo98bPP/9MCHn48KG+vj6dwtGMh4cH0+1PCKGjEgghFRUVurq6H3zwwdMvycjIAABmpk11dTWHw1m3bh39USKR2NnZ0SF/CxcupJVd6sGDBwAgEonoj4cP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", "text/plain": [ "" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check list of reactions: Are starting materials commercially available?\n", "\n", "# When running in Jupyter, use this next line:\n", "dwg, reaction_reactants_avail = await check_reactions(rxns)\n", "# When running outside Jupyter, use this next line instead:\n", "#dwg, reaction_reactants_avail = asyncio.run(check_reactions(rxns))\n", "\n", "dwg" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the total time taken for the API calls is less than the sum of the calls for each reactant because we're running calls for two reactants concurrently." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "`check_reactions()` returns two results, a drawing and a list of reactions and whether each is accessible, that is, whether all its reactants are commercially available. To view the results graphically, call the drawing. The first column is the target and tells whether it's accessible. Each subsequent column is a reactant and tells whether it's commercially available." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "`reaction_reactants_avail` is a nested list where each sub-list represents the reaction, then whether its target is accessible." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[<__main__.Reaction at 0x7fde11679ea0>, False],\n", " [<__main__.Reaction at 0x7fdde8b3f310>, True],\n", " [<__main__.Reaction at 0x7fde1167b0a0>, False]]" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reaction_reactants_avail" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Checking the Commercial Availability of any List of Molecules\n", "If you don't want to use the reaction functionality, and simply want to check whether a list of molecules is commercially available, you can call `check_avail_smiles_list()` directly with a list of SMILES strings." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.50s for O=CCC1C2C=CC(C2)N1CO PubChem API call(s)\n", "0.71s for c1ccccc1 PubChem API call(s)\n", "0.72s for O=C(C)Oc1ccccc1C(=O)O PubChem API call(s)\n", "-----\n", "1.22s total elapsed time for PubChem API calls\n" ] }, { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check a list of reactants\n", "smiles_list = [\"O=C(C)Oc1ccccc1C(=O)O\",\"O=CCC1C2C=CC(C2)N1CO\", \"c1ccccc1\"]\n", "\n", "# When running in Jupyter, use this next line:\n", "smiles_avail_async = await check_avail_smiles_list(smiles_list)\n", "# When running outside Jupyter, use this next line instead:\n", "#smiles_avail = asyncio.run(check_avail_smiles_list(smiles_list))\n", "\n", "# Put reactant objects in same order they were supplied:\n", "# Because check_avail_smiles_list runs asynchronously, \n", "# no guarantee that it will return molecules in same order supplied\n", "smiles_avail = [smiles_avail_async[smiles] for smiles in smiles_list]\n", "\n", "# Create and format molgrid output\n", "mols = [Chem.MolFromSmiles(reactant.smiles) for reactant in smiles_avail]\n", "legends = [f\"Available: {boolean_dict[reactant.commercially_available]}\" for reactant in smiles_avail]\n", "\n", "dwg = Draw.MolsToGridImage(mols=mols, legends=legends)\n", "dwg\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Improvements for Use in Production\n", "If you wanted to use this scheme in production code, a few changes would be wise.\n", "\n", "This code uses a SMILES string as a dictionary key. It would be better to use a key that's guaranteed to be shorter, for example a serial identification number, e.g. 1, 2, 3. The only time this code creates SMILES strings is when it converts from an RDKit molecule (as given by the reverse reaction for starting materials) to a SMILES string once for each reactant, helping ensure that two different SMILES strings are not created for identical molecules. ([RDKit's MolToSmiles function](https://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html#rdkit.Chem.rdmolfiles.MolToSmiles) returns the canonical SMILES string for a molecule, so it should give consistent results if called repeatedly on the same molecule.)\n", "\n", "Similarly, you might want to use an identifier for each Reaction object, so you could use it as a key in a dictionary.\n", "\n", "This code assumes only one product for a reaction. In the vast majority of cases, you're interested in only one product for a reaction, but for a reaction which produces a byproduct, such as water for a dehydration reaction, there could be multiple products.\n", "\n", "If there are many reactions or reactants, you might want to process and present results to the user as they come in. That way, the user can tell there's progress, and start getting some results before they all come in.\n", "\n", "Finally, the presence in PubChem of vendors for a chemical may not be definitive about whether it's commercially available. First, as [Kurt Thorn pointed out](https://fosstodon.org/@kurtthorn/109765203870437567), \"The definition of commercially available is somewhat fuzzy as...[some compounds] are synthesized on demand.\" Conversely, a vendor might not have any material in stock despite claiming availability. Or the vendor might have some in stock, but not as much as you need, or be unable to obtain it in the time frame you need. Or the unit price might be prohibitively expensive. So PubChem's data should be considered a screening tool. Before proceeding with a divergent synthesis plan, you should go to particular vendors, get quotations, and check if they can provide the material in the quantity, time frame, and price you need." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Acknowledgements" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Thanks to the [Kawalt Lab at Indiana Biosciences Research Institute](https://www.indianabiosciences.org/kalwat-lab) for [suggesting on Mastodon](https://fosstodon.org/@Kalwat_Lab@mas.to/109765367942971549) to use PubChem's APIs to determine the commercial availability of molecules. Thanks to [Kurt Thorn](https://fosstodon.org/@kurtthorn) for [suggesting other APIs](https://fosstodon.org/@kurtthorn/109765076448231287)." ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.10.8" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "9c05c4a83946f40f17c04f62115662986724448294f6bf50d1bc33bdfd63e767" } } }, "nbformat": 4, "nbformat_minor": 2 }