diff --git "a/UltraFlow/dataset/dataset_test.ipynb" "b/UltraFlow/dataset/dataset_test.ipynb" deleted file mode 100644--- "a/UltraFlow/dataset/dataset_test.ipynb" +++ /dev/null @@ -1,738 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from UltraFlow import commons\n", - "import numpy as np\n", - "import pandas as pd\n", - "import rdkit\n", - "from rdkit import Chem\n", - "from openbabel import pybel\n", - "from tqdm import tqdm\n", - "from collections import defaultdict\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "outputs": [], - "source": [ - "lig_path_sdf = r'D:\\jiaxianyan\\soft\\github\\UltraFlow\\UltraFlow\\data\\chembl\\P49841\\visualize_dir\\total_vs.sdf'\n", - "m_ligs = pybel.readfile('sdf', lig_path_sdf)\n", - "name = 'P49841'\n", - "dataset_path = r'D:\\jiaxianyan\\soft\\github\\UltraFlow\\UltraFlow\\data\\chembl'\n", - "ligcut = 5.0\n", - "protcut = 30\n", - "prot_graph_type = 'residue_complete'\n", - "n_jobs = 8\n", - "lig_max_neighbors = None\n", - "prot_max_neighbors = 10" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 17, - "outputs": [], - "source": [ - "valid_lig_coords_list, valid_lig_features_list, valid_lig_edges, valid_lig_node_type, valid_index = commons.read_ligands(name, dataset_path, ligcut, lig_type='openbabel')" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 8, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "@> 5505 atoms and 1 coordinate set(s) were parsed in 0.06s.\n" - ] - } - ], - "source": [ - "prot_coords_valid, prot_features_valid, prot_edges, prot_node_type, sec_features, alpha_c_coords, c_coords, n_coords = commons.read_proteins(name, dataset_path, prot_graph_type, protcut)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 11, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Get ligand graphs: 0it [00:00, ?it/s][Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n", - "Get ligand graphs: 24it [00:12, 1.95it/s][Parallel(n_jobs=8)]: Done 34 tasks | elapsed: 12.8s\n", - "Get ligand graphs: 1613it [00:15, 105.37it/s]\n", - "[Parallel(n_jobs=8)]: Done 1500 tasks | elapsed: 15.4s\n", - "[Parallel(n_jobs=8)]: Done 1613 out of 1613 | elapsed: 15.6s finished\n" - ] - } - ], - "source": [ - "lig_graphs = commons.pmap_multi(commons.get_lig_graph_equibind,\n", - " zip(valid_lig_coords_list, valid_lig_features_list, valid_lig_node_type),\n", - " max_neighbors=lig_max_neighbors, cutoff=ligcut,\n", - " n_jobs=n_jobs, desc='Get ligand graphs')" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 15, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Get protein alpha carbon graphs: 0it [00:00, ?it/s][Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n", - "Get protein alpha carbon graphs: 1it [00:00, 1002.70it/s]\n", - "[Parallel(n_jobs=8)]: Done 1 out of 1 | elapsed: 0.1s finished\n" - ] - } - ], - "source": [ - "prot_graphs = commons.pmap_multi(commons.get_prot_alpha_c_graph_equibind,\n", - " zip([prot_coords_valid], [prot_features_valid], [prot_node_type], [sec_features], [alpha_c_coords], [c_coords], [n_coords]),\n", - " n_jobs=n_jobs, cutoff=protcut, max_neighbor=prot_max_neighbors,\n", - " desc='Get protein alpha carbon graphs')" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 18, - "outputs": [], - "source": [ - "prot_coords_list, graph_prot_index = [], []\n", - "index = 0\n", - "for prot_coord, valid_i in zip([prot_coords_valid], [valid_index]):\n", - " prot_coords_list.extend([prot_coord] * len(valid_i))\n", - " graph_prot_index.extend([index] * len(valid_i))\n", - " index += 1" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 20, - "outputs": [], - "source": [ - "from rdkit.Chem.Scaffolds import MurckoScaffold" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 26, - "outputs": [ - { - "data": { - "text/plain": "", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAetUlEQVR4nO3da1RTV9oH8OcESEy436WiKAUUr4yIQLkpREBMpKOCM854bRft1KqlrYVZnfW2dtpZWqeWYtulg85YdVRsnVESrQKiGFC5VSqIIgUUFeQOIQRISPb74Tgp9VaRnNx4fms+lEOy95PM4u8+5+yzN0UIAYQQQs+Lpe8CEELIuGGMIoTQiGCMIoTQiGCMIoTQiGCMIoTQiGCMIiNTVFRUVVWFM0yQ4cAYRUYmOTl52rRpOTk5+i4EoQco/FcdGZG+vj47OzuVStXe3m5ra6vvchACwNEoMi5FRUUKhWLWrFmYochwYIwiYyKRSAAgLCxM34Ug9DOMUWRMCgoKACA0NFTfhSD0M7w2ioyGSqVydHTs7u5ubGx0c3PTdzkIPYCjUWQ0ysvLu7u7vb29MUORQcEYRUajqqrE3Nwcz+iRoTHXdwEIPauQkLPnz3OcnKL0XQhCv4CjUWQ0ZLLCMWN6J04M1HchCP0CxigyDv39N5XKJguLsRyOl75rQegXMEaRcZDJJABgZYUzRpHBwRhFxkEmKwAAKyu8v4QMDsYoMg44GkUGC2MUGQGl8v7AQK2ZmQ2XO1PftSD0MIxRZARksgsAYGn5EkWZ6bsWhB6GD4MiI6BSdff1VVKUmaVlkL5rQehhOP0eGbrbt19Tqbopiho79n1914LQY2CMIoNGiKK3t2jq1HJ9F4LQE+G1UWTQKIrN5c746SdBd/dJfdeC0OPhtVFkBAYGau7e3ezouMrObom+a0HoYTgaRQaOqFQ9HI63ra2gv7+mr69SqWzSd0kI/QJeG0UGTaWSNjS8QcggRbFdXDbV1PBZLGsfn1w220PfpSH0AJ7UI6OhUnXW1MT19l62sHDz9s7hcqfpuyKEAPCkHhkRMzN7H58ca+sopbLp5s1IuRxv3yODgDGKjAmLZeXllWVjEzs42HLz5nyZ7KK+K0IIYxQZGxaL5+V1wt4+QaXqqqmJlkqz9V0RGu0wRpHxoSj2pEmHHR3XqNW9tbUbT54UjbDBH3/88ZNPPgkKCjp8+HB+fr5WikSjB95iQsaL1NamJiQcrKxs3bdv34oVK4b15v7+/oKCApFIdPz48YaGBvogh8NhsVjHjh1buHAhAwUj04Qxiozbtm3bUlNTKYpKS0vbuHHjr76+tbX1+++/F4vFZ86ckUql9EFnZ+fY2FiBQHDu3Lldu3ax2eyDBw8mJCQwXDsyFQQhI7dt2zaKoiiK+vTTT5/0msrKyq1bt4aEhLBYP1/Imjp1akpKikQiUavV9MvUavXmzZsBwMzMbM+ePbr6BMi4YYwiU7Br1y46H1NSUjQH+/r6cnJyNm7cOH78eE10crlcPp+flpZ2586dJ7W2detWAKAo6rPPPtNJ+ci4YYwiE3Ho0CELCwsAWLNmza5du4RCIY/H06Snu7v766+/LhaL5XL5k1pQKpWHDx+m//urr756NJcReiyMUWQ6jh8/zmazra2tn3La/hRr164FgOTkZPrFBw4cMDc3B4ANGzY8y9vRqIUxikzKsmXLAGD69Ol79uxpamoa1nuzsrLGjBkDACtXrlQqlYSQ48ePczgcAEhKSlKpVMyUjIwexigyKf7+/gCQl5f3fG/Py8uzsrICgOXLlysUCkLIqVOnuFwuAPzud7+jjyD0EJzwhEyHTCazt7enKKqrq2vohdFhKS4uXrhwYUdHR1xc3HfffcflciUSiUAgkEqlAoHg6NGjdKoipIFPMSHTcenSpcHBwdmzZ/N4PJlMVlBQ0N/fP9xG5s6dm5OT4+zsfOrUqdjYWKlUGhYWlpeX5+TkJBaL4+Lienp6mCgeGS+MUWQ6JBIJAISFhdH/HRYWFhsb+xztzJ49+8KFC+7u7hcuXIiMjGxra/P3979w4cK4cePOnz8fFRXV3t6u5dKRMcMYRabjoRgFgODg4OdrasqUKQUFBV5eXmVlZREREY2Njb6+vhKJ5MUXXywpKYmIiGhqwkX40QMYo8hEKJXK4uJiiqLo6Bwaqc/Hw8NDIpHMmDGjqqoqNDS0rq5u0qRJEolk+vTp165dmz9//p07d7RWPTJmGKPIRJSVlcnlcl9fX2dn54GBgdLSUhaLFRQUNJI2x44dm5+fHxgYWF9fHxoaeu3aNTc3t7Nnz/r5+VVXV9OPjSKEMYpMxNDhZ3FxcX9//4wZMxwcHEbYrL29/ZkzZ8LCwpqamjIyMgDAxcXl3LlzVlZW169fb21tHXnlyNjhlnbIRAyN0YKCAgAIDQ3VSsu2tranT5/+4osvNMPPrq4umUzW2Njo5OSklS6QUcMYRaaAEHLx4kX45f2lkVwYfQiPx/vzn/+s+ZFuPyQkhKIobXWBjBee1CNTcO3atfb2dnd39wkTJqjV6kuXLgFASEgIQ91pPaaRUcMYRaaAPosPDw8HgKtXr3Z1dXl6erq7uzPUHcYoGgpjFJmCR2eMMpdxbW1t1dXVPB7Pz8+PoS6QccEYRaaAHo0ycX/psX0RQoKCgthsNkNdIOOCMYqM3u3btxsaGhwcHHx9feGXkcoEPKNHD8EYRUaPzrXQ0FAWi1VbW9vY2Ojs7Ozj48NodxijSAMnPCGjN/QsvqWlZdq0aVOmTGFoKlJvb295ebm5uXlgYCAT7SNjhDGKjN7Q4WFwcHBlZaVKpWKor0uXLimVyrlz59KrOyMEeFKPjN3AwACbzbawsBi6/aeZmRlD3TF9/woZI4xRZNw4HE5ERIRSqYyKitLBkkt4YRQ9CjcRQUavpaUlJiamvLzcw8MjJyfH29uboY4GBwft7e17e3vv37/v4uLCUC/I6OBoFBk9esmlkJCQ27dvh4WFXb16laGOysrKZDLZlClTMEPRUBijyBTY2dllZ2dHR0c3NzfPmzfv8uXLTPSCF0bRY2GMIhPB4/FEItGSJUs6Ozv5fH5ubu5IWquvr9+5c2dMTExFRYXmIF4YRY+F10aRSVGpVK+++uq+ffs4HM6RI0defvnlZ3+vWq2+cuWKSCQSi8U//PAD/afx8ccfv//++wBACHF1dW1tba2vr584cSJD9SNjhDGKTA0h5K233kpPT2ez2QcOHEhMTHz663t7e/Py8sRisUgk0mxUZ2lpOX/+fKFQuHjx4rFjxwJAVVXVtGnTxo0bd/fuXcY/AzIqOP0emRqKotLS0jgczvbt21esWNHT0/PKK688+rL6+vqcnByRSJSdna1QKOiDnp6efD5fIBDExMRoVh6RSqVnzpz54osvAMDLy0tnHwQZDYKQidq6dSsAUBT12WefPfSr9957T/MnYG5uPm/evL///e/V1dVDX1NXV7d7926BQMDhcOhX2tvbm5mZHThwQIcfAhkBHI0ik5WSkmJjY/Pmm2++8847LS0tdKrSAgICHBwcoqKiBAKBUCi0t7enj6tUqosXL9In+NevX6cP0jm7aNGilpaW7du3r1q1qr29fdOmTXr4SMgw6TvHEWLWwYMHzc3NAeDNN99Uq9X0QYVCoVQqNa+RyWRZWVlJSUn0ZVCavb19QkLCN99809HRoXlleno6vejJhx9+qOtPggwVxigyfSdOnBgzZgwAJCUlqVQqzfHa2lr6tH3oAsyenp4bN27MyclRKBSPbW337t0sFgsAUlJSdPUJkEHDO/VoVMjLy4uPj5fJZMuXL3/99ddPnz6dm5tbVlZG/9bMzCwoKIi+L0+v/fx0R44cWbVqlVKp/NOf/vTll1/SqYpGLYxRNFpcuHBBIBDI5XLNMnqOjo4LFy4UCoUxMTG2trbDak0kEiUmJnK5Y06dWh0Y+BlFMbWmFDJ8GKNoFPnb3/72l7/8xcHB4dVXXxUIBMHBwSNZUi8vL6+9PdXTs8TObomn52GKwq2ZRim8U49GkXv37hFC3n333dTU1JG3FhkZKZd/XVMT29X1n5qaWC+vLBYL13IejfCaDvqFxsbGsrKy/v5+fRfCCK0/FM/jzfHxybeweKGn51xNzUKVqltbLSMjgif1CADg2rVr9GTJixcv+vr6SqXSvXv3RkdH67subers7HRycrKwsOjq6qJv3GvLwEBdTQ1/YKCex5vt7X3a3NxZi40jw4cn9aOXXC7Pzc0Vi8UnT55sbGykD1paWioUirt37y5evDgzMzM+Pl6/RWpRYWGhWq0ODAzUboYCAIfj6eNz/uZNvlz+Q3V1uLd3Dpvtrt0ukCHDk/pRp6WlZf/+/YmJia6urvHx8RkZGY2NjRMmTEhKSjp69Ghzc/PNmzeTk5MHBgaWLl26b98+fderNYwuc8dmT5g8+QKXO0OhuKtU3mtr21Nf/8empi2EKJnoDhkUHI2OFkNP2+krOSwWy9/fn34acvbs2UN3JN6xY4erq2tqauq6deukUunGjRv1V7jWaLazZ6h9C4uxPj7nBwaqAYhUmj1p0oGBgTqKsmCoO2Q48NqoKZPL5RcvXhSJRMeOHbt37x59kMfjRUZGCoVCgUDwwgsvPOXtO3fupJ8c37Zt2+bNm3VRMWP6+vrs7OxUKlV7e/twp4gOv6/KW7dWTZz4Ly53FqMdIQOBo1HTJJfLlyxZkp+fr7nnPmnSJIFAIBAIIiIiNEsWPd2GDRvYbPYbb7zx3nvvtbe3D13aw+gUF3OdnOTh4fVMZygAcLnTx49Pu39/++Bgm5fXCYp6pm8bGS+MUdO0bt26srIyhULxpNP2Z/Taa6/Z2NisXr1627ZtPT09O3fuNNIHHyUSaGw0c3HR0WqhVlbhVlbht28nyeU/WFoG66ZTpC8Yoybo5s2bmZmZjo6Ozc3NTk5OI2zt97//vbW1dUJCwtdffy2VSv/1r3/RCyaNUF9fH0VRWr9p/iQSCQCAbnZRkskk3d2nLCxc+/rKOZzJuugS6ZVRjizQ09H3UiIjI0eeoTSBQPD9999bW1sfPHhw6dKlI5mc39raqpknkJqaun79erVarZUin0KlgqIiAICQEKa7AgBgsyfZ2S3h8Wb7+OSZmzvookukX3pcXQoxZM2aNQDwxRdfaLfZ4uJiR0dHAIiMjOzp6Xn2N6rV6tLS0g8//NDf319zYUEzFF2xYsWTlqTTlrIyAkC8vBjt5Gf19WtKS1ltbft11B/SNzypN0EMTZAMCAjIz89fsGBBXl5eXFycWCy2sbF5yuv7+voKCwtFItF//vMfzTZwXC43JCREIBAsW7asrq5OIBAcOnRIKpUePXqUy+Vqt2ANXZ7RA4BMdgFAzeXO0FF/SO/0neNIy+i9LW1sbAYHB5lo/8aNG+PHjwcAf3//1tbWR1/Q3Nz8zTffJCQkWFn9vE6Hq6vrypUrjx49+tAwtrS0lL7yMG/ePKlUykTBhJBlywgA2buXoeZ/QaFoKi2FK1ds1GpGvn9kgDBGTU1mZiYAxMbGMtfFrVu3vL29AcDX1/fu3bv0wcrKyq1bt4aEhGhO2+np/R988EFpaalm945HVVVVjRs3DgACAgLa2tqYKNjNjQCQmzeZaPthHR2ZpaVw8yaD3z8yNHhSb2oKCgqAyWd1AMDDwyM/Pz86OrqysjIoKCgkJCQ/P//+/fv0b62srKKjowUCwaJFi1xcXH61NV9f34KCAj6fX1JSEhERkZ2d/fSHAoZLpYJdu6C0FLy9tdjqE8lkEgCwttbVFQRkCPSd40jL/Pz8ACA/P5/pjjo6OmbNmuXg8OBOtIeHR1JSUlZWVn9//3O01tjYOH36dACYPHlyQ0ODViqsqSHjx5OmJkII+eQTwvxXQgghVVV+paXQ06OTzpBhwAlPJkUqlVZUVHA4nICAAKb7sre3j4+P7+joCA4OrqiouHXr1u7du4VC4TM+IvUQNze3s2fP+vn5VVdXh4aG1tTUjLxClQpeeAHop1j7+0HJ/CIhKpW0r6+Cojg8HuPfPzIcGKMmpbCwUKVSzZkzh7m73kOVlJQAwKZNm+iB5Ai5uLicO3cuJCSkoaEhLCzs6tWrI2mNDs2ZM8HKCnJyRl7dM+nsvEwIsbScw2Lp4vtHBgJj1KQwuhbcQ9Rq9aVLlwAgRHuT2u3s7LKzs6Ojo5ubm+fNm0e3PyytrbB/PyQmgosLdHYCAHzyCWzZAgqFtmp8ms8/z1+82Kq0dJEuOkMGA2PUpOjg/pLG1atXu7q6PD093d21uUQxj8cTiURLly7t7OxcsGBBbm7ur76FECgrgy1bICAAXF1h9Wr49lvo7obycgAABwdYtw7279dijU8kkUgaG6V2djN10RkyGBijpmNgYKCkpITFYgUH62ItDOZGvmw2OzMzc82aNb29vQKB4Pjx4499mVwuF4lE//d/l93dYc4c+PBDKC0FHg/i4yEjA+7dg+hooJ+GXbsW/P1BrQY+HwoLtV7vAzr+/pEB0fc9LqQ1dK7NnDlTN90lJCQAwJ49exhqX61W06udWlhYZGZmao4/NL3fxycBgLi6kpUrydGj5CkPqW7ZQgCIpSXJzmakYB1//8hw4LxR06HLC6MAUFhYCExeQKAoKi0tzdbW9qOPPlqxYsXVq1dZLJZYLC4vLyf/W70/MDBQKPRbtEjt5/fr51Xvvw937sCePSAQwKFDsHSplgvW8fePDAfGqOlgepOMoerquh0c4gByfHx8GO1oy5YtHA7n/fff3717d1tbGwxn9f6HmJnBP/4BNjawYwcsXw4ZGbB2rTZL1eWFaWRQcBMRE6FWqx0dHbu6uhoaGuhn3hm1bx+sXQsJCeTo0WEvBf0cjh071tXVVV5eLhQKn331/ifZtg1SU4Gi4PPPYdMm7VSo4+8fGRQcjZqIioqKrq6uSZMm6eZvmF4z6aWXdJGhALBUq2fgKSlgbg6bN8NbbwGLdW/DhnEjbLC8vHzv3r1dXV1jx47FDB2F8E69iaDP6AMDA3XTXUEBAIDxnr++8w7s2gWTJ1/94IOZqampz9FCf39/bm7upk2bPDw8fvOb33z55ZfOzs7Nzc07duzQerXI0On7HhfSjqqqKj8/vwkTJmiWXGLO/fuEooiVFVEqme6KWYcPH7WwsACA9evXq1SqZ3lLY2NjRkZGfHy8paWl5o/ohRdeSEpKWr9+Pb1RVUpKCtOVI4OCMWoiWltbp02bBgBeXl719fWM9vXddwSALFjAaCc6IhaL6QdnV6xYoXzyPwuaZQCH7ug3derUlJQUiUSiWQbw3//+N71R1bPnMjIBGKOmo6OjIygoCADc3NwqKiqY62jTJgJAPvqIuR506vz589bW1gAgFAr7+vo0x+VyeU5OzsaNG4de7uRyuXw+Py0t7c6dO49tLSsri94cZeXKlU/JZWRKMEZNSk9PT1RUFAC4uLhcuXKFoV78/QkAyctjqHk9KCkpobeZmj9/fl1dHT29n85WmouLy2NX7x/qxo0bAwMDhJC8vDz60YDly5czvc0UMgQYo6amv78/Pj4eAOzs7AoKChhon9jaEgsL0tur9bb16ccff3R1dQWAoav3z507969//euz/INUXV3t6uqq2eyvqKiIXok1Li5OLpczXz7SJ4xREzQwMEA/qcnj8c6cOaOtZru7yeXLhBCiVJKTJ0lXl7YaNhS5ubksFsvKykogEOzevfvevXvP/t4rV67QS/2Hh4d3d3cTQsrKypydnYceQaYKY9Q0DQ4OvvLKKwDAZrOPHTumlTZLSwmHQ4qLCSEkOflBpJqSffv2AcBvf/vb53v7o5v9Xb9+nV7+6knb/yHTgPNGTZOZmVlGRkZycrJCoUhMTKQDYuSWLYOUFFCptNKYwRnh05yTJ0+WSCTe3t5lZWXh4eH37t2bMmVKQUGBl5dXWVlZREREY2OjVutFhgJj1GRRFLVjx46tW7eqVKp169alp6c/d1OdnZCVBQDg4gLx8fDll1or0qAMXVuktbX1OVrw8PCQSCQzZ868fv16aGhobW0tfWTGjBlVVVWhoaF1dXVaLhoZAn0PhxHj0tPTKYqiKOrTTz8d1htra0laGuHziYUFASBZWSQ5mSiVJCKC/OEPpnZS39LSQlGUpaUlfW/dy8tr7NixzzcD99GZZx0dHfQDZm5ubpWVldqtHOkdxuiosGvXrmd8wEahIGfPkuRk4uVFAB78j80mfD45fJgkJxNCSGEhYbPJ5cukrk4XxevGsWPHAIDP5xNCmpqaAMDGxmZwcPD5WpPJZHw+HwAcHByKiooIIT09PZGRkcDwXDSkFxijo8WhQ4foBx/feOONRx+waWtrO3DgQGJiYkzMXzTp6exMVq0i335L6PvMd+8SkejB63ftIocPkzFjiMk89/jWW28BwJYtWwghmZmZABAbGzuSBvv7+19++WUAsLW1pWee9fb2xsbGAoCdnV1hYaF26kYGAGN0FBGJRPQDNn/84x/pB2xqa2vT0tL4fD6dsAAwfvykGTNIaiopLCRPH4p98w0xMyMA5J13yP8ehjRic+bMAYCzZ88SQjZs2AAAH3/88QjbHBgYSExMBAAej3f69Gn6CL1albW19f3797VQNzIAGKOjS05ODr2mxtSpUz09PTWXyDkcTkxMzM6dO4d1NfDECTJmDAEgSUnEqJ8g7+npMTc3t7CwkMlkhBA/Pz8AyM/PH3nLg4OD69atAwB7e3t69ujg4GBwcPCUKVNOnTo18vaRIcD1RkcXPp9/7ty5uLi4MWPGVFVVOTk5zZ8/XyAQxMfH29raDre1xYvh5EmIj4d//AOkUti/H/43qDUyly5dGhwcDAwMtLS0lEqlFRUVbDabHp+OkJmZ2Z49exwcHBYsWGBjY0MfcXJyunTpUkdHx8jbR4YAY3TUCQgIqKmp+emnn1QqVUBAwNAli55DZCScOgVCIRw5Aj098O23wOVqq1LdGTrVqbCwUKVSBQUF8Xg8rTROUdT27ds1PxJCLl68CLhrkwnBeaOjkZ2d3Zw5cwIDA0eYobSwMMjNBScnOHkSNm3KkclkI29Tx4ZOvGd6S6Vr1661t7e7u7tPmDCBoS6QjmGMIi2YMwfOnweh8FxGRvSCBQs6Ozv1XdEwKJXKoqIiiqJeeuklYH6DT7r9iIgIhtpHuocxirRj2jRIT5/04osvXr58OTQ01IgefCwrK5PL5b6+vs7OzgMDAyUlJSwWKzg4mKHucANR04MxirRm4sSJEolk+vTpVVVVkZGRd+7c0XdFz2To8LOkpKS/v3/69On0MndMoGMUL4yaEoxRpE1ubm75+flz586trq4ODQ2tqanRd0W/bmiMMj1UvH37dkNDg4ODg6+vL0NdIN3DGEVa5uDgkJ2dHRIS0tDQEBYW9uOPP+q7oqfR3Deno1M3F0ZDQ0O1cnMPGQj8/xJpn62tbXZ2dnR0dE9Pj1Qq1Xc5T1NVVUXfN/fw8AAAevjM3GiU6ZhGeoHzRhEjeDxeVlbWtWvXZs+ere9anobOtfDwcPrH6urqmpoaeq1lJuD9JZOEo1HEFA6HY+AZCgD0NYdJkybRP1IU5ePjw1BfbW1t169f53K5hv+1oGHBGEWj2ptvvmllZfXVV18VFRUx3Re9qlNQUBCbzWa6L6RLGKNoVPP29o6Nje3q6oqKisrJyWG0L7wwaqowRtGoxmazjxw5sm7dut7eXqFQ+N///pe5vjBGTRVFCNF3DQjpGSHk7bffTktLMzMz27t37+rVq7XehVwut7e3V6vVHR0d1tbWWm8f6RGORhECiqI+//xzzfZ/GRkZI2ywvr4+PT19//79miOXL19WKBR+fn6YoaYHJzwh9EBKSgoApKamvvbaa93d3e++++6w3q5Wq69cuSISicRicVlZGQDMmjVr1apV9G/xjN6EYYwi9LOUlBRbW9v169dv3ry5ra1t69atv/qW7u7uM2fOiMXi77//vq2tjT5oZ2cXGxsrFAo1L8MYNWF4bRShhx06dGj16tWDg4Pr169PT09/7IOb9fX1OTk5IpEoOztboVDQBz09Pfl8vkAgiImJ0cxq6u7uPnXq1Nq1axUKxf37911cXHT3SZBO4GgUoYetWLHC2to6MTHxq6++kkql//znP83Nf/5LuXHjxpIlS65fv07/aG5uPm/ePIFAIBQKh07dfyhn7e3t09PTMUNNEo5GEXq8c+fOLV68WCaTLV++/MCBA5rNU/v6+pycnMaMGRMVFUWnp729Pf0rlUpVWFgoFotFItGNGzfog+bm5mFhYYsWLVq/fj29MysyMRijCD1RcXHxwoULOzo64uLivvvuO+7/9pmqrKycMmWKZoja29ubl5cnFotPnDjR3NxMH3RwcHg0Z5FJwhhF6Gl++OGH2NjY1tbW8PBwkUhE7+5Jq6ury83NffTyKB2dERERFka6USoaJoxRhH7FjRs3FixYcPfu3Tlz5ojF4pqaGvq0vaqqin6BmZlZUFCQUChcvHgxrsc8CmGMIvTr6uvr+Xx+XV0dl8vt6+ujDzo5OS1cuJC+L29ra6vfCpEeYYwi9EwaGxvffvvt1tbWW7du4Wk7GgpjFKFh6Ovr09xoQoiGMYoQQiOCS5MghNCIYIwihNCIYIwihNCIYIwihNCI/D90uQihEuVzYwAAAdp6VFh0cmRraXRQS0wgcmRraXQgMjAyMi4wMy40AAB4nHu/b+09BiDgZYAARiCWBGIZIG5gZGNIAIkxszMoAGlmCJeJCT/NzIguzs6gARJnZnMA0yxsDhlgPiNeBkStANhqJoRWDCNwmQnTCfUDN9BvjEwMTMxAxQwsrAysbAxs7AzsHAwcnAycXApc3BlM3DwJPLwZTLx8CXz8GUz8AgwCggyCQhlMQsIJwiIZTCKiCaJiQEqcQVyCgY2RQYhTgZ8rQUwwQYSFjZGNlYWZiY2bh5ePn4tNQFCIk4ufTVhEVExQSNyMERKuYCC5pV30QHu3+QEQJyo0+sA099f7QezDy2cfqFMWBItP69t3oKV8Hlg8uGLzgXu7kuxAbJvq1gOta9XsQexLGq4Hbjw6uA/E9o69tF/mWoAtiP2/mXf/hIlVYL1bU5LsD03iAbOXnf1jf0viFJg9o+SC/d1iJ7Bdn9j1HM7oNoHZ/IytDs9uZ4DZweITHMpKuMFshsQoh2LJyWC97b0FDluuzgO75+F+LYdnLavB7snsnmv/lysTzH7ZwG/3PeQHmL1O5afdm4mRDiB2q+03+/mCpWB2xhsHh8eaxmC2wxKp/Vf29ILZ7k+a9/UU7AGzxQAPxH6S8igb1AAAAll6VFh0TU9MIHJka2l0IDIwMjIuMDMuNAAAeJx9VVuO2zAM/M8pdIEYfIrk5yZZFEWxCdBNe4f+7/1RUkFqLVaoHRGSPR5Jw6FyaHX9vPz489H+XXQ5HFqD//wiov1mADi8teq00+u379d2vr+cnk/Ot1/X+3sjbeT5Td6fsS/329vzCbZzO9LG3AW8et7NAxtsMK79W2rXduRNyMClHXFzdiRaILk4JZmEKIqTutmSUwqpW6gE9OIkdlhy6gPZc27OTW1EKNgXwP6YHA0pON93RXBdAK2AvIFDR2tH2Ni8586+Ir2QuHVhsbE2hVhSRgFhUyULrV6Y25ISIdWEzXM3EuMbCcQlsjKEyaRAQyI1d+cVkgayk6v62Bo7L8XEyhBthkGspRZ0h2WCsDKUampni+Ls7EJLpA5krtLFKumYPlqvs1KURkJCg9oRStB679beE2nqfSSdMc2xBPrYUO8WHVMD5iyT5dwxNCIGT/JMEAIvGSnLKB+jQP5KfwFYMhIOoHhPb+Zic2blZf080pOSm1ICnYLq/VcgD31yYsnyyTRFyJpRUp70TgeBHil+4nlNqQ9nkloHbJrGc+NYIF+vl0/nw+PEON2ul/3EqJv2YyEHjffax2yyFzhm072Kc/LW91rFbLZXJGbzvewwW+zFhdXmEsIRcCoVqYA0lYRUQJ6sLxVQJotLBdTJyjVMo06WxRFssiaO4JMHpQLGZDapQLOrpALhZB+pQDT5RCoQT4bAgZEp8zXMvE4ZLvF2lrHiWS+yWk2f9KJacZH7nP051zV+/rNk//AXaRg9bFZ3vd0AAAE1elRYdFNNSUxFUyByZGtpdCAyMDIyLjAzLjQAAHicJZFLasRADESvkuUEZKH/By+9n02O4GvM4SN5Gkyb4qlUUl9/N9+33K/75t/nfw6/5bounu968/XzeR2E4hnE4FhVaXCOFGQUDYYmrXASWkVQgaJ2+6OwERswthE1nIyiVAKEzaQyNoIR2TGITtEgilNhCoLZPffUtGj6uJa0LJBeYeOhTLIeisbCCQdPvxaG09BJyuEQ5KyuVdhDCw7FuUy2c/I4w2FIUd90MUWxDGmpPL3TSdfZcwbfkapMrWHmd2vm7yrcJdtX7KysFcdtwJyc5NTlq41xUchymhUPN8mSpYcLZ5rQ5+Gz2rIdUYSN45F6220S0SJ5CmcNO4CgRGY//iY5LzBUafFSMosN46UqZhfw+/kHPMZmf1kaxIIAAAAASUVORK5CYII=\n" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CN1CCCCC1CCN2C3=CC=CC=C3SC4=C2C=C(C=C4)SC\n" - ] - }, - { - "data": { - "text/plain": "", - "image/png": "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\n" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "C1CCC(CCC2C3CCCCC3CC3CCCCC32)CC1\n" - ] - }, - { - "data": { - "text/plain": "", - "image/png": "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\n" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "smiles = \"CN1CCCCC1CCN2C3=CC=CC=C3SC4=C2C=C(C=C4)SC\"\n", - "# convert SMILES string to RDKit mol object\n", - "mol = Chem.MolFromSmiles(smiles)\n", - "# create RDKit mol object corresponding to Bemis-Murcko scaffold of original compound\n", - "mol_scaffold = MurckoScaffold.GetScaffoldForMol(mol)\n", - "# make the scaffold generic by replacing all atoms with carbons and all bonds with single bonds\n", - "mol_scaffold_generic = MurckoScaffold.MakeScaffoldGeneric(mol_scaffold)\n", - "# convert the generic scaffold mol object back to a SMILES string format\n", - "smiles_scaffold_generic = Chem.CanonSmiles(Chem.MolToSmiles(mol_scaffold_generic))\n", - "# display compound and its generic Bemis-Murcko scaffold\n", - "display(mol)\n", - "print(smiles)\n", - "display(mol_scaffold_generic)\n", - "print(smiles_scaffold_generic)\n", - "display(mol_scaffold)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 33, - "outputs": [], - "source": [ - "lig_path_smiles = r'D:\\jiaxianyan\\soft\\github\\UltraFlow\\UltraFlow\\data\\chembl\\P49841\\P49841_valid_smiles.smi'\n", - "with open(lig_path_smiles, 'r') as f:\n", - " s = f.read().strip().split('\\n')\n", - "scaffolds = defaultdict(list)\n", - "error_smiles = 0" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 34, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1613/1613 [00:01<00:00, 851.98it/s]\n" - ] - } - ], - "source": [ - "for i, smiles in tqdm(enumerate(s), total=len(s)):\n", - " try:\n", - " # scaffold = MurckoScaffold.MurckoScaffoldSmiles(mol = Chem.MolFromSmiles(smiles), includeChirality = False)\n", - " mol = Chem.MolFromSmiles(smiles)\n", - " mol_scaffold = MurckoScaffold.GetScaffoldForMol(mol)\n", - " mol_scaffold_generic = MurckoScaffold.MakeScaffoldGeneric(mol_scaffold)\n", - " smiles_scaffold_generic = Chem.CanonSmiles(Chem.MolToSmiles(mol_scaffold_generic))\n", - " scaffolds[smiles_scaffold_generic].append(i)\n", - " except:\n", - " print(smiles + ' returns RDKit error and is thus omitted...')\n", - " error_smiles += 1" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 35, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "463\n" - ] - } - ], - "source": [ - "print(len(scaffolds))" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 41, - "outputs": [ - { - "data": { - "text/plain": "Text(0, 0.5, 'Frequency')" - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "text/plain": "
", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAqXklEQVR4nO3de3BUZZ7/8U+bSxMwCYSQdLIEyEgQIRGRKBBQ7oFwUWBKUMblOirLRTJAKWiN4q4SBoaAU1lRGSqAgMDMAsOUMhAF4iDFDkSQixZEuQVINsqEJCB0gJzfHwz9swnXTodunrxfVaeK8zxPn/6eh2A+PuecbptlWZYAAAAMdZ+vCwAAAKhJhB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMF+roAf1BZWalTp04pNDRUNpvN1+UAAIDbYFmWysvLFRsbq/vuu/H6DWFH0qlTpxQXF+frMgAAgAcKCgrUuHHjG/YTdiSFhoZKujJZYWFhPq4GAADcjrKyMsXFxbl+j98IYUdyXboKCwsj7AAAcI+51S0o3KAMAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMFqgrwswXbNpn9y0/+isfnepEgAAaidWdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGg+DTsZGRl67LHHFBoaqqioKA0cOFAHDx50GzNy5EjZbDa3rUOHDm5jnE6nJk6cqMjISNWrV09PPfWUTpw4cTdPBQAA+Cmfhp3c3FyNHz9eO3bsUE5Oji5duqTU1FSdO3fObVyfPn1UWFjo2j799FO3/vT0dK1du1YrV67Utm3bdPbsWfXv31+XL1++m6cDAAD8UKAv3/xvf/ub2352draioqKUl5enJ5980tVut9vlcDiue4zS0lItWrRIH330kXr27ClJWrZsmeLi4vTZZ5+pd+/eNXcCAADA7/nVPTulpaWSpIiICLf2rVu3KioqSi1atNALL7yg4uJiV19eXp4uXryo1NRUV1tsbKwSExO1ffv2676P0+lUWVmZ2wYAAMzkN2HHsixNnjxZnTt3VmJioqs9LS1Ny5cv1+bNmzV37lzt3LlT3bt3l9PplCQVFRUpODhYDRo0cDtedHS0ioqKrvteGRkZCg8Pd21xcXE1d2IAAMCnfHoZ6+cmTJigvXv3atu2bW7tQ4cOdf05MTFRycnJatq0qT755BMNHjz4hsezLEs2m+26fdOnT9fkyZNd+2VlZQQeAAAM5RcrOxMnTtT69eu1ZcsWNW7c+KZjY2Ji1LRpU+Xn50uSHA6HKioqVFJS4jauuLhY0dHR1z2G3W5XWFiY2wYAAMzk07BjWZYmTJigNWvWaPPmzYqPj7/la06fPq2CggLFxMRIktq1a6egoCDl5OS4xhQWFmr//v1KSUmpsdoBAMC9waeXscaPH68VK1boL3/5i0JDQ1332ISHhyskJERnz57VjBkz9Mtf/lIxMTE6evSoXnvtNUVGRmrQoEGusWPGjNGUKVPUsGFDRUREaOrUqUpKSnI9nQUAAGovn4adBQsWSJK6du3q1p6dna2RI0cqICBA+/bt09KlS3XmzBnFxMSoW7duWrVqlUJDQ13j582bp8DAQA0ZMkTnz59Xjx49tHjxYgUEBNzN0wEAAH7IZlmW5esifK2srEzh4eEqLS31+v07zaZ9ctP+o7P6efX9AACoLW7397df3KAMAABQUwg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYzadhJyMjQ4899phCQ0MVFRWlgQMH6uDBg25jLMvSjBkzFBsbq5CQEHXt2lUHDhxwG+N0OjVx4kRFRkaqXr16euqpp3TixIm7eSoAAMBP+TTs5Obmavz48dqxY4dycnJ06dIlpaam6ty5c64xs2fPVmZmprKysrRz5045HA716tVL5eXlrjHp6elau3atVq5cqW3btuns2bPq37+/Ll++7IvTAgAAfsRmWZbl6yKu+uGHHxQVFaXc3Fw9+eSTsixLsbGxSk9P16uvvirpyipOdHS0fve73+mll15SaWmpGjVqpI8++khDhw6VJJ06dUpxcXH69NNP1bt371u+b1lZmcLDw1VaWqqwsDCvnlOzaZ/ctP/orH5efT8AAGqL2/397Vf37JSWlkqSIiIiJElHjhxRUVGRUlNTXWPsdru6dOmi7du3S5Ly8vJ08eJFtzGxsbFKTEx0jbmW0+lUWVmZ2wYAAMzkN2HHsixNnjxZnTt3VmJioiSpqKhIkhQdHe02Njo62tVXVFSk4OBgNWjQ4IZjrpWRkaHw8HDXFhcX5+3TAQAAfsJvws6ECRO0d+9effzxx1X6bDab275lWVXarnWzMdOnT1dpaalrKygo8LxwAADg1/wi7EycOFHr16/Xli1b1LhxY1e7w+GQpCorNMXFxa7VHofDoYqKCpWUlNxwzLXsdrvCwsLcNgAAYCafhh3LsjRhwgStWbNGmzdvVnx8vFt/fHy8HA6HcnJyXG0VFRXKzc1VSkqKJKldu3YKCgpyG1NYWKj9+/e7xgAAgNor0JdvPn78eK1YsUJ/+ctfFBoa6lrBCQ8PV0hIiGw2m9LT0zVz5kwlJCQoISFBM2fOVN26dTVs2DDX2DFjxmjKlClq2LChIiIiNHXqVCUlJalnz56+PD0AAOAHfBp2FixYIEnq2rWrW3t2drZGjhwpSXrllVd0/vx5jRs3TiUlJWrfvr02bdqk0NBQ1/h58+YpMDBQQ4YM0fnz59WjRw8tXrxYAQEBd+tUAACAn/Krz9nxFT5nBwCAe889+Tk7AAAA3kbYAQAARiPsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACM5lHYOXLkiLfrAAAAqBEehZ3mzZurW7duWrZsmS5cuODtmgAAALzGo7Dz9ddfq23btpoyZYocDodeeukl/eMf//B2bQAAANXmUdhJTExUZmamTp48qezsbBUVFalz585q3bq1MjMz9cMPP3i7TgAAAI9U6wblwMBADRo0SKtXr9bvfvc7ff/995o6daoaN26s4cOHq7Cw0Ft1AgAAeKRaYWfXrl0aN26cYmJilJmZqalTp+r777/X5s2bdfLkST399NPeqhMAAMAjgZ68KDMzU9nZ2Tp48KD69u2rpUuXqm/fvrrvvivZKT4+Xh988IFatmzp1WIBAADulEdhZ8GCBRo9erRGjRolh8Nx3TFNmjTRokWLqlUcAABAdXkUdvLz8285Jjg4WCNGjPDk8AAAAF7j0T072dnZ+tOf/lSl/U9/+pOWLFlS7aIAAAC8xaOwM2vWLEVGRlZpj4qK0syZM6tdFAAAgLd4FHaOHTum+Pj4Ku1NmzbV8ePHq10UAACAt3gUdqKiorR3794q7V9//bUaNmxY7aIAAAC8xaOw8+yzz+rll1/Wli1bdPnyZV2+fFmbN2/WpEmT9Oyzz3q7RgAAAI959DTW22+/rWPHjqlHjx4KDLxyiMrKSg0fPpx7dgAAgF/xKOwEBwdr1apV+q//+i99/fXXCgkJUVJSkpo2bert+gAAAKrFo7BzVYsWLdSiRQtv1QIAAOB1HoWdy5cva/Hixfr8889VXFysyspKt/7Nmzd7pTgAAIDq8ijsTJo0SYsXL1a/fv2UmJgom83m7boAAAC8wqOws3LlSq1evVp9+/b1dj0AAABe5dGj58HBwWrevHm13/yLL77QgAEDFBsbK5vNpnXr1rn1jxw5UjabzW3r0KGD2xin06mJEycqMjJS9erV01NPPaUTJ05UuzYAAGAGj8LOlClT9O6778qyrGq9+blz59SmTRtlZWXdcEyfPn1UWFjo2j799FO3/vT0dK1du1YrV67Utm3bdPbsWfXv31+XL1+uVm0AAMAMHl3G2rZtm7Zs2aINGzaodevWCgoKcutfs2bNbR0nLS1NaWlpNx1jt9vlcDiu21daWqpFixbpo48+Us+ePSVJy5YtU1xcnD777DP17t37tuoAAADm8ijs1K9fX4MGDfJ2Lde1detWRUVFqX79+urSpYveeecdRUVFSZLy8vJ08eJFpaamusbHxsYqMTFR27dvv2HYcTqdcjqdrv2ysrKaPQkAAOAzHoWd7Oxsb9dxXWlpaXrmmWfUtGlTHTlyRL/97W/VvXt35eXlyW63q6ioSMHBwWrQoIHb66Kjo1VUVHTD42ZkZOitt96q6fIBAIAf8OieHUm6dOmSPvvsM33wwQcqLy+XJJ06dUpnz571WnFDhw51Pd4+YMAAbdiwQYcOHdInn3xy09dZlnXTx+GnT5+u0tJS11ZQUOC1mgEAgH/xaGXn2LFj6tOnj44fPy6n06levXopNDRUs2fP1oULF/T+++97u05JUkxMjJo2bar8/HxJksPhUEVFhUpKStxWd4qLi5WSknLD49jtdtnt9hqpEQAA+BePVnYmTZqk5ORklZSUKCQkxNU+aNAgff75514r7lqnT59WQUGBYmJiJEnt2rVTUFCQcnJyXGMKCwu1f//+m4YdAABQe3j8NNaXX36p4OBgt/amTZvq5MmTt32cs2fP6rvvvnPtHzlyRHv27FFERIQiIiI0Y8YM/fKXv1RMTIyOHj2q1157TZGRka6bo8PDwzVmzBhNmTJFDRs2VEREhKZOnaqkpCTX01kAAKB28yjsVFZWXvdzbE6cOKHQ0NDbPs6uXbvUrVs31/7kyZMlSSNGjNCCBQu0b98+LV26VGfOnFFMTIy6deumVatWub3HvHnzFBgYqCFDhuj8+fPq0aOHFi9erICAAE9ODQAAGMZmefDJgEOHDlV4eLg+/PBDhYaGau/evWrUqJGefvppNWnS5K49reUtZWVlCg8PV2lpqcLCwrx67GbTbn4z9dFZ/bz6fgAA1Ba3+/vbo5WdefPmqVu3bmrVqpUuXLigYcOGKT8/X5GRkfr44489LhoAAMDbPAo7sbGx2rNnjz7++GN99dVXqqys1JgxY/SrX/3K7YZlAAAAX/Mo7EhSSEiIRo8erdGjR3uzHgAAAK/yKOwsXbr0pv3Dhw/3qBgAAABv8yjsTJo0yW3/4sWL+umnnxQcHKy6desSdgAAgN/w6EMFS0pK3LazZ8/q4MGD6ty5MzcoAwAAv+Lxd2NdKyEhQbNmzaqy6gMAAOBLXgs7khQQEKBTp05585AAAADV4tE9O+vXr3fbtyxLhYWFysrKUqdOnbxSGAAAgDd4FHYGDhzotm+z2dSoUSN1795dc+fO9UZdAAAAXuHxd2MBAADcC7x6zw4AAIC/8Whl5+q3k9+OzMxMT94CAADAKzwKO7t379ZXX32lS5cu6cEHH5QkHTp0SAEBAXr00Udd42w2m3eqBAAA8JBHYWfAgAEKDQ3VkiVL1KBBA0lXPmhw1KhReuKJJzRlyhSvFgkAAOApj+7ZmTt3rjIyMlxBR5IaNGigt99+m6exAACAX/Eo7JSVlen//u//qrQXFxervLy82kUBAAB4i0dhZ9CgQRo1apT+/Oc/68SJEzpx4oT+/Oc/a8yYMRo8eLC3awQAAPCYR/fsvP/++5o6daqef/55Xbx48cqBAgM1ZswYzZkzx6sFAgAAVIdHYadu3bp67733NGfOHH3//feyLEvNmzdXvXr1vF0fAABAtVTrQwULCwtVWFioFi1aqF69erIsy1t1AQAAeIVHYef06dPq0aOHWrRoob59+6qwsFCS9Otf/5rHzgEAgF/xKOz85je/UVBQkI4fP666deu62ocOHaq//e1vXisOAACgujy6Z2fTpk3auHGjGjdu7NaekJCgY8eOeaUwAAAAb/BoZefcuXNuKzpX/fjjj7Lb7dUuCgAAwFs8CjtPPvmkli5d6tq32WyqrKzUnDlz1K1bN68VBwAAUF0eXcaaM2eOunbtql27dqmiokKvvPKKDhw4oH/+85/68ssvvV0jAACAxzxa2WnVqpX27t2rxx9/XL169dK5c+c0ePBg7d69Ww888IC3awQAAPDYHa/sXLx4Uampqfrggw/01ltv1URNAAAAXnPHKztBQUHav3+/bDZbTdQDAADgVR5dxho+fLgWLVrk7VoAAAC8zqMblCsqKvTHP/5ROTk5Sk5OrvKdWJmZmV4pDgAAoLruKOwcPnxYzZo10/79+/Xoo49Kkg4dOuQ2hstbAADAn9xR2ElISFBhYaG2bNki6crXQ/zhD39QdHR0jRQHAABQXXd0z86132q+YcMGnTt3zqsFAQAAeJNHNyhfdW34AQAA8Dd3FHZsNluVe3K4RwcAAPizO7pnx7IsjRw50vVlnxcuXNDYsWOrPI21Zs0a71UIAABQDXcUdkaMGOG2//zzz3u1GAAAAG+7o7CTnZ1dU3UAAADUiGrdoAwAAODvCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjObTsPPFF19owIABio2Nlc1m07p169z6LcvSjBkzFBsbq5CQEHXt2lUHDhxwG+N0OjVx4kRFRkaqXr16euqpp3TixIm7eBYAAMCf+TTsnDt3Tm3atFFWVtZ1+2fPnq3MzExlZWVp586dcjgc6tWrl8rLy11j0tPTtXbtWq1cuVLbtm3T2bNn1b9/f12+fPlunQYAAPBjgb5887S0NKWlpV23z7IszZ8/X6+//roGDx4sSVqyZImio6O1YsUKvfTSSyotLdWiRYv00UcfqWfPnpKkZcuWKS4uTp999pl69+593WM7nU45nU7XfllZmZfPDAAA+Au/vWfnyJEjKioqUmpqqqvNbrerS5cu2r59uyQpLy9PFy9edBsTGxurxMRE15jrycjIUHh4uGuLi4uruRMBAAA+5bdhp6ioSJIUHR3t1h4dHe3qKyoqUnBwsBo0aHDDMdczffp0lZaWuraCggIvVw8AAPyFTy9j3Q6bzea2b1lWlbZr3WqM3W6X3W73Sn0AAMC/+e3KjsPhkKQqKzTFxcWu1R6Hw6GKigqVlJTccAwAAKjd/DbsxMfHy+FwKCcnx9VWUVGh3NxcpaSkSJLatWunoKAgtzGFhYXav3+/awwAAKjdfHoZ6+zZs/ruu+9c+0eOHNGePXsUERGhJk2aKD09XTNnzlRCQoISEhI0c+ZM1a1bV8OGDZMkhYeHa8yYMZoyZYoaNmyoiIgITZ06VUlJSa6nswAAQO3m07Cza9cudevWzbU/efJkSdKIESO0ePFivfLKKzp//rzGjRunkpIStW/fXps2bVJoaKjrNfPmzVNgYKCGDBmi8+fPq0ePHlq8eLECAgLu+vkAAAD/Y7Msy/J1Eb5WVlam8PBwlZaWKiwszKvHbjbtk5v2H53Vz6vvBwBAbXG7v7/99p4dAAAAbyDsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIwW6OsCartm0z65Yd/RWf3uYiUAAJiJlR0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjObXYWfGjBmy2Wxum8PhcPVblqUZM2YoNjZWISEh6tq1qw4cOODDigEAgL/x67AjSa1bt1ZhYaFr27dvn6tv9uzZyszMVFZWlnbu3CmHw6FevXqpvLzchxUDAAB/EujrAm4lMDDQbTXnKsuyNH/+fL3++usaPHiwJGnJkiWKjo7WihUr9NJLL93wmE6nU06n07VfVlbm/cIBAIBf8PuVnfz8fMXGxio+Pl7PPvusDh8+LEk6cuSIioqKlJqa6hprt9vVpUsXbd++/abHzMjIUHh4uGuLi4ur0XMAAAC+49dhp3379lq6dKk2btyohQsXqqioSCkpKTp9+rSKiookSdHR0W6viY6OdvXdyPTp01VaWuraCgoKauwcAACAb/n1Zay0tDTXn5OSktSxY0c98MADWrJkiTp06CBJstlsbq+xLKtK27Xsdrvsdrv3CwYAAH7Hr1d2rlWvXj0lJSUpPz/fdR/Ptas4xcXFVVZ7AABA7XVPhR2n06lvv/1WMTExio+Pl8PhUE5Ojqu/oqJCubm5SklJ8WGVAADAn/j1ZaypU6dqwIABatKkiYqLi/X222+rrKxMI0aMkM1mU3p6umbOnKmEhAQlJCRo5syZqlu3roYNG+br0gEAgJ/w67Bz4sQJPffcc/rxxx/VqFEjdejQQTt27FDTpk0lSa+88orOnz+vcePGqaSkRO3bt9emTZsUGhrq48oBAIC/sFmWZfm6CF8rKytTeHi4SktLFRYW5tVjN5v2icevPTqrnxcrAQDALLf7+/ueumcHAADgThF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABgt0NcF4MaaTfvkhn1HZ/W7i5UAAHDvYmUHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMFqgrwuAZ5pN++Sm/Udn9btLlQAA4N9Y2QEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaHwRqKFu9kWhnn5JKF8+CgC4F7GyAwAAjMbKTi10qxUaAABMwsoOAAAwGmEHAAAYjbADAACMxj078Gs8AQYAqC5WdgAAgNFY2cFdUROf+wMAwO0wJuy89957mjNnjgoLC9W6dWvNnz9fTzzxhK/LqlX87ZF2AhYAQDIk7KxatUrp6el677331KlTJ33wwQdKS0vTN998oyZNmvi6PPihmroXqDqBryYCGPc8Abhb/Pl/MG2WZVk+rcAL2rdvr0cffVQLFixwtT300EMaOHCgMjIybvn6srIyhYeHq7S0VGFhYV6tzd9WO1B9N/tHW1N/374IX9VBcKs9auoXHP/jcO/xRdi53d/f9/zKTkVFhfLy8jRt2jS39tTUVG3fvv26r3E6nXI6na790tJSSVcmzdsqnT95/ZjwrZv9nNTU37enP5u++vnzxb+lmnhP3NrN/l6q83dSnZ9dfv58o6Z+Fm7m6nFvuW5j3eNOnjxpSbK+/PJLt/Z33nnHatGixXVf8+abb1qS2NjY2NjY2AzYCgoKbpoV7vmVnatsNpvbvmVZVdqumj59uiZPnuzar6ys1D//+U81bNjwhq+5kbKyMsXFxamgoMDrl8BMwRzdGnN0c8zPrTFHt8Yc3dq9NkeWZam8vFyxsbE3HXfPh53IyEgFBASoqKjIrb24uFjR0dHXfY3dbpfdbndrq1+/frXqCAsLuyd+MHyJObo15ujmmJ9bY45ujTm6tXtpjsLDw2855p7/UMHg4GC1a9dOOTk5bu05OTlKSUnxUVUAAMBf3PMrO5I0efJk/fu//7uSk5PVsWNHffjhhzp+/LjGjh3r69IAAICPGRF2hg4dqtOnT+s///M/VVhYqMTERH366adq2rRpjb+33W7Xm2++WeWyGP4/5ujWmKObY35ujTm6Nebo1kydIyM+ZwcAAOBG7vl7dgAAAG6GsAMAAIxG2AEAAEYj7AAAAKMRdqrpvffeU3x8vOrUqaN27drp73//u69L8pkvvvhCAwYMUGxsrGw2m9atW+fWb1mWZsyYodjYWIWEhKhr1646cOCAb4r1gYyMDD322GMKDQ1VVFSUBg4cqIMHD7qNqe1ztGDBAj388MOuDzTr2LGjNmzY4Oqv7fNzrYyMDNlsNqWnp7vaavsczZgxQzabzW1zOByu/to+P1edPHlSzz//vBo2bKi6devqkUceUV5enqvftHki7FTDqlWrlJ6ertdff127d+/WE088obS0NB0/ftzXpfnEuXPn1KZNG2VlZV23f/bs2crMzFRWVpZ27twph8OhXr16qby8/C5X6hu5ubkaP368duzYoZycHF26dEmpqak6d+6ca0xtn6PGjRtr1qxZ2rVrl3bt2qXu3bvr6aefdv1HtrbPz8/t3LlTH374oR5++GG3duZIat26tQoLC13bvn37XH3Mj1RSUqJOnTopKChIGzZs0DfffKO5c+e6fZOAcfNUze/hrNUef/xxa+zYsW5tLVu2tKZNm+ajivyHJGvt2rWu/crKSsvhcFizZs1ytV24cMEKDw+33n//fR9U6HvFxcWWJCs3N9eyLOboRho0aGD98Y9/ZH5+pry83EpISLBycnKsLl26WJMmTbIsi58hy7ryRc9t2rS5bh/zc8Wrr75qde7c+Yb9Js4TKzseqqioUF5enlJTU93aU1NTtX37dh9V5b+OHDmioqIit/my2+3q0qVLrZ2v0tJSSVJERIQk5uhaly9f1sqVK3Xu3Dl17NiR+fmZ8ePHq1+/furZs6dbO3N0RX5+vmJjYxUfH69nn31Whw8flsT8XLV+/XolJyfrmWeeUVRUlNq2bauFCxe6+k2cJ8KOh3788Uddvny5ypeNRkdHV/lSUsg1J8zXFZZlafLkyercubMSExMlMUdX7du3T/fff7/sdrvGjh2rtWvXqlWrVszPv6xcuVJ5eXnKyMio0sccSe3bt9fSpUu1ceNGLVy4UEVFRUpJSdHp06eZn385fPiwFixYoISEBG3cuFFjx47Vyy+/rKVLl0oy8+fIiK+L8CWbzea2b1lWlTb8f8zXFRMmTNDevXu1bdu2Kn21fY4efPBB7dmzR2fOnNH//M//aMSIEcrNzXX11+b5KSgo0KRJk7Rp0ybVqVPnhuNq8xylpaW5/pyUlKSOHTvqgQce0JIlS9ShQwdJtXt+JKmyslLJycmaOXOmJKlt27Y6cOCAFixYoOHDh7vGmTRPrOx4KDIyUgEBAVVSbnFxcZU0DLmehmC+pIkTJ2r9+vXasmWLGjdu7Gpnjq4IDg5W8+bNlZycrIyMDLVp00bvvvsu8yMpLy9PxcXFateunQIDAxUYGKjc3Fz94Q9/UGBgoGseavMcXatevXpKSkpSfn4+P0P/EhMTo1atWrm1PfTQQ66Ha0ycJ8KOh4KDg9WuXTvl5OS4tefk5CglJcVHVfmv+Ph4ORwOt/mqqKhQbm5urZkvy7I0YcIErVmzRps3b1Z8fLxbP3N0fZZlyel0Mj+SevTooX379mnPnj2uLTk5Wb/61a+0Z88e/eIXv6j1c3Qtp9Opb7/9VjExMfwM/UunTp2qfOzFoUOHXF+ebeQ8+erOaBOsXLnSCgoKshYtWmR98803Vnp6ulWvXj3r6NGjvi7NJ8rLy63du3dbu3fvtiRZmZmZ1u7du61jx45ZlmVZs2bNssLDw601a9ZY+/bts5577jkrJibGKisr83Hld8d//Md/WOHh4dbWrVutwsJC1/bTTz+5xtT2OZo+fbr1xRdfWEeOHLH27t1rvfbaa9Z9991nbdq0ybIs5ud6fv40lmUxR1OmTLG2bt1qHT582NqxY4fVv39/KzQ01PXf5do+P5ZlWf/4xz+swMBA65133rHy8/Ot5cuXW3Xr1rWWLVvmGmPaPBF2qum///u/raZNm1rBwcHWo48+6nqMuDbasmWLJanKNmLECMuyrjzO+Oabb1oOh8Oy2+3Wk08+ae3bt8+3Rd9F15sbSVZ2drZrTG2fo9GjR7v+PTVq1Mjq0aOHK+hYFvNzPdeGndo+R0OHDrViYmKsoKAgKzY21ho8eLB14MABV39tn5+r/vrXv1qJiYmW3W63WrZsaX344Ydu/abNk82yLMs3a0oAAAA1j3t2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYA1DibzaZ169b5ugxJUrNmzTR//nxflwHgLgr0dQEA7n0jR47UmTNnbhhoCgsL1aBBg7tbFAD8C2EHQI1zOBy+LgFALcZlLAA17trLWNu3b9cjjzyiOnXqKDk5WevWrZPNZtOePXskSZcvX9aYMWMUHx+vkJAQPfjgg3r33Xfdjjly5EgNHDhQv//97xUTE6OGDRtq/PjxunjxomtMcXGxBgwYoJCQEMXHx2v58uW3rPV2jnu9y3L169fX4sWLJUlHjx6VzWbT6tWr9cQTTygkJESPPfaYDh06pJ07dyo5OVn333+/+vTpox9++OHOJhPAHWNlB8BdVV5ergEDBqhv375asWKFjh07pvT0dLcxlZWVaty4sVavXq3IyEht375dL774omJiYjRkyBDXuC1btigmJkZbtmzRd999p6FDh+qRRx7RCy+8IOlKcCkoKNDmzZsVHBysl19+WcXFxbes8VbHvV1vvvmm5s+fryZNmmj06NF67rnnFBYWpnfffVd169bVkCFD9MYbb2jBggV3dFwAd4awA+CuWr58uWw2mxYuXKg6deqoVatWOnnypFuQCAoK0ltvveXaj4+P1/bt27V69Wq3sNOgQQNlZWUpICBALVu2VL9+/fT555/rhRde0KFDh7Rhwwbt2LFD7du3lyQtWrRIDz300C1rvNlx78TUqVPVu3dvSdKkSZP03HPP6fPPP1enTp0kSWPGjHGtBgGoOVzGAnBXHTx4UA8//LDq1Knjanv88cerjHv//feVnJysRo0a6f7779fChQt1/PhxtzGtW7dWQECAaz8mJsa1cvPtt98qMDBQycnJrv6WLVuqfv36t6zxZse9Ew8//LDrz9HR0ZKkpKQktzZPjgvgzhB2ANxVlmXJZrNVafu51atX6ze/+Y1Gjx6tTZs2ac+ePRo1apQqKircxgUFBbnt22w2VVZWuh3z2ve6HTc77tX9a2v++T091zvO1Tqubfv5cQHUDMIOgLuqZcuW2rt3r5xOp6tt165dbmP+/ve/KyUlRePGjVPbtm3VvHlzff/993f0Pg899JAuXbrkduyDBw/qzJkz1apfkho1aqTCwkLXfn5+vn766adqHxdAzSDsAPCK0tJS7dmzx2279rKTJA0bNkyVlZV68cUX9e2332rjxo36/e9/L+n/r340b95cu3bt0saNG3Xo0CH99re/1c6dO++ongcffFB9+vTRCy+8oP/93/9VXl6efv3rXyskJKTa59q9e3dlZWXpq6++0q5duzR27Ngqq0EA/AdhB4BXbN26VW3btnXb3njjjSrjwsLC9Ne//lV79uzRI488otdff9017up9PGPHjtXgwYM1dOhQtW/fXqdPn9a4cePuuKbs7GzFxcWpS5cuGjx4sF588UVFRUVV70QlzZ07V3FxcXryySc1bNgwTZ06VXXr1q32cQHUDJt17YVnALjLli9frlGjRqm0tNQrKy8A8HM8eg7grlu6dKl+8Ytf6N/+7d/09ddf69VXX9WQIUMIOgBqBGEHwF1XVFSkN954Q0VFRYqJidEzzzyjd955x9dlATAUl7EAAIDRuEEZAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADDa/wOI/5DAXGA2NwAAAABJRU5ErkJggg==\n" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "target_ligands_num = [len(l) for l in scaffolds.values()]\n", - "f = plt.hist(target_ligands_num, bins=62)\n", - "plt.xlabel('Ligand num')\n", - "plt.ylabel('Frequency')" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 42, - "outputs": [], - "source": [ - "import pickle\n", - "test_dict_path = r'D:\\jiaxianyan\\soft\\github\\UltraFlow\\UltraFlow\\data\\horizontal_test.pkl'\n", - "with open(test_dict_path, 'rb') as f:\n", - " test_dict = pickle.load(f)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 45, - "outputs": [ - { - "data": { - "text/plain": "[13, 14, 15, 16, 17, 18, 19, 40]" - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "test_dict[list(test_dict.keys())[0]]" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 55, - "outputs": [], - "source": [ - "lig_path_sdf = r'D:\\jiaxianyan\\soft\\github\\UltraFlow\\UltraFlow\\data\\chembl\\P49841\\visualize_dir\\total_vs.sdf'\n", - "m_ligs = pybel.readfile('sdf', lig_path_sdf)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 50, - "outputs": [], - "source": [ - "test_m = []\n", - "for i, m in enumerate(m_ligs):\n", - " if i in test_dict[list(test_dict.keys())[0]]:\n", - " test_m.append(m)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 52, - "outputs": [], - "source": [ - "import oddt\n", - "def is_molecule(obj):\n", - " \"\"\"Check whether an object is an `oddt.toolkits.{rdk,ob}.Molecule` instance.\n", - "\n", - " .. versionadded:: 0.6\n", - " \"\"\"\n", - " return is_openbabel_molecule(obj) or is_rdkit_molecule(obj)\n", - "\n", - "\n", - "def is_openbabel_molecule(obj):\n", - " \"\"\"Check whether an object is an `oddt.toolkits.ob.Molecule` instance.\n", - "\n", - " .. versionadded:: 0.6\n", - " \"\"\"\n", - " return (hasattr(oddt.toolkits, 'ob') and\n", - " isinstance(obj, oddt.toolkits.ob.Molecule))\n", - "\n", - "\n", - "def is_rdkit_molecule(obj):\n", - " \"\"\"Check whether an object is an `oddt.toolkits.rdk.Molecule` instance.\n", - "\n", - " .. versionadded:: 0.6\n", - " \"\"\"\n", - " return (hasattr(oddt.toolkits, 'rdk') and\n", - " isinstance(obj, oddt.toolkits.rdk.Molecule))" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 59, - "outputs": [ - { - "data": { - "text/plain": "False" - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "is_molecule(m_ligs)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 57, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'Molecule' object has no attribute 'atom_dict'", - "output_type": "error", - "traceback": [ - "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[1;31mAttributeError\u001B[0m Traceback (most recent call last)", - "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_30244\\668924972.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[1;32m----> 1\u001B[1;33m \u001B[0mtest_m\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m0\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0matom_dict\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m", - "\u001B[1;31mAttributeError\u001B[0m: 'Molecule' object has no attribute 'atom_dict'" - ] - } - ], - "source": [ - "test_m[0].atom_dict" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 58, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'generator' object has no attribute 'atom_dict'", - "output_type": "error", - "traceback": [ - "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[1;31mAttributeError\u001B[0m Traceback (most recent call last)", - "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_30244\\755322164.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[1;32m----> 1\u001B[1;33m \u001B[0mm_ligs\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0matom_dict\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m", - "\u001B[1;31mAttributeError\u001B[0m: 'generator' object has no attribute 'atom_dict'" - ] - } - ], - "source": [ - "m_ligs.atom_dict" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 129, - "outputs": [ - { - "data": { - "text/plain": "", - "image/png": "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\n" - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "smi = 'Br.C[S+](CCC(N)C#N)C[C@H]1O[C@@H](n2cnc3c(N)ncnc32)[C@H](O)[C@@H]1O.[Br-]'\n", - "m = Chem.MolFromSmiles(smi, sanitize=True)\n", - "mw = Chem.RWMol(m)\n", - "mw" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 130, - "outputs": [ - { - "data": { - "text/plain": "", - "image/png": "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\n" - }, - "execution_count": 130, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from rdkit.Chem import GetMolFrags\n", - "from rdkit.Chem.Draw import MolsToGridImage\n", - "import numpy as np\n", - "frags = GetMolFrags(mw, asMols=True)\n", - "frag_size = [len(frag.GetAtoms()) for frag in frags]\n", - "max_frag_index = np.argmax(frag_size)\n", - "max_frag = frags[max_frag_index]\n", - "max_frag" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 131, - "outputs": [ - { - "data": { - "text/plain": "'C[S+](CCC(N)C#N)C[C@H]1O[C@@H](n2cnc3c(N)ncnc32)[C@H](O)[C@@H]1O'" - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "smi_new = Chem.MolToSmiles(max_frag)\n", - "smi_new" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 135, - "outputs": [ - { - "data": { - "text/plain": "", - "image/png": "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\n" - }, - "execution_count": 135, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def neutralize_atoms(mol):\n", - " pattern = Chem.MolFromSmarts(\"[+1!h0!$([*]~[-1,-2,-3,-4]),-1!$([*]~[+1,+2,+3,+4])]\")\n", - " at_matches = mol.GetSubstructMatches(pattern)\n", - " at_matches_list = [y[0] for y in at_matches]\n", - " if len(at_matches_list) > 0:\n", - " for at_idx in at_matches_list:\n", - " atom = mol.GetAtomWithIdx(at_idx)\n", - " chg = atom.GetFormalCharge()\n", - " hcount = atom.GetTotalNumHs()\n", - " atom.SetFormalCharge(0)\n", - " atom.SetNumExplicitHs(hcount - chg)\n", - " atom.UpdatePropertyCache()\n", - " return mol\n", - "max_frag = Chem.AddHs(max_frag)\n", - "neutralize_atoms(max_frag)\n", - "max_frag" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 136, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[H]O[C@]1([H])[C@@]([H])(C([H])([H])[S+](C([H])([H])[H])C([H])([H])C([H])([H])C([H])(C#N)N([H])[H])O[C@@]([H])(n2c([H])nc3c(N([H])[H])nc([H])nc32)[C@]1([H])O[H]\n" - ] - } - ], - "source": [ - "print(Chem.MolToSmiles(max_frag))" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 137, - "outputs": [ - { - "data": { - "text/plain": "1" - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Chem.GetFormalCharge(max_frag)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file