{ "cells": [ { "cell_type": "markdown", "id": "31139769-1daf-4765-803f-321d2eb342d5", "metadata": {}, "source": [ "## Initial imports" ] }, { "cell_type": "code", "execution_count": 1, "id": "f31e99f3-bde3-41b7-abde-54f3b6a3e361", "metadata": {}, "outputs": [], "source": [ "import pyCRS\n", "import matplotlib.pyplot as plt\n", "from rdkit import Chem\n", "from rdkit.Chem.Draw import IPythonConsole\n", "\n", "IPythonConsole.ipython_useSVG = True\n", "IPythonConsole.molSize = 150, 150" ] }, { "cell_type": "markdown", "id": "4cde646d-77e3-498f-ae62-e280172f2525", "metadata": {}, "source": [ "## Property prediction from SMILES (ethyl acetate)" ] }, { "cell_type": "code", "execution_count": 2, "id": "a30a9c33-ce52-44cf-a113-214ac16cc8b9", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAIAAACzY+a1AAACt0lEQVR4nO3dyXLCMBAAUSuV//9l5eCKwx6jbdSi+wQnG55H2EBByjlvRu4regesNgnxSYhPQnwS4pMQn4T4JMQnIT4J8UmIT0J8EuKTEJ+E+CTEJyE+CfFJiE9CfBLikxCfhPgkxCchPgnxSYhPQnwS4pMQn4T4JMQnIT4J8UmIT0J8EuKTEJ+E+CTEJyE+CfFJiE9CfBLikxDfd/QOLFFKf7eH/ziohNWldMV2c7d/LqT4JMQnIT4J8UmIzzPS6nL2ooJf6B9FuJDWdTl/QUnYuuGoEuKTsKLh76U9TEJ8EuKTEJ+ETYt4dZQQn4SlzXE6ukm4QBLik7Cw+PdGf5OwZSGuEuKTsKSU0jx/Ji9hs6Jc5yJMKaUJPkRlNcsXL3a5/Si+vG3/Fkx4zNwl2AGp4pliCB/K3ZRzdhzPNJrwLZU5x3G2/RlEeGbsnrWP41TP2n2Be9idsMli6KL6ol6ENWP3sDkX1RlqT9h1XPL+7fdQxeOhTbIwNDuom4/d643tW+q+oafbv7qKjVWs3fxQubttD1Z89mBjx7GccIplZIjiycM0ahxLtjoF3lFPxXcfaYjiEid4zV8aU9q2LRUdpuOP7yUI95qMY6OjYeQ4LkS41Sm2HuVhimsRFnR8PNnheRizqH4w4aiLy97j+JGEw98Z6Kq4NGHoD1Hc1E9xXcLoX7e7r9NL41xff1q7nPPxqVnDJBxdc0UJA9oVW0FKGFPDRVXCyJoorntGus11UfGiyjPVpQlRFV84upDOUvGiKuFEOYUfmoT4JMQnIT4J8UmIT0J8EuKTEJ+E+CTEJyE+CfFJiE9CfBLikxCfhPgkxCchPgnxSYhPQnwS4pMQn4T4JMQnIT4J8UmIT0J8EuKTEJ+E+CTEJyE+CfFJiE9CfBLikxCfhPgkxCchPgnxSYhPQnw/xXYWAm6Y2C0AAAAASUVORK5CYII=\n", "image/svg+xml": [ "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "O\n", "O\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# smiles = 'CCO' # ethanol\n", "smiles = \"O=C(OCC)C\" # ethyl acetate\n", "rdkit_mol = Chem.MolFromSmiles(smiles)\n", "rdkit_mol # show the molecule in a Jupyter notebook" ] }, { "cell_type": "markdown", "id": "5e2885e9-b22c-43db-93ff-909be9138bb8", "metadata": {}, "source": [ "### Temperature-independent properties" ] }, { "cell_type": "code", "execution_count": 3, "id": "c26688f6-8254-4e7f-b7cb-4660d76be837", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SMILES: O=C(OCC)C\n", "\n", "boilingpoint : 339.131 K\n", "criticalpressure : 38.243 bar\n", "criticaltemp : 544.189 K\n", "criticalvol : 0.271 L/mol\n", "density : 0.894 kg/L (298.15 K)\n", "dielectricconstant : 6.834 \n", "entropygas : 382.780 J/(mol K)\n", "flashpoint : 265.005 K\n", "gidealgas : -323.540 kJ/mol\n", "hcombust : -2075.882 kJ/mol\n", "hformstd : -462.595 kJ/mol\n", "hfusion : 11.717 kJ/mol\n", "hidealgas : -437.815 kJ/mol\n", "hsublimation : 55.394 kJ/mol\n", "meltingpoint : 179.420 K\n", "molarvol : 0.098 L/mol\n", "parachor : 215.764 \n", "solubilityparam : 9.069 √(cal/cm^3)\n", "synacc : 1.756 \n", "tpt : 178.434 K\n", "vdwarea : 129.168 Ų\n", "vdwvol : 89.171 ų\n" ] } ], "source": [ "print(f\"SMILES: {smiles}\\n\")\n", "mol = pyCRS.Input.read_smiles(smiles)\n", "\n", "temperatures = [298.15, 308.15, 318.15, 328.15, 338.15]\n", "pyCRS.PropPred.estimate(mol, temperatures=temperatures)\n", "\n", "for prop, value in mol.properties.items():\n", " unit = pyCRS.PropPred.units[prop]\n", " print(f\"{prop:<20s}: {value:.3f} {unit}\")" ] }, { "cell_type": "markdown", "id": "42fe82f4-3c76-45b9-99a9-9992462587fd", "metadata": {}, "source": [ "### Temperature-dependent properties (vapor pressure)" ] }, { "cell_type": "code", "execution_count": 4, "id": "52cd71c8-a973-4a2a-9022-45b85f01ddf5", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prop = \"vaporpressure\"\n", "unit = pyCRS.PropPred.units[prop]\n", "temperatures_K, vaporpressures = mol.get_tdep_values(prop)\n", "temperatures_C = [t - 273.15 for t in temperatures_K] # convert to Celsius\n", "\n", "plt.figure(figsize=(3, 3))\n", "plt.plot(temperatures_C, vaporpressures)\n", "plt.plot(temperatures_C, vaporpressures, \".\")\n", "plt.xlabel(\"Temperature (degree Celsius)\")\n", "plt.title(f\"SMILES: {smiles}\")\n", "plt.ylabel(f\"{prop} [{unit}]\");" ] }, { "cell_type": "markdown", "id": "54618cc8-2fc0-4481-b733-edee5fe2172f", "metadata": {}, "source": [ "## Create .csv for multiple compounds\n", "\n", "Define a list of compounds by their SMILES strings. This example also shows how to only calculate a subset of all properties.\n", "\n", "Note: The SMILES string 'C' corresponds to methane which is too small to be used with the property prediction tool, so the results are given as 'nan' (not a number)." ] }, { "cell_type": "code", "execution_count": 5, "id": "0b85d972-3604-4510-8d3b-ad772c9b40ec", "metadata": {}, "outputs": [], "source": [ "smiles_list = [\n", " \"CCO\",\n", " \"CCOC\",\n", " \"OCCCN\",\n", " \"C\", # methane is too small to be used with property prediction and will return \"nan\"\n", " \"C1=CC=C(C=C1)COCC2=CC=CC=C2\",\n", "]\n", "temperatures = list(range(280, 340, 10))\n", "\n", "mols = [pyCRS.Input.read_smiles(s) for s in smiles_list]\n", "\n", "properties = [\"boilingpoint\", \"criticaltemp\", \"hformstd\"]\n", "\n", "for mol in mols:\n", " pyCRS.PropPred.estimate(mol, properties, temperatures=temperatures)" ] }, { "cell_type": "code", "execution_count": 6, "id": "ac4fb39a-ed79-4b7b-942a-1f0063cff42e", "metadata": {}, "outputs": [], "source": [ "def get_csv(mols, properties):\n", " header = \"SMILES\"\n", " for prop in properties:\n", " unit = pyCRS.PropPred.units[prop]\n", " if unit:\n", " unit = f\" [{unit}]\"\n", " else:\n", " unit = \"\"\n", "\n", " header += f\",{prop}{unit}\"\n", " ret = header + \"\\n\"\n", "\n", " for mol in mols:\n", " s = f\"{mol.smiles}\"\n", " for prop in properties:\n", " value = mol.properties.get(prop, \"\")\n", " try:\n", " s += f\",{value:.4f}\"\n", " except TypeError:\n", " s += f\",{value}\"\n", " s += \"\\n\"\n", " ret += s\n", " return ret" ] }, { "cell_type": "code", "execution_count": 7, "id": "be9db892-4183-4006-a388-e312b095bfe6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SMILES,boilingpoint [K],criticaltemp [K],hformstd [kJ/mol]\n", "CCO,337.6259,442.0008,-271.9478\n", "CCOC,296.4144,425.7282,-213.6494\n", "OCCCN,432.7489,541.4748,-290.7921\n", "C,nan,nan,nan\n", "C1=CC=C(C=C1)COCC2=CC=CC=C2,558.7903,661.7012,-167.0454\n", "\n" ] } ], "source": [ "csv = get_csv(mols, properties)\n", "print(csv)\n", "\n", "# To write to a .csv file:\n", "# with open('outputfile.csv', 'w') as f:\n", "# f.write(csv)" ] }, { "cell_type": "markdown", "id": "8abe2182-f759-494d-a6c0-3a705e525af8", "metadata": {}, "source": [ "### Bar chart for multiple compounds\n", "\n", "Continuing from the previous example, you can also create e.g. a bar chart with the boiling points:" ] }, { "cell_type": "code", "execution_count": 8, "id": "0372299c-0074-456f-95ec-0ccff98bee7d", "metadata": {}, "outputs": [ { "data": { "image/png": "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L7/c0H0urvDwcK1bt85xL8yBAwdcXRJw0yJUAABQSnbv3i1Jjo99feihh3TmzBktW7bMaVze9fsPPfTQDautdevW+vHHH7Vv3z6n1xcuXFiseebPn+/0fNGiRcrNzVWbNm0kSe3atZMkp5vEJWnHjh1KTk4usX222+2SVOJnL5o1a6b169crJydHbdu21f79+0t0fuBWwY3aAACUgB9//FG5ubmS/rzkZ8mSJVq7dq0effRR1a1bV5LUr18/zZgxQ/3791dqaqqaNGmib7/9Vv/617/UtWtXtW/f/obVGx0drQ8//FBdunTRuHHjVKNGDX322WeON83lyhXt945LliyRm5ubOnTooKSkJMXGxqpp06bq1auXJKlhw4Z6/vnn9e6776pcuXLq0qWLUlNTFRsbq6CgIL300kslsj9NmjSRJE2dOlX9+/eXu7u7GjZs6HQvxvW6++67tX79ej300ENq27atNmzYoEaNGhnPC9xKOFMBAEAJGDhwoCIiIhQREaG+fftq586dmjRpkhYsWOAY4+npqY0bN6pv3756++231aVLF3388ccaOXLkDf9W5sDAQG3evFkhISEaMmSI+vbtKw8PD40bN06S5OfnV6R5lixZov379+uxxx7TG2+8oR49emjNmjXy8PBwjJk1a5YmTJigr776St27d9drr72mjh07auvWrQXeL3E92rRpozFjxujLL7/U/fffr3vvvVfff/99icwtSU2bNtWGDRuUm5urtm3b5jvDA9zubNaVF3YCAIDb1vPPP68FCxbo1KlTTsHgSnFxcRo7dqx+++23m/q+iKtp06aNLMvS+vXrVa5cuSKfmblSbm6ujh49qgYNGuT7xm3gdsLlTwAA3KbGjRunwMBA1atXT2fOnNGKFSv0/vvv6/XXX79moLhVbNmyRe7u7urWrZvTN3QXVWZmpipXrlwKlQFlD6ECAIDblLu7u95++22dOHFCubm5Cg4O1qRJkzRixAhXl1bqZs+erdOnT0sq+qVeV6pUqZJ27NjheB4UFFQSpQFlEpc/AQAAADDCjdoAAAAAjBAqAAAAABghVAAAAAAwwo3aAG6Iy5cv65dfflGlSpVks9lcXQ4AACgCy7J0+vRpBQYGXvOjlwkVAG6IX375hU9GAQCgjDp+/Lhq1ap11eWECgA3RKVKlST9+T8lHx8fF1cDAACKIjs7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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prop = \"boilingpoint\"\n", "values = [mol.properties.get(prop, None) for mol in mols]\n", "plt.barh(smiles_list, values)\n", "plt.title(\"Boiling point [K]\");" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }