{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Jupyter Notebooks in Chemistry - Package Installation\n\nThis notebook installs several Python packages that provide information lookup services as well as visualisation tools that may be particularly relevant to chemistry teaching.\n\nThe sorts of functionality provided fall into two main types:\n\n- tools for looking up material properties of compounds and metadata associated with them\n- tools for visualising molecular structure.\n\n(Packages also exist for exploring things like orbital structure.)\n\n\nTypically, we would preinstall these required drawing component packages into a custom environment to be used by module team members, students, or researchers so that they could be used directly and without any further installation requirements."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Open Babel: The Open Source Chemistry Toolbox\n\n[*Open Babel*](http://openbabel.org/wiki/Main_Page) provides a wide range of tools for working with chemical data. In the python context, its functionality can be accessed using the `pybel` package ([src](https://github.com/openbabel/openbabel/blob/master/scripts/python/pybel.py)). *Note - there is a separate pip package called `pybel` that does something completely different!*"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "*The following cell may take some time to run whilst the required software is installed. Remove or comment out the `%%capture` line before running the cell to track installation progress. Installation continues whilst the * is displayed, and is replaced by a number when execution is complete.*"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\ntry:\n import pybel\nexcept:\n !conda install -y -c openbabel openbabel\n\n#SVG to png, pdf etc\n!pip install cairosvg",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "import pybel",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "A *lingua franca* across many packages for describing molecules and reactions is [SMILES](http://www.daylight.com/dayhtml/doc/theory/theory.smiles.html), the *Simplified Molecular Input Line Entry System*.\n\nThe `pybel` package is capable of reading a SMILES string and then rendering a 2D structural model of the molecule specified.\n\n*(SMILES can also represent reactions but `pybel` seems not to render these?)*"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "mol = pybel.readstring( \"smi\",\"C1=NC2=C(N1)C(=NC=N2)N\" )\n\n#Add hydrogens\nmol.addh()\n\n#By default, we preview a small SVG output graphic\nmol",
"execution_count": 3,
"outputs": [
{
"data": {
"image/svg+xml": "\n",
"text/plain": ""
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#This is a hack - exploring for now... creating a PNG (can be saved); also supports pdf export\nimport cairosvg\nfrom IPython.display import Image\n\ntry:\n cairosvg.svg2pdf(mol._repr_svg_(), write_to='./images/test/pybelmol.pdf')\nexcept:\n pass\n\n#Convert the SVG to PNG\nImage(cairosvg.svg2png(mol._repr_svg_()))",
"execution_count": 4,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QA/wD/AP+gvaeTAAAG30lEQVR4nO3ca4xcZRnA8f97ZrpLPe+UBdLVUstFWkDBK2gJgbRTwFQETGghkDRQY6xUQeMHrKBAw6WKEKxEJJJU20q5BDDQUu52ZiFVEfkgBiGxVYtIi+76QZdbu3MePjwz7XZpu3vOnHPmbHl+XyZ75sz7PDvvnPNeZ8AYY4wxxhhjjDHGGGOMMcYYY4wxxhhjTJpc1gE2bNiwSkR+PzAwsGLy5Ml/qVar09Msv16vf1VEZlWr1QX1ev1Z59zCWbNmvZRmjDyVsw4QBAEiMqe3t3cCGXwAoiiaEATBtHq9/nUROci5zD9jmQryCCIi06IoOinD8g8WkZOBiVnFyEsuFQLc1d/fvxCImn9PAxYBpYTlHQYsbv3hnHuhWq0uAF5vJ8kiyKNCHgb6gIaIrGwe+1fz8XGgGqOsELgWuLVZJtu3b98YRdFDACKyeseOHf9OI+n3qx7gFuBu4IhRzl0AbADOzjgnAxwDnLuP5z1wCdCVTzpmp0pFlnkvz4MEYSh/63Q+ecurUR+zKMIBU8OQbztHo9P55K1wFdK0zjkWOZe4FzZuZT4wTEKEfmAj8IW8YtZqte81Go11IrKlXC5fX61WL8sr9nCFqxDneAIgCPiTSK7jilNKpdKLpVLpP41GY3aOcXdTuAoZHHQ1dIplOnBFXnGdc5GI3NRoNN7OK+aeFLUN6QGuyjOgiATA5aVS6fN5xh2pcFdIB70aRdF/gR3Aq51OpmgOAlbnHPPAnOPtUVFvWZ1wT6cTAKuQliOBLZ1OAqxCWuYDv+50EmAV0nIaUO90EmAVAvAhYBuwvdOJFFmevawycEhOscalLuD7wGvA5zqcS+6Kdss6HVgPvAJ8ArgQXU08LO1A3sv5IBO7u2VGV5ccm3b5SRVlz8zRwA3A5ubj/4c99+nmsT8APwRSmWvyXrY5xxoR3hJhwhtvuCVplDve9aBv8v3oWKB17Gpgwohzz0Y3NlyURuBKRf7hvfzVe1kehnJjGmWmoVO3rADdxnM/8Cg6DngF+Frz2DPonNJw64C5wBRgLXpLG6tjgSuB77YOiDAE3Mu+1/LfNw4GvsyufVmz0R0l32Jse7WmAiuBVUDvXs45DliKVvgq9ArbedV5L1tAur2XzWEoN8f+D8Yr7+WOSkUeBunyXl4Y8XQv2mj/GO3qxvVZ4BFgCdo7a1XC48BPgFPYy13ggAPk8GZ+k3t6pAf4YoL444/3cqf30l+pyDney8sjnv4g2qC3IwC+gg7urgc+k7CcW4Bz2syl+LyXO8NQVoSh/HEPFZKmdW2+vht4igy62HHk0qg7x3PA/4ChHMLNJV6D3/IOuhnvZyTfc9y2zCskCFhfLvO7ri6+ST5rDtOBQxO+dhNwH9oj269NRHtGWWrdsi5Fr5J2rCTeJvDU5DUO+SSwMKdYabgUnU/LfdIxz00ORZmmGYtB4DvAbcAFcV5Yr9f7nHOXNBqNALhtzpw5s+O83nadvNc30Ib9eXQA+2e0S70vG9HxDyLyARE506nY3+iyCtndmcBRgKDjmUG0xyYxymgAMwEnItFoJ49kFbLLVOBydD9xCPwIvV3FqQzQLvO1IlIKguCOuElYhagAvU0tRqf3fwEsA/oTlLUG2FYul10URWvivtgqRF2BziC/DJwP/BOd7IytWq0uH/bnrXFfvz9WyGZga4zzZ6KTkjcAHwEuBr6UQV6FchLarwf9vuCjwBkpx0g6l3Ucuo20jOZ1RFoJFZUHfgW8hH4CQRvNpeib+LE2y3foKuJW4Brg4wnLuRGY12YuheaA84AngbOAGWiDtxyY1Dxn+rBjSTY7n4huiliCTs+cgFb0E+xaDxnrgLTd6ZZCOwFdJFqKTmsPdxpQY/fVwTOA37DrChrNocDtwC/RNZU9Gb5Y9XN0xXB/bDP3aQqjv1Ggb8wi4DHg1Bjld6EVuRadHxur49GNEzvX1MNQ7q5U5BjvZd6kSRJremQ86Eb/2fXotp2xOgT4KdrGfHiUc+ejV9b8JAmOFIayNQzlEe/luiLtOknrEv4o8He0YYwzsh1AZ1aPR6cq9vbNJQ8cjo6iU9mX5RxvijAF7VRsSqPMjqjVak/WarVP9fX1zajVak+nXb73stR7+S1I4L28mHb5w+Js8l7meS8D4/0KCYG5IvKmiIRpJyRCt3Mc5T2Lyfa3TbYODroHvJf5FOhnnZJUSAOYKSJDQRBk8tMXzrFehMuy/CWHwUF3avPxwqxiJJFkxbAURdEPgKuiKMrkDYsiXhfhOZHx/wtxcSW5QtYGQfBaqVR6Z2ho6MG0EwoCNgKI8KxzLEu7fGOMMcYYY4wxxhhjjDHGGGOMMcYYY/Y/7wJ1o8f54DQDyQAAAABJRU5ErkJggg==\n",
"text/plain": ""
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from IPython.display import IFrame\nIFrame(\"./images/test/pybelmol.pdf\", width=100, height=200)",
"execution_count": 5,
"outputs": [
{
"data": {
"text/html": "\n \n ",
"text/plain": ""
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can write out the original *SMILES* description string by specifying the `.write()` output type:"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "mol.write(\"smi\")\n#Seems to add whitespace at end of line?\n#Could strip with .strip()",
"execution_count": 6,
"outputs": [
{
"data": {
"text/plain": "'c1nc2c([nH]1)c(ncn2)N\\t\\n'"
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can also write the molecule out as a flat, 2D rendering of the structure in SVG format, which could also be saved to a file (this actually previews better than the default preview?):"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from IPython.display import SVG\nSVG(mol.write(\"svg\"))\n#Write to a file: mol.write(\"svg\", \"outfile.svg\")",
"execution_count": 7,
"outputs": [
{
"data": {
"image/svg+xml": "",
"text/plain": ""
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#Can we disable the colour?\npybel.readstring( \"smi\",\"O\" )",
"execution_count": 8,
"outputs": [
{
"data": {
"image/svg+xml": "\nOH\n2\n\n",
"text/plain": ""
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can create a simple SVG viewer to render a 2D molecule from a *SMILES* as follows:"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from IPython.display import display\n\ndef smilesSVG(smi, addH=False, bw=False):\n ''' Render molecule structure from SMILES string as SVG. '''\n \n mol = pybel.readstring( \"smi\",smi )\n if addH: mol.addh()\n conv = pybel.ob.OBConversion()\n conv.SetOutFormat(\"svg\")\n #Optonally, set black and white output\n #The openbabel SVG export formatter has an -xu option which we can pass\n #Via: https://github.com/openbabel/openbabel/issues/1879#issuecomment-411830813\n if bw:\n conv.SetOptions('u', conv.OUTOPTIONS)\n display(SVG(conv.WriteString(mol.OBMol)))\n #display(SVG(mol.write(\"svg\")))\n \n#More command line options: https://openbabel.org/docs/dev/FileFormats/SVG_2D_depiction.html\n#Would perhaps make sense to be able to pass these too?",
"execution_count": 15,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "smilesSVG( \"C1=NC2=C(N1)C(=NC=N2)N\" )",
"execution_count": 16,
"outputs": [
{
"data": {
"image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nH\nN\nN\nNH\n2\n\n\n\n",
"text/plain": ""
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "smilesSVG( \"C1=NC2=C(N1)C(=NC=N2)N\", True )",
"execution_count": 17,
"outputs": [
{
"data": {
"image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nN\nN\nN\nH\nH\nH\nH\nH\n\n\n\n",
"text/plain": ""
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "smilesSVG( \"C1=NC2=C(N1)C(=NC=N2)N\", addH=False, bw=True );",
"execution_count": 25,
"outputs": [
{
"data": {
"image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nH\nN\nN\nNH\n2\n\n\n\n",
"text/plain": ""
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "##Generate 3D co-ordinates\n#!mkdir -p demos/files\n#mol.make3D()\n##Write sdf file\n#mol",
"execution_count": 10,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## `py3Dmol`\n\nThe `py3Dmol` package provides a Python wrapper around the powerful [`3Dmol.js`](http://3dmol.csb.pitt.edu/doc/index.html) Javascript package and provides a convenient way of rendering three dimensional models of a wide variety of chemical structures, although it looks to be no longer maintained in favour of `nbmolviz`, which also looks to have installed and which raises errors doesn't work when trying to install it on Azure Notebooks. *There also looks to be a [Jupyterlab 3dmol extension](https://github.com/3dmol/jupyterlab_3Dmol), but I haven't tested it yet...*\n\nCompunds can be identified by various identifier schemes (`pdb` and `cid`/PubChem) and geometry schemes, including `sdf`, `mol2`, `xyz`, and `cube`."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%%capture\ntry: \n import py3Dmol\nexcept:\n !pip install py3Dmol",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import py3Dmol",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's have a look at the structure of something simple, such as [*ethanol*, (PubChem cid 702](https://pubchem.ncbi.nlm.nih.gov/compound/ethanol)):"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "p=py3Dmol.view(query='cid:702')\np.setStyle({'stick': {'radius': .1}, 'sphere': {'scale': 0.25}})\np.show();",
"execution_count": 3,
"outputs": [
{
"output_type": "display_data",
"data": {
"application/3dmoljs_load.v0": "
\n
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## `pubchempy`\n\nProvides python interface to [PubChem](https://pubchem.ncbi.nlm.nih.gov/), for example to support the lookup of the structure of chemical compounds by chemical name and then report on various properties and descriptive attributes, such as the SMILES representation. (Molecules can also be looked up via their SMILES string.)\n\n`pubchempy` can be used in conjunction with `py3Dmol` to look up a molecule by name (using `pubchempy`) and then display its structure as an interactive 3D model (using `py3Dmol`)."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\ntry:\n import pubchempy as pcp\nexcept:\n !pip install pubchempy",
"execution_count": 17,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "import pubchempy as pcp",
"execution_count": 18,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "ethanol = pcp.get_compounds('ethanol', 'name')[0]\nethanol.canonical_smiles, ethanol.isomeric_smiles",
"execution_count": 19,
"outputs": [
{
"data": {
"text/plain": "('CCO', 'CCO')"
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#Look up by SMILES string\ncompound = pcp.get_compounds('CCO', 'smiles')[0]\ncompound.iupac_name",
"execution_count": 20,
"outputs": [
{
"data": {
"text/plain": "'ethanol'"
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "compound.elements, compound.atoms",
"execution_count": 21,
"outputs": [
{
"data": {
"text/plain": "(['O', 'C', 'C', 'H', 'H', 'H', 'H', 'H', 'H'],\n [Atom(1, O),\n Atom(2, C),\n Atom(3, C),\n Atom(4, H),\n Atom(5, H),\n Atom(6, H),\n Atom(7, H),\n Atom(8, H),\n Atom(9, H)])"
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "##For a full list of attributes, see:\n#compound.record",
"execution_count": 22,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "compound.molecular_formula",
"execution_count": 23,
"outputs": [
{
"data": {
"text/plain": "'C2H6O'"
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "compound.molecular_weight",
"execution_count": 24,
"outputs": [
{
"data": {
"text/plain": "46.069"
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "compound.synonyms[:5]",
"execution_count": 25,
"outputs": [
{
"data": {
"text/plain": "['ethanol', 'ethyl alcohol', 'alcohol', 'Methylcarbinol', 'grain alcohol']"
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# pcp.get_compounds seems to return a list, so get the first (only, in many cases?) item\npentanol = pcp.get_compounds('pentanol', 'name')[0]",
"execution_count": 26,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "p = pybel.readstring( \"smi\", pentanol.canonical_smiles )\np",
"execution_count": 27,
"outputs": [
{
"data": {
"image/svg+xml": "\n\n\n\n\n\nCH\n3\nHO\n\n",
"text/plain": ""
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#Add hydrogens\np.addh()\np",
"execution_count": 28,
"outputs": [
{
"data": {
"image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nH\nH\nH\nH\nH\nH\nH\nH\nH\nH\nH\nH\nO\n\n",
"text/plain": ""
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can render a compund retrieved from \n\nUse the `cid:` selector with `py3Dmol` to specify a PubChem id."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#http://3dmol.csb.pitt.edu/doc/types.html#ColorschemeSpec\np=py3Dmol.view(query='cid:{}'.format(pentanol.cid), width=500,height=400)\np.setStyle({'stick': {'radius': .1}, 'sphere': {'scale': 0.25}})\np.show();",
"execution_count": 29,
"outputs": [
{
"data": {
"application/3dmoljs_load.v0": "
\n
You appear to be running in JupyterLab. You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab. You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## `chembl_webresource_client`\n\nProvides a Python interface to [ChEMBL](https://www.ebi.ac.uk/chembl/) to support the lookup of chemical compounds by common name."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\ntry:\n import chembl_webresource_client\nexcept:\n !pip install --upgrade --user chembl_webresource_client",
"execution_count": 30,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from chembl_webresource_client.new_client import new_client\nmolecule = new_client.molecule\nres = molecule.search('aspirin')\n\nfor r in res:\n pref_name = r['pref_name']\n if pref_name is not None:\n print(pref_name)",
"execution_count": 31,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "ASPIRIN\nASPIRIN EUGENOL ESTER\nLYSINE ACETYLSALICYLATE\n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "aspirin = [r for r in res if r['pref_name']=='ASPIRIN'][0]\naspirin['molecule_synonyms'][:5]",
"execution_count": 32,
"outputs": [
{
"data": {
"text/plain": "[{'molecule_synonym': '8-Hour Bayer',\n 'syn_type': 'TRADE_NAME',\n 'synonyms': '8-HOUR BAYER'},\n {'molecule_synonym': 'Acetylsalic Acid',\n 'syn_type': 'TRADE_NAME',\n 'synonyms': 'ACETYLSALIC ACID'},\n {'molecule_synonym': 'Acetylsalicylic Acid',\n 'syn_type': 'ATC',\n 'synonyms': 'ACETYLSALICYLIC ACID'},\n {'molecule_synonym': 'Acetylsalicylic Acid',\n 'syn_type': 'OTHER',\n 'synonyms': 'ACETYLSALICYLIC ACID'},\n {'molecule_synonym': 'Alka Rapid',\n 'syn_type': 'TRADE_NAME',\n 'synonyms': 'ALKA RAPID'}]"
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## `pypdb`\n\n`pydb` is a Python API for the [RCSB Protein Data Bank (PDB)](https://www.rcsb.org/pdb/home/home.do)."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\ntry:\n import pypdb\nexcept:\n !pip install pypdb",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#https://github.com/williamgilpin/pypdb/blob/master/demos/demos.ipynb\nimport pypdb\n\nsearch_dict = pypdb.make_query('nitroglycerin')\nfound_pdbs = pypdb.do_search(search_dict)\nprint(found_pdbs)",
"execution_count": 18,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "['4FQF', '4FR8']\n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#pypdb.get_info('4FQF')['molDescription']",
"execution_count": 19,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#Not sure where to find the chemicalID?\n#Or how to look up by chemical name?\nchem_desc = pypdb.describe_chemical('NAG')\nchem_desc",
"execution_count": 8,
"outputs": [
{
"data": {
"text/plain": "{'describeHet': {'ligandInfo': {'ligand': {'@chemicalID': 'NAG',\n '@molecularWeight': '221.208',\n '@type': 'D-saccharide',\n 'InChI': 'InChI=1S/C8H15NO6/c1-3(11)9-5-7(13)6(12)4(2-10)15-8(5)14/h4-8,10,12-14H,2H2,1H3,(H,9,11)/t4-,5-,6-,7-,8-/m1/s1',\n 'InChIKey': 'OVRNDRQMDRJTHS-FMDGEEDCSA-N',\n 'chemicalName': 'N-ACETYL-D-GLUCOSAMINE',\n 'formula': 'C8 H15 N O6',\n 'smiles': 'CC(=O)N[C@@H]1[C@H]([C@@H]([C@H](O[C@H]1O)CO)O)O'}}}}"
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Material Properties\n\nThe [`pymatgen`](http://pymatgen.org/) package provides a range of utilities that support materials analysis."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\n#Building python wheels can take a chunk of time - opt out by disabling the cache\n# (This might still take an age to install as it is...)\ntry:\n import pymatgen\nexcept:\n !pip install --no-cache-dir pymatgen",
"execution_count": 43,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "For example, we can specify an element and then lookup a range of material properties."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "import pymatgen as mg",
"execution_count": 42,
"outputs": [
{
"ename": "ImportError",
"evalue": "No module named 'pymatgen'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpymatgen\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mImportError\u001b[0m: No module named 'pymatgen'"
]
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "si = mg.Element('Si')\n\nsi.atomic_mass, si.melting_point, si.boiling_point",
"execution_count": 35,
"outputs": [
{
"data": {
"text/plain": "(28.0855, 1687.0, 3173.0)"
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "si.is_alkali, si.is_halogen, si.is_lanthanoid, si.is_metalloid, si.is_noble_gas, si.is_quadrupolar, \\\n si.is_rare_earth_metal, si.is_transition_metal\n",
"execution_count": 59,
"outputs": [
{
"data": {
"text/plain": "(False, False, False, True, False, False, False, False)"
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "si.print_periodic_table()",
"execution_count": 50,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "H He \nLi Be B C N O F Ne \nNa Mg Al Si P S Cl Ar \nK Ca Sc Ti V Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr \nRb Sr Y Zr Nb Mo Tc Ru Rh Pd Ag Cd In Sn Sb Te I Xe \nCs Ba Hf Ta W Re Os Ir Pt Au Hg Tl Pb Bi Po At Rn \nFr Ra \n La Ce Pr Nd Pm Sm Eu Gd Tb Dy Ho Er Tm Yb Lu \n Ac Th Pa U Np Pu Am Cm Bk Cf Es Fm Md No Lr \n"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "si.value, si.row, si.number, si.group",
"execution_count": 54,
"outputs": [
{
"data": {
"text/plain": "('Si', 3, 14, 14)"
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "si.full_electronic_structure",
"execution_count": 57,
"outputs": [
{
"data": {
"text/plain": "[(1, 's', 2), (2, 's', 2), (2, 'p', 6), (3, 's', 2), (3, 'p', 2)]"
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can also look up properties of compounds:"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "comp = mg.Composition('Fe2O3')\ncomp.is_element, comp.weight, comp.num_atoms, comp.elements",
"execution_count": 80,
"outputs": [
{
"data": {
"text/plain": "(False, 159.6882, 5.0, [Element O, Element Fe])"
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "comp.formula, comp.alphabetical_formula, comp.reduced_formula, comp.hill_formula, \\\ncomp.element_composition, comp.reduced_composition",
"execution_count": 79,
"outputs": [
{
"data": {
"text/plain": "('Fe2 O3', 'Fe2 O3', 'Fe2O3', 'Fe2 O3', Comp: Fe2 O3, Comp: Fe2 O3)"
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "comp.fractional_composition, comp.get_atomic_fraction('Fe'), comp.get_atomic_fraction('O')",
"execution_count": 78,
"outputs": [
{
"data": {
"text/plain": "(Comp: Fe0.4 O0.6, 0.4, 0.6)"
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "comp.total_electrons, comp.weight",
"execution_count": 68,
"outputs": [
{
"data": {
"text/plain": "(76.0, 159.6882)"
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Spatial / geometric information is also available. Check out the documentation for more details."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## `chempy`\n\n`chempy` provides a range of utilities that can be used to support the production of examples associated physical, inorganic and analytical chemistry."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\ntry:\n import chempy\nexcept:\n !conda install -y -c bjodah chempy\n",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from chempy import Substance\nferricyanide = Substance.from_formula('Fe(CN)6-3')\nferricyanide.composition == {0: -3, 26: 1, 6: 6, 7: 6} # 0 for charge\nferricyanide.unicode_name",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "ferricyanide.latex_name",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "ferricyanide.html_name",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "ferricyanide.mass",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## `RDKit`"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%%capture\ntry:\n import rdkit\nexcept:\n !conda install -y -c rdkit rdkit",
"execution_count": 22,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "%matplotlib inline",
"execution_count": 44,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from rdkit import Chem\n#Following is needed to render molecule structure views in Jupyter notebook\nfrom rdkit.Chem.Draw import IPythonConsole ",
"execution_count": 45,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from rdkit.Chem import Draw\nmol_str = 'COc1ccc2c(c1)[nH]c(n2)[S@@](=O)Cc1ncc(c(c1C)OC)C'\n\nm = Chem.MolFromSmiles( mol_str )\n\ntry:\n #We can write out the structure to different flavours of image file\n Draw.MolToFile(m,'images/test/cdk2_mol1.o.png')\n Draw.MolToFile(m,'images/test/cdk2_mol1.o.svg')\nexcept:\n pass",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "png:\n![](images/test/cdk2_mol1.o.png)\n\nsvg:\n![](images/test/cdk2_mol1.o.svg)"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from rdkit.Chem import AllChem\n\ndef smilesH(m):\n return AllChem.AddHs(Chem.MolFromSmiles(m))\n\nbromomethane = smilesH('CBr')\nbromoethane = smilesH('CCBr')\n_2_bromopropane = smilesH('CC(Br)C')\n_2_bromo_2_methylpropane = smilesH('CC(Br)(C)C')\n\nmy_molecules = [bromomethane, \n bromoethane,\n _2_bromopropane,\n _2_bromo_2_methylpropane,\n ]\n\nDraw.MolsToGridImage(my_molecules, useSVG=False)",
"execution_count": 35,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": ""
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "from rdkit.Chem import RemoveHs\n\nRemoveHs(_2_bromo_2_methylpropane)",
"execution_count": 67,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAVFklEQVR4nO3da1STZ6IF4DcYEURUkOIoUFExF/ACIogKXrgUdRDbWtEzKngD9KAk8SBgqRgVHaNWAU9tUesUsDMV26520hYdUapFQR2hFktCFIoKFRBBuQWSkJwf9Ng1rVqFJG9I9vMLDeTby8Xa7DfCB0Oj0RAAAOgpM9oBAAD6NibtAGCg8jJ3Xfr0ve63meYWtiOcveZHTJkfQTcVgAFCjcIzMc0HLE48QghRdsilRae/fn8Lc4CFe8AS2rkADAtqFJ6JYdaP5RXU/bab74L7FaWSy9/8vkbVXSpCiFk/fC6BicKnPrwYBsNi0JDuxiSEfP7uhvbmRrZ3UOEXRx7V3fvv9/LtnMbRDQhAC2oUnkfR0UYIUXa0S4tO18hKQje+++Shaun1LqVicULGAKvBVkOG0csIQBlqFJ5J2dH+18W/bszpb6z3CFr65I9dKsVbCR9YDbGjEQ3AgKBG4ZmY5hYrdn5CCOlSKqrLiy+eTLW0Huq7eGP3o684sdChAAQ1Cs/BMDN71dW7++3Rk3yVne3f/uPdKfMjLKwGE0IG4iAPQAjBt9/Di7NzdOlSKh7V3aUdBMCwoEbhRdVW/kgIGWw3knYQAMOCQz08k0bdJbt2lhDSpVTUyEqufnWcO/3PAwfb0s4FYFhQo/BMKkXnP3ZEEEL6MfsPsXec9sY6v7DY/39QI29popgNwHAwcIcneFkajfpvCW/ck/57tehLJ+4U2nEAKMNro/DSGAyzMZP8iEbzzQdvazRq2nEAKEONQk/4Lt4wxN6xtvLmjXOnaGcBoAw1Cj3BNLcICN9CCMnL3N3Z1kw7DgBNqFHoofEzX3/VbWrbowfffXqIdhYAmlCj0EMMBmNu5A4Gw6zoiyMPayppxwGgBjUKPTdi7IRJAYu7VMqzf9tJOwsANahR6JXAiLcHWA0uv3Kmovhb2lkA6ECNQq9YDX3F762NhJAzx4RqlZJ2HAAKUKPQWz6vR9mOHP3gnuzfp0/QzgJAAWoUeqsfs3/Qqq2EkPyP97Y3N9KOA6BvqFHQAo7P3LGTZ3e0Pr7wj3f/+L0BjAtqFLQjeK3QjNn/2jdZ9VUS2lkA9Ao1CtrxihPLM3i5Rt11+ug22lkA9Ao1Clrjvzze0trmpx8Kyq+coZ0FQH9Qo6A1FoOGzP6v/yGEnDkm7FIqaMcB0BPUKGiT158j7J25TbV3ir48SjsLgJ6gRkGbGGb95kZuJ4RczElrbayjHQdAH1CjoGWjJ/qyp76mkLeePyGinQVAH1CjoH3Ba4T9+pt/n5dTIyuhnQVA51CjoH02I5x9QtdqNOrTR5Pxy76eePz4Me0IoBOoUdCJmUv4g2yHV0uv//jdl7Sz0Nfa2ioUCp2cnG7dukU7C2gfahR0wtxykP/yBELI2b/tVHa0045DjVqtPnbs2NixY7dv397W1nbu3DnaiUD7UKOgK+6BYSPHuTc33L/0+fu0s9Bx9erVGTNmREZG1tfXe3t7X7p0ad26dbRDgfahRkFXGAyzeVE7CYNx6bP3HtXfox1Hr6qrq8PDw318fIqKihwcHDIzM4uKinx8fGjnAp1AjYIOOXI8x/stVCk68j7aRTuLnrS3t4tEIi6Xm52dbWlpmZCQIJVKw8PDGQwG7WigKwz8RyroVHPD/f9d76fsaF/5189HjTfyOSYWi2NjY6uqqgghISEhhw4dcnZ2ppwJdA9rFHRrsN2IGW+uJ4ScPpqsUXfRjqMrxcXFfn5+oaGhVVVVkydPvnjxolgsRoeaCNQo6NyMRTFD7B1rK2+W5J2knUX7GhoaeDyet7d3QUGBnZ1damrq1atX/fz8aOcC/UGNgs4xzS0CI5IIIeez9nS2NdOOozVKpTItLW3s2LHp6elmZmaxsbEVFRU8Hq9fv360o4Fe4bVR0AeNRnNi2/KKB3KVDTtl919px9GCvLy82NhYiURCCAkMDExPT+dyubRDAR2oUdCTkpISLy+vfv36lZaWslgs2nF6rry8XCAQ5ObmEkLYbPaBAwfmz59POxTQhEM96ImHh8fKlSsVCkVcXBztLD3U1NTE4/HGjx+fm5trY2OzZ8+eH374AR0KWKOgP/X19SwW6/Hjx7m5uXPnzqUd5yWoVKrjx4+/8847Dx48YDKZq1evTklJeeWVV2jnAoOANQr6Y29vn5SURAjZtGmTUqmkHedFnT9/fvLkydHR0Q8ePPD3979+/XpGRgY6FJ5AjYJe8Xg8FoslkUgOHz5MO8sfu337dlhYWEBAQGlpqYuLS05Ozrlz5yZOnEg7FxgWHOpB38RicWhoqI2NjUwms7Ozox3n6dra2vbt2ycSiTo6OqysrOLi4hITEy0sLGjnAkOENQr6tmDBgrlz5zY1NSUnJ9PO8hQajSYrK8vFxWX79u2dnZ0rVqy4ffu2UChEh8KzYI0CBRKJZNKkSWq1uri42KDOyNeuXePxeIWFhYQQLy+vtLS0adOm0Q4Fhg5rFCjgcrnr16/v6uri8/m0s/yipqYmPDx86tSphYWF3be2u3LlCjoUXgTWKNDR1NTEYrEaGho+++yzN998k2ISuVyenp6+a9eulpYWS0vL2NjYpKQka2tripGgb0GNAjWHDx+OiYkZPXp0WVkZrVcef3Nru/T09NGjR1NJAn0XDvVATXR09MSJE3/66aeDBw/q/+olJSWzZs3qvrWdh4fHhQsXxGIxOhR6AGsUaMrPz/f39x80aFB5efnIkSP1c9GHDx/u2LHjvffe6+rqGjZs2NatWzds2IDbMkGPYY0CTXPmzHnjjTdaW1vffvttPVwOt7YDXcAaBcoqKyvd3Nw6OzsLCwunTp2quwvl5eXxeLyysjJCSGBgYFpamqurq+4uB6YDaxQoGzNmjEAg0Gg0fD5fR1/UZTJZSEhIUFBQWVkZi8X66quvzp49iw4FbcEaBfpaW1vZbPbPP/+cnZ29fPlyLT5zU1OTSCQ6ePCgQqEYOnRoYmKiQCAwNzfX4iUAUKNgEDIzM1euXOng4CCVSgcNGtT7J1Sr1SdOnNi8eXN9fb2ZmdmyZcv2799vb2/f+2cG+A0c6sEghIeHe3t719TUiESi3j9bfn6+h4dHREREfX39nDlziouLs7Ky0KGgI1ijYCiKioqmT58+YMCAsrKyHn//5r1795KSkrKzswkhTk5OKSkp4eHhWo0J8FtYo2AofHx8li1b1tHRER8f34MPb2trEwqFLBYrOzvbyspq27ZtMpkMHQp6gDUKBqSmpobD4bS2tubn58+ePfsFP0qj0Xz66adxcXF3795lMBhvvfXW/v37X331VV0mBfgV1igYEAcHh4SEBELIhg0bVCrVi3zItWvXfH19w8LC7t69O2XKlIKCgpycHHQo6BNqFAxLXFycs7Pzjz/++OGHHz7/PX/++efo6GgfH5/Lly+PHDkyIyPjypUr06dP109OgCdwqAeDc+rUqbCwMFtb21u3btna2v7+HRQKxfvvv79169aWlhZzc/N169alpKTg1nZAC9YoGJzFixfPnj27sbExJSXl94+KxWIOh8Pn81taWkJCQiQSSVpaGjoUKMIaBUN048YNT09PBoPx/fffu7m5df+lRCIRCARnzpwhhHC53IMHDwYHB1ONCUAI1igYpkmTJq1Zs0alUgkEAkJIY2Mjj8ebMGHCmTNnbG1tU1NTS0tL0aFgILBGwUA9ePCAxWI9evQoKioqJyfn0aNH/fv3X7Vq1a5duwz21zKDaUKNguGKioo6evRo99vz5s07cOAAh8OhGwng93CoB0MklUrnz5//pEMjIyO/+eYbdCgYJtQoGJZHjx4lJia6u7vn5uYOHTp0zZo1hJCTJ0/W1tbSjgbwdKhRMBRqtTorK4vD4YhEIqVSuWLFCqlUeuzYsXnz5jU3NwuFQtoBAZ4Or42CQbhw4QKPx7tx4wYhZNasWampqe7u7t0P3b59283NTaVSXb161dPTk2pMgKfAGgXKqqurw8PD58yZc+PGDUdHx8zMzPz8/CcdSghxcXGJiYlRq9U8Hg9f9cEAYY0CNe3t7Xv37hWJRB0dHQMHDty8eXNCQoKlpeXv37O5uZnNZtfW1ubk5CxevFj/UQGeAzUKFHTf2m7z5s137tzpvrXdvn37Ro0a9ZwPycjIWLdunZOTk1QqHThwoN6iAvwhHOpB365fv+7n5xcWFnbnzh1PT8+LFy/m5OQ8v0MJIZGRkZ6envfu3Ttw4IB+cgK8IKxR0J/79+8LhcJjx46p1eoRI0YIhcK1a9eamb3o1/KCgoKZM2daWlpKJBLcURQMB9Yo6INCoUhLS+NwOEeOHGEymbGxsVKpNCoq6sU7lBDi6+u7aNGi9vb2pKQk3UUFeFlYo6BzYrGYz+dXVlYSQkJCQtLS0saMGdOzp7p37x6Hw5HL5RcvXvT19dVqTIAewhoFHZJKpfPmzQsNDa2srORwOLm5uWKxuMcdSghxcnLatGmTRqPh8XhqtVqLUQF6DGsUdKKxsXH79u2HDx9WqVS2trbJyckxMTFMJrP3z9ze3s7lcu/evfvRRx9FRET0/gkBegk1ClqmUqmOHz+elJTU0NDAZDJXr16t9VvbZWdnh4eHDx8+XCaTDR48WIvPDNADONSDNp07d87DwyM6OrqhoSEgIKCkpCQjI0Prtwddvny5r69vXV3dnj17tPvMAD2ANQracevWraSkpFOnThFCXFxcdu/erdMfN7p+/bq3tzeTybx58+a4ceN0dyGAP4Q1Cr3V2toqFAonTJhw6tQpKyurbdu23bx5U9c/sunp6blixQqFQtH9e+0BKMIahZ5Tq9UnTpyIj4+vq6szMzNbtmzZvn37hg8frp+r19XVsVis5ubmM2fOvPbaa/q5KMDvYY1CD125cmXGjBkRERF1dXXe3t6XLl3KysrSW4cSQoYPH949RQUCgUql0tt1AX4DNQovrfvWdtOmTSsqKnJwcMjMzCwqKvLx8dF/kri4uHHjxpWVlR05ckT/VwfohkM9vIT29vZDhw6lpKS0trYOHDhw48aN77zzzqBBgyhG+vzzzxctWmRrayuTyYYNG0YxCZgs1Ci8KLFYvHHjxjt37hBCQkJCDh065OzsTDsUIYQEBwf/61//io2NTUtLo50FTBFqFP5YcXExj8crKCgghEyePDk1NdXPz492qF+VlZVNmjSJEFJSUjJ+/HjaccDk4LVReJ6GhgYej+ft7V1QUGBnZ5eamnr16lWD6lBCiKura2RkpEql4vP5tLOAKcIahadTKpWHDx9OTk5ubm7u37//+vXrd+7cabA/ednY2MhisR4+fPjPf/5zwYIFtOOAacEahacQi8VcLpfP5zc3NwcGBt64cSMtLc1gO5QQYmtru3XrVkKIQCDo7OykHQdMC2oU/kN5efn8+fNDQ0MrKirYbPbXX3999uxZLpdLO9cfi4mJGT9+fEVFxaFDh2hnAdOCQz38oqmpSSgUdt/azsbGJiEhQSAQmJub0871EvLy8oKCgqytrcvLy0eMGEE7DpgKrFEgKpXqyJEjbDY7PT2dEBIVFVVeXp6QkNC3OpQQEhgYGBIS0tLSkpycTDsLmBCsUVN3/vx5Pp9fWlpKCPH39z948ODEiRNph+q5iooKNzc3pVJZVFTk5eVFOw6YBKxR03X79u2wsLCAgIDS0lIXF5ecnJxz58716Q4lhIwdO3bjxo1qtZrP52MigH5gjZqitra2ffv2iUSijo4OKyuruLi4xMRECwsL2rm0o6WlhcVi1dbWfvLJJ0uWLKEdB4wfatS0aDSa7OzshISE2tpaBoOxfPnyvXv3/ulPf6KdS8uOHj0aFRXl6OgolUqtrKxoxwEjh0O9Cbl27Vr3re1qa2u9vLy6b21nfB1KCFmzZs2UKVOqq6v3799POwsYP6xRk1BTU7Nly5YTJ05oNBoHB4fdu3evWLGCwWDQzqVDly9f9vX1tbCwkEgko0aNoh0HjBnWqJGTy+UikYjD4WRnZ1tYWCQkJEgkkvDwcOPuUELI9OnTw8LC5HL5li1baGcBI4c1aszEYnFsbGxVVRUhJCQkJD09ffTo0bRD6U91dTWbzZbL5RcuXDC026mAMcEaNU4lJSUzZ84MDQ2tqqry8PC4cOGCWCw2qQ4lhDg6OsbFxWk0Gh6Pp1araccBo4U1aoQ++OCDmJgYtVptb2+/a9eu1atXm5mZ6NdLuVzO5XLv3Lnz4Ycfrl69mnYcME6oUSNUWVnp7u6+atWqHTt2DBkyhHYcyv7+978vW7bM3t5eJpPhXwN0ATVqnB4/fozK6KbRaGbNmvXdd9/Fx8eLRCLaccAIoUbB+JWUlEyZMoXJZJaWlrJYLNpxwNiY6EtmYFI8PDwiIiIUCkV8fDztLGCEsEbBJNTV1bHZ7MePH58+fTo4OJh2HDAqWKNgEoYPH979ffgCgUCpVNKOA0YFNQqmQiAQsFgsiUSSkZFBOwsYFRzqwYR8+eWXr7/+uo2NjUwms7Ozox0HjATWKJiQhQsXBgcHNzU1bd++nXYWMB5Yo2BaysrK3N3d1Wp1SUnJhAkTaMcBY4A1CqbF1dU1Ojq6q6uLz+fTzgJGAmsUTE5TUxOLxWpoaPjiiy8WLlxIOw70eVijYHJsbGy2bdtGCNm0aVNnZyftONDnoUbBFK1fv37ChAmVlZWpqam0s0Cfh0M9mKjz588HBARYW1uXl5ePGDGCdhzow7BGwUT5+/svXLiwpaUlKSmJdhbo27BGwXRVVla6uroqlcrCwkJvb2/acaCvwhoF0zVmzJju3y/C5/OxJ6DHsEbBpLW0tLDZ7Pv373/88cd/+ctfaMeBPglrFEyatbV1SkoKISQ+Pr6trY12HOiTUKNg6lauXOnt7V1TU7N3717aWaBPwqEegBQWFs6YMcPCwqKsrMzZ2Zl2HOhjsEYByLRp05YuXSqXyxMTE2lngb4HaxSAEEKqq6s5HE5bW9u33347a9Ys2nGgL8EaBSCEEEdHx82bNxNC+Hx+V1cX7TjQl2CNAvxCLpe7urpWVVUdPXp07dq1tONAn4EaBfjVyZMnly5dam9vL5PJhgwZQjsO9A041AP8asmSJTNnzqyvr+/+ZlKAF4E1CvAfiouLvby8rKys7t69O3ToUNpxoA9AjQL8VkZGRlBQ0JgxY2gHgb4BNQoA0Ct4bRQAoFdQowAAvYIaBQDoFdQoAECvoEYBAHrl/wDfwAjxPfZWtgAAAABJRU5ErkJggg==\n",
"text/plain": ""
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#Index in to periodic table\nperiodic_table = AllChem.GetPeriodicTable()\nperiodic_table.GetElementSymbol(1)",
"execution_count": 54,
"outputs": [
{
"data": {
"text/plain": "'H'"
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "periodic_table.GetAtomicNumber('Si')",
"execution_count": 56,
"outputs": [
{
"data": {
"text/plain": "14"
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "periodic_table.GetNOuterElecs('Ar')",
"execution_count": 66,
"outputs": [
{
"data": {
"text/plain": "8"
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": false
},
"cell_type": "code",
"source": "m = Chem.MolFromSmiles(\"C1=NC2=C(N1)C(=NC=N2)N\")\nm",
"execution_count": 63,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": ""
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "[SMARTS](http://www.daylight.com/dayhtml/doc/theory/theory.smarts.html) is an extension of SMILES, with SMILES strings forming a subset of SMARTS strings (?).\n\nAlthough SMILES strings can represent reactions, these are not handled directly by RDKit, although they are when treated as SMARTS strings."
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "AllChem.ReactionFromSmarts(\"C=CCBr>>C=CCI\")",
"execution_count": 77,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": ""
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "AllChem.ReactionFromSmarts(\"C=CCBr.[Na+].[I-]>CC(=O)C>C=CCI.[Na+].[Br-]\")",
"execution_count": 75,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": ""
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "An interesting question, pedagogically, is whether the availability of notations for describing reactions, and tools capable of rendering them, can drive the way educational materials are presented. That is, would authors *come to use* a particular diagrammatic convention *if* the tools for automatically creating such diagrams are readily available?"
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "m = AllChem.AddHs(m)\nm",
"execution_count": 64,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": ""
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "#Simplified from: http://rdkit.blogspot.com/2016/07/using-ipywidgets-and-py3dmol-to-browse.html\nimport py3Dmol\ndef drawitbase(m,p=None):\n if p is None:\n p = py3Dmol.view(width=400,height=400)\n #p.removeAllModels()\n p.addModel(Chem.MolToMolBlock(m),'sdf')\n p.setStyle({'stick':{}})\n p.setBackgroundColor('0xeeeeee')\n p.zoomTo()\n return p.show()\n\nAllChem.EmbedMultipleConfs(m,useExpTorsionAnglePrefs=True,useBasicKnowledge=True)\ndrawitbase(m)",
"execution_count": 67,
"outputs": [
{
"data": {
"application/3dmoljs_load.v0": "
\n
You appear to be running in JupyterLab. You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol
\n
\n",
"text/html": "
\n
You appear to be running in JupyterLab. You need to install the 3dmol extension: \n jupyter labextension install jupyterlab_3dmol