{ "cells": [ { "cell_type": "markdown", "id": "302355e8", "metadata": {}, "source": [ "<img align=\"right\" src=\"https://raw.githubusercontent.com/GT4SD/gt4sd-core/main/docs/_static/gt4sd_logo.png\" alt=\"logo\" width=\"100\" height=\"100\"/>\n", "\n", "# Demo: The Generative Toolkit for Scientific Discovery\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "d6a65c61", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "# logging\n", "import os\n", "os.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"2\"\n", "import logging, sys\n", "logging.disable(sys.maxsize)\n", "logger = logging.getLogger()\n", "logger.setLevel(logging.CRITICAL)\n", "from paccmann_chemistry.utils import disable_rdkit_logging\n", "# utils\n", "import numpy as np\n", "import pandas as pd\n", "from tqdm import tqdm\n", "from paccmann_generator.drug_evaluators.esol import ESOL\n", "from paccmann_generator.drug_evaluators.scsore import SCScore\n", "from terminator.selfies import encoder, split_selfies\n", "from rdkit import Chem\n", "from rdkit.Chem.Draw import IPythonConsole\n", "from rdkit.Chem.Descriptors import MolWt\n", "from rdkit.Chem.Scaffolds.MurckoScaffold import GetScaffoldForMol\n", "from rdkit.DataStructs import FingerprintSimilarity\n", "from rdkit.Chem.AllChem import GetMorganFingerprintAsBitVect\n", "# plotting\n", "import mols2grid\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm\n", "%matplotlib inline\n", "# gt4sd\n", "from gt4sd.algorithms.generation.moler import MoLeR, MoLeRDefaultGenerator\n", "from gt4sd.algorithms.conditional_generation.regression_transformer import (\n", " RegressionTransformer, RegressionTransformerMolecules\n", ")" ] }, { "cell_type": "markdown", "id": "67314a02", "metadata": {}, "source": [ "### Let us have a look at a case study" ] }, { "cell_type": "code", "execution_count": 2, "id": "d2907c5c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<script>\n", " function fit_height(obj) {\n", " obj.style.height = 0;\n", " var height = obj.contentDocument.body.scrollHeight + 18 + 'px';\n", " obj.style.height = height;\n", " }\n", "</script>\n", "<iframe class=\"mols2grid-iframe\" frameborder=\"0\" width=\"100%\"\n", "\n", "height=\"200\"\n", "\n", "\n", "allow=\"clipboard-write\"\n", "\n", "srcdoc=\"<html>\n", " <meta charset="utf-8">\n", " <head>\n", " <style>\n", " #mols2grid.gridcontainer {\n", " display: block;\n", " padding-left: 1em;\n", " max-width: 4020px;\n", " width: 4020px;\n", "}\n", "#mols2grid .cell {\n", " border: 1px solid #cccccc;\n", " text-align: center;\n", " vertical-align: top;\n", " max-width: 800px;\n", " width: 800px;\n", " font-family: 'DejaVu', sans-serif;\n", " font-size: 12pt;\n", " padding: 0;\n", " margin: 0px;\n", " float: left;\n", "}\n", "#mols2grid .cell:hover {\n", " background-color: #e7e7e7 !important;\n", "}\n", "#mols2grid .cell .data-img {\n", " padding: 0;\n", " margin: 0;\n", "}\n", "#mols2grid .cell img, #mols2grid .cell svg {\n", " max-width: 100%;\n", " height: auto;\n", " padding: 0;\n", "}\n", "#mols2grid .data {\n", " overflow: hidden;\n", " white-space: nowrap;\n", " text-overflow: ellipsis;\n", " display: block;\n", "}\n", "#mols2grid .arrow-asc:after {\n", " content: '↑';\n", " text-align: right;\n", " float:right;\n", "}\n", "#mols2grid .arrow-desc:after {\n", " content: '↓';\n", " text-align: right;\n", " float:right;\n", "}\n", " /* custom CSS */\n", " \n", " </style>\n", " <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>\n", "<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">\n", "<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>\n", "<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>\n", "<script src="https://unpkg.com/@rdkit/rdkit@2021.9.4/Code/MinimalLib/dist/RDKit_minimal.js"></script>\n", " <!-- custom header -->\n", " \n", " </head>\n", " <body>\n", " <div id="mols2grid" class="gridcontainer grid-default">\n", " <div class="row mb-3">\n", " <div class="list"><div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-Name"></div><a tabindex="0" class="data data-img mols2grid-tooltip" data-toggle="popover" data-content="."></a><div class="data data-Solubility-Val"></div><div class="data data-SMILES" style="display: none;"></div><div class="data data-Solubility" style="display: none;"></div></div></div>\n", " </div>\n", " <div class="d-inline">\n", " <ul class="pagination float-left"></ul>\n", " <div id="controls" class="d-flex flex-row float-right">\n", " \n", " <div id="chkbox-dropdown" class="dropdown">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="chkboxDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">☑</button>\n", " <div class="dropdown-menu" aria-labelledby="checkboxDropdownMenu">\n", " <button id="btn-chkbox-all" class="dropdown-item" type="button">Check all</button>\n", " <button id="btn-chkbox-none" class="dropdown-item" type="button">Uncheck all</button>\n", " <button id="btn-chkbox-invert" class="dropdown-item" type="button">Invert</button>\n", " <div class="dropdown-divider"></div>\n", " <button id="btn-chkbox-copy" class="dropdown-item" type="button">Copy to clipboard</button>\n", " <button id="btn-chkbox-dlsmi" class="dropdown-item" type="button">Save SMILES</button>\n", " <button id="btn-chkbox-dlcsv" class="dropdown-item" type="button">Save CSV</button>\n", " </div>\n", "</div>\n", " \n", " <div id="sort-dropdown" class="dropdown pl-2">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="sortDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n", " Sort by\n", " </button>\n", " <div class="dropdown-menu" aria-labelledby="sortDropdownMenu">\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn arrow-asc active" type="button" data-name="mols2grid-id">Index</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-Name">Name</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-Solubility-Val">Solubility-Val</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-SMILES">SMILES</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-Solubility">Solubility</button>\n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn" type="button" data-name="checkbox">Selected</button>\n", " \n", " </div>\n", " </div>\n", " <div class="input-group row pl-4">\n", " <input type="text" id="searchbar" class="form-control" placeholder="Search" aria-label="Search" aria-describedby="basic-addon1">\n", " <div class="input-group-append">\n", " <button id="searchBtn" class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">🔎</button>\n", " <div class="dropdown-menu dropdown-menu-right">\n", " <button id="txtSearch" class="search-btn dropdown-item active">Text</button>\n", " <button id="smartsSearch" class="search-btn dropdown-item">SMARTS</button>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " <script>\n", " // list.js\n", "var listObj = new List('mols2grid', {\n", " valueNames: [{data: ['mols2grid-id']}, 'data-Solubility', 'data-Solubility-Val', 'data-img', 'data-Name', 'data-SMILES', {attr: 'data-content', name: 'mols2grid-tooltip'}],\n", " item: '<div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-Name"></div><a tabindex="0" class="data data-img mols2grid-tooltip" data-toggle="popover" data-content="."></a><div class="data data-Solubility-Val"></div><div class="data data-SMILES" style="display: none;"></div><div class="data data-Solubility" style="display: none;"></div></div>',\n", " page: 15,\n", " pagination: {\n", " name: "pagination",\n", " item: '<li class="page-item"><a class="page page-link" href="#" onclick="event.preventDefault()"></a></li>',\n", " innerWindow: 1,\n", " outerWindow: 1,\n", " },\n", "});\n", "listObj.remove("mols2grid-id", "0");\n", "listObj.add([{"data-Solubility": -3.5527747378327823, "data-Solubility-Val": "Solubility = -3.553", "data-img": null, "mols2grid-id": 0, "data-Name": "Buturon", "data-SMILES": "CC(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1", "mols2grid-tooltip": "<strong>SMILES</strong>: CC(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>Name</strong>: Buturon<br><strong>Solubility</strong>: -3.5527747378327823"}]);\n", "// filter\n", "if (window.parent.mols2grid_lists === undefined) {\n", " window.parent.mols2grid_lists = {};\n", "}\n", "window.parent.mols2grid_lists["default"] = listObj;\n", "\n", "\n", "// selection\n", "class MolStorage extends Map {\n", " multi_set(_id, _smiles) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.set(_id[i], _smiles[i]);\n", " }\n", " }\n", " multi_del(_id) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.delete(_id[i]);\n", " };\n", " }\n", " to_dict() {\n", " var content = "{";\n", " for (let [key, value] of this) {\n", " content += key + ":" + JSON.stringify(value) + ",";\n", " }\n", " content = content.length > 1 ? content.slice(0, -1) : content;\n", " content += "}";\n", " return content\n", " }\n", " download_smi(fileName) {\n", " var content = "SMILES index\\n";\n", " for (let [key, value] of this) {\n", " content += value + " " + key + "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/plain"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = fileName;\n", " a.click();\n", " a.remove();\n", " }\n", "}\n", "var SELECTION = new MolStorage();\n", "\n", "\n", "\n", "// kernel\n", "var kernel_env = null;\n", "if (window.parent.IPython !== undefined) {\n", " // Jupyter notebook\n", " kernel_env = "jupyter";\n", " var kernel = window.parent.IPython.notebook.kernel;\n", " kernel.execute('from mols2grid.select import register as _m2g_reg')\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " kernel.execute("_m2g_reg.add_selection('"+grid_id+"', "+JSON.stringify(_id)+","+JSON.stringify(smiles)+")");\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " kernel.execute("_m2g_reg.del_selection('"+grid_id+"', "+JSON.stringify(_id)+")");\n", " }\n", "} else if (window.parent.google !== undefined) {\n", " // Google colab\n", " kernel_env = "colab";\n", " var kernel = window.parent.google.colab.kernel;\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.add_selection',\n", " [grid_id, _id, smiles], {});\n", " })();\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.del_selection',\n", " [grid_id, _id], {});\n", " })();\n", " }\n", "} else {\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " }\n", "}\n", "\n", "\n", "\n", "\n", "// sort\n", "var sort_field = "mols2grid-id";\n", "var sort_order = "asc";\n", "function mols2gridSortFunction(itemA, itemB, options) {\n", " var x = itemA.values()[options.valueName];\n", " var y = itemB.values()[options.valueName];\n", " if (typeof x === "number") {\n", " if (isFinite(x - y)) {\n", " return x - y; \n", " } else {\n", " return isFinite(x) ? -1 : 1;\n", " }\n", " } else {\n", " x = x.toLowerCase();\n", " y = y.toLowerCase();\n", " return (x < y) ? -1: (x > y) ? 1: 0;\n", " }\n", "}\n", "function checkboxSort(itemA, itemB, options) {\n", " if (itemA.elm !== undefined) {\n", " var checkedA = itemA.elm.firstChild.checked;\n", " if (itemB.elm !== undefined) {\n", " var checkedB = itemB.elm.firstChild.checked;\n", " if (checkedA && !checkedB) {\n", " return -1;\n", " } else if (!checkedA && checkedB) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", " } else {\n", " return -1;\n", " }\n", " } else if (itemB.elm !== undefined) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", "}\n", "$('#mols2grid button.sort-btn').click(function(e) {\n", " var _field = $(this).attr("data-name");\n", " if (_field == sort_field) {\n", " $(this).removeClass("arrow-" + sort_order)\n", " sort_order = (sort_order === "desc") ? "asc" : "desc";\n", " } else {\n", " $('#mols2grid button.sort-btn.active').removeClass("active arrow-" + sort_order);\n", " sort_order = "asc";\n", " sort_field = _field;\n", " $(this).addClass("active");\n", " }\n", " $(this).addClass("arrow-" + sort_order)\n", " if (sort_field == "checkbox") {\n", " listObj.sort("mols2grid-id", {order: sort_order, sortFunction: checkboxSort});\n", " } else {\n", " listObj.sort(_field, {order: sort_order, sortFunction: mols2gridSortFunction});\n", " }\n", "});\n", "\n", "\n", "\n", "\n", "// tooltips\n", "$.fn.tooltip.Constructor.Default.whiteList.span = ['style']\n", "listObj.on("updated", function (list) {\n", " $(function () {\n", " // hide previous popovers\n", " $('#mols2grid a.page-link').click(function(e) {\n", " $('.mols2grid-tooltip[data-toggle="popover"]').popover('hide')\n", " });\n", " // create new popover\n", " $('.mols2grid-tooltip[data-toggle="popover"]').popover({\n", " placement: 'bottom',\n", " trigger: 'click hover',\n", " html: true,\n", " sanitize: false,\n", " });\n", " })\n", "});\n", "\n", "\n", "\n", "// selection modifyers and export options\n", "// check all\n", "$('#btn-chkbox-all').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 15;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = true;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " _smiles.push($($(this).siblings(".data-SMILES")[0]).text());\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " add_selection("default", _id, _smiles);\n", "});\n", "// uncheck all\n", "$('#btn-chkbox-none').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 15;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox:checked").each(function() {\n", " this.checked = false;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id);\n", "});\n", "// invert\n", "$('#btn-chkbox-invert').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 15;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id_add = [];\n", " var _id_del = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = !this.checked;\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " _id_add.push(_id);\n", " _smiles.push($(this).siblings(".data-SMILES").first().text());\n", " } else {\n", " _id_del.push(_id);\n", " }\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id_del);\n", " add_selection("default", _id_add, _smiles);\n", "});\n", "// copy to clipboard\n", "$("#btn-chkbox-copy").click(function(e) {\n", " navigator.clipboard.writeText(SELECTION.to_dict());\n", "});\n", "// export smiles\n", "$("#btn-chkbox-dlsmi").click(function(e) {\n", " SELECTION.download_smi("selection.smi");\n", "});\n", "// export CSV\n", "$("#btn-chkbox-dlcsv").click(function(e) {\n", " var sep = "\\t"\n", " // same order as subset + tooltip\n", " var columns = Array.from(listObj.items[0].elm.querySelectorAll("div.data"))\n", " .map(elm => elm.classList[1]);\n", " // remove 'data-'\n", " var header = columns.map(name => name.slice(5));\n", " // csv content\n", " header = ["index"].concat(header).join(sep);\n", " var content = header + "\\n";\n", " for (let [index, smiles] of SELECTION.entries()) {\n", " var data = listObj.items[index].values();\n", " content += index;\n", " columns.forEach((key) => {\n", " content += sep + data[key];\n", " })\n", " content += "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/csv"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = "selection.csv";\n", " a.click();\n", " a.remove();\n", "});\n", "// update selection on checkbox click\n", "listObj.on("updated", function (list) {\n", " $("input:checkbox").change(function() {\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " var _smiles = $($(this).siblings(".data-SMILES")[0]).text();\n", " add_selection("default", [_id], [_smiles]);\n", " } else {\n", " del_selection("default", [_id]);\n", " }\n", " }); \n", "});\n", "\n", "\n", "\n", "\n", "\n", "// generate images for the currently displayed molecules\n", "var draw_opts = {"width": 800, "height": 250};\n", "var json_draw_opts = JSON.stringify(draw_opts);\n", "\n", "var smarts_matches = {};\n", "\n", "// Load RDKit\n", "window\n", ".initRDKitModule()\n", ".then(function(RDKit) {\n", " console.log('RDKit version: ', RDKit.version());\n", " window.RDKit = RDKit;\n", " window.RDKitModule = RDKit;\n", "\n", " // search bar\n", " function SmartsSearch(query, columns) {\n", " var smiles_col = columns[0];\n", " smarts_matches = {};\n", " var query = $('#mols2grid #searchbar').val();\n", " var qmol = RDKit.get_qmol(query);\n", " if (qmol.is_valid()) {\n", " for (var k = 0, kl = listObj.items.length; k < kl; k++) {\n", " var item = listObj.items[k];\n", " var smiles = item.values()[smiles_col]\n", " var mol = RDKit.get_mol(smiles);\n", " if (mol.is_valid()) {\n", " var results = JSON.parse(mol.get_substruct_match(qmol));\n", " if (results.atoms) {\n", " item.found = true;\n", " \n", " smarts_matches[smiles] = results;\n", " \n", " } else {\n", " item.found = false;\n", " }\n", " } else {\n", " item.found = false;\n", " }\n", " mol.delete();\n", " }\n", " }\n", " qmol.delete();\n", "}\n", "var search_type = "Text";\n", "$('#mols2grid .search-btn').click(function() {\n", " search_type = $(this).text();\n", " $('#mols2grid button.search-btn.active').removeClass("active");\n", " $(this).addClass("active");\n", "});\n", "$('#mols2grid #searchbar').on("keyup", function(e) {\n", " var query = e.target.value;\n", " if (search_type === "Text") {\n", " smarts_matches = {};\n", " listObj.search(query, ['data-Name', 'data-Solubility-Val', 'data-SMILES', 'data-Name', 'data-Solubility']);\n", " } else {\n", " listObj.search(query, ["data-SMILES"], SmartsSearch);\n", " }\n", "});\n", "\n", " \n", " // generate images for the currently displayed molecules\n", "RDKit.prefer_coordgen(true);\n", "function draw_mol(smiles) {\n", " var mol = RDKit.get_mol(smiles, '{"removeHs": false }');\n", " var svg = "";\n", " if (mol.is_valid()) {\n", " var highlights = smarts_matches[smiles];\n", " if (highlights) {\n", " var details = Object.assign({}, draw_opts, highlights);\n", " details = JSON.stringify(details);\n", " } else {\n", " var details = json_draw_opts;\n", " }\n", " svg = mol.get_svg_with_highlights(details);\n", " }\n", " mol.delete();\n", " if (svg == "") {\n", " return '<svg width="800" height="250" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 800 250"></svg>';\n", " }\n", " return svg;\n", "}\n", "listObj.on("updated", function (list) {\n", " var query = $('#mols2grid #searchbar').val();\n", " if (query === "") {\n", " smarts_matches = {};\n", " }\n", " $('#mols2grid .cell').each(function() {\n", " var $t = $(this);\n", " var smiles = $t.children(".data-SMILES").first().text()\n", " var svg = draw_mol(smiles);\n", " $t.children(".data-img").html(svg);\n", " });\n", "});\n", " \n", "\n", " // trigger update to activate tooltips, draw images, setup callbacks...\n", " listObj.update();\n", " // resize iframe to fit content\n", " if (window.frameElement) {\n", " window.parent.fit_height(window.frameElement);\n", " }\n", "});\n", " </script>\n", " </body>\n", "</html>\">\n", "</iframe>" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "molecule_name, smiles = (\n", " \"Buturon\",\n", " \"CC(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1\"\n", ") # https://pubchem.ncbi.nlm.nih.gov/compound/19587\n", "# molecule_name, smiles = (\n", "# \"SPD304\",\n", "# \"CC1=CC2=C(C=C1C)OC=C(C2=O)CN(C)CCN(C)CC3=CN(C4=CC=CC=C43)C5=CC=CC(=C5)C(F)(F)F\"\n", "# ) # https://pubchem.ncbi.nlm.nih.gov/compound/5327044\n", "# molecule_name, smiles = (\n", "# \"OrganicSemiConductor\",\n", "# \"Cc1nc(-c2nc(C)c(-c3ccc(-c4cc5c(s4)-c4sccc4[Si]5(C)C)s3)s2)sc1-c1cccs1\"\n", "# ) # organic semi-conductor from DeepSearch query\n", "molecule = Chem.MolFromSmiles(smiles)\n", "fingerprint = GetMorganFingerprintAsBitVect(molecule, radius=2)\n", "solubility_fn = lambda smi: ESOL().calc_esol(Chem.MolFromSmiles(smi))\n", "complexity_fn = lambda smi: SCScore()(Chem.MolFromSmiles(smi))\n", "molecular_weight_fn = lambda smi: MolWt(Chem.MolFromSmiles(smi))\n", "\n", "similarity_fn = lambda smi: FingerprintSimilarity(\n", " fingerprint,\n", " GetMorganFingerprintAsBitVect(Chem.MolFromSmiles(smi), radius=2)\n", ")\n", "solubility = solubility_fn(smiles)\n", "\n", "mols2grid.display(\n", " pd.DataFrame({\n", " \"SMILES\": [smiles], \"Name\": [molecule_name], \"Solubility\": [solubility],\n", " \"Solubility Val\": [f\"Solubility = {x:.3f}\" for x in [solubility]]\n", " }),\n", " size=(800,250), tooltip=[\"SMILES\", \"Name\", \"Solubility\"], subset=[\"Name\", \"img\", \"Solubility Val\"]\n", ")" ] }, { "cell_type": "markdown", "id": "61e6d15c", "metadata": {}, "source": [ "# GT4SD Discovery usecase\n", "\n", "## Find similar molecules controlling the solubility\n", "\n", "### **Goal:** \n", "\n", "Here we are trying to modify the molecule considered to generate different alternatives controlling the solubility using ESOL from Dealney.\n", "\n", "References:\n", "\n", "```txt\n", "Dealney J. S. (2004). ESOL: Estimating Aqueous Solubility Directly from Molecular Structure. J. Chem. Inf. Comput. Sci. 2004, 44, 3, 1000–1005.\n", "```" ] }, { "cell_type": "markdown", "id": "11214a27", "metadata": {}, "source": [ "## Finding alternatives using the RegressionTransformer\n", "\n", "We start considering a methodology based on language modeling relying on the RegressionTransformer\n", "\n", "References:\n", "\n", "```txt\n", "Born, J., & Manica, M. (2022). Regression Transformer: Concurrent Conditional Generation and Regression by Blending Numerical and Textual Tokens. ICLR Workshop on Machine Learning for Drug Discovery.\n", "```" ] }, { "cell_type": "code", "execution_count": 3, "id": "a2dc16eb", "metadata": {}, "outputs": [], "source": [ "# some utilities\n", "def mask_selfies(s: str, p: float) -> str:\n", " property_part, molecule_part = s.split(\"|\")\n", " tokens = [t if np.random.sample() > p else \"[MASK]\" for t in split_selfies(molecule_part)]\n", " return property_part + \"|\" + \"\".join(tokens)\n", "\n", "\n", "def plot_molecules_df(molecules_df: pd.DataFrame, similarity_threshold: float) -> None:\n", " molecules_df_to_plot = molecules_df.sort_values(by=\"similarity\", ascending=False)\n", " molecules_df_to_plot[\"text\"] = molecules_df_to_plot.apply(lambda x: f\"Solubility (log(mol/L))={x['solubility']:.2f}\", axis=1)\n", " return mols2grid.display(\n", " molecules_df_to_plot[molecules_df_to_plot[\"similarity\"] > similarity_threshold], smiles_col=\"smiles\", n_cols=3,\n", " size=(300,200), tooltip=[\"smiles\", \"solubility\", \"similarity\", \"molecular_weight\", \"scs_score\"],\n", " subset=[\"smiles\", \"img\", \"text\"]\n", " )" ] }, { "cell_type": "code", "execution_count": 4, "id": "617fd3e0", "metadata": {}, "outputs": [], "source": [ "attempts = 20\n", "samples = 5\n", "change_probabilities = [0.15, 0.5]\n", "desired_solubility = solubility + 3.\n", "similarity_threshold = .1\n", "\n", "selfies = encoder(smiles)\n", "property_with_selfies = f\"<esol>{desired_solubility:.2f}|\" + selfies\n", "\n", "first_set_configuration = RegressionTransformerMolecules(\n", " algorithm_version=\"solubility\", search=\"sample\", temperature=1.5, tolerance=60\n", ")\n", "\n", "first_set_molecules_df = pd.DataFrame()\n", "generated_smiles = set()\n", "\n", "for i in tqdm(range(attempts), total=attempts, desc=\"Processing RT number:\"):\n", " seed_property_with_selfies = mask_selfies(property_with_selfies, np.random.uniform(*change_probabilities))\n", " algorithm = RegressionTransformer(configuration=first_set_configuration, target=seed_property_with_selfies)\n", " generated_smiles = set()\n", " \n", " while len(generated_smiles) < samples:\n", " generated_samples = list(algorithm.sample(samples))\n", " for s in generated_samples:\n", " if s[0] not in generated_smiles and s[0] != smiles and s[0]:\n", " generated_smiles = generated_smiles.union([s[0]])\n", " first_set_molecules_df = pd.concat([\n", " first_set_molecules_df,\n", " pd.DataFrame({\n", " \"smiles\": list(generated_smiles),\n", " \"solubility\": list(map(lambda smi: solubility_fn(smi), generated_smiles)),\n", " \"similarity\": list(map(similarity_fn, generated_smiles)),\n", " \"molecular_weight\": list(map(molecular_weight_fn, generated_smiles)),\n", " \"scs_score\": list(map(complexity_fn, generated_smiles)),\n", " })\n", " ], axis=0)\n", "first_set_molecules_df\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "5e0dccfc", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "<script>\n", " function fit_height(obj) {\n", " obj.style.height = 0;\n", " var height = obj.contentDocument.body.scrollHeight + 18 + 'px';\n", " obj.style.height = height;\n", " }\n", "</script>\n", "<iframe class=\"mols2grid-iframe\" frameborder=\"0\" width=\"100%\"\n", "\n", "height=\"200\"\n", "\n", "\n", "allow=\"clipboard-write\"\n", "\n", "srcdoc=\"<html>\n", " <meta charset="utf-8">\n", " <head>\n", " <style>\n", " #mols2grid.gridcontainer {\n", " display: block;\n", " padding-left: 1em;\n", " max-width: 912px;\n", " width: 912px;\n", "}\n", "#mols2grid .cell {\n", " border: 1px solid #cccccc;\n", " text-align: center;\n", " vertical-align: top;\n", " max-width: 300px;\n", " width: 300px;\n", " font-family: 'DejaVu', sans-serif;\n", " font-size: 12pt;\n", " padding: 0;\n", " margin: 0px;\n", " float: left;\n", "}\n", "#mols2grid .cell:hover {\n", " background-color: #e7e7e7 !important;\n", "}\n", "#mols2grid .cell .data-img {\n", " padding: 0;\n", " margin: 0;\n", "}\n", "#mols2grid .cell img, #mols2grid .cell svg {\n", " max-width: 100%;\n", " height: auto;\n", " padding: 0;\n", "}\n", "#mols2grid .data {\n", " overflow: hidden;\n", " white-space: nowrap;\n", " text-overflow: ellipsis;\n", " display: block;\n", "}\n", "#mols2grid .arrow-asc:after {\n", " content: '↑';\n", " text-align: right;\n", " float:right;\n", "}\n", "#mols2grid .arrow-desc:after {\n", " content: '↓';\n", " text-align: right;\n", " float:right;\n", "}\n", " /* custom CSS */\n", " \n", " </style>\n", " <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>\n", "<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">\n", "<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>\n", "<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>\n", "<script src="https://unpkg.com/@rdkit/rdkit@2021.9.4/Code/MinimalLib/dist/RDKit_minimal.js"></script>\n", " <!-- custom header -->\n", " \n", " </head>\n", " <body>\n", " <div id="mols2grid" class="gridcontainer grid-default">\n", " <div class="row mb-3">\n", " <div class="list"><div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-smiles"></div><a tabindex="0" class="data data-img mols2grid-tooltip" data-toggle="popover" data-content="."></a><div class="data data-text"></div><div class="data data-solubility" style="display: none;"></div><div class="data data-similarity" style="display: none;"></div><div class="data data-molecular_weight" style="display: none;"></div><div class="data data-scs_score" style="display: none;"></div></div></div>\n", " </div>\n", " <div class="d-inline">\n", " <ul class="pagination float-left"></ul>\n", " <div id="controls" class="d-flex flex-row float-right">\n", " \n", " <div id="chkbox-dropdown" class="dropdown">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="chkboxDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">☑</button>\n", " <div class="dropdown-menu" aria-labelledby="checkboxDropdownMenu">\n", " <button id="btn-chkbox-all" class="dropdown-item" type="button">Check all</button>\n", " <button id="btn-chkbox-none" class="dropdown-item" type="button">Uncheck all</button>\n", " <button id="btn-chkbox-invert" class="dropdown-item" type="button">Invert</button>\n", " <div class="dropdown-divider"></div>\n", " <button id="btn-chkbox-copy" class="dropdown-item" type="button">Copy to clipboard</button>\n", " <button id="btn-chkbox-dlsmi" class="dropdown-item" type="button">Save SMILES</button>\n", " <button id="btn-chkbox-dlcsv" class="dropdown-item" type="button">Save CSV</button>\n", " </div>\n", "</div>\n", " \n", " <div id="sort-dropdown" class="dropdown pl-2">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="sortDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n", " Sort by\n", " </button>\n", " <div class="dropdown-menu" aria-labelledby="sortDropdownMenu">\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn arrow-asc active" type="button" data-name="mols2grid-id">Index</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-smiles">smiles</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-text">text</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-solubility">solubility</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-similarity">similarity</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-molecular_weight">molecular_weight</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-scs_score">scs_score</button>\n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn" type="button" data-name="checkbox">Selected</button>\n", " \n", " </div>\n", " </div>\n", " <div class="input-group row pl-4">\n", " <input type="text" id="searchbar" class="form-control" placeholder="Search" aria-label="Search" aria-describedby="basic-addon1">\n", " <div class="input-group-append">\n", " <button id="searchBtn" class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">🔎</button>\n", " <div class="dropdown-menu dropdown-menu-right">\n", " <button id="txtSearch" class="search-btn dropdown-item active">Text</button>\n", " <button id="smartsSearch" class="search-btn dropdown-item">SMARTS</button>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " <script>\n", " // list.js\n", "var listObj = new List('mols2grid', {\n", " valueNames: [{data: ['mols2grid-id']}, 'data-molecular_weight', 'data-scs_score', 'data-img', 'data-smiles', 'data-text', 'data-solubility', 'data-similarity', {attr: 'data-content', name: 'mols2grid-tooltip'}],\n", " item: '<div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-smiles"></div><a tabindex="0" class="data data-img mols2grid-tooltip" data-toggle="popover" data-content="."></a><div class="data data-text"></div><div class="data data-solubility" style="display: none;"></div><div class="data data-similarity" style="display: none;"></div><div class="data data-molecular_weight" style="display: none;"></div><div class="data data-scs_score" style="display: none;"></div></div>',\n", " page: 9,\n", " pagination: {\n", " name: "pagination",\n", " item: '<li class="page-item"><a class="page page-link" href="#" onclick="event.preventDefault()"></a></li>',\n", " innerWindow: 1,\n", " outerWindow: 1,\n", " },\n", "});\n", "listObj.remove("mols2grid-id", "0");\n", "listObj.add([{"data-molecular_weight": 236.702, "data-scs_score": 3.3581300782822665, "data-img": null, "mols2grid-id": 0, "data-smiles": "CC(C#C)N(C)C(=O)[NH]C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.55", "data-solubility": -3.5527747378327823, "data-similarity": 1.0, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)[NH]C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.5527747378327823<br><strong>similarity</strong>: 1.0<br><strong>molecular_weight</strong>: 236.702<br><strong>scs_score</strong>: 3.3581300782822665"}, {"data-molecular_weight": 218.256, "data-scs_score": 3.1826882116840673, "data-img": null, "mols2grid-id": 1, "data-smiles": "CC(C#C)N(C)C(=O)NC1=CC=C(O)C=C1", "data-text": "Solubility (log(mol/L))=-2.73", "data-solubility": -2.7278164472653317, "data-similarity": 0.7567567567567568, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC1=CC=C(O)C=C1<br><strong>solubility</strong>: -2.7278164472653317<br><strong>similarity</strong>: 0.7567567567567568<br><strong>molecular_weight</strong>: 218.256<br><strong>scs_score</strong>: 3.1826882116840673"}, {"data-molecular_weight": 216.284, "data-scs_score": 3.4384107094905865, "data-img": null, "mols2grid-id": 2, "data-smiles": "CC(C#C)N(C)C(=O)NC1=CC=C(C)C=C1", "data-text": "Solubility (log(mol/L))=-3.16", "data-solubility": -3.161869758441408, "data-similarity": 0.7567567567567568, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC1=CC=C(C)C=C1<br><strong>solubility</strong>: -3.161869758441408<br><strong>similarity</strong>: 0.7567567567567568<br><strong>molecular_weight</strong>: 216.284<br><strong>scs_score</strong>: 3.4384107094905865"}, {"data-molecular_weight": 238.674, "data-scs_score": 3.5527853096829882, "data-img": null, "mols2grid-id": 3, "data-smiles": "OC(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.77", "data-solubility": -2.7721520222068503, "data-similarity": 0.7368421052631579, "mols2grid-tooltip": "<strong>smiles</strong>: OC(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.7721520222068503<br><strong>similarity</strong>: 0.7368421052631579<br><strong>molecular_weight</strong>: 238.674<br><strong>scs_score</strong>: 3.5527853096829882"}, {"data-molecular_weight": 238.674, "data-scs_score": 3.337793547917679, "data-img": null, "mols2grid-id": 4, "data-smiles": "CC(C#C)N(O)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.39", "data-solubility": -3.387370565673627, "data-similarity": 0.7368421052631579, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(O)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.387370565673627<br><strong>similarity</strong>: 0.7368421052631579<br><strong>molecular_weight</strong>: 238.674<br><strong>scs_score</strong>: 3.337793547917679"}, {"data-molecular_weight": 217.272, "data-scs_score": 3.3437741525069447, "data-img": null, "mols2grid-id": 5, "data-smiles": "CC(C#C)N(C)C(=O)NC1=CC=C(N)C=C1", "data-text": "Solubility (log(mol/L))=-2.63", "data-solubility": -2.6297858189289802, "data-similarity": 0.7368421052631579, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC1=CC=C(N)C=C1<br><strong>solubility</strong>: -2.6297858189289802<br><strong>similarity</strong>: 0.7368421052631579<br><strong>molecular_weight</strong>: 217.272<br><strong>scs_score</strong>: 3.3437741525069447"}, {"data-molecular_weight": 237.69000000000003, "data-scs_score": 3.1144544970830674, "data-img": null, "mols2grid-id": 6, "data-smiles": "CC(C#C)N(N)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.00", "data-solubility": -2.998529580624408, "data-similarity": 0.717948717948718, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(N)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.998529580624408<br><strong>similarity</strong>: 0.717948717948718<br><strong>molecular_weight</strong>: 237.69000000000003<br><strong>scs_score</strong>: 3.1144544970830674"}, {"data-molecular_weight": 242.70600000000002, "data-scs_score": 3.3311008253086003, "data-img": null, "mols2grid-id": 7, "data-smiles": "CC(CO)N(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.11", "data-solubility": -3.113694120393838, "data-similarity": 0.625, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)N(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.113694120393838<br><strong>similarity</strong>: 0.625<br><strong>molecular_weight</strong>: 242.70600000000002<br><strong>scs_score</strong>: 3.3311008253086003"}, {"data-molecular_weight": 222.675, "data-scs_score": 3.7385544532955843, "data-img": null, "mols2grid-id": 8, "data-smiles": "C(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.18", "data-solubility": -3.1825176557356434, "data-similarity": 0.5853658536585366, "mols2grid-tooltip": "<strong>smiles</strong>: C(C#C)N(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.1825176557356434<br><strong>similarity</strong>: 0.5853658536585366<br><strong>molecular_weight</strong>: 222.675<br><strong>scs_score</strong>: 3.7385544532955843"}, {"data-molecular_weight": 253.754, "data-scs_score": 3.585060409688103, "data-img": null, "mols2grid-id": 9, "data-smiles": "CC(C#C)N(C)C(=O)SC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-4.17", "data-solubility": -4.1700413233790385, "data-similarity": 0.5714285714285714, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)SC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -4.1700413233790385<br><strong>similarity</strong>: 0.5714285714285714<br><strong>molecular_weight</strong>: 253.754<br><strong>scs_score</strong>: 3.585060409688103"}, {"data-molecular_weight": 237.686, "data-scs_score": 3.4996593027653997, "data-img": null, "mols2grid-id": 10, "data-smiles": "CC(C#C)N(C)C(=O)OC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.53", "data-solubility": -3.5347333926277833, "data-similarity": 0.5714285714285714, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)OC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.5347333926277833<br><strong>similarity</strong>: 0.5714285714285714<br><strong>molecular_weight</strong>: 237.686<br><strong>scs_score</strong>: 3.4996593027653997"}, {"data-molecular_weight": 235.714, "data-scs_score": 3.284738454651941, "data-img": null, "mols2grid-id": 11, "data-smiles": "CC(C#C)N(C)C(=O)CC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.20", "data-solubility": -3.1995419689668756, "data-similarity": 0.5714285714285714, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)CC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.1995419689668756<br><strong>similarity</strong>: 0.5714285714285714<br><strong>molecular_weight</strong>: 235.714<br><strong>scs_score</strong>: 3.284738454651941"}, {"data-molecular_weight": 222.675, "data-scs_score": 3.51598352891485, "data-img": null, "mols2grid-id": 12, "data-smiles": "CC(C#C)(NC(=O)NC1=CC=C(Cl)C=C1)", "data-text": "Solubility (log(mol/L))=-3.22", "data-solubility": -3.2168571597290274, "data-similarity": 0.5609756097560976, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)(NC(=O)NC1=CC=C(Cl)C=C1)<br><strong>solubility</strong>: -3.2168571597290274<br><strong>similarity</strong>: 0.5609756097560976<br><strong>molecular_weight</strong>: 222.675<br><strong>scs_score</strong>: 3.51598352891485"}, {"data-molecular_weight": 237.686, "data-scs_score": 3.565510133191105, "data-img": null, "mols2grid-id": 13, "data-smiles": "CC(C#C)C(O)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.88", "data-solubility": -2.8759387427734064, "data-similarity": 0.5476190476190477, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)C(O)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.8759387427734064<br><strong>similarity</strong>: 0.5476190476190477<br><strong>molecular_weight</strong>: 237.686<br><strong>scs_score</strong>: 3.565510133191105"}, {"data-molecular_weight": 222.675, "data-scs_score": 3.6269865975682034, "data-img": null, "mols2grid-id": 14, "data-smiles": "C(C#CN(C)C(=O)NC1=CC=C(Cl)C=C1)", "data-text": "Solubility (log(mol/L))=-3.44", "data-solubility": -3.4437750671352982, "data-similarity": 0.5365853658536586, "mols2grid-tooltip": "<strong>smiles</strong>: C(C#CN(C)C(=O)NC1=CC=C(Cl)C=C1)<br><strong>solubility</strong>: -3.4437750671352982<br><strong>similarity</strong>: 0.5365853658536586<br><strong>molecular_weight</strong>: 222.675<br><strong>scs_score</strong>: 3.6269865975682034"}, {"data-molecular_weight": 212.68, "data-scs_score": 3.874592308046911, "data-img": null, "mols2grid-id": 15, "data-smiles": "C(C)N(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.42", "data-solubility": -3.4153957206314476, "data-similarity": 0.525, "mols2grid-tooltip": "<strong>smiles</strong>: C(C)N(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.4153957206314476<br><strong>similarity</strong>: 0.525<br><strong>molecular_weight</strong>: 212.68<br><strong>scs_score</strong>: 3.874592308046911"}, {"data-molecular_weight": 287.544, "data-scs_score": 3.70313466644634, "data-img": null, "mols2grid-id": 16, "data-smiles": "C(C#C)N(Br)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-4.12", "data-solubility": -4.115966202118649, "data-similarity": 0.5238095238095238, "mols2grid-tooltip": "<strong>smiles</strong>: C(C#C)N(Br)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -4.115966202118649<br><strong>similarity</strong>: 0.5238095238095238<br><strong>molecular_weight</strong>: 287.544<br><strong>scs_score</strong>: 3.70313466644634"}, {"data-molecular_weight": 221.687, "data-scs_score": 3.450772540705722, "data-img": null, "mols2grid-id": 17, "data-smiles": "C(C#C)C(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.54", "data-solubility": -3.5441102421358965, "data-similarity": 0.5116279069767442, "mols2grid-tooltip": "<strong>smiles</strong>: C(C#C)C(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.5441102421358965<br><strong>similarity</strong>: 0.5116279069767442<br><strong>molecular_weight</strong>: 221.687<br><strong>scs_score</strong>: 3.450772540705722"}, {"data-molecular_weight": 244.68200000000002, "data-scs_score": 3.584532909897855, "data-img": null, "mols2grid-id": 18, "data-smiles": "CNN(O)N(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.65", "data-solubility": -2.651943492418354, "data-similarity": 0.5, "mols2grid-tooltip": "<strong>smiles</strong>: CNN(O)N(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.651943492418354<br><strong>similarity</strong>: 0.5<br><strong>molecular_weight</strong>: 244.68200000000002<br><strong>scs_score</strong>: 3.584532909897855"}, {"data-molecular_weight": 238.71800000000002, "data-scs_score": 3.824971886290012, "data-img": null, "mols2grid-id": 19, "data-smiles": "CC(C)=CN(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-4.24", "data-solubility": -4.23509823454839, "data-similarity": 0.5, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)=CN(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -4.23509823454839<br><strong>similarity</strong>: 0.5<br><strong>molecular_weight</strong>: 238.71800000000002<br><strong>scs_score</strong>: 3.824971886290012"}, {"data-molecular_weight": 236.315, "data-scs_score": 3.1742295227790356, "data-img": null, "mols2grid-id": 20, "data-smiles": "CC(C#C)N(C)C(=S)NC1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-3.29", "data-solubility": -3.291074285477386, "data-similarity": 0.5, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=S)NC1=CC=C(F)C=C1<br><strong>solubility</strong>: -3.291074285477386<br><strong>similarity</strong>: 0.5<br><strong>molecular_weight</strong>: 236.315<br><strong>scs_score</strong>: 3.1742295227790356"}, {"data-molecular_weight": 224.691, "data-scs_score": 3.637906482270807, "data-img": null, "mols2grid-id": 21, "data-smiles": "CC=C(N(C)C(=O)NC1=CC=C(Cl)C=C1)", "data-text": "Solubility (log(mol/L))=-3.86", "data-solubility": -3.8636544741275056, "data-similarity": 0.5, "mols2grid-tooltip": "<strong>smiles</strong>: CC=C(N(C)C(=O)NC1=CC=C(Cl)C=C1)<br><strong>solubility</strong>: -3.8636544741275056<br><strong>similarity</strong>: 0.5<br><strong>molecular_weight</strong>: 224.691<br><strong>scs_score</strong>: 3.637906482270807"}, {"data-molecular_weight": 228.679, "data-scs_score": 3.55916990002366, "data-img": null, "mols2grid-id": 22, "data-smiles": "COCN(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.20", "data-solubility": -3.197044827548393, "data-similarity": 0.4883720930232558, "mols2grid-tooltip": "<strong>smiles</strong>: COCN(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.197044827548393<br><strong>similarity</strong>: 0.4883720930232558<br><strong>molecular_weight</strong>: 228.679<br><strong>scs_score</strong>: 3.55916990002366"}, {"data-molecular_weight": 222.24399999999997, "data-scs_score": 2.7611352721164373, "data-img": null, "mols2grid-id": 23, "data-smiles": "CC(C#C)N(C)C(=O)NC1=CC=C(O)OC1", "data-text": "Solubility (log(mol/L))=-1.92", "data-solubility": -1.9160144712775868, "data-similarity": 0.4791666666666667, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC1=CC=C(O)OC1<br><strong>solubility</strong>: -1.9160144712775868<br><strong>similarity</strong>: 0.4791666666666667<br><strong>molecular_weight</strong>: 222.24399999999997<br><strong>scs_score</strong>: 2.7611352721164373"}, {"data-molecular_weight": 236.702, "data-scs_score": 2.8831427724836267, "data-img": null, "mols2grid-id": 24, "data-smiles": "CC(C#C)N(C)C(=O)NC=C1C=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.95", "data-solubility": -2.948298051749474, "data-similarity": 0.4791666666666667, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=C1C=C(Cl)C=C1<br><strong>solubility</strong>: -2.948298051749474<br><strong>similarity</strong>: 0.4791666666666667<br><strong>molecular_weight</strong>: 236.702<br><strong>scs_score</strong>: 2.8831427724836267"}, {"data-molecular_weight": 236.702, "data-scs_score": 3.2155593071361173, "data-img": null, "mols2grid-id": 25, "data-smiles": "CC(C#C)N(CC(=O))NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.07", "data-solubility": -3.0707896348413297, "data-similarity": 0.4782608695652174, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(CC(=O))NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.0707896348413297<br><strong>similarity</strong>: 0.4782608695652174<br><strong>molecular_weight</strong>: 236.702<br><strong>scs_score</strong>: 3.2155593071361173"}, {"data-molecular_weight": 225.679, "data-scs_score": 3.459563638161716, "data-img": null, "mols2grid-id": 26, "data-smiles": "C=NCN(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.22", "data-solubility": -3.21740190144367, "data-similarity": 0.4772727272727273, "mols2grid-tooltip": "<strong>smiles</strong>: C=NCN(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.21740190144367<br><strong>similarity</strong>: 0.4772727272727273<br><strong>molecular_weight</strong>: 225.679<br><strong>scs_score</strong>: 3.459563638161716"}, {"data-molecular_weight": 233.698, "data-scs_score": 3.837452111496119, "data-img": null, "mols2grid-id": 27, "data-smiles": "CC(C#C)=C(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.85", "data-solubility": -3.8464122076265856, "data-similarity": 0.46511627906976744, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)=C(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.8464122076265856<br><strong>similarity</strong>: 0.46511627906976744<br><strong>molecular_weight</strong>: 233.698<br><strong>scs_score</strong>: 3.837452111496119"}, {"data-molecular_weight": 236.70200000000003, "data-scs_score": 2.9628322275917167, "data-img": null, "mols2grid-id": 28, "data-smiles": "CC(C#C)N(CC(=O)N)C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.68", "data-solubility": -2.676629774557332, "data-similarity": 0.45652173913043476, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(CC(=O)N)C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.676629774557332<br><strong>similarity</strong>: 0.45652173913043476<br><strong>molecular_weight</strong>: 236.70200000000003<br><strong>scs_score</strong>: 2.9628322275917167"}, {"data-molecular_weight": 226.251, "data-scs_score": 3.407229764946923, "data-img": null, "mols2grid-id": 29, "data-smiles": "CC(CO)N(C)C(=O)NC1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-2.62", "data-solubility": -2.623419732750936, "data-similarity": 0.4444444444444444, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)N(C)C(=O)NC1=CC=C(F)C=C1<br><strong>solubility</strong>: -2.623419732750936<br><strong>similarity</strong>: 0.4444444444444444<br><strong>molecular_weight</strong>: 226.251<br><strong>scs_score</strong>: 3.407229764946923"}, {"data-molecular_weight": 222.71900000000002, "data-scs_score": 3.012114904228686, "data-img": null, "mols2grid-id": 30, "data-smiles": "CC(C#C)N(C)C(N)C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.04", "data-solubility": -3.041331598569094, "data-similarity": 0.4418604651162791, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(N)C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.041331598569094<br><strong>similarity</strong>: 0.4418604651162791<br><strong>molecular_weight</strong>: 222.71900000000002<br><strong>scs_score</strong>: 3.012114904228686"}, {"data-molecular_weight": 253.68500000000003, "data-scs_score": 3.4924372107098516, "data-img": null, "mols2grid-id": 31, "data-smiles": "OC(C#C)OCCC(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.76", "data-solubility": -2.7637875081644494, "data-similarity": 0.4375, "mols2grid-tooltip": "<strong>smiles</strong>: OC(C#C)OCCC(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.7637875081644494<br><strong>similarity</strong>: 0.4375<br><strong>molecular_weight</strong>: 253.68500000000003<br><strong>scs_score</strong>: 3.4924372107098516"}, {"data-molecular_weight": 236.70200000000003, "data-scs_score": 3.431948025868726, "data-img": null, "mols2grid-id": 32, "data-smiles": "C(CC#CN)(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.10", "data-solubility": -3.103502979514709, "data-similarity": 0.43478260869565216, "mols2grid-tooltip": "<strong>smiles</strong>: C(CC#CN)(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.103502979514709<br><strong>similarity</strong>: 0.43478260869565216<br><strong>molecular_weight</strong>: 236.70200000000003<br><strong>scs_score</strong>: 3.431948025868726"}, {"data-molecular_weight": 236.702, "data-scs_score": 2.990706929744026, "data-img": null, "mols2grid-id": 33, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C#C", "data-text": "Solubility (log(mol/L))=-2.72", "data-solubility": -2.717300937605328, "data-similarity": 0.4166666666666667, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C#C<br><strong>solubility</strong>: -2.717300937605328<br><strong>similarity</strong>: 0.4166666666666667<br><strong>molecular_weight</strong>: 236.702<br><strong>scs_score</strong>: 2.990706929744026"}, {"data-molecular_weight": 223.68300000000002, "data-scs_score": 3.583612482196137, "data-img": null, "mols2grid-id": 34, "data-smiles": "C=[N+]=CC(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.68", "data-solubility": -2.67865042480627, "data-similarity": 0.41304347826086957, "mols2grid-tooltip": "<strong>smiles</strong>: C=[N+]=CC(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.67865042480627<br><strong>similarity</strong>: 0.41304347826086957<br><strong>molecular_weight</strong>: 223.68300000000002<br><strong>scs_score</strong>: 3.583612482196137"}, {"data-molecular_weight": 250.729, "data-scs_score": 3.2821094193793825, "data-img": null, "mols2grid-id": 35, "data-smiles": "CC(C#CN)CCC(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.47", "data-solubility": -3.472748866147322, "data-similarity": 0.40816326530612246, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#CN)CCC(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.472748866147322<br><strong>similarity</strong>: 0.40816326530612246<br><strong>molecular_weight</strong>: 250.729<br><strong>scs_score</strong>: 3.2821094193793825"}, {"data-molecular_weight": 213.668, "data-scs_score": 3.728789812232938, "data-img": null, "mols2grid-id": 36, "data-smiles": "C(N)(N)(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.00", "data-solubility": -2.0042204788883984, "data-similarity": 0.40476190476190477, "mols2grid-tooltip": "<strong>smiles</strong>: C(N)(N)(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.0042204788883984<br><strong>similarity</strong>: 0.40476190476190477<br><strong>molecular_weight</strong>: 213.668<br><strong>scs_score</strong>: 3.728789812232938"}, {"data-molecular_weight": 238.718, "data-scs_score": 2.92761821377575, "data-img": null, "mols2grid-id": 37, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C", "data-text": "Solubility (log(mol/L))=-3.14", "data-solubility": -3.137180344597535, "data-similarity": 0.4, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C<br><strong>solubility</strong>: -3.137180344597535<br><strong>similarity</strong>: 0.4<br><strong>molecular_weight</strong>: 238.718<br><strong>scs_score</strong>: 2.92761821377575"}, {"data-molecular_weight": 252.745, "data-scs_score": 2.913567705534568, "data-img": null, "mols2grid-id": 38, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=CC", "data-text": "Solubility (log(mol/L))=-3.52", "data-solubility": -3.5192803151287486, "data-similarity": 0.39215686274509803, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=CC<br><strong>solubility</strong>: -3.5192803151287486<br><strong>similarity</strong>: 0.39215686274509803<br><strong>molecular_weight</strong>: 252.745<br><strong>scs_score</strong>: 2.913567705534568"}, {"data-molecular_weight": 254.717, "data-scs_score": 2.8590271574261736, "data-img": null, "mols2grid-id": 39, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=CO", "data-text": "Solubility (log(mol/L))=-3.16", "data-solubility": -3.1582225543420637, "data-similarity": 0.39215686274509803, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=CO<br><strong>solubility</strong>: -3.1582225543420637<br><strong>similarity</strong>: 0.39215686274509803<br><strong>molecular_weight</strong>: 254.717<br><strong>scs_score</strong>: 2.8590271574261736"}, {"data-molecular_weight": 252.701, "data-scs_score": 2.9141744746508964, "data-img": null, "mols2grid-id": 40, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C=O", "data-text": "Solubility (log(mol/L))=-2.64", "data-solubility": -2.6376581466320066, "data-similarity": 0.39215686274509803, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C=O<br><strong>solubility</strong>: -2.6376581466320066<br><strong>similarity</strong>: 0.39215686274509803<br><strong>molecular_weight</strong>: 252.701<br><strong>scs_score</strong>: 2.9141744746508964"}, {"data-molecular_weight": 227.69100000000003, "data-scs_score": 4.083622506343044, "data-img": null, "mols2grid-id": 41, "data-smiles": "CC(CO)(C)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.11", "data-solubility": -3.1084811702629085, "data-similarity": 0.38636363636363635, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)(C)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.1084811702629085<br><strong>similarity</strong>: 0.38636363636363635<br><strong>molecular_weight</strong>: 227.69100000000003<br><strong>scs_score</strong>: 4.083622506343044"}, {"data-molecular_weight": 251.717, "data-scs_score": 2.9157821483121644, "data-img": null, "mols2grid-id": 42, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C=N", "data-text": "Solubility (log(mol/L))=-2.94", "data-solubility": -2.940331704526873, "data-similarity": 0.38461538461538464, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C=N<br><strong>solubility</strong>: -2.940331704526873<br><strong>similarity</strong>: 0.38461538461538464<br><strong>molecular_weight</strong>: 251.717<br><strong>scs_score</strong>: 2.9157821483121644"}, {"data-molecular_weight": 250.72899999999998, "data-scs_score": 2.7537204131061634, "data-img": null, "mols2grid-id": 43, "data-smiles": "CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C=C", "data-text": "Solubility (log(mol/L))=-3.33", "data-solubility": -3.3316533446245216, "data-similarity": 0.38461538461538464, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C(=O)NC=CC=C(Cl)C=C=C<br><strong>solubility</strong>: -3.3316533446245216<br><strong>similarity</strong>: 0.38461538461538464<br><strong>molecular_weight</strong>: 250.72899999999998<br><strong>scs_score</strong>: 2.7537204131061634"}, {"data-molecular_weight": 213.664, "data-scs_score": 4.023263865243762, "data-img": null, "mols2grid-id": 44, "data-smiles": "O(CC(C))C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.77", "data-solubility": -3.7706731976496686, "data-similarity": 0.37777777777777777, "mols2grid-tooltip": "<strong>smiles</strong>: O(CC(C))C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.7706731976496686<br><strong>similarity</strong>: 0.37777777777777777<br><strong>molecular_weight</strong>: 213.664<br><strong>scs_score</strong>: 4.023263865243762"}, {"data-molecular_weight": 204.229, "data-scs_score": 3.2752031726826707, "data-img": null, "mols2grid-id": 45, "data-smiles": "CC#CN(C)C(=O)NC1=CC=C(O)C=C1", "data-text": "Solubility (log(mol/L))=-2.62", "data-solubility": -2.618816776567848, "data-similarity": 0.37777777777777777, "mols2grid-tooltip": "<strong>smiles</strong>: CC#CN(C)C(=O)NC1=CC=C(O)C=C1<br><strong>solubility</strong>: -2.618816776567848<br><strong>similarity</strong>: 0.37777777777777777<br><strong>molecular_weight</strong>: 204.229<br><strong>scs_score</strong>: 3.2752031726826707"}, {"data-molecular_weight": 241.674, "data-scs_score": 3.8661666655762676, "data-img": null, "mols2grid-id": 46, "data-smiles": "OC(C=C)C(O)C(=O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.36", "data-solubility": -2.3630781065145627, "data-similarity": 0.3695652173913043, "mols2grid-tooltip": "<strong>smiles</strong>: OC(C=C)C(O)C(=O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.3630781065145627<br><strong>similarity</strong>: 0.3695652173913043<br><strong>molecular_weight</strong>: 241.674<br><strong>scs_score</strong>: 3.8661666655762676"}, {"data-molecular_weight": 222.67100000000002, "data-scs_score": 3.822464619162278, "data-img": null, "mols2grid-id": 47, "data-smiles": "C(C#C)C(C)C(=O)OC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-3.53", "data-solubility": -3.526068896930898, "data-similarity": 0.3541666666666667, "mols2grid-tooltip": "<strong>smiles</strong>: C(C#C)C(C)C(=O)OC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -3.526068896930898<br><strong>similarity</strong>: 0.3541666666666667<br><strong>molecular_weight</strong>: 222.67100000000002<br><strong>scs_score</strong>: 3.822464619162278"}, {"data-molecular_weight": 218.3, "data-scs_score": 3.6689761130436147, "data-img": null, "mols2grid-id": 48, "data-smiles": "CC(C)=CN(C)C(=O)NC1=CC=C(C)C=C1", "data-text": "Solubility (log(mol/L))=-3.84", "data-solubility": -3.8441932551570157, "data-similarity": 0.34782608695652173, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)=CN(C)C(=O)NC1=CC=C(C)C=C1<br><strong>solubility</strong>: -3.8441932551570157<br><strong>similarity</strong>: 0.34782608695652173<br><strong>molecular_weight</strong>: 218.3<br><strong>scs_score</strong>: 3.6689761130436147"}, {"data-molecular_weight": 238.71800000000002, "data-scs_score": 3.4480630649678834, "data-img": null, "mols2grid-id": 49, "data-smiles": "CC(C#CN(C)C)(O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.94", "data-solubility": -2.941248024689689, "data-similarity": 0.3404255319148936, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#CN(C)C)(O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.941248024689689<br><strong>similarity</strong>: 0.3404255319148936<br><strong>molecular_weight</strong>: 238.71800000000002<br><strong>scs_score</strong>: 3.4480630649678834"}, {"data-molecular_weight": 239.70600000000002, "data-scs_score": 3.4011695357030907, "data-img": null, "mols2grid-id": 50, "data-smiles": "CC(C#N)C(NC)(O)NC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.79", "data-solubility": -2.78822811884355, "data-similarity": 0.3333333333333333, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#N)C(NC)(O)NC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.78822811884355<br><strong>similarity</strong>: 0.3333333333333333<br><strong>molecular_weight</strong>: 239.70600000000002<br><strong>scs_score</strong>: 3.4011695357030907"}, {"data-molecular_weight": 264.70799999999997, "data-scs_score": 3.8914916213073445, "data-img": null, "mols2grid-id": 51, "data-smiles": "CC(C#C)C=CCOC(=O)OC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-4.35", "data-solubility": -4.347841819721537, "data-similarity": 0.3333333333333333, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)C=CCOC(=O)OC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -4.347841819721537<br><strong>similarity</strong>: 0.3333333333333333<br><strong>molecular_weight</strong>: 264.70799999999997<br><strong>scs_score</strong>: 3.8914916213073445"}, {"data-molecular_weight": 111.14399999999998, "data-scs_score": 3.6933312030987993, "data-img": null, "mols2grid-id": 52, "data-smiles": "CC(C#C)N(C)C=O", "data-text": "Solubility (log(mol/L))=-0.54", "data-solubility": -0.5384030584071374, "data-similarity": 0.3, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C=O<br><strong>solubility</strong>: -0.5384030584071374<br><strong>similarity</strong>: 0.3<br><strong>molecular_weight</strong>: 111.14399999999998<br><strong>scs_score</strong>: 3.6933312030987993"}, {"data-molecular_weight": 240.69, "data-scs_score": 2.718739811444381, "data-img": null, "mols2grid-id": 53, "data-smiles": "CC(C#C)N(O)C(=O)NC=CC=C(Cl)C=C", "data-text": "Solubility (log(mol/L))=-2.97", "data-solubility": -2.9717761724383793, "data-similarity": 0.2962962962962963, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(O)C(=O)NC=CC=C(Cl)C=C<br><strong>solubility</strong>: -2.9717761724383793<br><strong>similarity</strong>: 0.2962962962962963<br><strong>molecular_weight</strong>: 240.69<br><strong>scs_score</strong>: 2.718739811444381"}, {"data-molecular_weight": 208.26100000000002, "data-scs_score": 3.3911797109898796, "data-img": null, "mols2grid-id": 54, "data-smiles": "CC(CO)(CC(=O)NC1=CC=C(N)C=C1)", "data-text": "Solubility (log(mol/L))=-2.18", "data-solubility": -2.1820407057931495, "data-similarity": 0.2857142857142857, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)(CC(=O)NC1=CC=C(N)C=C1)<br><strong>solubility</strong>: -2.1820407057931495<br><strong>similarity</strong>: 0.2857142857142857<br><strong>molecular_weight</strong>: 208.26100000000002<br><strong>scs_score</strong>: 3.3911797109898796"}, {"data-molecular_weight": 209.245, "data-scs_score": 3.9707753755014257, "data-img": null, "mols2grid-id": 55, "data-smiles": "CC(CO)OC(=O)NC1=CC=C(C)C=C1", "data-text": "Solubility (log(mol/L))=-2.71", "data-solubility": -2.710074403165757, "data-similarity": 0.2857142857142857, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)OC(=O)NC1=CC=C(C)C=C1<br><strong>solubility</strong>: -2.710074403165757<br><strong>similarity</strong>: 0.2857142857142857<br><strong>molecular_weight</strong>: 209.245<br><strong>scs_score</strong>: 3.9707753755014257"}, {"data-molecular_weight": 137.18199999999996, "data-scs_score": 3.6226606246533684, "data-img": null, "mols2grid-id": 56, "data-smiles": "CC(C#C)N(C)C=CC=O", "data-text": "Solubility (log(mol/L))=-1.12", "data-solubility": -1.1196828968751291, "data-similarity": 0.27906976744186046, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(C)C=CC=O<br><strong>solubility</strong>: -1.1196828968751291<br><strong>similarity</strong>: 0.27906976744186046<br><strong>molecular_weight</strong>: 137.18199999999996<br><strong>scs_score</strong>: 3.6226606246533684"}, {"data-molecular_weight": 225.267, "data-scs_score": 3.0787101607128315, "data-img": null, "mols2grid-id": 57, "data-smiles": "CC(CN)C(N)C(=O)NC1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-1.88", "data-solubility": -1.8837271228592813, "data-similarity": 0.27450980392156865, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CN)C(N)C(=O)NC1=CC=C(F)C=C1<br><strong>solubility</strong>: -1.8837271228592813<br><strong>similarity</strong>: 0.27450980392156865<br><strong>molecular_weight</strong>: 225.267<br><strong>scs_score</strong>: 3.0787101607128315"}, {"data-molecular_weight": 226.707, "data-scs_score": 3.2169315786915287, "data-img": null, "mols2grid-id": 58, "data-smiles": "CC(C#C)N(CC(=O)NC=CC=C)CCl", "data-text": "Solubility (log(mol/L))=-2.20", "data-solubility": -2.198209507835607, "data-similarity": 0.2727272727272727, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(CC(=O)NC=CC=C)CCl<br><strong>solubility</strong>: -2.198209507835607<br><strong>similarity</strong>: 0.2727272727272727<br><strong>molecular_weight</strong>: 226.707<br><strong>scs_score</strong>: 3.2169315786915287"}, {"data-molecular_weight": 217.27200000000002, "data-scs_score": 3.5030173669799445, "data-img": null, "mols2grid-id": 59, "data-smiles": "CC(C#CN)(C)C(=O)NC1=CC=C(N)C=C1", "data-text": "Solubility (log(mol/L))=-2.18", "data-solubility": -2.1839656061768653, "data-similarity": 0.26, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#CN)(C)C(=O)NC1=CC=C(N)C=C1<br><strong>solubility</strong>: -2.1839656061768653<br><strong>similarity</strong>: 0.26<br><strong>molecular_weight</strong>: 217.27200000000002<br><strong>scs_score</strong>: 3.5030173669799445"}, {"data-molecular_weight": 220.247, "data-scs_score": 3.4648329946756617, "data-img": null, "mols2grid-id": 60, "data-smiles": "CC(C#CN)(C)C(=O)NC1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-2.62", "data-solubility": -2.6166801374377653, "data-similarity": 0.2549019607843137, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#CN)(C)C(=O)NC1=CC=C(F)C=C1<br><strong>solubility</strong>: -2.6166801374377653<br><strong>similarity</strong>: 0.2549019607843137<br><strong>molecular_weight</strong>: 220.247<br><strong>scs_score</strong>: 3.4648329946756617"}, {"data-molecular_weight": 213.216, "data-scs_score": 2.892183371271873, "data-img": null, "mols2grid-id": 61, "data-smiles": "CN(CN(N)C(=O)NC1=CC=C(F)N=C1)", "data-text": "Solubility (log(mol/L))=-1.39", "data-solubility": -1.3871442194204044, "data-similarity": 0.2545454545454545, "mols2grid-tooltip": "<strong>smiles</strong>: CN(CN(N)C(=O)NC1=CC=C(F)N=C1)<br><strong>solubility</strong>: -1.3871442194204044<br><strong>similarity</strong>: 0.2545454545454545<br><strong>molecular_weight</strong>: 213.216<br><strong>scs_score</strong>: 2.892183371271873"}, {"data-molecular_weight": 125.17099999999998, "data-scs_score": 3.7500698286527108, "data-img": null, "mols2grid-id": 62, "data-smiles": "CC(C#C)N(CC)C=O", "data-text": "Solubility (log(mol/L))=-0.92", "data-solubility": -0.9170514833723926, "data-similarity": 0.25, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(CC)C=O<br><strong>solubility</strong>: -0.9170514833723926<br><strong>similarity</strong>: 0.25<br><strong>molecular_weight</strong>: 125.17099999999998<br><strong>scs_score</strong>: 3.7500698286527108"}, {"data-molecular_weight": 246.65, "data-scs_score": 3.3468153180492335, "data-img": null, "mols2grid-id": 63, "data-smiles": "O/C(OO)N(CC(=O)N)C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-1.81", "data-solubility": -1.8072823357911618, "data-similarity": 0.25, "mols2grid-tooltip": "<strong>smiles</strong>: O/C(OO)N(CC(=O)N)C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -1.8072823357911618<br><strong>similarity</strong>: 0.25<br><strong>molecular_weight</strong>: 246.65<br><strong>scs_score</strong>: 3.3468153180492335"}, {"data-molecular_weight": 226.251, "data-scs_score": 3.0452813625281347, "data-img": null, "mols2grid-id": 64, "data-smiles": "OC(CC)C(N)C(=O)NC1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-2.02", "data-solubility": -2.020843968483999, "data-similarity": 0.25, "mols2grid-tooltip": "<strong>smiles</strong>: OC(CC)C(N)C(=O)NC1=CC=C(F)C=C1<br><strong>solubility</strong>: -2.020843968483999<br><strong>similarity</strong>: 0.25<br><strong>molecular_weight</strong>: 226.251<br><strong>scs_score</strong>: 3.0452813625281347"}, {"data-molecular_weight": 336.173, "data-scs_score": 3.1986467620747323, "data-img": null, "mols2grid-id": 65, "data-smiles": "CC(CC)N(C)C(=O)NC1OC=C(I)C=C1", "data-text": "Solubility (log(mol/L))=-3.89", "data-solubility": -3.8914699081711244, "data-similarity": 0.22413793103448276, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CC)N(C)C(=O)NC1OC=C(I)C=C1<br><strong>solubility</strong>: -3.8914699081711244<br><strong>similarity</strong>: 0.22413793103448276<br><strong>molecular_weight</strong>: 336.173<br><strong>scs_score</strong>: 3.1986467620747323"}, {"data-molecular_weight": 260.087, "data-scs_score": 4.201039512319623, "data-img": null, "mols2grid-id": 66, "data-smiles": "C(CO)OC(=O)NC1=CC=C(Br)C=C1", "data-text": "Solubility (log(mol/L))=-3.11", "data-solubility": -3.1071550364735807, "data-similarity": 0.22, "mols2grid-tooltip": "<strong>smiles</strong>: C(CO)OC(=O)NC1=CC=C(Br)C=C1<br><strong>solubility</strong>: -3.1071550364735807<br><strong>similarity</strong>: 0.22<br><strong>molecular_weight</strong>: 260.087<br><strong>scs_score</strong>: 4.201039512319623"}, {"data-molecular_weight": 212.268, "data-scs_score": 2.4041745774237593, "data-img": null, "mols2grid-id": 67, "data-smiles": "CC(C)N(F)C(=O)NC1=CCC(C)C=C1", "data-text": "Solubility (log(mol/L))=-3.19", "data-solubility": -3.1908325278153713, "data-similarity": 0.21428571428571427, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)N(F)C(=O)NC1=CCC(C)C=C1<br><strong>solubility</strong>: -3.1908325278153713<br><strong>similarity</strong>: 0.21428571428571427<br><strong>molecular_weight</strong>: 212.268<br><strong>scs_score</strong>: 2.4041745774237593"}, {"data-molecular_weight": 236.702, "data-scs_score": 3.2184893836920914, "data-img": null, "mols2grid-id": 68, "data-smiles": "CC(C#C)N(CC(=O)NC1=C)C=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.48", "data-solubility": -2.480119131021854, "data-similarity": 0.2033898305084746, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(CC(=O)NC1=C)C=C(Cl)C=C1<br><strong>solubility</strong>: -2.480119131021854<br><strong>similarity</strong>: 0.2033898305084746<br><strong>molecular_weight</strong>: 236.702<br><strong>scs_score</strong>: 3.2184893836920914"}, {"data-molecular_weight": 238.674, "data-scs_score": 2.93037787883818, "data-img": null, "mols2grid-id": 69, "data-smiles": "CC(C#C)N(O1)C(=O)NC=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.88", "data-solubility": -2.8825405367748917, "data-similarity": 0.2033898305084746, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)N(O1)C(=O)NC=CC=C(Cl)C=C1<br><strong>solubility</strong>: -2.8825405367748917<br><strong>similarity</strong>: 0.2033898305084746<br><strong>molecular_weight</strong>: 238.674<br><strong>scs_score</strong>: 2.93037787883818"}, {"data-molecular_weight": 128.12699999999998, "data-scs_score": 4.031869369834023, "data-img": null, "mols2grid-id": 70, "data-smiles": "OC(C#C)C(C)OC=O", "data-text": "Solubility (log(mol/L))=-0.24", "data-solubility": -0.23616524617319698, "data-similarity": 0.1956521739130435, "mols2grid-tooltip": "<strong>smiles</strong>: OC(C#C)C(C)OC=O<br><strong>solubility</strong>: -0.23616524617319698<br><strong>similarity</strong>: 0.1956521739130435<br><strong>molecular_weight</strong>: 128.12699999999998<br><strong>scs_score</strong>: 4.031869369834023"}, {"data-molecular_weight": 232.71099999999998, "data-scs_score": 3.8838003687291116, "data-img": null, "mols2grid-id": 71, "data-smiles": "CCOC(N(C)C(=O)NC=CC=C)CCl", "data-text": "Solubility (log(mol/L))=-2.69", "data-solubility": -2.6878186915078928, "data-similarity": 0.1896551724137931, "mols2grid-tooltip": "<strong>smiles</strong>: CCOC(N(C)C(=O)NC=CC=C)CCl<br><strong>solubility</strong>: -2.6878186915078928<br><strong>similarity</strong>: 0.1896551724137931<br><strong>molecular_weight</strong>: 232.71099999999998<br><strong>scs_score</strong>: 3.8838003687291116"}, {"data-molecular_weight": 206.28499999999994, "data-scs_score": 3.2867620056141704, "data-img": null, "mols2grid-id": 72, "data-smiles": "CC(C#C)C(CC(=O)OCCC=C)(C1)C1", "data-text": "Solubility (log(mol/L))=-2.97", "data-solubility": -2.9702079966966215, "data-similarity": 0.1896551724137931, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)C(CC(=O)OCCC=C)(C1)C1<br><strong>solubility</strong>: -2.9702079966966215<br><strong>similarity</strong>: 0.1896551724137931<br><strong>molecular_weight</strong>: 206.28499999999994<br><strong>scs_score</strong>: 3.2867620056141704"}, {"data-molecular_weight": 223.27199999999996, "data-scs_score": 2.812561160555862, "data-img": null, "mols2grid-id": 73, "data-smiles": "CC(C#C)C(CC(=O)NCO)C(OC#CC)", "data-text": "Solubility (log(mol/L))=-1.44", "data-solubility": -1.4361160505487323, "data-similarity": 0.1896551724137931, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)C(CC(=O)NCO)C(OC#CC)<br><strong>solubility</strong>: -1.4361160505487323<br><strong>similarity</strong>: 0.1896551724137931<br><strong>molecular_weight</strong>: 223.27199999999996<br><strong>scs_score</strong>: 2.812561160555862"}, {"data-molecular_weight": 224.26, "data-scs_score": 2.993073552944776, "data-img": null, "mols2grid-id": 74, "data-smiles": "CC(CO)N(CC(=O)N)C1=CC=C(O)C=C1", "data-text": "Solubility (log(mol/L))=-1.41", "data-solubility": -1.4125908665509368, "data-similarity": 0.18518518518518517, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)N(CC(=O)N)C1=CC=C(O)C=C1<br><strong>solubility</strong>: -1.4125908665509368<br><strong>similarity</strong>: 0.18518518518518517<br><strong>molecular_weight</strong>: 224.26<br><strong>scs_score</strong>: 2.993073552944776"}, {"data-molecular_weight": 224.21200000000002, "data-scs_score": 3.4141537246069, "data-img": null, "mols2grid-id": 75, "data-smiles": "CC(C=O)OCC(=O)OC1=CC=C(O)C=C1", "data-text": "Solubility (log(mol/L))=-2.03", "data-solubility": -2.03298033079589, "data-similarity": 0.18181818181818182, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C=O)OCC(=O)OC1=CC=C(O)C=C1<br><strong>solubility</strong>: -2.03298033079589<br><strong>similarity</strong>: 0.18181818181818182<br><strong>molecular_weight</strong>: 224.21200000000002<br><strong>scs_score</strong>: 3.4141537246069"}, {"data-molecular_weight": 166.21999999999997, "data-scs_score": 3.371248198591314, "data-img": null, "mols2grid-id": 76, "data-smiles": "CC(C#C)C(CC(=O))C=C(C)O", "data-text": "Solubility (log(mol/L))=-2.25", "data-solubility": -2.2503595916361236, "data-similarity": 0.17647058823529413, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C#C)C(CC(=O))C=C(C)O<br><strong>solubility</strong>: -2.2503595916361236<br><strong>similarity</strong>: 0.17647058823529413<br><strong>molecular_weight</strong>: 166.21999999999997<br><strong>scs_score</strong>: 3.371248198591314"}, {"data-molecular_weight": 190.67399999999998, "data-scs_score": 3.4449077121322706, "data-img": null, "mols2grid-id": 77, "data-smiles": "CCC(N(C)C(=O)NC=CC(Cl))", "data-text": "Solubility (log(mol/L))=-2.31", "data-solubility": -2.3138978986063248, "data-similarity": 0.17307692307692307, "mols2grid-tooltip": "<strong>smiles</strong>: CCC(N(C)C(=O)NC=CC(Cl))<br><strong>solubility</strong>: -2.3138978986063248<br><strong>similarity</strong>: 0.17307692307692307<br><strong>molecular_weight</strong>: 190.67399999999998<br><strong>scs_score</strong>: 3.4449077121322706"}, {"data-molecular_weight": 214.69599999999997, "data-scs_score": 3.5791234256763365, "data-img": null, "mols2grid-id": 78, "data-smiles": "CC=C(N(C)C(=O)NC=CC=C)CCl", "data-text": "Solubility (log(mol/L))=-2.98", "data-solubility": -2.976966591445495, "data-similarity": 0.16363636363636364, "mols2grid-tooltip": "<strong>smiles</strong>: CC=C(N(C)C(=O)NC=CC=C)CCl<br><strong>solubility</strong>: -2.976966591445495<br><strong>similarity</strong>: 0.16363636363636364<br><strong>molecular_weight</strong>: 214.69599999999997<br><strong>scs_score</strong>: 3.5791234256763365"}, {"data-molecular_weight": 217.69999999999996, "data-scs_score": 3.264270184085204, "data-img": null, "mols2grid-id": 79, "data-smiles": "CCN(N(C)C(=O)NC=CC=C)CCl", "data-text": "Solubility (log(mol/L))=-2.47", "data-solubility": -2.4672396539495978, "data-similarity": 0.16071428571428573, "mols2grid-tooltip": "<strong>smiles</strong>: CCN(N(C)C(=O)NC=CC=C)CCl<br><strong>solubility</strong>: -2.4672396539495978<br><strong>similarity</strong>: 0.16071428571428573<br><strong>molecular_weight</strong>: 217.69999999999996<br><strong>scs_score</strong>: 3.264270184085204"}, {"data-molecular_weight": 233.35499999999996, "data-scs_score": 2.8322398223850707, "data-img": null, "mols2grid-id": 80, "data-smiles": "CC(CC)(CC(=O)NC=CC1=CCCCC=C1)", "data-text": "Solubility (log(mol/L))=-4.02", "data-solubility": -4.023200120953666, "data-similarity": 0.15873015873015872, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CC)(CC(=O)NC=CC1=CCCCC=C1)<br><strong>solubility</strong>: -4.023200120953666<br><strong>similarity</strong>: 0.15873015873015872<br><strong>molecular_weight</strong>: 233.35499999999996<br><strong>scs_score</strong>: 2.8322398223850707"}, {"data-molecular_weight": 219.672, "data-scs_score": 3.320400671994567, "data-img": null, "mols2grid-id": 81, "data-smiles": "CON(N(C)C(=O)NC=CC=C)CCl", "data-text": "Solubility (log(mol/L))=-2.14", "data-solubility": -2.1402247275753608, "data-similarity": 0.15789473684210525, "mols2grid-tooltip": "<strong>smiles</strong>: CON(N(C)C(=O)NC=CC=C)CCl<br><strong>solubility</strong>: -2.1402247275753608<br><strong>similarity</strong>: 0.15789473684210525<br><strong>molecular_weight</strong>: 219.672<br><strong>scs_score</strong>: 3.320400671994567"}, {"data-molecular_weight": 210.664, "data-scs_score": 3.2306516899302267, "data-img": null, "mols2grid-id": 82, "data-smiles": "C1C#CC1N(C)C(=O)NC=C(Cl)C=C", "data-text": "Solubility (log(mol/L))=-2.36", "data-solubility": -2.360115122149566, "data-similarity": 0.15517241379310345, "mols2grid-tooltip": "<strong>smiles</strong>: C1C#CC1N(C)C(=O)NC=C(Cl)C=C<br><strong>solubility</strong>: -2.360115122149566<br><strong>similarity</strong>: 0.15517241379310345<br><strong>molecular_weight</strong>: 210.664<br><strong>scs_score</strong>: 3.2306516899302267"}, {"data-molecular_weight": 219.67200000000003, "data-scs_score": 3.2933376293362526, "data-img": null, "mols2grid-id": 83, "data-smiles": "CC=NOCN(C)C(=O)NC=CC(Cl)", "data-text": "Solubility (log(mol/L))=-2.18", "data-solubility": -2.183167649415899, "data-similarity": 0.15517241379310345, "mols2grid-tooltip": "<strong>smiles</strong>: CC=NOCN(C)C(=O)NC=CC(Cl)<br><strong>solubility</strong>: -2.183167649415899<br><strong>similarity</strong>: 0.15517241379310345<br><strong>molecular_weight</strong>: 219.67200000000003<br><strong>scs_score</strong>: 3.2933376293362526"}, {"data-molecular_weight": 237.69000000000003, "data-scs_score": 2.609649878449641, "data-img": null, "mols2grid-id": 84, "data-smiles": "CC1(C#C)N(C)C(=O)NC=NC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.57", "data-solubility": -2.5702059815972094, "data-similarity": 0.14754098360655737, "mols2grid-tooltip": "<strong>smiles</strong>: CC1(C#C)N(C)C(=O)NC=NC=C(Cl)C=C1<br><strong>solubility</strong>: -2.5702059815972094<br><strong>similarity</strong>: 0.14754098360655737<br><strong>molecular_weight</strong>: 237.69000000000003<br><strong>scs_score</strong>: 2.609649878449641"}, {"data-molecular_weight": 218.68400000000003, "data-scs_score": 2.86519143393302, "data-img": null, "mols2grid-id": 85, "data-smiles": "CC(CO)C(N)C(=O)NC=CC=C(Cl)", "data-text": "Solubility (log(mol/L))=-1.41", "data-solubility": -1.4085555862150831, "data-similarity": 0.14285714285714285, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)C(N)C(=O)NC=CC=C(Cl)<br><strong>solubility</strong>: -1.4085555862150831<br><strong>similarity</strong>: 0.14285714285714285<br><strong>molecular_weight</strong>: 218.68400000000003<br><strong>scs_score</strong>: 2.86519143393302"}, {"data-molecular_weight": 185.19799999999998, "data-scs_score": 3.1701117458837573, "data-img": null, "mols2grid-id": 86, "data-smiles": "CC(CO)(C(=O)NC=CC#C)CF", "data-text": "Solubility (log(mol/L))=-1.11", "data-solubility": -1.1112496407380983, "data-similarity": 0.14285714285714285, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)(C(=O)NC=CC#C)CF<br><strong>solubility</strong>: -1.1112496407380983<br><strong>similarity</strong>: 0.14285714285714285<br><strong>molecular_weight</strong>: 185.19799999999998<br><strong>scs_score</strong>: 3.1701117458837573"}, {"data-molecular_weight": 204.657, "data-scs_score": 3.4300459570543373, "data-img": null, "mols2grid-id": 87, "data-smiles": "CC(ON(CC(=O)N(C=C(Cl))))C=C", "data-text": "Solubility (log(mol/L))=-1.75", "data-solubility": -1.7453203323027142, "data-similarity": 0.14035087719298245, "mols2grid-tooltip": "<strong>smiles</strong>: CC(ON(CC(=O)N(C=C(Cl))))C=C<br><strong>solubility</strong>: -1.7453203323027142<br><strong>similarity</strong>: 0.14035087719298245<br><strong>molecular_weight</strong>: 204.657<br><strong>scs_score</strong>: 3.4300459570543373"}, {"data-molecular_weight": 210.664, "data-scs_score": 2.9253398453370525, "data-img": null, "mols2grid-id": 88, "data-smiles": "C1C(C#C)N(C)C(=O)N1C=C(Cl)C=C", "data-text": "Solubility (log(mol/L))=-2.33", "data-solubility": -2.328040485398395, "data-similarity": 0.13333333333333333, "mols2grid-tooltip": "<strong>smiles</strong>: C1C(C#C)N(C)C(=O)N1C=C(Cl)C=C<br><strong>solubility</strong>: -2.328040485398395<br><strong>similarity</strong>: 0.13333333333333333<br><strong>molecular_weight</strong>: 210.664<br><strong>scs_score</strong>: 2.9253398453370525"}, {"data-molecular_weight": 247.722, "data-scs_score": 3.3718013301475143, "data-img": null, "mols2grid-id": 89, "data-smiles": "CC(CO)(CC1C(=O)NOCC)C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.28", "data-solubility": -2.280245260193781, "data-similarity": 0.13114754098360656, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CO)(CC1C(=O)NOCC)C(Cl)C=C1<br><strong>solubility</strong>: -2.280245260193781<br><strong>similarity</strong>: 0.13114754098360656<br><strong>molecular_weight</strong>: 247.722<br><strong>scs_score</strong>: 3.3718013301475143"}, {"data-molecular_weight": 216.712, "data-scs_score": 3.5817508503021407, "data-img": null, "mols2grid-id": 90, "data-smiles": "CC(CN(C)C)(O)NC=CC#CCCl", "data-text": "Solubility (log(mol/L))=-1.60", "data-solubility": -1.6047790727815754, "data-similarity": 0.12280701754385964, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CN(C)C)(O)NC=CC#CCCl<br><strong>solubility</strong>: -1.6047790727815754<br><strong>similarity</strong>: 0.12280701754385964<br><strong>molecular_weight</strong>: 216.712<br><strong>scs_score</strong>: 3.5817508503021407"}, {"data-molecular_weight": 230.691, "data-scs_score": 3.0484028188746293, "data-img": null, "mols2grid-id": 91, "data-smiles": "CC1(CO)C(C)C(=O)OCC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-2.64", "data-solubility": -2.638241680130693, "data-similarity": 0.11475409836065574, "mols2grid-tooltip": "<strong>smiles</strong>: CC1(CO)C(C)C(=O)OCC=C(Cl)C=C1<br><strong>solubility</strong>: -2.638241680130693<br><strong>similarity</strong>: 0.11475409836065574<br><strong>molecular_weight</strong>: 230.691<br><strong>scs_score</strong>: 3.0484028188746293"}, {"data-molecular_weight": 246.73800000000003, "data-scs_score": 2.7827304739958527, "data-img": null, "mols2grid-id": 92, "data-smiles": "C(COCN)CCC(=O)NC=CC=C(Cl)C", "data-text": "Solubility (log(mol/L))=-2.72", "data-solubility": -2.7240705746873988, "data-similarity": 0.11290322580645161, "mols2grid-tooltip": "<strong>smiles</strong>: C(COCN)CCC(=O)NC=CC=C(Cl)C<br><strong>solubility</strong>: -2.7240705746873988<br><strong>similarity</strong>: 0.11290322580645161<br><strong>molecular_weight</strong>: 246.73800000000003<br><strong>scs_score</strong>: 2.7827304739958527"}, {"data-molecular_weight": 198.29100000000003, "data-scs_score": 2.999003271119221, "data-img": null, "mols2grid-id": 93, "data-smiles": "C1CCC1N(C)C(=S)NC=CC=O", "data-text": "Solubility (log(mol/L))=-1.82", "data-solubility": -1.824451234405117, "data-similarity": 0.10714285714285714, "mols2grid-tooltip": "<strong>smiles</strong>: C1CCC1N(C)C(=S)NC=CC=O<br><strong>solubility</strong>: -1.824451234405117<br><strong>similarity</strong>: 0.10714285714285714<br><strong>molecular_weight</strong>: 198.29100000000003<br><strong>scs_score</strong>: 2.999003271119221"}, {"data-molecular_weight": 204.701, "data-scs_score": 3.093658516029299, "data-img": null, "mols2grid-id": 94, "data-smiles": "C1C(CN(C)C)(O)NC=CC1(CCl)", "data-text": "Solubility (log(mol/L))=-1.53", "data-solubility": -1.5262695568906612, "data-similarity": 0.10344827586206896, "mols2grid-tooltip": "<strong>smiles</strong>: C1C(CN(C)C)(O)NC=CC1(CCl)<br><strong>solubility</strong>: -1.5262695568906612<br><strong>similarity</strong>: 0.10344827586206896<br><strong>molecular_weight</strong>: 204.701<br><strong>scs_score</strong>: 3.093658516029299"}]);\n", "// filter\n", "if (window.parent.mols2grid_lists === undefined) {\n", " window.parent.mols2grid_lists = {};\n", "}\n", "window.parent.mols2grid_lists["default"] = listObj;\n", "\n", "\n", "// selection\n", "class MolStorage extends Map {\n", " multi_set(_id, _smiles) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.set(_id[i], _smiles[i]);\n", " }\n", " }\n", " multi_del(_id) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.delete(_id[i]);\n", " };\n", " }\n", " to_dict() {\n", " var content = "{";\n", " for (let [key, value] of this) {\n", " content += key + ":" + JSON.stringify(value) + ",";\n", " }\n", " content = content.length > 1 ? content.slice(0, -1) : content;\n", " content += "}";\n", " return content\n", " }\n", " download_smi(fileName) {\n", " var content = "SMILES index\\n";\n", " for (let [key, value] of this) {\n", " content += value + " " + key + "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/plain"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = fileName;\n", " a.click();\n", " a.remove();\n", " }\n", "}\n", "var SELECTION = new MolStorage();\n", "\n", "\n", "\n", "// kernel\n", "var kernel_env = null;\n", "if (window.parent.IPython !== undefined) {\n", " // Jupyter notebook\n", " kernel_env = "jupyter";\n", " var kernel = window.parent.IPython.notebook.kernel;\n", " kernel.execute('from mols2grid.select import register as _m2g_reg')\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " kernel.execute("_m2g_reg.add_selection('"+grid_id+"', "+JSON.stringify(_id)+","+JSON.stringify(smiles)+")");\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " kernel.execute("_m2g_reg.del_selection('"+grid_id+"', "+JSON.stringify(_id)+")");\n", " }\n", "} else if (window.parent.google !== undefined) {\n", " // Google colab\n", " kernel_env = "colab";\n", " var kernel = window.parent.google.colab.kernel;\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.add_selection',\n", " [grid_id, _id, smiles], {});\n", " })();\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.del_selection',\n", " [grid_id, _id], {});\n", " })();\n", " }\n", "} else {\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " }\n", "}\n", "\n", "\n", "\n", "\n", "// sort\n", "var sort_field = "mols2grid-id";\n", "var sort_order = "asc";\n", "function mols2gridSortFunction(itemA, itemB, options) {\n", " var x = itemA.values()[options.valueName];\n", " var y = itemB.values()[options.valueName];\n", " if (typeof x === "number") {\n", " if (isFinite(x - y)) {\n", " return x - y; \n", " } else {\n", " return isFinite(x) ? -1 : 1;\n", " }\n", " } else {\n", " x = x.toLowerCase();\n", " y = y.toLowerCase();\n", " return (x < y) ? -1: (x > y) ? 1: 0;\n", " }\n", "}\n", "function checkboxSort(itemA, itemB, options) {\n", " if (itemA.elm !== undefined) {\n", " var checkedA = itemA.elm.firstChild.checked;\n", " if (itemB.elm !== undefined) {\n", " var checkedB = itemB.elm.firstChild.checked;\n", " if (checkedA && !checkedB) {\n", " return -1;\n", " } else if (!checkedA && checkedB) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", " } else {\n", " return -1;\n", " }\n", " } else if (itemB.elm !== undefined) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", "}\n", "$('#mols2grid button.sort-btn').click(function(e) {\n", " var _field = $(this).attr("data-name");\n", " if (_field == sort_field) {\n", " $(this).removeClass("arrow-" + sort_order)\n", " sort_order = (sort_order === "desc") ? "asc" : "desc";\n", " } else {\n", " $('#mols2grid button.sort-btn.active').removeClass("active arrow-" + sort_order);\n", " sort_order = "asc";\n", " sort_field = _field;\n", " $(this).addClass("active");\n", " }\n", " $(this).addClass("arrow-" + sort_order)\n", " if (sort_field == "checkbox") {\n", " listObj.sort("mols2grid-id", {order: sort_order, sortFunction: checkboxSort});\n", " } else {\n", " listObj.sort(_field, {order: sort_order, sortFunction: mols2gridSortFunction});\n", " }\n", "});\n", "\n", "\n", "\n", "\n", "// tooltips\n", "$.fn.tooltip.Constructor.Default.whiteList.span = ['style']\n", "listObj.on("updated", function (list) {\n", " $(function () {\n", " // hide previous popovers\n", " $('#mols2grid a.page-link').click(function(e) {\n", " $('.mols2grid-tooltip[data-toggle="popover"]').popover('hide')\n", " });\n", " // create new popover\n", " $('.mols2grid-tooltip[data-toggle="popover"]').popover({\n", " placement: 'bottom',\n", " trigger: 'click hover',\n", " html: true,\n", " sanitize: false,\n", " });\n", " })\n", "});\n", "\n", "\n", "\n", "// selection modifyers and export options\n", "// check all\n", "$('#btn-chkbox-all').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = true;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " _smiles.push($($(this).siblings(".data-smiles")[0]).text());\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " add_selection("default", _id, _smiles);\n", "});\n", "// uncheck all\n", "$('#btn-chkbox-none').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox:checked").each(function() {\n", " this.checked = false;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id);\n", "});\n", "// invert\n", "$('#btn-chkbox-invert').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id_add = [];\n", " var _id_del = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = !this.checked;\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " _id_add.push(_id);\n", " _smiles.push($(this).siblings(".data-smiles").first().text());\n", " } else {\n", " _id_del.push(_id);\n", " }\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id_del);\n", " add_selection("default", _id_add, _smiles);\n", "});\n", "// copy to clipboard\n", "$("#btn-chkbox-copy").click(function(e) {\n", " navigator.clipboard.writeText(SELECTION.to_dict());\n", "});\n", "// export smiles\n", "$("#btn-chkbox-dlsmi").click(function(e) {\n", " SELECTION.download_smi("selection.smi");\n", "});\n", "// export CSV\n", "$("#btn-chkbox-dlcsv").click(function(e) {\n", " var sep = "\\t"\n", " // same order as subset + tooltip\n", " var columns = Array.from(listObj.items[0].elm.querySelectorAll("div.data"))\n", " .map(elm => elm.classList[1]);\n", " // remove 'data-'\n", " var header = columns.map(name => name.slice(5));\n", " // csv content\n", " header = ["index"].concat(header).join(sep);\n", " var content = header + "\\n";\n", " for (let [index, smiles] of SELECTION.entries()) {\n", " var data = listObj.items[index].values();\n", " content += index;\n", " columns.forEach((key) => {\n", " content += sep + data[key];\n", " })\n", " content += "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/csv"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = "selection.csv";\n", " a.click();\n", " a.remove();\n", "});\n", "// update selection on checkbox click\n", "listObj.on("updated", function (list) {\n", " $("input:checkbox").change(function() {\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " var _smiles = $($(this).siblings(".data-smiles")[0]).text();\n", " add_selection("default", [_id], [_smiles]);\n", " } else {\n", " del_selection("default", [_id]);\n", " }\n", " }); \n", "});\n", "\n", "\n", "\n", "\n", "\n", "// generate images for the currently displayed molecules\n", "var draw_opts = {"width": 300, "height": 200};\n", "var json_draw_opts = JSON.stringify(draw_opts);\n", "\n", "var smarts_matches = {};\n", "\n", "// Load RDKit\n", "window\n", ".initRDKitModule()\n", ".then(function(RDKit) {\n", " console.log('RDKit version: ', RDKit.version());\n", " window.RDKit = RDKit;\n", " window.RDKitModule = RDKit;\n", "\n", " // search bar\n", " function SmartsSearch(query, columns) {\n", " var smiles_col = columns[0];\n", " smarts_matches = {};\n", " var query = $('#mols2grid #searchbar').val();\n", " var qmol = RDKit.get_qmol(query);\n", " if (qmol.is_valid()) {\n", " for (var k = 0, kl = listObj.items.length; k < kl; k++) {\n", " var item = listObj.items[k];\n", " var smiles = item.values()[smiles_col]\n", " var mol = RDKit.get_mol(smiles);\n", " if (mol.is_valid()) {\n", " var results = JSON.parse(mol.get_substruct_match(qmol));\n", " if (results.atoms) {\n", " item.found = true;\n", " \n", " smarts_matches[smiles] = results;\n", " \n", " } else {\n", " item.found = false;\n", " }\n", " } else {\n", " item.found = false;\n", " }\n", " mol.delete();\n", " }\n", " }\n", " qmol.delete();\n", "}\n", "var search_type = "Text";\n", "$('#mols2grid .search-btn').click(function() {\n", " search_type = $(this).text();\n", " $('#mols2grid button.search-btn.active').removeClass("active");\n", " $(this).addClass("active");\n", "});\n", "$('#mols2grid #searchbar').on("keyup", function(e) {\n", " var query = e.target.value;\n", " if (search_type === "Text") {\n", " smarts_matches = {};\n", " listObj.search(query, ['data-smiles', 'data-text', 'data-smiles', 'data-solubility', 'data-similarity', 'data-molecular_weight', 'data-scs_score']);\n", " } else {\n", " listObj.search(query, ["data-smiles"], SmartsSearch);\n", " }\n", "});\n", "\n", " \n", " // generate images for the currently displayed molecules\n", "RDKit.prefer_coordgen(true);\n", "function draw_mol(smiles) {\n", " var mol = RDKit.get_mol(smiles, '{"removeHs": false }');\n", " var svg = "";\n", " if (mol.is_valid()) {\n", " var highlights = smarts_matches[smiles];\n", " if (highlights) {\n", " var details = Object.assign({}, draw_opts, highlights);\n", " details = JSON.stringify(details);\n", " } else {\n", " var details = json_draw_opts;\n", " }\n", " svg = mol.get_svg_with_highlights(details);\n", " }\n", " mol.delete();\n", " if (svg == "") {\n", " return '<svg width="300" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 300 200"></svg>';\n", " }\n", " return svg;\n", "}\n", "listObj.on("updated", function (list) {\n", " var query = $('#mols2grid #searchbar').val();\n", " if (query === "") {\n", " smarts_matches = {};\n", " }\n", " $('#mols2grid .cell').each(function() {\n", " var $t = $(this);\n", " var smiles = $t.children(".data-smiles").first().text()\n", " var svg = draw_mol(smiles);\n", " $t.children(".data-img").html(svg);\n", " });\n", "});\n", " \n", "\n", " // trigger update to activate tooltips, draw images, setup callbacks...\n", " listObj.update();\n", " // resize iframe to fit content\n", " if (window.frameElement) {\n", " window.parent.fit_height(window.frameElement);\n", " }\n", "});\n", " </script>\n", " </body>\n", "</html>\">\n", "</iframe>" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_molecules_df(molecules_df=first_set_molecules_df, similarity_threshold=similarity_threshold)" ] }, { "cell_type": "code", "execution_count": 7, "id": "fd851fc2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Solubility using Buturon as a reference')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "sns.distplot(first_set_molecules_df[\"solubility\"], hist=False, kde_kws={\"linewidth\": 4})\n", "plt.axvline(x=first_set_molecules_df[\"solubility\"].mean(), linestyle=\"--\", c=\"lightblue\")\n", "plt.axvline(x=solubility, linestyle=\"--\", c=\"k\")\n", "plt.xlabel(\"Solubility (log(mol/L))\", size=14)\n", "plt.ylabel(\"Density\", size=14)\n", "plt.xlim([min(first_set_molecules_df[\"solubility\"].min(), solubility) - .1, 0.0])\n", "plt.title(f\"Solubility using {molecule_name} as a reference\", size=14)" ] }, { "cell_type": "markdown", "id": "391b34dd", "metadata": {}, "source": [ "## Exploring interesting scaffolds\n", "\n", "At this point we can explore some of the generated scaffolds to evaluate further alternatives, for this we use another generative algorithm hosted in the GT4SD, MoLeR.\n", "\n", "References:\n", "\n", "```txt\n", "Maziarz, K., Jackson-Flux, H., Cameron, P., Sirockin, F., Schneider, N., Stiefl, N., Segler, M., & Brockschmidt, M. (2022). Learning to Extend Molecular Scaffolds with Structural Motifs. ICLR.\n", "```" ] }, { "cell_type": "code", "execution_count": 8, "id": "20a944d2", "metadata": { "scrolled": false }, "outputs": [], "source": [ "number_of_scaffolds = 6\n", "batch_size = 32\n", "scaffolds_set = set([Chem.MolToSmiles(GetScaffoldForMol(Chem.MolFromSmiles(smi))) for smi in first_set_molecules_df[first_set_molecules_df[\"similarity\"] > similarity_threshold].sort_values(by=\"similarity\", ascending=False)[:number_of_scaffolds][\"smiles\"]])\n", "second_set_configuration = MoLeRDefaultGenerator(scaffolds=\".\".join(scaffolds_set))\n", "algorithm = MoLeR(configuration=second_set_configuration)" ] }, { "cell_type": "code", "execution_count": 9, "id": "9f06a84c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<script>\n", " function fit_height(obj) {\n", " obj.style.height = 0;\n", " var height = obj.contentDocument.body.scrollHeight + 18 + 'px';\n", " obj.style.height = height;\n", " }\n", "</script>\n", "<iframe class=\"mols2grid-iframe\" frameborder=\"0\" width=\"100%\"\n", "\n", "height=\"200\"\n", "\n", "\n", "allow=\"clipboard-write\"\n", "\n", "srcdoc=\"<html>\n", " <meta charset="utf-8">\n", " <head>\n", " <style>\n", " #mols2grid.gridcontainer {\n", " display: block;\n", " padding-left: 1em;\n", " max-width: 912px;\n", " width: 912px;\n", "}\n", "#mols2grid .cell {\n", " border: 1px solid #cccccc;\n", " text-align: center;\n", " vertical-align: top;\n", " max-width: 300px;\n", " width: 300px;\n", " font-family: 'DejaVu', sans-serif;\n", " font-size: 12pt;\n", " padding: 0;\n", " margin: 0px;\n", " float: left;\n", "}\n", "#mols2grid .cell:hover {\n", " background-color: #e7e7e7 !important;\n", "}\n", "#mols2grid .cell .data-img {\n", " padding: 0;\n", " margin: 0;\n", "}\n", "#mols2grid .cell img, #mols2grid .cell svg {\n", " max-width: 100%;\n", " height: auto;\n", " padding: 0;\n", "}\n", "#mols2grid .data {\n", " overflow: hidden;\n", " white-space: nowrap;\n", " text-overflow: ellipsis;\n", " display: block;\n", "}\n", "#mols2grid .arrow-asc:after {\n", " content: '↑';\n", " text-align: right;\n", " float:right;\n", "}\n", "#mols2grid .arrow-desc:after {\n", " content: '↓';\n", " text-align: right;\n", " float:right;\n", "}\n", " /* custom CSS */\n", " \n", " </style>\n", " <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>\n", "<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">\n", "<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>\n", "<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>\n", "<script src="https://unpkg.com/@rdkit/rdkit@2021.9.4/Code/MinimalLib/dist/RDKit_minimal.js"></script>\n", " <!-- custom header -->\n", " \n", " </head>\n", " <body>\n", " <div id="mols2grid" class="gridcontainer grid-default">\n", " <div class="row mb-3">\n", " <div class="list"><div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-img"></div><div class="data data-mols2grid-id-copy"></div><div class="data data-SMILES"></div></div></div>\n", " </div>\n", " <div class="d-inline">\n", " <ul class="pagination float-left"></ul>\n", " <div id="controls" class="d-flex flex-row float-right">\n", " \n", " <div id="chkbox-dropdown" class="dropdown">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="chkboxDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">☑</button>\n", " <div class="dropdown-menu" aria-labelledby="checkboxDropdownMenu">\n", " <button id="btn-chkbox-all" class="dropdown-item" type="button">Check all</button>\n", " <button id="btn-chkbox-none" class="dropdown-item" type="button">Uncheck all</button>\n", " <button id="btn-chkbox-invert" class="dropdown-item" type="button">Invert</button>\n", " <div class="dropdown-divider"></div>\n", " <button id="btn-chkbox-copy" class="dropdown-item" type="button">Copy to clipboard</button>\n", " <button id="btn-chkbox-dlsmi" class="dropdown-item" type="button">Save SMILES</button>\n", " <button id="btn-chkbox-dlcsv" class="dropdown-item" type="button">Save CSV</button>\n", " </div>\n", "</div>\n", " \n", " <div id="sort-dropdown" class="dropdown pl-2">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="sortDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n", " Sort by\n", " </button>\n", " <div class="dropdown-menu" aria-labelledby="sortDropdownMenu">\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn arrow-asc active" type="button" data-name="mols2grid-id">Index</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn arrow-asc active" type="button" data-name="data-mols2grid-id">mols2grid-id</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-SMILES">SMILES</button>\n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn" type="button" data-name="checkbox">Selected</button>\n", " \n", " </div>\n", " </div>\n", " <div class="input-group row pl-4">\n", " <input type="text" id="searchbar" class="form-control" placeholder="Search" aria-label="Search" aria-describedby="basic-addon1">\n", " <div class="input-group-append">\n", " <button id="searchBtn" class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">🔎</button>\n", " <div class="dropdown-menu dropdown-menu-right">\n", " <button id="txtSearch" class="search-btn dropdown-item active">Text</button>\n", " <button id="smartsSearch" class="search-btn dropdown-item">SMARTS</button>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " <script>\n", " // list.js\n", "var listObj = new List('mols2grid', {\n", " valueNames: [{data: ['mols2grid-id']}, 'data-mols2grid-id', 'data-img', 'data-SMILES', 'data-mols2grid-id-copy'],\n", " item: '<div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-img"></div><div class="data data-mols2grid-id-copy"></div><div class="data data-SMILES"></div></div>',\n", " page: 9,\n", " pagination: {\n", " name: "pagination",\n", " item: '<li class="page-item"><a class="page page-link" href="#" onclick="event.preventDefault()"></a></li>',\n", " innerWindow: 1,\n", " outerWindow: 1,\n", " },\n", "});\n", "listObj.remove("mols2grid-id", "0");\n", "listObj.add([{"mols2grid-id": 0, "data-img": null, "data-SMILES": "c1ccccc1", "data-mols2grid-id-copy": 0}]);\n", "// filter\n", "if (window.parent.mols2grid_lists === undefined) {\n", " window.parent.mols2grid_lists = {};\n", "}\n", "window.parent.mols2grid_lists["default"] = listObj;\n", "\n", "\n", "// selection\n", "class MolStorage extends Map {\n", " multi_set(_id, _smiles) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.set(_id[i], _smiles[i]);\n", " }\n", " }\n", " multi_del(_id) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.delete(_id[i]);\n", " };\n", " }\n", " to_dict() {\n", " var content = "{";\n", " for (let [key, value] of this) {\n", " content += key + ":" + JSON.stringify(value) + ",";\n", " }\n", " content = content.length > 1 ? content.slice(0, -1) : content;\n", " content += "}";\n", " return content\n", " }\n", " download_smi(fileName) {\n", " var content = "SMILES index\\n";\n", " for (let [key, value] of this) {\n", " content += value + " " + key + "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/plain"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = fileName;\n", " a.click();\n", " a.remove();\n", " }\n", "}\n", "var SELECTION = new MolStorage();\n", "\n", "\n", "\n", "// kernel\n", "var kernel_env = null;\n", "if (window.parent.IPython !== undefined) {\n", " // Jupyter notebook\n", " kernel_env = "jupyter";\n", " var kernel = window.parent.IPython.notebook.kernel;\n", " kernel.execute('from mols2grid.select import register as _m2g_reg')\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " kernel.execute("_m2g_reg.add_selection('"+grid_id+"', "+JSON.stringify(_id)+","+JSON.stringify(smiles)+")");\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " kernel.execute("_m2g_reg.del_selection('"+grid_id+"', "+JSON.stringify(_id)+")");\n", " }\n", "} else if (window.parent.google !== undefined) {\n", " // Google colab\n", " kernel_env = "colab";\n", " var kernel = window.parent.google.colab.kernel;\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.add_selection',\n", " [grid_id, _id, smiles], {});\n", " })();\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.del_selection',\n", " [grid_id, _id], {});\n", " })();\n", " }\n", "} else {\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " }\n", "}\n", "\n", "\n", "\n", "\n", "// sort\n", "var sort_field = "mols2grid-id";\n", "var sort_order = "asc";\n", "function mols2gridSortFunction(itemA, itemB, options) {\n", " var x = itemA.values()[options.valueName];\n", " var y = itemB.values()[options.valueName];\n", " if (typeof x === "number") {\n", " if (isFinite(x - y)) {\n", " return x - y; \n", " } else {\n", " return isFinite(x) ? -1 : 1;\n", " }\n", " } else {\n", " x = x.toLowerCase();\n", " y = y.toLowerCase();\n", " return (x < y) ? -1: (x > y) ? 1: 0;\n", " }\n", "}\n", "function checkboxSort(itemA, itemB, options) {\n", " if (itemA.elm !== undefined) {\n", " var checkedA = itemA.elm.firstChild.checked;\n", " if (itemB.elm !== undefined) {\n", " var checkedB = itemB.elm.firstChild.checked;\n", " if (checkedA && !checkedB) {\n", " return -1;\n", " } else if (!checkedA && checkedB) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", " } else {\n", " return -1;\n", " }\n", " } else if (itemB.elm !== undefined) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", "}\n", "$('#mols2grid button.sort-btn').click(function(e) {\n", " var _field = $(this).attr("data-name");\n", " if (_field == sort_field) {\n", " $(this).removeClass("arrow-" + sort_order)\n", " sort_order = (sort_order === "desc") ? "asc" : "desc";\n", " } else {\n", " $('#mols2grid button.sort-btn.active').removeClass("active arrow-" + sort_order);\n", " sort_order = "asc";\n", " sort_field = _field;\n", " $(this).addClass("active");\n", " }\n", " $(this).addClass("arrow-" + sort_order)\n", " if (sort_field == "checkbox") {\n", " listObj.sort("mols2grid-id", {order: sort_order, sortFunction: checkboxSort});\n", " } else {\n", " listObj.sort(_field, {order: sort_order, sortFunction: mols2gridSortFunction});\n", " }\n", "});\n", "\n", "\n", "\n", "\n", "\n", "\n", "// selection modifyers and export options\n", "// check all\n", "$('#btn-chkbox-all').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = true;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " _smiles.push($($(this).siblings(".data-SMILES")[0]).text());\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " add_selection("default", _id, _smiles);\n", "});\n", "// uncheck all\n", "$('#btn-chkbox-none').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox:checked").each(function() {\n", " this.checked = false;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id);\n", "});\n", "// invert\n", "$('#btn-chkbox-invert').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id_add = [];\n", " var _id_del = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = !this.checked;\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " _id_add.push(_id);\n", " _smiles.push($(this).siblings(".data-SMILES").first().text());\n", " } else {\n", " _id_del.push(_id);\n", " }\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id_del);\n", " add_selection("default", _id_add, _smiles);\n", "});\n", "// copy to clipboard\n", "$("#btn-chkbox-copy").click(function(e) {\n", " navigator.clipboard.writeText(SELECTION.to_dict());\n", "});\n", "// export smiles\n", "$("#btn-chkbox-dlsmi").click(function(e) {\n", " SELECTION.download_smi("selection.smi");\n", "});\n", "// export CSV\n", "$("#btn-chkbox-dlcsv").click(function(e) {\n", " var sep = "\\t"\n", " // same order as subset + tooltip\n", " var columns = Array.from(listObj.items[0].elm.querySelectorAll("div.data"))\n", " .map(elm => elm.classList[1]);\n", " // remove 'data-'\n", " var header = columns.map(name => name.slice(5));\n", " // csv content\n", " header = ["index"].concat(header).join(sep);\n", " var content = header + "\\n";\n", " for (let [index, smiles] of SELECTION.entries()) {\n", " var data = listObj.items[index].values();\n", " content += index;\n", " columns.forEach((key) => {\n", " content += sep + data[key];\n", " })\n", " content += "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/csv"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = "selection.csv";\n", " a.click();\n", " a.remove();\n", "});\n", "// update selection on checkbox click\n", "listObj.on("updated", function (list) {\n", " $("input:checkbox").change(function() {\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " var _smiles = $($(this).siblings(".data-SMILES")[0]).text();\n", " add_selection("default", [_id], [_smiles]);\n", " } else {\n", " del_selection("default", [_id]);\n", " }\n", " }); \n", "});\n", "\n", "\n", "\n", "\n", "\n", "// generate images for the currently displayed molecules\n", "var draw_opts = {"width": 300, "height": 200};\n", "var json_draw_opts = JSON.stringify(draw_opts);\n", "\n", "var smarts_matches = {};\n", "\n", "// Load RDKit\n", "window\n", ".initRDKitModule()\n", ".then(function(RDKit) {\n", " console.log('RDKit version: ', RDKit.version());\n", " window.RDKit = RDKit;\n", " window.RDKitModule = RDKit;\n", "\n", " // search bar\n", " function SmartsSearch(query, columns) {\n", " var smiles_col = columns[0];\n", " smarts_matches = {};\n", " var query = $('#mols2grid #searchbar').val();\n", " var qmol = RDKit.get_qmol(query);\n", " if (qmol.is_valid()) {\n", " for (var k = 0, kl = listObj.items.length; k < kl; k++) {\n", " var item = listObj.items[k];\n", " var smiles = item.values()[smiles_col]\n", " var mol = RDKit.get_mol(smiles);\n", " if (mol.is_valid()) {\n", " var results = JSON.parse(mol.get_substruct_match(qmol));\n", " if (results.atoms) {\n", " item.found = true;\n", " \n", " smarts_matches[smiles] = results;\n", " \n", " } else {\n", " item.found = false;\n", " }\n", " } else {\n", " item.found = false;\n", " }\n", " mol.delete();\n", " }\n", " }\n", " qmol.delete();\n", "}\n", "var search_type = "Text";\n", "$('#mols2grid .search-btn').click(function() {\n", " search_type = $(this).text();\n", " $('#mols2grid button.search-btn.active').removeClass("active");\n", " $(this).addClass("active");\n", "});\n", "$('#mols2grid #searchbar').on("keyup", function(e) {\n", " var query = e.target.value;\n", " if (search_type === "Text") {\n", " smarts_matches = {};\n", " listObj.search(query, ['data-mols2grid-id', 'data-SMILES']);\n", " } else {\n", " listObj.search(query, ["data-SMILES"], SmartsSearch);\n", " }\n", "});\n", "\n", " \n", " // generate images for the currently displayed molecules\n", "RDKit.prefer_coordgen(true);\n", "function draw_mol(smiles) {\n", " var mol = RDKit.get_mol(smiles, '{"removeHs": false }');\n", " var svg = "";\n", " if (mol.is_valid()) {\n", " var highlights = smarts_matches[smiles];\n", " if (highlights) {\n", " var details = Object.assign({}, draw_opts, highlights);\n", " details = JSON.stringify(details);\n", " } else {\n", " var details = json_draw_opts;\n", " }\n", " svg = mol.get_svg_with_highlights(details);\n", " }\n", " mol.delete();\n", " if (svg == "") {\n", " return '<svg width="300" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 300 200"></svg>';\n", " }\n", " return svg;\n", "}\n", "listObj.on("updated", function (list) {\n", " var query = $('#mols2grid #searchbar').val();\n", " if (query === "") {\n", " smarts_matches = {};\n", " }\n", " $('#mols2grid .cell').each(function() {\n", " var $t = $(this);\n", " var smiles = $t.children(".data-SMILES").first().text()\n", " var svg = draw_mol(smiles);\n", " $t.children(".data-img").html(svg);\n", " });\n", "});\n", " \n", "\n", " // trigger update to activate tooltips, draw images, setup callbacks...\n", " listObj.update();\n", " // resize iframe to fit content\n", " if (window.frameElement) {\n", " window.parent.fit_height(window.frameElement);\n", " }\n", "});\n", " </script>\n", " </body>\n", "</html>\">\n", "</iframe>" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mols2grid.display([Chem.MolFromSmiles(smi) for smi in second_set_configuration.scaffolds.split(\".\")], n_cols=3, size=(300,200))" ] }, { "cell_type": "code", "execution_count": 10, "id": "a35fc270", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loading a trained model from: /Users/tte/.gt4sd/algorithms/generation/MoLeR/MoLeRDefaultGenerator/v0/GNN_Edge_MLP_MoLeR__2022-02-24_07-16-23_best.pkl\n", "Loading a trained model from: /Users/tte/.gt4sd/algorithms/generation/MoLeR/MoLeRDefaultGenerator/v0/GNN_Edge_MLP_MoLeR__2022-02-24_07-16-23_best.pkl\n", "Loading a trained model from: /Users/tte/.gt4sd/algorithms/generation/MoLeR/MoLeRDefaultGenerator/v0/GNN_Edge_MLP_MoLeR__2022-02-24_07-16-23_best.pkl\n", "Loading a trained model from: /Users/tte/.gt4sd/algorithms/generation/MoLeR/MoLeRDefaultGenerator/v0/GNN_Edge_MLP_MoLeR__2022-02-24_07-16-23_best.pkl\n" ] }, { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>smiles</th>\n", " <th>solubility</th>\n", " <th>similarity</th>\n", " <th>molecular_weight</th>\n", " <th>scs_score</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>COOC(C)(C)C(O)CC(C1=CC=C(OCC2=CC=CC=C2)C=C1)C(C)C</td>\n", " <td>-6.149453</td>\n", " <td>0.102941</td>\n", " <td>372.505</td>\n", " <td>3.607044</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>COC1=CC=C(C=CC(=O)NCC(C2=CC=C([N+](=O)[O-])O2)...</td>\n", " <td>-4.569251</td>\n", " <td>0.108434</td>\n", " <td>382.376</td>\n", " <td>2.367165</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>CC1(C)CC(=O)C2=C(C1)NC1=C(C(=O)CCC1)C2C1=CC=C(...</td>\n", " <td>-5.878387</td>\n", " <td>0.144928</td>\n", " <td>373.855</td>\n", " <td>2.384723</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>CC1=CC=CC(C2=CC=C(S(=O)(=O)C3=CC=CC=C3)C=C2C(=...</td>\n", " <td>-6.602023</td>\n", " <td>0.091954</td>\n", " <td>704.827</td>\n", " <td>1.222386</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>CCSC=CC(=O)C=CC1=CC=CC(C(F)(F)F)=C1</td>\n", " <td>-5.127765</td>\n", " <td>0.142857</td>\n", " <td>286.318</td>\n", " <td>3.608933</td>\n", " </tr>\n", " <tr>\n", " <th>...</th>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " </tr>\n", " <tr>\n", " <th>123</th>\n", " <td>CC1=CC=C(C)C(C2=CC=CC3=NC=CC=C23)=C1</td>\n", " <td>-5.008695</td>\n", " <td>0.066667</td>\n", " <td>233.314</td>\n", " <td>2.748667</td>\n", " </tr>\n", " <tr>\n", " <th>124</th>\n", " <td>CC(C)CC1=CSC(C2=NN(CC3=CC=CC=C3)C=C2NC(=O)NC2=...</td>\n", " <td>-10.647524</td>\n", " <td>0.209302</td>\n", " <td>632.617</td>\n", " <td>1.001091</td>\n", " </tr>\n", " <tr>\n", " <th>125</th>\n", " <td>CC1=CC=C(C2=CN3C=C(C4=CC=C(OCC5=NN=CO5)C=C4)N=...</td>\n", " <td>-5.853729</td>\n", " <td>0.053333</td>\n", " <td>383.411</td>\n", " <td>2.132539</td>\n", " </tr>\n", " <tr>\n", " <th>126</th>\n", " <td>CCC=CC1=CC=C(OCC2=CC=C(F)C(C(=O)O)=C2)C=C1</td>\n", " <td>-5.293811</td>\n", " <td>0.119403</td>\n", " <td>300.329</td>\n", " <td>2.740461</td>\n", " </tr>\n", " <tr>\n", " <th>127</th>\n", " <td>C1=CC=C(CCC=CC2=NC=CN2)C=C1</td>\n", " <td>-3.615227</td>\n", " <td>0.049180</td>\n", " <td>198.269</td>\n", " <td>3.170924</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>128 rows × 5 columns</p>\n", "</div>" ], "text/plain": [ " smiles solubility \\\n", "0 COOC(C)(C)C(O)CC(C1=CC=C(OCC2=CC=CC=C2)C=C1)C(C)C -6.149453 \n", "1 COC1=CC=C(C=CC(=O)NCC(C2=CC=C([N+](=O)[O-])O2)... -4.569251 \n", "2 CC1(C)CC(=O)C2=C(C1)NC1=C(C(=O)CCC1)C2C1=CC=C(... -5.878387 \n", "3 CC1=CC=CC(C2=CC=C(S(=O)(=O)C3=CC=CC=C3)C=C2C(=... -6.602023 \n", "4 CCSC=CC(=O)C=CC1=CC=CC(C(F)(F)F)=C1 -5.127765 \n", ".. ... ... \n", "123 CC1=CC=C(C)C(C2=CC=CC3=NC=CC=C23)=C1 -5.008695 \n", "124 CC(C)CC1=CSC(C2=NN(CC3=CC=CC=C3)C=C2NC(=O)NC2=... -10.647524 \n", "125 CC1=CC=C(C2=CN3C=C(C4=CC=C(OCC5=NN=CO5)C=C4)N=... -5.853729 \n", "126 CCC=CC1=CC=C(OCC2=CC=C(F)C(C(=O)O)=C2)C=C1 -5.293811 \n", "127 C1=CC=C(CCC=CC2=NC=CN2)C=C1 -3.615227 \n", "\n", " similarity molecular_weight scs_score \n", "0 0.102941 372.505 3.607044 \n", "1 0.108434 382.376 2.367165 \n", "2 0.144928 373.855 2.384723 \n", "3 0.091954 704.827 1.222386 \n", "4 0.142857 286.318 3.608933 \n", ".. ... ... ... \n", "123 0.066667 233.314 2.748667 \n", "124 0.209302 632.617 1.001091 \n", "125 0.053333 383.411 2.132539 \n", "126 0.119403 300.329 2.740461 \n", "127 0.049180 198.269 3.170924 \n", "\n", "[128 rows x 5 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "generated_smiles = set()\n", "maximum_calls = 5\n", "counter = 0\n", "while len(generated_smiles) < (attempts * samples) and counter < maximum_calls:\n", " generated_smiles = generated_smiles.union([smi for smi in list(algorithm.sample(batch_size)) if smi not in generated_smiles and smi != smiles])\n", " counter += 1\n", "second_set_molecules_df = pd.DataFrame({\n", " \"smiles\": list(generated_smiles),\n", " \"solubility\": list(map(lambda smi: solubility_fn(smi), generated_smiles)),\n", " \"similarity\": list(map(similarity_fn, generated_smiles)),\n", " \"molecular_weight\": list(map(molecular_weight_fn, generated_smiles)),\n", " \"scs_score\": list(map(complexity_fn, generated_smiles)),\n", "})\n", "second_set_molecules_df" ] }, { "cell_type": "code", "execution_count": 11, "id": "a5623e30", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "<script>\n", " function fit_height(obj) {\n", " obj.style.height = 0;\n", " var height = obj.contentDocument.body.scrollHeight + 18 + 'px';\n", " obj.style.height = height;\n", " }\n", "</script>\n", "<iframe class=\"mols2grid-iframe\" frameborder=\"0\" width=\"100%\"\n", "\n", "height=\"200\"\n", "\n", "\n", "allow=\"clipboard-write\"\n", "\n", "srcdoc=\"<html>\n", " <meta charset="utf-8">\n", " <head>\n", " <style>\n", " #mols2grid.gridcontainer {\n", " display: block;\n", " padding-left: 1em;\n", " max-width: 912px;\n", " width: 912px;\n", "}\n", "#mols2grid .cell {\n", " border: 1px solid #cccccc;\n", " text-align: center;\n", " vertical-align: top;\n", " max-width: 300px;\n", " width: 300px;\n", " font-family: 'DejaVu', sans-serif;\n", " font-size: 12pt;\n", " padding: 0;\n", " margin: 0px;\n", " float: left;\n", "}\n", "#mols2grid .cell:hover {\n", " background-color: #e7e7e7 !important;\n", "}\n", "#mols2grid .cell .data-img {\n", " padding: 0;\n", " margin: 0;\n", "}\n", "#mols2grid .cell img, #mols2grid .cell svg {\n", " max-width: 100%;\n", " height: auto;\n", " padding: 0;\n", "}\n", "#mols2grid .data {\n", " overflow: hidden;\n", " white-space: nowrap;\n", " text-overflow: ellipsis;\n", " display: block;\n", "}\n", "#mols2grid .arrow-asc:after {\n", " content: '↑';\n", " text-align: right;\n", " float:right;\n", "}\n", "#mols2grid .arrow-desc:after {\n", " content: '↓';\n", " text-align: right;\n", " float:right;\n", "}\n", " /* custom CSS */\n", " \n", " </style>\n", " <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>\n", "<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">\n", "<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>\n", "<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>\n", "<script src="https://unpkg.com/@rdkit/rdkit@2021.9.4/Code/MinimalLib/dist/RDKit_minimal.js"></script>\n", " <!-- custom header -->\n", " \n", " </head>\n", " <body>\n", " <div id="mols2grid" class="gridcontainer grid-default">\n", " <div class="row mb-3">\n", " <div class="list"><div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-smiles"></div><a tabindex="0" class="data data-img mols2grid-tooltip" data-toggle="popover" data-content="."></a><div class="data data-text"></div><div class="data data-solubility" style="display: none;"></div><div class="data data-similarity" style="display: none;"></div><div class="data data-molecular_weight" style="display: none;"></div><div class="data data-scs_score" style="display: none;"></div></div></div>\n", " </div>\n", " <div class="d-inline">\n", " <ul class="pagination float-left"></ul>\n", " <div id="controls" class="d-flex flex-row float-right">\n", " \n", " <div id="chkbox-dropdown" class="dropdown">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="chkboxDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">☑</button>\n", " <div class="dropdown-menu" aria-labelledby="checkboxDropdownMenu">\n", " <button id="btn-chkbox-all" class="dropdown-item" type="button">Check all</button>\n", " <button id="btn-chkbox-none" class="dropdown-item" type="button">Uncheck all</button>\n", " <button id="btn-chkbox-invert" class="dropdown-item" type="button">Invert</button>\n", " <div class="dropdown-divider"></div>\n", " <button id="btn-chkbox-copy" class="dropdown-item" type="button">Copy to clipboard</button>\n", " <button id="btn-chkbox-dlsmi" class="dropdown-item" type="button">Save SMILES</button>\n", " <button id="btn-chkbox-dlcsv" class="dropdown-item" type="button">Save CSV</button>\n", " </div>\n", "</div>\n", " \n", " <div id="sort-dropdown" class="dropdown pl-2">\n", " <button class="btn btn-light dropdown-toggle" type="button" id="sortDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n", " Sort by\n", " </button>\n", " <div class="dropdown-menu" aria-labelledby="sortDropdownMenu">\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn arrow-asc active" type="button" data-name="mols2grid-id">Index</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-smiles">smiles</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-text">text</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-solubility">solubility</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-similarity">similarity</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-molecular_weight">molecular_weight</button>\n", " \n", " \n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn " type="button" data-name="data-scs_score">scs_score</button>\n", " \n", " \n", " \n", " <button class="dropdown-item sort-btn" type="button" data-name="checkbox">Selected</button>\n", " \n", " </div>\n", " </div>\n", " <div class="input-group row pl-4">\n", " <input type="text" id="searchbar" class="form-control" placeholder="Search" aria-label="Search" aria-describedby="basic-addon1">\n", " <div class="input-group-append">\n", " <button id="searchBtn" class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">🔎</button>\n", " <div class="dropdown-menu dropdown-menu-right">\n", " <button id="txtSearch" class="search-btn dropdown-item active">Text</button>\n", " <button id="smartsSearch" class="search-btn dropdown-item">SMARTS</button>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " </div>\n", " <script>\n", " // list.js\n", "var listObj = new List('mols2grid', {\n", " valueNames: [{data: ['mols2grid-id']}, 'data-molecular_weight', 'data-scs_score', 'data-img', 'data-smiles', 'data-text', 'data-solubility', 'data-similarity', {attr: 'data-content', name: 'mols2grid-tooltip'}],\n", " item: '<div class="cell" data-mols2grid-id="0"><input type="checkbox" class="position-relative float-left cached_checkbox"><div class="data data-smiles"></div><a tabindex="0" class="data data-img mols2grid-tooltip" data-toggle="popover" data-content="."></a><div class="data data-text"></div><div class="data data-solubility" style="display: none;"></div><div class="data data-similarity" style="display: none;"></div><div class="data data-molecular_weight" style="display: none;"></div><div class="data data-scs_score" style="display: none;"></div></div>',\n", " page: 9,\n", " pagination: {\n", " name: "pagination",\n", " item: '<li class="page-item"><a class="page page-link" href="#" onclick="event.preventDefault()"></a></li>',\n", " innerWindow: 1,\n", " outerWindow: 1,\n", " },\n", "});\n", "listObj.remove("mols2grid-id", "0");\n", "listObj.add([{"data-molecular_weight": 284.117, "data-scs_score": 3.922106185927779, "data-img": null, "mols2grid-id": 0, "data-smiles": "O=C(NC1=CC=C(Cl)C=C1Cl)C1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-5.15", "data-solubility": -5.147260896953246, "data-similarity": 0.23076923076923078, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(NC1=CC=C(Cl)C=C1Cl)C1=CC=C(F)C=C1<br><strong>solubility</strong>: -5.147260896953246<br><strong>similarity</strong>: 0.23076923076923078<br><strong>molecular_weight</strong>: 284.117<br><strong>scs_score</strong>: 3.922106185927779"}, {"data-molecular_weight": 590.0320000000003, "data-scs_score": 1.1447570502848863, "data-img": null, "mols2grid-id": 1, "data-smiles": "CCC(=O)NC1=CC=C(C(=O)N(C)CC2C(=O)N(CCC(=O)C3=CC=C(C(=O)O)C=C3)C(=O)C3=CC=C(Cl)C=C32)C=C1", "data-text": "Solubility (log(mol/L))=-7.13", "data-solubility": -7.125330701696308, "data-similarity": 0.22784810126582278, "mols2grid-tooltip": "<strong>smiles</strong>: CCC(=O)NC1=CC=C(C(=O)N(C)CC2C(=O)N(CCC(=O)C3=CC=C(C(=O)O)C=C3)C(=O)C3=CC=C(Cl)C=C32)C=C1<br><strong>solubility</strong>: -7.125330701696308<br><strong>similarity</strong>: 0.22784810126582278<br><strong>molecular_weight</strong>: 590.0320000000003<br><strong>scs_score</strong>: 1.1447570502848863"}, {"data-molecular_weight": 426.9920000000002, "data-scs_score": 1.8549443619882926, "data-img": null, "mols2grid-id": 2, "data-smiles": "CC(C)C(NCC1=CC2=CC=CC=C2N1)C(=O)N(CCCN)CC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-5.94", "data-solubility": -5.940387896373419, "data-similarity": 0.2191780821917808, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)C(NCC1=CC2=CC=CC=C2N1)C(=O)N(CCCN)CC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -5.940387896373419<br><strong>similarity</strong>: 0.2191780821917808<br><strong>molecular_weight</strong>: 426.9920000000002<br><strong>scs_score</strong>: 1.8549443619882926"}, {"data-molecular_weight": 340.85100000000006, "data-scs_score": 2.9875987206667443, "data-img": null, "mols2grid-id": 3, "data-smiles": "O=C(CCCCCNC(=O)CCC1=CC=C(Cl)C=C1)NCCO", "data-text": "Solubility (log(mol/L))=-3.59", "data-solubility": -3.592509304119427, "data-similarity": 0.21428571428571427, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CCCCCNC(=O)CCC1=CC=C(Cl)C=C1)NCCO<br><strong>solubility</strong>: -3.592509304119427<br><strong>similarity</strong>: 0.21428571428571427<br><strong>molecular_weight</strong>: 340.85100000000006<br><strong>scs_score</strong>: 2.9875987206667443"}, {"data-molecular_weight": 300.145, "data-scs_score": 3.1070306660923084, "data-img": null, "mols2grid-id": 4, "data-smiles": "CC1=CNN=C1NC(=O)COC1=CC=C(Cl)C=C1Cl", "data-text": "Solubility (log(mol/L))=-4.21", "data-solubility": -4.2133666599200525, "data-similarity": 0.21311475409836064, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=CNN=C1NC(=O)COC1=CC=C(Cl)C=C1Cl<br><strong>solubility</strong>: -4.2133666599200525<br><strong>similarity</strong>: 0.21311475409836064<br><strong>molecular_weight</strong>: 300.145<br><strong>scs_score</strong>: 3.1070306660923084"}, {"data-molecular_weight": 369.53400000000005, "data-scs_score": 2.535035359908588, "data-img": null, "mols2grid-id": 5, "data-smiles": "CCN(CC)CC1=CC=C(C(=O)NC2=CC=C(CN=C(C)S)C=C2)C=C1", "data-text": "Solubility (log(mol/L))=-5.79", "data-solubility": -5.785096860917252, "data-similarity": 0.21311475409836064, "mols2grid-tooltip": "<strong>smiles</strong>: CCN(CC)CC1=CC=C(C(=O)NC2=CC=C(CN=C(C)S)C=C2)C=C1<br><strong>solubility</strong>: -5.785096860917252<br><strong>similarity</strong>: 0.21311475409836064<br><strong>molecular_weight</strong>: 369.53400000000005<br><strong>scs_score</strong>: 2.535035359908588"}, {"data-molecular_weight": 255.70800000000003, "data-scs_score": 3.2443527814685327, "data-img": null, "mols2grid-id": 6, "data-smiles": "ClC1=CC=C(NC2=NC=NC3=CC=CC=C32)C=C1", "data-text": "Solubility (log(mol/L))=-4.79", "data-solubility": -4.788569637121796, "data-similarity": 0.21153846153846154, "mols2grid-tooltip": "<strong>smiles</strong>: ClC1=CC=C(NC2=NC=NC3=CC=CC=C32)C=C1<br><strong>solubility</strong>: -4.788569637121796<br><strong>similarity</strong>: 0.21153846153846154<br><strong>molecular_weight</strong>: 255.70800000000003<br><strong>scs_score</strong>: 3.2443527814685327"}, {"data-molecular_weight": 632.6170000000002, "data-scs_score": 1.0010907143576098, "data-img": null, "mols2grid-id": 7, "data-smiles": "CC(C)CC1=CSC(C2=NN(CC3=CC=CC=C3)C=C2NC(=O)NC2=CC=C(CNC(=O)C3=CC=C(Cl)C=C3Cl)C=C2)=C1", "data-text": "Solubility (log(mol/L))=-10.65", "data-solubility": -10.647523931797341, "data-similarity": 0.20930232558139536, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)CC1=CSC(C2=NN(CC3=CC=CC=C3)C=C2NC(=O)NC2=CC=C(CNC(=O)C3=CC=C(Cl)C=C3Cl)C=C2)=C1<br><strong>solubility</strong>: -10.647523931797341<br><strong>similarity</strong>: 0.20930232558139536<br><strong>molecular_weight</strong>: 632.6170000000002<br><strong>scs_score</strong>: 1.0010907143576098"}, {"data-molecular_weight": 310.397, "data-scs_score": 2.9694940959647074, "data-img": null, "mols2grid-id": 8, "data-smiles": "CCCCNC(=O)C1=CC=C(NC(=O)CC2=CC=CC=C2)C=C1", "data-text": "Solubility (log(mol/L))=-4.51", "data-solubility": -4.509934571550599, "data-similarity": 0.2033898305084746, "mols2grid-tooltip": "<strong>smiles</strong>: CCCCNC(=O)C1=CC=C(NC(=O)CC2=CC=CC=C2)C=C1<br><strong>solubility</strong>: -4.509934571550599<br><strong>similarity</strong>: 0.2033898305084746<br><strong>molecular_weight</strong>: 310.397<br><strong>scs_score</strong>: 2.9694940959647074"}, {"data-molecular_weight": 309.306, "data-scs_score": 2.1583693273541025, "data-img": null, "mols2grid-id": 9, "data-smiles": "O=C(NC(=O)C1CCNCC1)NC1=CC=C(OCP)C=C1", "data-text": "Solubility (log(mol/L))=-3.04", "data-solubility": -3.0388880867608594, "data-similarity": 0.19672131147540983, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(NC(=O)C1CCNCC1)NC1=CC=C(OCP)C=C1<br><strong>solubility</strong>: -3.0388880867608594<br><strong>similarity</strong>: 0.19672131147540983<br><strong>molecular_weight</strong>: 309.306<br><strong>scs_score</strong>: 2.1583693273541025"}, {"data-molecular_weight": 407.305, "data-scs_score": 1.5944877265682702, "data-img": null, "mols2grid-id": 10, "data-smiles": "CCNC(CC1=CC=C(Cl)C=C1)C(=O)NCCN1C=NC2=C(Cl)N=CN=C21", "data-text": "Solubility (log(mol/L))=-4.47", "data-solubility": -4.4738588107097845, "data-similarity": 0.19444444444444445, "mols2grid-tooltip": "<strong>smiles</strong>: CCNC(CC1=CC=C(Cl)C=C1)C(=O)NCCN1C=NC2=C(Cl)N=CN=C21<br><strong>solubility</strong>: -4.4738588107097845<br><strong>similarity</strong>: 0.19444444444444445<br><strong>molecular_weight</strong>: 407.305<br><strong>scs_score</strong>: 1.5944877265682702"}, {"data-molecular_weight": 315.167, "data-scs_score": 3.458242934544342, "data-img": null, "mols2grid-id": 11, "data-smiles": "COCCNC(=O)C1=CC=C(NC(C)=O)C=C1Br", "data-text": "Solubility (log(mol/L))=-3.27", "data-solubility": -3.271016463578962, "data-similarity": 0.1864406779661017, "mols2grid-tooltip": "<strong>smiles</strong>: COCCNC(=O)C1=CC=C(NC(C)=O)C=C1Br<br><strong>solubility</strong>: -3.271016463578962<br><strong>similarity</strong>: 0.1864406779661017<br><strong>molecular_weight</strong>: 315.167<br><strong>scs_score</strong>: 3.458242934544342"}, {"data-molecular_weight": 491.01300000000015, "data-scs_score": 1.5757787174924216, "data-img": null, "mols2grid-id": 12, "data-smiles": "CCCN(CC1=CC=C2NC(SC)=NC(C(=O)O)=NC2=C1)CC(O)COC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-6.26", "data-solubility": -6.259632678620793, "data-similarity": 0.18518518518518517, "mols2grid-tooltip": "<strong>smiles</strong>: CCCN(CC1=CC=C2NC(SC)=NC(C(=O)O)=NC2=C1)CC(O)COC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -6.259632678620793<br><strong>similarity</strong>: 0.18518518518518517<br><strong>molecular_weight</strong>: 491.01300000000015<br><strong>scs_score</strong>: 1.5757787174924216"}, {"data-molecular_weight": 408.88200000000006, "data-scs_score": 1.900987247122454, "data-img": null, "mols2grid-id": 13, "data-smiles": "CCCCNC(=O)C1=C(O)NC(C)=C(C(=O)OCCO)C1C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-4.38", "data-solubility": -4.377464394599528, "data-similarity": 0.18055555555555555, "mols2grid-tooltip": "<strong>smiles</strong>: CCCCNC(=O)C1=C(O)NC(C)=C(C(=O)OCCO)C1C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -4.377464394599528<br><strong>similarity</strong>: 0.18055555555555555<br><strong>molecular_weight</strong>: 408.88200000000006<br><strong>scs_score</strong>: 1.900987247122454"}, {"data-molecular_weight": 313.832, "data-scs_score": 2.1058692633551797, "data-img": null, "mols2grid-id": 14, "data-smiles": "CN(C)CCN1C2=CC=CC=C2N=C1CC1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-4.94", "data-solubility": -4.937389701533191, "data-similarity": 0.18032786885245902, "mols2grid-tooltip": "<strong>smiles</strong>: CN(C)CCN1C2=CC=CC=C2N=C1CC1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -4.937389701533191<br><strong>similarity</strong>: 0.18032786885245902<br><strong>molecular_weight</strong>: 313.832<br><strong>scs_score</strong>: 2.1058692633551797"}, {"data-molecular_weight": 453.94800000000015, "data-scs_score": 1.8688811709192956, "data-img": null, "mols2grid-id": 15, "data-smiles": "CCCC(NC(=O)C1CCCCN1S(=O)(=O)C1=CC=C(Cl)C=C1)C(=O)C1=NC=CO1", "data-text": "Solubility (log(mol/L))=-5.12", "data-solubility": -5.123774962203725, "data-similarity": 0.17721518987341772, "mols2grid-tooltip": "<strong>smiles</strong>: CCCC(NC(=O)C1CCCCN1S(=O)(=O)C1=CC=C(Cl)C=C1)C(=O)C1=NC=CO1<br><strong>solubility</strong>: -5.123774962203725<br><strong>similarity</strong>: 0.17721518987341772<br><strong>molecular_weight</strong>: 453.94800000000015<br><strong>scs_score</strong>: 1.8688811709192956"}, {"data-molecular_weight": 269.735, "data-scs_score": 2.8656390403816907, "data-img": null, "mols2grid-id": 16, "data-smiles": "ClC1=CC=C(C(C2=CC=CN=C2)N2C=CN=C2)C=C1", "data-text": "Solubility (log(mol/L))=-4.54", "data-solubility": -4.540993733415233, "data-similarity": 0.17543859649122806, "mols2grid-tooltip": "<strong>smiles</strong>: ClC1=CC=C(C(C2=CC=CN=C2)N2C=CN=C2)C=C1<br><strong>solubility</strong>: -4.540993733415233<br><strong>similarity</strong>: 0.17543859649122806<br><strong>molecular_weight</strong>: 269.735<br><strong>scs_score</strong>: 2.8656390403816907"}, {"data-molecular_weight": 422.52900000000017, "data-scs_score": 1.4954580772033341, "data-img": null, "mols2grid-id": 17, "data-smiles": "CCNC(=O)C1=C(C)NC2=C(C(=O)CCC2)C1C1=CC=C(NC(=O)N2CCCC2)C=C1", "data-text": "Solubility (log(mol/L))=-5.14", "data-solubility": -5.137305038438922, "data-similarity": 0.17333333333333334, "mols2grid-tooltip": "<strong>smiles</strong>: CCNC(=O)C1=C(C)NC2=C(C(=O)CCC2)C1C1=CC=C(NC(=O)N2CCCC2)C=C1<br><strong>solubility</strong>: -5.137305038438922<br><strong>similarity</strong>: 0.17333333333333334<br><strong>molecular_weight</strong>: 422.52900000000017<br><strong>scs_score</strong>: 1.4954580772033341"}, {"data-molecular_weight": 308.51200000000006, "data-scs_score": 3.48695276210303, "data-img": null, "mols2grid-id": 18, "data-smiles": "CSC(=O)C1C(C2=CC=CC=C2)C(C)(C)CSC1(C)C", "data-text": "Solubility (log(mol/L))=-5.48", "data-solubility": -5.480728760490115, "data-similarity": 0.1694915254237288, "mols2grid-tooltip": "<strong>smiles</strong>: CSC(=O)C1C(C2=CC=CC=C2)C(C)(C)CSC1(C)C<br><strong>solubility</strong>: -5.480728760490115<br><strong>similarity</strong>: 0.1694915254237288<br><strong>molecular_weight</strong>: 308.51200000000006<br><strong>scs_score</strong>: 3.48695276210303"}, {"data-molecular_weight": 335.363, "data-scs_score": 2.135075974928154, "data-img": null, "mols2grid-id": 19, "data-smiles": "O=CCNC(=O)C1=CC=C(NC(=O)CC2=CNC3=CC=CC=C23)C=C1", "data-text": "Solubility (log(mol/L))=-3.88", "data-solubility": -3.8812662759344994, "data-similarity": 0.16666666666666666, "mols2grid-tooltip": "<strong>smiles</strong>: O=CCNC(=O)C1=CC=C(NC(=O)CC2=CNC3=CC=CC=C23)C=C1<br><strong>solubility</strong>: -3.8812662759344994<br><strong>similarity</strong>: 0.16666666666666666<br><strong>molecular_weight</strong>: 335.363<br><strong>scs_score</strong>: 2.135075974928154"}, {"data-molecular_weight": 310.184, "data-scs_score": 2.8828865768833136, "data-img": null, "mols2grid-id": 20, "data-smiles": "NCC1=CC(C(=O)NCC2=C(Cl)C=CC=C2Cl)=CC=N1", "data-text": "Solubility (log(mol/L))=-4.09", "data-solubility": -4.091956166749038, "data-similarity": 0.16393442622950818, "mols2grid-tooltip": "<strong>smiles</strong>: NCC1=CC(C(=O)NCC2=C(Cl)C=CC=C2Cl)=CC=N1<br><strong>solubility</strong>: -4.091956166749038<br><strong>similarity</strong>: 0.16393442622950818<br><strong>molecular_weight</strong>: 310.184<br><strong>scs_score</strong>: 2.8828865768833136"}, {"data-molecular_weight": 548.9190000000001, "data-scs_score": 2.7035094618237663, "data-img": null, "mols2grid-id": 21, "data-smiles": "COC(=O)C1=C(C)NC2=C(C(SCCCOC3=CC=C(Cl)C=C3Cl)=CC=C2)C1C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-9.65", "data-solubility": -9.65180062161164, "data-similarity": 0.1625, "mols2grid-tooltip": "<strong>smiles</strong>: COC(=O)C1=C(C)NC2=C(C(SCCCOC3=CC=C(Cl)C=C3Cl)=CC=C2)C1C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -9.65180062161164<br><strong>similarity</strong>: 0.1625<br><strong>molecular_weight</strong>: 548.9190000000001<br><strong>scs_score</strong>: 2.7035094618237663"}, {"data-molecular_weight": 451.50400000000025, "data-scs_score": 2.8145715892239687, "data-img": null, "mols2grid-id": 22, "data-smiles": "COC(=O)C1=CC=C(C(=O)NC(=S)NC2=CC=C(OCCC3=CC=CNC3=O)C=C2)C=C1", "data-text": "Solubility (log(mol/L))=-5.10", "data-solubility": -5.098711544604153, "data-similarity": 0.16216216216216217, "mols2grid-tooltip": "<strong>smiles</strong>: COC(=O)C1=CC=C(C(=O)NC(=S)NC2=CC=C(OCCC3=CC=CNC3=O)C=C2)C=C1<br><strong>solubility</strong>: -5.098711544604153<br><strong>similarity</strong>: 0.16216216216216217<br><strong>molecular_weight</strong>: 451.50400000000025<br><strong>scs_score</strong>: 2.8145715892239687"}, {"data-molecular_weight": 381.54900000000026, "data-scs_score": 1.392872424975769, "data-img": null, "mols2grid-id": 23, "data-smiles": "CC1=CC=C(NC(=S)N(C2=CC=C(C(=N)N)C=C2)C2CCN(C)CC2)C=C1", "data-text": "Solubility (log(mol/L))=-5.09", "data-solubility": -5.090685821835138, "data-similarity": 0.16176470588235295, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=CC=C(NC(=S)N(C2=CC=C(C(=N)N)C=C2)C2CCN(C)CC2)C=C1<br><strong>solubility</strong>: -5.090685821835138<br><strong>similarity</strong>: 0.16176470588235295<br><strong>molecular_weight</strong>: 381.54900000000026<br><strong>scs_score</strong>: 1.392872424975769"}, {"data-molecular_weight": 498.64900000000017, "data-scs_score": 1.4233404069241005, "data-img": null, "mols2grid-id": 24, "data-smiles": "O=C(CN1CCN(SCC(=O)NC(C2=CC=CC=C2)C2=CC=CS2)CC1)NC1=CC=C(F)C=C1", "data-text": "Solubility (log(mol/L))=-6.18", "data-solubility": -6.183549949031088, "data-similarity": 0.15584415584415584, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CN1CCN(SCC(=O)NC(C2=CC=CC=C2)C2=CC=CS2)CC1)NC1=CC=C(F)C=C1<br><strong>solubility</strong>: -6.183549949031088<br><strong>similarity</strong>: 0.15584415584415584<br><strong>molecular_weight</strong>: 498.64900000000017<br><strong>scs_score</strong>: 1.4233404069241005"}, {"data-molecular_weight": 440.54700000000025, "data-scs_score": 1.5835149970655826, "data-img": null, "mols2grid-id": 25, "data-smiles": "COC1=CC=C(C2=CC=CC3=C2C=NN3CC(=O)NC2=CC=C(N3CCCCC3)C=C2)C=C1", "data-text": "Solubility (log(mol/L))=-6.86", "data-solubility": -6.864262557382971, "data-similarity": 0.15384615384615385, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC=C(C2=CC=CC3=C2C=NN3CC(=O)NC2=CC=C(N3CCCCC3)C=C2)C=C1<br><strong>solubility</strong>: -6.864262557382971<br><strong>similarity</strong>: 0.15384615384615385<br><strong>molecular_weight</strong>: 440.54700000000025<br><strong>scs_score</strong>: 1.5835149970655826"}, {"data-molecular_weight": 527.0200000000002, "data-scs_score": 1.9809969406250802, "data-img": null, "mols2grid-id": 26, "data-smiles": "CCN(CC)C(=O)C1=C(C)NC2=C(C(=O)C3=CC4=CC=C(OC)C=C4C=C=C3C2=O)C1C1=CC=C(Cl)C=C1", "data-text": "Solubility (log(mol/L))=-7.21", "data-solubility": -7.212878950451893, "data-similarity": 0.1511627906976744, "mols2grid-tooltip": "<strong>smiles</strong>: CCN(CC)C(=O)C1=C(C)NC2=C(C(=O)C3=CC4=CC=C(OC)C=C4C=C=C3C2=O)C1C1=CC=C(Cl)C=C1<br><strong>solubility</strong>: -7.212878950451893<br><strong>similarity</strong>: 0.1511627906976744<br><strong>molecular_weight</strong>: 527.0200000000002<br><strong>scs_score</strong>: 1.9809969406250802"}, {"data-molecular_weight": 304.34600000000006, "data-scs_score": 3.1381824923035064, "data-img": null, "mols2grid-id": 27, "data-smiles": "C=CCC(NC(C)=O)C(=O)NC(CC1=CC=CC=C1)C(=O)O", "data-text": "Solubility (log(mol/L))=-2.49", "data-solubility": -2.492489820614866, "data-similarity": 0.14516129032258066, "mols2grid-tooltip": "<strong>smiles</strong>: C=CCC(NC(C)=O)C(=O)NC(CC1=CC=CC=C1)C(=O)O<br><strong>solubility</strong>: -2.492489820614866<br><strong>similarity</strong>: 0.14516129032258066<br><strong>molecular_weight</strong>: 304.34600000000006<br><strong>scs_score</strong>: 3.1381824923035064"}, {"data-molecular_weight": 373.855, "data-scs_score": 2.3847229536235512, "data-img": null, "mols2grid-id": 28, "data-smiles": "CC1(C)CC(=O)C2=C(C1)NC1=C(C(=O)CCC1)C2C1=CC=C(Cl)C=C1F", "data-text": "Solubility (log(mol/L))=-5.88", "data-solubility": -5.878386790857247, "data-similarity": 0.14492753623188406, "mols2grid-tooltip": "<strong>smiles</strong>: CC1(C)CC(=O)C2=C(C1)NC1=C(C(=O)CCC1)C2C1=CC=C(Cl)C=C1F<br><strong>solubility</strong>: -5.878386790857247<br><strong>similarity</strong>: 0.14492753623188406<br><strong>molecular_weight</strong>: 373.855<br><strong>scs_score</strong>: 2.3847229536235512"}, {"data-molecular_weight": 269.25299999999993, "data-scs_score": 3.0173537734183653, "data-img": null, "mols2grid-id": 29, "data-smiles": "COC(=O)C1=CC=C(OCC(O)CN)C(C(=O)O)=C1", "data-text": "Solubility (log(mol/L))=-1.54", "data-solubility": -1.5369271929377528, "data-similarity": 0.14285714285714285, "mols2grid-tooltip": "<strong>smiles</strong>: COC(=O)C1=CC=C(OCC(O)CN)C(C(=O)O)=C1<br><strong>solubility</strong>: -1.5369271929377528<br><strong>similarity</strong>: 0.14285714285714285<br><strong>molecular_weight</strong>: 269.25299999999993<br><strong>scs_score</strong>: 3.0173537734183653"}, {"data-molecular_weight": 286.318, "data-scs_score": 3.6089333900125053, "data-img": null, "mols2grid-id": 30, "data-smiles": "CCSC=CC(=O)C=CC1=CC=CC(C(F)(F)F)=C1", "data-text": "Solubility (log(mol/L))=-5.13", "data-solubility": -5.12776464670116, "data-similarity": 0.14285714285714285, "mols2grid-tooltip": "<strong>smiles</strong>: CCSC=CC(=O)C=CC1=CC=CC(C(F)(F)F)=C1<br><strong>solubility</strong>: -5.12776464670116<br><strong>similarity</strong>: 0.14285714285714285<br><strong>molecular_weight</strong>: 286.318<br><strong>scs_score</strong>: 3.6089333900125053"}, {"data-molecular_weight": 454.5480000000002, "data-scs_score": 2.648617469876359, "data-img": null, "mols2grid-id": 31, "data-smiles": "CCOC(=O)C1=CC=C(CN2C(=O)CC(NC(=O)C3=CC=C(OC)C=C3)CCC2=S)C=C1", "data-text": "Solubility (log(mol/L))=-5.48", "data-solubility": -5.484372009804279, "data-similarity": 0.14102564102564102, "mols2grid-tooltip": "<strong>smiles</strong>: CCOC(=O)C1=CC=C(CN2C(=O)CC(NC(=O)C3=CC=C(OC)C=C3)CCC2=S)C=C1<br><strong>solubility</strong>: -5.484372009804279<br><strong>similarity</strong>: 0.14102564102564102<br><strong>molecular_weight</strong>: 454.5480000000002<br><strong>scs_score</strong>: 2.648617469876359"}, {"data-molecular_weight": 353.8970000000002, "data-scs_score": 2.550167233349127, "data-img": null, "mols2grid-id": 32, "data-smiles": "CC(C)(C1=C(C2=CC=C(Cl)C=C2)NC2=CC=CC=C21)N1CCNCC1", "data-text": "Solubility (log(mol/L))=-5.76", "data-solubility": -5.757729780194211, "data-similarity": 0.140625, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)(C1=C(C2=CC=C(Cl)C=C2)NC2=CC=CC=C21)N1CCNCC1<br><strong>solubility</strong>: -5.757729780194211<br><strong>similarity</strong>: 0.140625<br><strong>molecular_weight</strong>: 353.8970000000002<br><strong>scs_score</strong>: 2.550167233349127"}, {"data-molecular_weight": 367.40900000000016, "data-scs_score": 2.1906927098781424, "data-img": null, "mols2grid-id": 33, "data-smiles": "COC(=O)CN1C=CC(C2=NC(NC(C)=O)=CN2CC2=CC=C(C)C=C2)=N1", "data-text": "Solubility (log(mol/L))=-4.06", "data-solubility": -4.058106117942741, "data-similarity": 0.1388888888888889, "mols2grid-tooltip": "<strong>smiles</strong>: COC(=O)CN1C=CC(C2=NC(NC(C)=O)=CN2CC2=CC=C(C)C=C2)=N1<br><strong>solubility</strong>: -4.058106117942741<br><strong>similarity</strong>: 0.1388888888888889<br><strong>molecular_weight</strong>: 367.40900000000016<br><strong>scs_score</strong>: 2.1906927098781424"}, {"data-molecular_weight": 354.81900000000013, "data-scs_score": 2.5030730020003045, "data-img": null, "mols2grid-id": 34, "data-smiles": "NC1=C(S(=O)(=O)C2=CC=C(Cl)C=C2)C(N2CCOCC2)=NC=N1", "data-text": "Solubility (log(mol/L))=-3.32", "data-solubility": -3.322253887924651, "data-similarity": 0.13846153846153847, "mols2grid-tooltip": "<strong>smiles</strong>: NC1=C(S(=O)(=O)C2=CC=C(Cl)C=C2)C(N2CCOCC2)=NC=N1<br><strong>solubility</strong>: -3.322253887924651<br><strong>similarity</strong>: 0.13846153846153847<br><strong>molecular_weight</strong>: 354.81900000000013<br><strong>scs_score</strong>: 2.5030730020003045"}, {"data-molecular_weight": 387.39600000000024, "data-scs_score": 1.9551522752631714, "data-img": null, "mols2grid-id": 35, "data-smiles": "O=C(CN1C=NC=N1)NC1=CC=C(C(=O)NCC(=O)OCC2CCCO2)C=C1", "data-text": "Solubility (log(mol/L))=-2.71", "data-solubility": -2.7143535638796874, "data-similarity": 0.1375, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CN1C=NC=N1)NC1=CC=C(C(=O)NCC(=O)OCC2CCCO2)C=C1<br><strong>solubility</strong>: -2.7143535638796874<br><strong>similarity</strong>: 0.1375<br><strong>molecular_weight</strong>: 387.39600000000024<br><strong>scs_score</strong>: 1.9551522752631714"}, {"data-molecular_weight": 204.269, "data-scs_score": 3.9609541432812865, "data-img": null, "mols2grid-id": 36, "data-smiles": "CC(C)(C)C(=O)C=CC1=CC=C(O)C=C1", "data-text": "Solubility (log(mol/L))=-3.49", "data-solubility": -3.4936975785692366, "data-similarity": 0.13725490196078433, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)(C)C(=O)C=CC1=CC=C(O)C=C1<br><strong>solubility</strong>: -3.4936975785692366<br><strong>similarity</strong>: 0.13725490196078433<br><strong>molecular_weight</strong>: 204.269<br><strong>scs_score</strong>: 3.9609541432812865"}, {"data-molecular_weight": 293.79699999999997, "data-scs_score": 2.5088398659014013, "data-img": null, "mols2grid-id": 37, "data-smiles": "ClC1=CC=C(C2=C3CCCCC3=NC3=CC=CC=C32)C=C1", "data-text": "Solubility (log(mol/L))=-6.03", "data-solubility": -6.033494244060895, "data-similarity": 0.13559322033898305, "mols2grid-tooltip": "<strong>smiles</strong>: ClC1=CC=C(C2=C3CCCCC3=NC3=CC=CC=C32)C=C1<br><strong>solubility</strong>: -6.033494244060895<br><strong>similarity</strong>: 0.13559322033898305<br><strong>molecular_weight</strong>: 293.79699999999997<br><strong>scs_score</strong>: 2.5088398659014013"}, {"data-molecular_weight": 437.53300000000024, "data-scs_score": 2.205344732431304, "data-img": null, "mols2grid-id": 38, "data-smiles": "COCC(C)C(O)CC(CC(O)C(CC1=CC=CC=C1)NC(=O)OCC1CC1)C(=O)O", "data-text": "Solubility (log(mol/L))=-4.31", "data-solubility": -4.312683073674463, "data-similarity": 0.13333333333333333, "mols2grid-tooltip": "<strong>smiles</strong>: COCC(C)C(O)CC(CC(O)C(CC1=CC=CC=C1)NC(=O)OCC1CC1)C(=O)O<br><strong>solubility</strong>: -4.312683073674463<br><strong>similarity</strong>: 0.13333333333333333<br><strong>molecular_weight</strong>: 437.53300000000024<br><strong>scs_score</strong>: 2.205344732431304"}, {"data-molecular_weight": 510.45800000000014, "data-scs_score": 2.108131430565167, "data-img": null, "mols2grid-id": 39, "data-smiles": "CC(CC1=NC=CS1)NC(=O)C(CC1=CC=C(Br)C=C1)NC(=O)C(C)NC(=O)C(C)N", "data-text": "Solubility (log(mol/L))=-4.37", "data-solubility": -4.368026540461613, "data-similarity": 0.13333333333333333, "mols2grid-tooltip": "<strong>smiles</strong>: CC(CC1=NC=CS1)NC(=O)C(CC1=CC=C(Br)C=C1)NC(=O)C(C)NC(=O)C(C)N<br><strong>solubility</strong>: -4.368026540461613<br><strong>similarity</strong>: 0.13333333333333333<br><strong>molecular_weight</strong>: 510.45800000000014<br><strong>scs_score</strong>: 2.108131430565167"}, {"data-molecular_weight": 482.60500000000013, "data-scs_score": 2.6581559189818265, "data-img": null, "mols2grid-id": 40, "data-smiles": "CCOC1=CC=C(C2=CC=C(C(=O)NC(CC3=CC=CC=C3)C(=O)SC3=CC=CC=N3)C=C2)C=C1", "data-text": "Solubility (log(mol/L))=-7.50", "data-solubility": -7.499027053418646, "data-similarity": 0.13333333333333333, "mols2grid-tooltip": "<strong>smiles</strong>: CCOC1=CC=C(C2=CC=C(C(=O)NC(CC3=CC=CC=C3)C(=O)SC3=CC=CC=N3)C=C2)C=C1<br><strong>solubility</strong>: -7.499027053418646<br><strong>similarity</strong>: 0.13333333333333333<br><strong>molecular_weight</strong>: 482.60500000000013<br><strong>scs_score</strong>: 2.6581559189818265"}, {"data-molecular_weight": 437.52400000000017, "data-scs_score": 1.8540899807705076, "data-img": null, "mols2grid-id": 41, "data-smiles": "CC(C)NC(=O)C(CC1=CC=CC=C1)NC(=O)C1=CC=C2NC(=[N+](C)C)NC(=O)NC2=C1", "data-text": "Solubility (log(mol/L))=-4.05", "data-solubility": -4.052824123956103, "data-similarity": 0.13157894736842105, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)NC(=O)C(CC1=CC=CC=C1)NC(=O)C1=CC=C2NC(=[N+](C)C)NC(=O)NC2=C1<br><strong>solubility</strong>: -4.052824123956103<br><strong>similarity</strong>: 0.13157894736842105<br><strong>molecular_weight</strong>: 437.52400000000017<br><strong>scs_score</strong>: 1.8540899807705076"}, {"data-molecular_weight": 386.41200000000003, "data-scs_score": 2.2069327299322685, "data-img": null, "mols2grid-id": 42, "data-smiles": "CC1=CC(NC(=O)CNC(=O)CNC(=O)CCNC(=O)C2=CC=CC=C2)=NN1", "data-text": "Solubility (log(mol/L))=-2.22", "data-solubility": -2.2151264828159993, "data-similarity": 0.13043478260869565, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=CC(NC(=O)CNC(=O)CNC(=O)CCNC(=O)C2=CC=CC=C2)=NN1<br><strong>solubility</strong>: -2.2151264828159993<br><strong>similarity</strong>: 0.13043478260869565<br><strong>molecular_weight</strong>: 386.41200000000003<br><strong>scs_score</strong>: 2.2069327299322685"}, {"data-molecular_weight": 346.47500000000025, "data-scs_score": 2.0642173342893564, "data-img": null, "mols2grid-id": 43, "data-smiles": "CC(C)(CN)NC(=O)C(CC1=CC=CC=C1)NC(=O)CN1CCCC1", "data-text": "Solubility (log(mol/L))=-2.60", "data-solubility": -2.5969004833714355, "data-similarity": 0.12857142857142856, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)(CN)NC(=O)C(CC1=CC=CC=C1)NC(=O)CN1CCCC1<br><strong>solubility</strong>: -2.5969004833714355<br><strong>similarity</strong>: 0.12857142857142856<br><strong>molecular_weight</strong>: 346.47500000000025<br><strong>scs_score</strong>: 2.0642173342893564"}, {"data-molecular_weight": 567.1110000000002, "data-scs_score": 1.4818103420510178, "data-img": null, "mols2grid-id": 44, "data-smiles": "CN1C(=O)C(=CC2=CC=C(Cl)C=C2)C(=O)N2C=CC(S(=O)(=O)N3CCN(C4=CC=C(C(C)(C)C)C=C4)CC3)=C12", "data-text": "Solubility (log(mol/L))=-5.94", "data-solubility": -5.936041082413293, "data-similarity": 0.1282051282051282, "mols2grid-tooltip": "<strong>smiles</strong>: CN1C(=O)C(=CC2=CC=C(Cl)C=C2)C(=O)N2C=CC(S(=O)(=O)N3CCN(C4=CC=C(C(C)(C)C)C=C4)CC3)=C12<br><strong>solubility</strong>: -5.936041082413293<br><strong>similarity</strong>: 0.1282051282051282<br><strong>molecular_weight</strong>: 567.1110000000002<br><strong>scs_score</strong>: 1.4818103420510178"}, {"data-molecular_weight": 468.6420000000002, "data-scs_score": 1.1021145066500468, "data-img": null, "mols2grid-id": 45, "data-smiles": "CCCN(CC1=CC=C(F)C=C1)C(=O)C(C)NCC1CCN(C2=NC3=CC=CC=C3S2)CC1", "data-text": "Solubility (log(mol/L))=-6.76", "data-solubility": -6.7603416536863845, "data-similarity": 0.12790697674418605, "mols2grid-tooltip": "<strong>smiles</strong>: CCCN(CC1=CC=C(F)C=C1)C(=O)C(C)NCC1CCN(C2=NC3=CC=CC=C3S2)CC1<br><strong>solubility</strong>: -6.7603416536863845<br><strong>similarity</strong>: 0.12790697674418605<br><strong>molecular_weight</strong>: 468.6420000000002<br><strong>scs_score</strong>: 1.1021145066500468"}, {"data-molecular_weight": 305.33400000000006, "data-scs_score": 3.403193689831059, "data-img": null, "mols2grid-id": 46, "data-smiles": "CC=C(C=N)C(=O)NN=CC1=CC(OC)=C(OC)C(OC)=C1", "data-text": "Solubility (log(mol/L))=-3.15", "data-solubility": -3.154459205621719, "data-similarity": 0.12698412698412698, "mols2grid-tooltip": "<strong>smiles</strong>: CC=C(C=N)C(=O)NN=CC1=CC(OC)=C(OC)C(OC)=C1<br><strong>solubility</strong>: -3.154459205621719<br><strong>similarity</strong>: 0.12698412698412698<br><strong>molecular_weight</strong>: 305.33400000000006<br><strong>scs_score</strong>: 3.403193689831059"}, {"data-molecular_weight": 412.32700000000006, "data-scs_score": 2.506398840016298, "data-img": null, "mols2grid-id": 47, "data-smiles": "CCOC(=O)C1=CC2=CC(CC(C)C)=CC=C2N=C1C1=CC=C(Br)C=C1", "data-text": "Solubility (log(mol/L))=-7.19", "data-solubility": -7.190261423517304, "data-similarity": 0.1267605633802817, "mols2grid-tooltip": "<strong>smiles</strong>: CCOC(=O)C1=CC2=CC(CC(C)C)=CC=C2N=C1C1=CC=C(Br)C=C1<br><strong>solubility</strong>: -7.190261423517304<br><strong>similarity</strong>: 0.1267605633802817<br><strong>molecular_weight</strong>: 412.32700000000006<br><strong>scs_score</strong>: 2.506398840016298"}, {"data-molecular_weight": 612.6800000000003, "data-scs_score": 1.0011068946097008, "data-img": null, "mols2grid-id": 48, "data-smiles": "CCCC(CCO)C(=O)NC(CC1=CC=C(OC(=O)N2CCC(NC(=O)NC3=CC=C4OCCOC4=C3)CC2)C=C1)C(=O)O", "data-text": "Solubility (log(mol/L))=-6.20", "data-solubility": -6.20453575383966, "data-similarity": 0.12631578947368421, "mols2grid-tooltip": "<strong>smiles</strong>: CCCC(CCO)C(=O)NC(CC1=CC=C(OC(=O)N2CCC(NC(=O)NC3=CC=C4OCCOC4=C3)CC2)C=C1)C(=O)O<br><strong>solubility</strong>: -6.20453575383966<br><strong>similarity</strong>: 0.12631578947368421<br><strong>molecular_weight</strong>: 612.6800000000003<br><strong>scs_score</strong>: 1.0011068946097008"}, {"data-molecular_weight": 269.348, "data-scs_score": 2.4245973902281417, "data-img": null, "mols2grid-id": 49, "data-smiles": "CC(=O)N(CCCC1=CC=CC=C1)CC1=NC=NC=C1", "data-text": "Solubility (log(mol/L))=-3.58", "data-solubility": -3.5782261514042855, "data-similarity": 0.125, "mols2grid-tooltip": "<strong>smiles</strong>: CC(=O)N(CCCC1=CC=CC=C1)CC1=NC=NC=C1<br><strong>solubility</strong>: -3.5782261514042855<br><strong>similarity</strong>: 0.125<br><strong>molecular_weight</strong>: 269.348<br><strong>scs_score</strong>: 2.4245973902281417"}, {"data-molecular_weight": 503.5000000000002, "data-scs_score": 1.2707046390819137, "data-img": null, "mols2grid-id": 50, "data-smiles": "CN1CCCN(C2=NN=C(SCC(C)(C)NCC(O)COC3=CC=C(Cl)C=C3Cl)N2)CC1", "data-text": "Solubility (log(mol/L))=-5.52", "data-solubility": -5.519830731723583, "data-similarity": 0.125, "mols2grid-tooltip": "<strong>smiles</strong>: CN1CCCN(C2=NN=C(SCC(C)(C)NCC(O)COC3=CC=C(Cl)C=C3Cl)N2)CC1<br><strong>solubility</strong>: -5.519830731723583<br><strong>similarity</strong>: 0.125<br><strong>molecular_weight</strong>: 503.5000000000002<br><strong>scs_score</strong>: 1.2707046390819137"}, {"data-molecular_weight": 440.72900000000004, "data-scs_score": 1.5911712531540907, "data-img": null, "mols2grid-id": 51, "data-smiles": "O=C(CN(CCCN=CC1=CN=CC=N1)CC1=CC=C(Cl)C(Br)=C1)NO", "data-text": "Solubility (log(mol/L))=-4.83", "data-solubility": -4.828655188122672, "data-similarity": 0.125, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CN(CCCN=CC1=CN=CC=N1)CC1=CC=C(Cl)C(Br)=C1)NO<br><strong>solubility</strong>: -4.828655188122672<br><strong>similarity</strong>: 0.125<br><strong>molecular_weight</strong>: 440.72900000000004<br><strong>scs_score</strong>: 1.5911712531540907"}, {"data-molecular_weight": 354.45400000000006, "data-scs_score": 2.0137108526320278, "data-img": null, "mols2grid-id": 52, "data-smiles": "CC(=O)C1=CC=C(CN2CCC3=C(C2)N=C(N2CCN(C)CC2)O3)C=C1", "data-text": "Solubility (log(mol/L))=-3.87", "data-solubility": -3.8719003693551244, "data-similarity": 0.125, "mols2grid-tooltip": "<strong>smiles</strong>: CC(=O)C1=CC=C(CN2CCC3=C(C2)N=C(N2CCN(C)CC2)O3)C=C1<br><strong>solubility</strong>: -3.8719003693551244<br><strong>similarity</strong>: 0.125<br><strong>molecular_weight</strong>: 354.45400000000006<br><strong>scs_score</strong>: 2.0137108526320278"}, {"data-molecular_weight": 389.33700000000005, "data-scs_score": 2.8797844202111182, "data-img": null, "mols2grid-id": 53, "data-smiles": "O=C(CCCCCCCCC1=CC=C(Br)C=C1)NC1=CC=CC=N1", "data-text": "Solubility (log(mol/L))=-6.76", "data-solubility": -6.761503411046153, "data-similarity": 0.125, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CCCCCCCCC1=CC=C(Br)C=C1)NC1=CC=CC=N1<br><strong>solubility</strong>: -6.761503411046153<br><strong>similarity</strong>: 0.125<br><strong>molecular_weight</strong>: 389.33700000000005<br><strong>scs_score</strong>: 2.8797844202111182"}, {"data-molecular_weight": 628.633, "data-scs_score": 2.0270020214596656, "data-img": null, "mols2grid-id": 54, "data-smiles": "CCN(C(=O)C1=C(C)N(C(=O)NCC2=CC=CS2)C(C)=C(C(=O)OC(C)C)C1C1=CC=C(Br)C=C1)C1CCCC1", "data-text": "Solubility (log(mol/L))=-9.26", "data-solubility": -9.259625815687595, "data-similarity": 0.12359550561797752, "mols2grid-tooltip": "<strong>smiles</strong>: CCN(C(=O)C1=C(C)N(C(=O)NCC2=CC=CS2)C(C)=C(C(=O)OC(C)C)C1C1=CC=C(Br)C=C1)C1CCCC1<br><strong>solubility</strong>: -9.259625815687595<br><strong>similarity</strong>: 0.12359550561797752<br><strong>molecular_weight</strong>: 628.633<br><strong>scs_score</strong>: 2.0270020214596656"}, {"data-molecular_weight": 383.5870000000001, "data-scs_score": 2.569504790255171, "data-img": null, "mols2grid-id": 55, "data-smiles": "CSC(N=CO)NCCN=C(S)NCC(C1=CC=C(C)C=C1)N(C)C", "data-text": "Solubility (log(mol/L))=-4.05", "data-solubility": -4.046175277247591, "data-similarity": 0.12162162162162163, "mols2grid-tooltip": "<strong>smiles</strong>: CSC(N=CO)NCCN=C(S)NCC(C1=CC=C(C)C=C1)N(C)C<br><strong>solubility</strong>: -4.046175277247591<br><strong>similarity</strong>: 0.12162162162162163<br><strong>molecular_weight</strong>: 383.5870000000001<br><strong>scs_score</strong>: 2.569504790255171"}, {"data-molecular_weight": 300.32899999999995, "data-scs_score": 2.740460748982426, "data-img": null, "mols2grid-id": 56, "data-smiles": "CCC=CC1=CC=C(OCC2=CC=C(F)C(C(=O)O)=C2)C=C1", "data-text": "Solubility (log(mol/L))=-5.29", "data-solubility": -5.2938110708469095, "data-similarity": 0.11940298507462686, "mols2grid-tooltip": "<strong>smiles</strong>: CCC=CC1=CC=C(OCC2=CC=C(F)C(C(=O)O)=C2)C=C1<br><strong>solubility</strong>: -5.2938110708469095<br><strong>similarity</strong>: 0.11940298507462686<br><strong>molecular_weight</strong>: 300.32899999999995<br><strong>scs_score</strong>: 2.740460748982426"}, {"data-molecular_weight": 477.6220000000002, "data-scs_score": 2.2519067145590146, "data-img": null, "mols2grid-id": 57, "data-smiles": "CC(C)CC(CC1=CC=C(F)C=C1)C(=O)NC(CC=C[N+]1=CSC(O)=C1)C(=O)OC(C)(C)C", "data-text": "Solubility (log(mol/L))=-6.32", "data-solubility": -6.322504477137137, "data-similarity": 0.11764705882352941, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)CC(CC1=CC=C(F)C=C1)C(=O)NC(CC=C[N+]1=CSC(O)=C1)C(=O)OC(C)(C)C<br><strong>solubility</strong>: -6.322504477137137<br><strong>similarity</strong>: 0.11764705882352941<br><strong>molecular_weight</strong>: 477.6220000000002<br><strong>scs_score</strong>: 2.2519067145590146"}, {"data-molecular_weight": 344.43400000000014, "data-scs_score": 1.975947253505579, "data-img": null, "mols2grid-id": 58, "data-smiles": "CC1=NN(CC2=CC=C(F)C=C2)C(C)=C1CC(=O)N1CCN(C)CC1", "data-text": "Solubility (log(mol/L))=-3.68", "data-solubility": -3.6767751751607425, "data-similarity": 0.11594202898550725, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=NN(CC2=CC=C(F)C=C2)C(C)=C1CC(=O)N1CCN(C)CC1<br><strong>solubility</strong>: -3.6767751751607425<br><strong>similarity</strong>: 0.11594202898550725<br><strong>molecular_weight</strong>: 344.43400000000014<br><strong>scs_score</strong>: 1.975947253505579"}, {"data-molecular_weight": 474.5160000000002, "data-scs_score": 1.3864755634760737, "data-img": null, "mols2grid-id": 59, "data-smiles": "O=C(NC1=CC=C2OCOC2=C1)C1=C=C2C(=O)NC3=CC=C(CCC4=CC=CC=C4)C=C3C2=CC=C1", "data-text": "Solubility (log(mol/L))=-5.60", "data-solubility": -5.595228538349717, "data-similarity": 0.11494252873563218, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(NC1=CC=C2OCOC2=C1)C1=C=C2C(=O)NC3=CC=C(CCC4=CC=CC=C4)C=C3C2=CC=C1<br><strong>solubility</strong>: -5.595228538349717<br><strong>similarity</strong>: 0.11494252873563218<br><strong>molecular_weight</strong>: 474.5160000000002<br><strong>scs_score</strong>: 1.3864755634760737"}, {"data-molecular_weight": 428.48900000000026, "data-scs_score": 1.6737379919793849, "data-img": null, "mols2grid-id": 60, "data-smiles": "CC1=NNC(C(=O)NC(CC2=CC=C(OCC(=O)N3CCCCCC3)C=C2)C(=O)O)=C1", "data-text": "Solubility (log(mol/L))=-4.12", "data-solubility": -4.124288807313468, "data-similarity": 0.11392405063291139, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=NNC(C(=O)NC(CC2=CC=C(OCC(=O)N3CCCCCC3)C=C2)C(=O)O)=C1<br><strong>solubility</strong>: -4.124288807313468<br><strong>similarity</strong>: 0.11392405063291139<br><strong>molecular_weight</strong>: 428.48900000000026<br><strong>scs_score</strong>: 1.6737379919793849"}, {"data-molecular_weight": 570.7750000000004, "data-scs_score": 1.1895193966793842, "data-img": null, "mols2grid-id": 61, "data-smiles": "CC(C)CC(NC(=O)CCCCCC1CCCN1CC(=O)N1CCCCC1)C(=O)NC(CC1=CC=CC=C1)C(=O)O", "data-text": "Solubility (log(mol/L))=-6.31", "data-solubility": -6.307303210804699, "data-similarity": 0.11363636363636363, "mols2grid-tooltip": "<strong>smiles</strong>: CC(C)CC(NC(=O)CCCCCC1CCCN1CC(=O)N1CCCCC1)C(=O)NC(CC1=CC=CC=C1)C(=O)O<br><strong>solubility</strong>: -6.307303210804699<br><strong>similarity</strong>: 0.11363636363636363<br><strong>molecular_weight</strong>: 570.7750000000004<br><strong>scs_score</strong>: 1.1895193966793842"}, {"data-molecular_weight": 403.49, "data-scs_score": 1.0949257129504772, "data-img": null, "mols2grid-id": 62, "data-smiles": "CC1=CC=C(C2=NC3=C(N2)N(CC2CCNC2)CC(C(=O)NC2=CNC=N2)=C3)C=C1", "data-text": "Solubility (log(mol/L))=-4.52", "data-solubility": -4.516052277234645, "data-similarity": 0.11363636363636363, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=CC=C(C2=NC3=C(N2)N(CC2CCNC2)CC(C(=O)NC2=CNC=N2)=C3)C=C1<br><strong>solubility</strong>: -4.516052277234645<br><strong>similarity</strong>: 0.11363636363636363<br><strong>molecular_weight</strong>: 403.49<br><strong>scs_score</strong>: 1.0949257129504772"}, {"data-molecular_weight": 416.3590000000001, "data-scs_score": 2.5904584717684935, "data-img": null, "mols2grid-id": 63, "data-smiles": "C=C(CCCCCCCC1=CC=C(O)C=C1)NC(=O)C1=CC=C(Br)C=C1", "data-text": "Solubility (log(mol/L))=-7.09", "data-solubility": -7.091077112257947, "data-similarity": 0.1111111111111111, "mols2grid-tooltip": "<strong>smiles</strong>: C=C(CCCCCCCC1=CC=C(O)C=C1)NC(=O)C1=CC=C(Br)C=C1<br><strong>solubility</strong>: -7.091077112257947<br><strong>similarity</strong>: 0.1111111111111111<br><strong>molecular_weight</strong>: 416.3590000000001<br><strong>scs_score</strong>: 2.5904584717684935"}, {"data-molecular_weight": 446.59500000000014, "data-scs_score": 2.3541013583397596, "data-img": null, "mols2grid-id": 64, "data-smiles": "CC1=C(C#N)C(C2=CC=C(C(=O)NCC3=CCCCC3)C=C2)C(C(=O)NC(C)(C)C)=C(C)N1", "data-text": "Solubility (log(mol/L))=-6.16", "data-solubility": -6.156953631640952, "data-similarity": 0.1111111111111111, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=C(C#N)C(C2=CC=C(C(=O)NCC3=CCCCC3)C=C2)C(C(=O)NC(C)(C)C)=C(C)N1<br><strong>solubility</strong>: -6.156953631640952<br><strong>similarity</strong>: 0.1111111111111111<br><strong>molecular_weight</strong>: 446.59500000000014<br><strong>scs_score</strong>: 2.3541013583397596"}, {"data-molecular_weight": 459.53700000000015, "data-scs_score": 1.2874242454791518, "data-img": null, "mols2grid-id": 65, "data-smiles": "O=C(CN1CCOCC1)NCC1CCN(CC2=CC=C(OC3=CC=C(F)C=C3F)C=C2)CC1", "data-text": "Solubility (log(mol/L))=-5.44", "data-solubility": -5.440171893334341, "data-similarity": 0.1111111111111111, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CN1CCOCC1)NCC1CCN(CC2=CC=C(OC3=CC=C(F)C=C3F)C=C2)CC1<br><strong>solubility</strong>: -5.440171893334341<br><strong>similarity</strong>: 0.1111111111111111<br><strong>molecular_weight</strong>: 459.53700000000015<br><strong>scs_score</strong>: 1.2874242454791518"}, {"data-molecular_weight": 324.3110000000001, "data-scs_score": 2.993876314730506, "data-img": null, "mols2grid-id": 66, "data-smiles": "N#CC(=CC1=CC=C(F)C=C1)C(=O)NCC1=CC=C2OCOC2=C1", "data-text": "Solubility (log(mol/L))=-4.14", "data-solubility": -4.143270014795728, "data-similarity": 0.1111111111111111, "mols2grid-tooltip": "<strong>smiles</strong>: N#CC(=CC1=CC=C(F)C=C1)C(=O)NCC1=CC=C2OCOC2=C1<br><strong>solubility</strong>: -4.143270014795728<br><strong>similarity</strong>: 0.1111111111111111<br><strong>molecular_weight</strong>: 324.3110000000001<br><strong>scs_score</strong>: 2.993876314730506"}, {"data-molecular_weight": 453.5670000000001, "data-scs_score": 2.359342452466284, "data-img": null, "mols2grid-id": 67, "data-smiles": "COC1=CC=C(S(=O)(=O)N(C)C2=CC=C(S(=O)(=O)NCC3=CSC=N3)C=C2)C=C1", "data-text": "Solubility (log(mol/L))=-4.78", "data-solubility": -4.781918658816503, "data-similarity": 0.1111111111111111, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC=C(S(=O)(=O)N(C)C2=CC=C(S(=O)(=O)NCC3=CSC=N3)C=C2)C=C1<br><strong>solubility</strong>: -4.781918658816503<br><strong>similarity</strong>: 0.1111111111111111<br><strong>molecular_weight</strong>: 453.5670000000001<br><strong>scs_score</strong>: 2.359342452466284"}, {"data-molecular_weight": 538.6300000000002, "data-scs_score": 1.3014907445177184, "data-img": null, "mols2grid-id": 68, "data-smiles": "CCCCC(NC(=O)C1=CSC(N2C=CN=C2)=N1)C(=O)OCC(=O)N1CCN(C(=O)C2=CC=CC=C2)CC1", "data-text": "Solubility (log(mol/L))=-5.04", "data-solubility": -5.0372226136564215, "data-similarity": 0.10989010989010989, "mols2grid-tooltip": "<strong>smiles</strong>: CCCCC(NC(=O)C1=CSC(N2C=CN=C2)=N1)C(=O)OCC(=O)N1CCN(C(=O)C2=CC=CC=C2)CC1<br><strong>solubility</strong>: -5.0372226136564215<br><strong>similarity</strong>: 0.10989010989010989<br><strong>molecular_weight</strong>: 538.6300000000002<br><strong>scs_score</strong>: 1.3014907445177184"}, {"data-molecular_weight": 402.43200000000013, "data-scs_score": 2.6263545349687316, "data-img": null, "mols2grid-id": 69, "data-smiles": "COC1=CC(CC(CC(=O)C2=CC=CS2)C(=O)O)=CC=C1OCC1=NN=NN1", "data-text": "Solubility (log(mol/L))=-4.36", "data-solubility": -4.36361634176812, "data-similarity": 0.10975609756097561, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC(CC(CC(=O)C2=CC=CS2)C(=O)O)=CC=C1OCC1=NN=NN1<br><strong>solubility</strong>: -4.36361634176812<br><strong>similarity</strong>: 0.10975609756097561<br><strong>molecular_weight</strong>: 402.43200000000013<br><strong>scs_score</strong>: 2.6263545349687316"}, {"data-molecular_weight": 391.46700000000016, "data-scs_score": 2.6434807687360227, "data-img": null, "mols2grid-id": 70, "data-smiles": "COC(=O)C1=CC=C(C2=CC=C(OC)C(OC3CCNCC3)=C2)C2=CC=CC=C12", "data-text": "Solubility (log(mol/L))=-5.83", "data-solubility": -5.833513070969551, "data-similarity": 0.1095890410958904, "mols2grid-tooltip": "<strong>smiles</strong>: COC(=O)C1=CC=C(C2=CC=C(OC)C(OC3CCNCC3)=C2)C2=CC=CC=C12<br><strong>solubility</strong>: -5.833513070969551<br><strong>similarity</strong>: 0.1095890410958904<br><strong>molecular_weight</strong>: 391.46700000000016<br><strong>scs_score</strong>: 2.6434807687360227"}, {"data-molecular_weight": 461.6090000000003, "data-scs_score": 1.7653274837905821, "data-img": null, "mols2grid-id": 71, "data-smiles": "C=[SH](=O)C(NC(=O)C1=CC=C(S(C)(=O)=O)C=C1)=C(N)C1=CC=C(N2CCCCC2)C=C1", "data-text": "Solubility (log(mol/L))=-4.43", "data-solubility": -4.425537815250555, "data-similarity": 0.1095890410958904, "mols2grid-tooltip": "<strong>smiles</strong>: C=[SH](=O)C(NC(=O)C1=CC=C(S(C)(=O)=O)C=C1)=C(N)C1=CC=C(N2CCCCC2)C=C1<br><strong>solubility</strong>: -4.425537815250555<br><strong>similarity</strong>: 0.1095890410958904<br><strong>molecular_weight</strong>: 461.6090000000003<br><strong>scs_score</strong>: 1.7653274837905821"}, {"data-molecular_weight": 244.25400000000002, "data-scs_score": 2.655074300202816, "data-img": null, "mols2grid-id": 72, "data-smiles": "O=C(C=CC1=CC=C(O)C=C1)NCC1=CNN=N1", "data-text": "Solubility (log(mol/L))=-2.22", "data-solubility": -2.223868056515583, "data-similarity": 0.109375, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(C=CC1=CC=C(O)C=C1)NCC1=CNN=N1<br><strong>solubility</strong>: -2.223868056515583<br><strong>similarity</strong>: 0.109375<br><strong>molecular_weight</strong>: 244.25400000000002<br><strong>scs_score</strong>: 2.655074300202816"}, {"data-molecular_weight": 247.38200000000003, "data-scs_score": 2.7321045133940345, "data-img": null, "mols2grid-id": 73, "data-smiles": "C=C(CCCCCCCC1=CC=C(O)C=C1)NC", "data-text": "Solubility (log(mol/L))=-4.46", "data-solubility": -4.458890143691376, "data-similarity": 0.10909090909090909, "mols2grid-tooltip": "<strong>smiles</strong>: C=C(CCCCCCCC1=CC=C(O)C=C1)NC<br><strong>solubility</strong>: -4.458890143691376<br><strong>similarity</strong>: 0.10909090909090909<br><strong>molecular_weight</strong>: 247.38200000000003<br><strong>scs_score</strong>: 2.7321045133940345"}, {"data-molecular_weight": 255.38299999999998, "data-scs_score": 3.2712648093525467, "data-img": null, "mols2grid-id": 74, "data-smiles": "CS(=O)(=O)NCCCCCCC1=CC=CC=C1", "data-text": "Solubility (log(mol/L))=-3.29", "data-solubility": -3.2852441949606788, "data-similarity": 0.10909090909090909, "mols2grid-tooltip": "<strong>smiles</strong>: CS(=O)(=O)NCCCCCCC1=CC=CC=C1<br><strong>solubility</strong>: -3.2852441949606788<br><strong>similarity</strong>: 0.10909090909090909<br><strong>molecular_weight</strong>: 255.38299999999998<br><strong>scs_score</strong>: 3.2712648093525467"}, {"data-molecular_weight": 382.3760000000001, "data-scs_score": 2.3671646899541137, "data-img": null, "mols2grid-id": 75, "data-smiles": "COC1=CC=C(C=CC(=O)NCC(C2=CC=C([N+](=O)[O-])O2)N2C=CC=N2)C=C1", "data-text": "Solubility (log(mol/L))=-4.57", "data-solubility": -4.5692512817812805, "data-similarity": 0.10843373493975904, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC=C(C=CC(=O)NCC(C2=CC=C([N+](=O)[O-])O2)N2C=CC=N2)C=C1<br><strong>solubility</strong>: -4.5692512817812805<br><strong>similarity</strong>: 0.10843373493975904<br><strong>molecular_weight</strong>: 382.3760000000001<br><strong>scs_score</strong>: 2.3671646899541137"}, {"data-molecular_weight": 447.3940000000002, "data-scs_score": 2.0576873145276613, "data-img": null, "mols2grid-id": 76, "data-smiles": "CCOC(=O)CC(NC(=O)C1=NC2=CC=C(O)C=C2N1)C(=O)OCC1=CC=C(F)C=C1F", "data-text": "Solubility (log(mol/L))=-4.61", "data-solubility": -4.606771172379003, "data-similarity": 0.10843373493975904, "mols2grid-tooltip": "<strong>smiles</strong>: CCOC(=O)CC(NC(=O)C1=NC2=CC=C(O)C=C2N1)C(=O)OCC1=CC=C(F)C=C1F<br><strong>solubility</strong>: -4.606771172379003<br><strong>similarity</strong>: 0.10843373493975904<br><strong>molecular_weight</strong>: 447.3940000000002<br><strong>scs_score</strong>: 2.0576873145276613"}, {"data-molecular_weight": 496.8190000000002, "data-scs_score": 1.2057648064283102, "data-img": null, "mols2grid-id": 77, "data-smiles": "NC1=CC=C(COC2=CC=C(C(=O)NCCOP(=O)(O)O)C=C2)C(C2=CC(F)=C(Cl)N=C2)=N1", "data-text": "Solubility (log(mol/L))=-5.40", "data-solubility": -5.403979571329778, "data-similarity": 0.10588235294117647, "mols2grid-tooltip": "<strong>smiles</strong>: NC1=CC=C(COC2=CC=C(C(=O)NCCOP(=O)(O)O)C=C2)C(C2=CC(F)=C(Cl)N=C2)=N1<br><strong>solubility</strong>: -5.403979571329778<br><strong>similarity</strong>: 0.10588235294117647<br><strong>molecular_weight</strong>: 496.8190000000002<br><strong>scs_score</strong>: 1.2057648064283102"}, {"data-molecular_weight": 311.41, "data-scs_score": 3.1695624309523796, "data-img": null, "mols2grid-id": 78, "data-smiles": "O=C(CSC1=NC2=CC=CC=C2N1)NCCC1=CC=CC=C1", "data-text": "Solubility (log(mol/L))=-4.30", "data-solubility": -4.303664959716194, "data-similarity": 0.1044776119402985, "mols2grid-tooltip": "<strong>smiles</strong>: O=C(CSC1=NC2=CC=CC=C2N1)NCCC1=CC=CC=C1<br><strong>solubility</strong>: -4.303664959716194<br><strong>similarity</strong>: 0.1044776119402985<br><strong>molecular_weight</strong>: 311.41<br><strong>scs_score</strong>: 3.1695624309523796"}, {"data-molecular_weight": 211.242, "data-scs_score": 3.419402823506749, "data-img": null, "mols2grid-id": 79, "data-smiles": "CCOC1=CC=C([SH](=O)=O)C=C1C#N", "data-text": "Solubility (log(mol/L))=-2.00", "data-solubility": -1.9959822594575742, "data-similarity": 0.10344827586206896, "mols2grid-tooltip": "<strong>smiles</strong>: CCOC1=CC=C([SH](=O)=O)C=C1C#N<br><strong>solubility</strong>: -1.9959822594575742<br><strong>similarity</strong>: 0.10344827586206896<br><strong>molecular_weight</strong>: 211.242<br><strong>scs_score</strong>: 3.419402823506749"}, {"data-molecular_weight": 372.50500000000005, "data-scs_score": 3.6070439397066116, "data-img": null, "mols2grid-id": 80, "data-smiles": "COOC(C)(C)C(O)CC(C1=CC=C(OCC2=CC=CC=C2)C=C1)C(C)C", "data-text": "Solubility (log(mol/L))=-6.15", "data-solubility": -6.14945334947492, "data-similarity": 0.10294117647058823, "mols2grid-tooltip": "<strong>smiles</strong>: COOC(C)(C)C(O)CC(C1=CC=C(OCC2=CC=CC=C2)C=C1)C(C)C<br><strong>solubility</strong>: -6.14945334947492<br><strong>similarity</strong>: 0.10294117647058823<br><strong>molecular_weight</strong>: 372.50500000000005<br><strong>scs_score</strong>: 3.6070439397066116"}, {"data-molecular_weight": 354.42499999999995, "data-scs_score": 2.789703286827643, "data-img": null, "mols2grid-id": 81, "data-smiles": "COC1=CC=C(N2C(=O)C(N3CCCC3)CC2C2=CC=C(F)C=C2)C=C1", "data-text": "Solubility (log(mol/L))=-5.07", "data-solubility": -5.066919315947816, "data-similarity": 0.10294117647058823, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC=C(N2C(=O)C(N3CCCC3)CC2C2=CC=C(F)C=C2)C=C1<br><strong>solubility</strong>: -5.066919315947816<br><strong>similarity</strong>: 0.10294117647058823<br><strong>molecular_weight</strong>: 354.42499999999995<br><strong>scs_score</strong>: 2.789703286827643"}, {"data-molecular_weight": 439.49700000000024, "data-scs_score": 1.634853959351528, "data-img": null, "mols2grid-id": 82, "data-smiles": "COC1=CC=C(C(=O)NN=C(SC2=CC=C3NC=NC3=C2)C2CCCN2C(=O)O)C=C1", "data-text": "Solubility (log(mol/L))=-5.47", "data-solubility": -5.467135049028173, "data-similarity": 0.10227272727272728, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC=C(C(=O)NN=C(SC2=CC=C3NC=NC3=C2)C2CCCN2C(=O)O)C=C1<br><strong>solubility</strong>: -5.467135049028173<br><strong>similarity</strong>: 0.10227272727272728<br><strong>molecular_weight</strong>: 439.49700000000024<br><strong>scs_score</strong>: 1.634853959351528"}, {"data-molecular_weight": 250.3849999999999, "data-scs_score": 3.4222529835812896, "data-img": null, "mols2grid-id": 83, "data-smiles": "C1=CC=C(C(C2=CC=CC=C2)C2CCCCC2)C=C1", "data-text": "Solubility (log(mol/L))=-5.66", "data-solubility": -5.657811093503515, "data-similarity": 0.10204081632653061, "mols2grid-tooltip": "<strong>smiles</strong>: C1=CC=C(C(C2=CC=CC=C2)C2CCCCC2)C=C1<br><strong>solubility</strong>: -5.657811093503515<br><strong>similarity</strong>: 0.10204081632653061<br><strong>molecular_weight</strong>: 250.3849999999999<br><strong>scs_score</strong>: 3.4222529835812896"}, {"data-molecular_weight": 268.31600000000003, "data-scs_score": 3.0964306785348548, "data-img": null, "mols2grid-id": 84, "data-smiles": "O=C1NCCN1CC1=CC=C(OC2=CC=CC=C2)C=C1", "data-text": "Solubility (log(mol/L))=-3.98", "data-solubility": -3.9834060262181707, "data-similarity": 0.1016949152542373, "mols2grid-tooltip": "<strong>smiles</strong>: O=C1NCCN1CC1=CC=C(OC2=CC=CC=C2)C=C1<br><strong>solubility</strong>: -3.9834060262181707<br><strong>similarity</strong>: 0.1016949152542373<br><strong>molecular_weight</strong>: 268.31600000000003<br><strong>scs_score</strong>: 3.0964306785348548"}, {"data-molecular_weight": 455.44000000000005, "data-scs_score": 1.7934071027871903, "data-img": null, "mols2grid-id": 85, "data-smiles": "CC1=CC=C2CCC(C(=O)NCCN3CCCCC3)C(C3=CC=C(Br)C=C3)C2=C1", "data-text": "Solubility (log(mol/L))=-6.66", "data-solubility": -6.6584987635187725, "data-similarity": 0.10126582278481013, "mols2grid-tooltip": "<strong>smiles</strong>: CC1=CC=C2CCC(C(=O)NCCN3CCCCC3)C(C3=CC=C(Br)C=C3)C2=C1<br><strong>solubility</strong>: -6.6584987635187725<br><strong>similarity</strong>: 0.10126582278481013<br><strong>molecular_weight</strong>: 455.44000000000005<br><strong>scs_score</strong>: 1.7934071027871903"}, {"data-molecular_weight": 510.58700000000033, "data-scs_score": 1.9121176957950066, "data-img": null, "mols2grid-id": 86, "data-smiles": "COC1=CC=C(CC(NC(C)=O)C(=O)NCCCCCCOC(=O)C=CC2=CC=C3OCOC3=C2)C=C1", "data-text": "Solubility (log(mol/L))=-5.73", "data-solubility": -5.730554647442604, "data-similarity": 0.10112359550561797, "mols2grid-tooltip": "<strong>smiles</strong>: COC1=CC=C(CC(NC(C)=O)C(=O)NCCCCCCOC(=O)C=CC2=CC=C3OCOC3=C2)C=C1<br><strong>solubility</strong>: -5.730554647442604<br><strong>similarity</strong>: 0.10112359550561797<br><strong>molecular_weight</strong>: 510.58700000000033<br><strong>scs_score</strong>: 1.9121176957950066"}]);\n", "// filter\n", "if (window.parent.mols2grid_lists === undefined) {\n", " window.parent.mols2grid_lists = {};\n", "}\n", "window.parent.mols2grid_lists["default"] = listObj;\n", "\n", "\n", "// selection\n", "class MolStorage extends Map {\n", " multi_set(_id, _smiles) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.set(_id[i], _smiles[i]);\n", " }\n", " }\n", " multi_del(_id) {\n", " for (let i=0; i < _id.length; i++) {\n", " this.delete(_id[i]);\n", " };\n", " }\n", " to_dict() {\n", " var content = "{";\n", " for (let [key, value] of this) {\n", " content += key + ":" + JSON.stringify(value) + ",";\n", " }\n", " content = content.length > 1 ? content.slice(0, -1) : content;\n", " content += "}";\n", " return content\n", " }\n", " download_smi(fileName) {\n", " var content = "SMILES index\\n";\n", " for (let [key, value] of this) {\n", " content += value + " " + key + "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/plain"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = fileName;\n", " a.click();\n", " a.remove();\n", " }\n", "}\n", "var SELECTION = new MolStorage();\n", "\n", "\n", "\n", "// kernel\n", "var kernel_env = null;\n", "if (window.parent.IPython !== undefined) {\n", " // Jupyter notebook\n", " kernel_env = "jupyter";\n", " var kernel = window.parent.IPython.notebook.kernel;\n", " kernel.execute('from mols2grid.select import register as _m2g_reg')\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " kernel.execute("_m2g_reg.add_selection('"+grid_id+"', "+JSON.stringify(_id)+","+JSON.stringify(smiles)+")");\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " kernel.execute("_m2g_reg.del_selection('"+grid_id+"', "+JSON.stringify(_id)+")");\n", " }\n", "} else if (window.parent.google !== undefined) {\n", " // Google colab\n", " kernel_env = "colab";\n", " var kernel = window.parent.google.colab.kernel;\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.add_selection',\n", " [grid_id, _id, smiles], {});\n", " })();\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " (async function() {\n", " const result = await kernel.invokeFunction('_m2g_reg.del_selection',\n", " [grid_id, _id], {});\n", " })();\n", " }\n", "} else {\n", " function add_selection(grid_id, _id, smiles) {\n", " SELECTION.multi_set(_id, smiles);\n", " }\n", " function del_selection(grid_id, _id) {\n", " SELECTION.multi_del(_id);\n", " }\n", "}\n", "\n", "\n", "\n", "\n", "// sort\n", "var sort_field = "mols2grid-id";\n", "var sort_order = "asc";\n", "function mols2gridSortFunction(itemA, itemB, options) {\n", " var x = itemA.values()[options.valueName];\n", " var y = itemB.values()[options.valueName];\n", " if (typeof x === "number") {\n", " if (isFinite(x - y)) {\n", " return x - y; \n", " } else {\n", " return isFinite(x) ? -1 : 1;\n", " }\n", " } else {\n", " x = x.toLowerCase();\n", " y = y.toLowerCase();\n", " return (x < y) ? -1: (x > y) ? 1: 0;\n", " }\n", "}\n", "function checkboxSort(itemA, itemB, options) {\n", " if (itemA.elm !== undefined) {\n", " var checkedA = itemA.elm.firstChild.checked;\n", " if (itemB.elm !== undefined) {\n", " var checkedB = itemB.elm.firstChild.checked;\n", " if (checkedA && !checkedB) {\n", " return -1;\n", " } else if (!checkedA && checkedB) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", " } else {\n", " return -1;\n", " }\n", " } else if (itemB.elm !== undefined) {\n", " return 1;\n", " } else {\n", " return 0;\n", " }\n", "}\n", "$('#mols2grid button.sort-btn').click(function(e) {\n", " var _field = $(this).attr("data-name");\n", " if (_field == sort_field) {\n", " $(this).removeClass("arrow-" + sort_order)\n", " sort_order = (sort_order === "desc") ? "asc" : "desc";\n", " } else {\n", " $('#mols2grid button.sort-btn.active').removeClass("active arrow-" + sort_order);\n", " sort_order = "asc";\n", " sort_field = _field;\n", " $(this).addClass("active");\n", " }\n", " $(this).addClass("arrow-" + sort_order)\n", " if (sort_field == "checkbox") {\n", " listObj.sort("mols2grid-id", {order: sort_order, sortFunction: checkboxSort});\n", " } else {\n", " listObj.sort(_field, {order: sort_order, sortFunction: mols2gridSortFunction});\n", " }\n", "});\n", "\n", "\n", "\n", "\n", "// tooltips\n", "$.fn.tooltip.Constructor.Default.whiteList.span = ['style']\n", "listObj.on("updated", function (list) {\n", " $(function () {\n", " // hide previous popovers\n", " $('#mols2grid a.page-link').click(function(e) {\n", " $('.mols2grid-tooltip[data-toggle="popover"]').popover('hide')\n", " });\n", " // create new popover\n", " $('.mols2grid-tooltip[data-toggle="popover"]').popover({\n", " placement: 'bottom',\n", " trigger: 'click hover',\n", " html: true,\n", " sanitize: false,\n", " });\n", " })\n", "});\n", "\n", "\n", "\n", "// selection modifyers and export options\n", "// check all\n", "$('#btn-chkbox-all').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = true;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " _smiles.push($($(this).siblings(".data-smiles")[0]).text());\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " add_selection("default", _id, _smiles);\n", "});\n", "// uncheck all\n", "$('#btn-chkbox-none').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox:checked").each(function() {\n", " this.checked = false;\n", " _id.push(parseInt($(this).closest(".cell").attr("data-mols2grid-id")));\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id);\n", "});\n", "// invert\n", "$('#btn-chkbox-invert').click(function (e) {\n", " var current_page = parseInt($("li.page-item.active > a").text());\n", " var n_items = 9;\n", " var last_page = parseInt($("li.page-item > a").last().text());\n", " var _id_add = [];\n", " var _id_del = [];\n", " var _smiles = [];\n", " for (let i = 0; i < last_page; i++) {\n", " listObj.show(i * n_items + 1, n_items);\n", " $("input:checkbox").each(function() {\n", " this.checked = !this.checked;\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " _id_add.push(_id);\n", " _smiles.push($(this).siblings(".data-smiles").first().text());\n", " } else {\n", " _id_del.push(_id);\n", " }\n", " });\n", " }\n", " listObj.show((current_page - 1) * n_items + 1, n_items);\n", " del_selection("default", _id_del);\n", " add_selection("default", _id_add, _smiles);\n", "});\n", "// copy to clipboard\n", "$("#btn-chkbox-copy").click(function(e) {\n", " navigator.clipboard.writeText(SELECTION.to_dict());\n", "});\n", "// export smiles\n", "$("#btn-chkbox-dlsmi").click(function(e) {\n", " SELECTION.download_smi("selection.smi");\n", "});\n", "// export CSV\n", "$("#btn-chkbox-dlcsv").click(function(e) {\n", " var sep = "\\t"\n", " // same order as subset + tooltip\n", " var columns = Array.from(listObj.items[0].elm.querySelectorAll("div.data"))\n", " .map(elm => elm.classList[1]);\n", " // remove 'data-'\n", " var header = columns.map(name => name.slice(5));\n", " // csv content\n", " header = ["index"].concat(header).join(sep);\n", " var content = header + "\\n";\n", " for (let [index, smiles] of SELECTION.entries()) {\n", " var data = listObj.items[index].values();\n", " content += index;\n", " columns.forEach((key) => {\n", " content += sep + data[key];\n", " })\n", " content += "\\n";\n", " }\n", " var a = document.createElement("a");\n", " var file = new Blob([content], {type: "text/csv"});\n", " a.href = URL.createObjectURL(file);\n", " a.download = "selection.csv";\n", " a.click();\n", " a.remove();\n", "});\n", "// update selection on checkbox click\n", "listObj.on("updated", function (list) {\n", " $("input:checkbox").change(function() {\n", " var _id = parseInt($(this).closest(".cell").attr("data-mols2grid-id"));\n", " if (this.checked) {\n", " var _smiles = $($(this).siblings(".data-smiles")[0]).text();\n", " add_selection("default", [_id], [_smiles]);\n", " } else {\n", " del_selection("default", [_id]);\n", " }\n", " }); \n", "});\n", "\n", "\n", "\n", "\n", "\n", "// generate images for the currently displayed molecules\n", "var draw_opts = {"width": 300, "height": 200};\n", "var json_draw_opts = JSON.stringify(draw_opts);\n", "\n", "var smarts_matches = {};\n", "\n", "// Load RDKit\n", "window\n", ".initRDKitModule()\n", ".then(function(RDKit) {\n", " console.log('RDKit version: ', RDKit.version());\n", " window.RDKit = RDKit;\n", " window.RDKitModule = RDKit;\n", "\n", " // search bar\n", " function SmartsSearch(query, columns) {\n", " var smiles_col = columns[0];\n", " smarts_matches = {};\n", " var query = $('#mols2grid #searchbar').val();\n", " var qmol = RDKit.get_qmol(query);\n", " if (qmol.is_valid()) {\n", " for (var k = 0, kl = listObj.items.length; k < kl; k++) {\n", " var item = listObj.items[k];\n", " var smiles = item.values()[smiles_col]\n", " var mol = RDKit.get_mol(smiles);\n", " if (mol.is_valid()) {\n", " var results = JSON.parse(mol.get_substruct_match(qmol));\n", " if (results.atoms) {\n", " item.found = true;\n", " \n", " smarts_matches[smiles] = results;\n", " \n", " } else {\n", " item.found = false;\n", " }\n", " } else {\n", " item.found = false;\n", " }\n", " mol.delete();\n", " }\n", " }\n", " qmol.delete();\n", "}\n", "var search_type = "Text";\n", "$('#mols2grid .search-btn').click(function() {\n", " search_type = $(this).text();\n", " $('#mols2grid button.search-btn.active').removeClass("active");\n", " $(this).addClass("active");\n", "});\n", "$('#mols2grid #searchbar').on("keyup", function(e) {\n", " var query = e.target.value;\n", " if (search_type === "Text") {\n", " smarts_matches = {};\n", " listObj.search(query, ['data-smiles', 'data-text', 'data-smiles', 'data-solubility', 'data-similarity', 'data-molecular_weight', 'data-scs_score']);\n", " } else {\n", " listObj.search(query, ["data-smiles"], SmartsSearch);\n", " }\n", "});\n", "\n", " \n", " // generate images for the currently displayed molecules\n", "RDKit.prefer_coordgen(true);\n", "function draw_mol(smiles) {\n", " var mol = RDKit.get_mol(smiles, '{"removeHs": false }');\n", " var svg = "";\n", " if (mol.is_valid()) {\n", " var highlights = smarts_matches[smiles];\n", " if (highlights) {\n", " var details = Object.assign({}, draw_opts, highlights);\n", " details = JSON.stringify(details);\n", " } else {\n", " var details = json_draw_opts;\n", " }\n", " svg = mol.get_svg_with_highlights(details);\n", " }\n", " mol.delete();\n", " if (svg == "") {\n", " return '<svg width="300" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 300 200"></svg>';\n", " }\n", " return svg;\n", "}\n", "listObj.on("updated", function (list) {\n", " var query = $('#mols2grid #searchbar').val();\n", " if (query === "") {\n", " smarts_matches = {};\n", " }\n", " $('#mols2grid .cell').each(function() {\n", " var $t = $(this);\n", " var smiles = $t.children(".data-smiles").first().text()\n", " var svg = draw_mol(smiles);\n", " $t.children(".data-img").html(svg);\n", " });\n", "});\n", " \n", "\n", " // trigger update to activate tooltips, draw images, setup callbacks...\n", " listObj.update();\n", " // resize iframe to fit content\n", " if (window.frameElement) {\n", " window.parent.fit_height(window.frameElement);\n", " }\n", "});\n", " </script>\n", " </body>\n", "</html>\">\n", "</iframe>" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_molecules_df(molecules_df=second_set_molecules_df, similarity_threshold=similarity_threshold)" ] }, { "cell_type": "code", "execution_count": 12, "id": "a3b63edb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x7f81bce3dbd0>" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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y+bEadsFdH1ax1Z5XI8WjYhrUL4+4lR+ESkHMrwgocERRkl4iaNHj3L99dfTvn17+vXrx6BBg5g5c6bf5FmyZEm1Yu20bduW48ePV92wGrz55pt069aNG264gfz8fEaOHElycjLTpk1zeoyzsOaVhSBv2LChx2SuivHjxzN9+nSf9RdMrNxruzaif9vGLiUWCgkRhnaKt6lbuiMwY7bVRoxNwgsopbj88su55ZZb+OKLLwDYt28fs2fP9mq/lYUNX7JkCQ0bNvRI9E5PMXnyZBYuXEhSUhK///47QFm8K0PtY3UFJdHE5WOHdU5gV1Z5rpWlO9J49IIuHpPN4JzarSSei/Hy+TMdVi9atIiIiAgmTJhQVtemTRvuv/9+AIqLi3niiSdYsmQJ+fn53Hvvvdx1110sWbKE5557jvj4eDZt2kS/fv347LPPEBHWrFnDI488QnZ2NvHx8UydOpXmzZszfPhwkpOTWbZsGddddx2dO3dm4sSJFBQUEBcXx+eff05ubi7vvvsuoaGhfPbZZ7z11lt07dqVCRMmsH//fkD7vQ8ZMoT09HSuu+46Dh48yKBBg3C02LK4uJjbb7+d1atXIyLcdtttPPzww+zatYsJEyaQlpZGaGgo33zzDU2bNuWyyy7j5MmTFBYWMnHiRC677DImTJjA7t27ueiii7jxxhv54IMPSEtLIzk5mRkzZrB3714ee+wxioqKOPPMM3nnnXcqhBh3JwT5ww8/zI8//kizZs346quvSEhI4IMPPuD999+noKCAjh078umnnxIVFcU333zD888/T2hoKDExMSxdutTpd6aU4v777+enn36iVatWRES4GDZiwHuutQtQ3nvPfflX7bFVEgPaua4khnZK4KW3fi3b3nAwkxOnC2jSwITp8DZmuskLbN68mb59+zrd/+GHHxITE8OqVatYtWoVH3zwAXv27AFg3bp1TJo0iS1btrB7925+++03CgsLuf/++5k+fTpr1qzhtttu429/+1vZ+QoKCli9ejWPPvooZ599Nr///jvr1q1j3LhxvPrqq7Rt25YJEybw8MMPk5KSwtChQ3nwwQd5+OGHWbVqFTNmzOCOO3QSwOeff56zzz6bzZs3c8UVV5QpEWtSUlI4ePAgmzZtYuPGjdx6660A3HDDDdx7772sX7+e5cuX07x5cyIjI5k5cyZr165l8eLF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", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "minimum_value = min(first_set_molecules_df[\"solubility\"].min(), second_set_molecules_df[\"solubility\"].min())\n", "sns.distplot(first_set_molecules_df[\"solubility\"], label=f\"{molecule_name}-based\", hist=False, kde_kws={\"linewidth\": 4})\n", "plt.axvline(x=first_set_molecules_df[\"solubility\"].mean(), linestyle=\"--\", c=\"lightblue\")\n", "sns.distplot(second_set_molecules_df[\"solubility\"], label=\"Generated scaffold-based\", hist=False, kde_kws={\"linewidth\": 4})\n", "plt.axvline(x=second_set_molecules_df[\"solubility\"].mean(), linestyle=\"--\", c=\"orange\")\n", "plt.axvline(x=solubility, linestyle=\"--\", c=\"k\")\n", "plt.xlabel(\"Solubility (log(mol/L))\", size=14)\n", "plt.ylabel(\"Density\", size=14)\n", "plt.xlim([min([first_set_molecules_df[\"solubility\"].min(), second_set_molecules_df[\"solubility\"].min(), solubility]), 0.0])\n", "plt.title(f\"Solubility using {molecule_name} as a reference\", size=14)\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 13, "id": "468f43e7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Analyzing the landscape of the generated molecules')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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GTOGM2fMoDlCzv5EytBefNll7D16NIccfjgbNmwA4L4HHmD8xInsO24cPzvpJBoabGGIJ59+mpH77ce+48Yx+ZBDYl4zYwznX3ghu48cyZQjjmhJ1asoipJpVMF//V/4z+VQtx7yiu37fy7vlJL/9LPPGBOSgjacBx58kKKiIhYvXMjihQu5b948vvnmGwA+WLaM22+5hc8+/JCV33zD2wsX4vV6ueDii3nq0Ud5/913OXP6dP7vt79t6c/j8bDknXe49OKLmXTQQbz75pt8sGgRJ594In+49VbKyso495xzuPiCC1i2eDEHT5rEhZdeysWzZrF44UKefuwxzj73XAB+d/31TDroID5dtoyfHnMM33333TbyL/vwQ9asWcMnH3zAx0uXcsbppwPwi+nTOe+Xv+TDJUtY+MYbDBo0iLy8PP755JMsfe89Xn/lFS69/HKMMdxz110tKXkvv+wy7r/nHg4+6CCWLV7MkCFDmH7OOTz+yCN8vHQpPp+Pv86d20aGRMrQ1tfXM27sWD5dtowfTJ7cUjb3+OOOY/HChXy4ZAl77rEHDzz4IABzbriB/7z4Ih8uWcLzTz8d85r987nn+PKrr/jsww95aN48Fr77bnu3h6IoSlpQE/27d4I7B7J72e/B93fvhF0PScouzps1i7cWLiQnJ4fFCxfyymuv8dHHH7fM1dbU1LB8xQpycnKYMG4cpaWlAIweNYpV335LcXExn3z6KYceeSRgR5ODdtyxpf+TTjih5XPlmjWc9ItfsO777/F4POxcVhZRptf+9782SnFrbS11dXUseOstnnn8cQB+cuSR9O3bd5ttd9l5Z1Z+8w0XXHQRP/nxjzns0EOpra1lzdq1/PTYYwGb2x7A6/Vy1TXXsOCtt3C5XKxZu5b169ezY4j84Xz51VfsXFbGbk664dNPOYW77rmHi2bNammTSBlal8vVco5OmTaN4086CYBPPv2Uq6+9lurqaurq6jj80EMBOOjAA5l+9tmcOHVqS7ndaNdswZtvMu2kk3C73QwePJgflZdHPS5FUZR0ogq++js7cg8lK98u7yB777UXTz/7bMv3u+64g40bNzLOqZVujOEvt93G4U751SAVb7zRUt4VnBKvPh/GGPbeay/eWbAg4v5CS8decPHFXDJrFsccfTQVb7zBtWHlW4MEAgHeffPNFkWcCH379uXD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", "text/plain": [ "<Figure size 576x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "fig, ax = plt.subplots(figsize=(8 , 6))\n", "\n", "plt.axvline(x=desired_solubility, linestyle=\"--\", c=\"k\")\n", "plt.axvline(x=solubility, linestyle=\"--\", c=\"k\")\n", "ax.axvspan(xmin=desired_solubility, xmax=0.0, alpha=0.1, color=\"lightgreen\")\n", "ax.axvspan(xmin=solubility, xmax=desired_solubility, alpha=0.1, color=\"orange\")\n", "ax.axvspan(xmin=minimum_value - .5, xmax=solubility, alpha=0.1, color=\"red\")\n", "plt.scatter(first_set_molecules_df[\"solubility\"], first_set_molecules_df[\"similarity\"], label=f\"{molecule_name}-based\", alpha=0.8)\n", "plt.scatter(second_set_molecules_df[\"solubility\"], second_set_molecules_df[\"similarity\"], label=\"Generated scaffold-based\", alpha=0.8)\n", "plt.xlabel(\"Solubility (log(mol/L))\", size=14)\n", "plt.ylabel(\"Tanimoto similarity\", size=14)\n", "plt.legend(title=\"Mode\", title_fontsize=13)\n", "plt.xlim([minimum_value - .5, 0.0])\n", "plt.title(\"Analyzing the landscape of the generated molecules\", size=14)" ] }, { "cell_type": "code", "execution_count": null, "id": "7079c3e9", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.7.12 ('gt4sd_37')", "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.7.12" }, "vscode": { "interpreter": { "hash": "54d70367f76e5453ce5f02f6b81dc050ecb9e0de86da02b58851f81781c5d71f" } } }, "nbformat": 4, "nbformat_minor": 5 }