Skip to content

Instantly share code, notes, and snippets.

@greglandrum
Last active October 30, 2017 12:58
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greglandrum/e6e6b011648af0484ff91bdfafaa704f to your computer and use it in GitHub Desktop.
Save greglandrum/e6e6b011648af0484ff91bdfafaa704f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from rdkit.Chem import AllChem\n",
"from rdkit import Chem\n",
"from rdkit.Chem.Draw import IPythonConsole\n",
"from rdkit.Chem import Draw"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAADICAIAAAC7/QjhAABAw0lEQVR4nO3deVxU1dsA8OfOsIOA\nu+CCQomCCYolirlCiSIWijuSS6RWWPoaWSaZlZOmkks/0VxQMwNNRcWFXEFTwRUQFxYXEFMUkJ0Z\n5nn/ODiNKAjMvXfAeb6f/ohxOOcAM/Pce85znsMhIhBCCCG6SqLtARBCCCHaRIGQEEKITqNASAgh\nRKdRICSEEKLTKBASQgjRaRQICSGE6DQKhIQQQnQaBUJCCCE6jQIhIYQQnUaBkBBCiE6jQEgIIUSn\nUSAkhBCi0ygQEkII0WkUCAkhhOg0CoSEEEJ0GgVCQgghOo0CISGEEJ1GgZAQQohOo0BICCFEp1Eg\nJIQQotMoEBJCCNFpFAgJIYToNAqEhBBCdBoFQkIIITqNAiEhhBCdRoGQEEKITqNASAghRKdRICSE\nEKLTKBASQgjRaRQICSGE6DQKhIQQQnQaBUJCCCE6jQIhIYQQnUaBkBBCiE6jQEgIIUSnUSAkhBCi\n0ygQEkII0WkUCAkhhOg0CoSEEEJ0GgVCQgghOo0CISGEEJ1GgZAQQohOo0BICCFEp1EgJIQQotMo\nEBJCCNFpFAgJIYToNAqEhBBCdBoFQkIIITqNAiEhhBCdpqftARAiHqVSGRMTc/bs2X79+jk7Oxsa\nGmp7RIQQ7aNASHRCUlJSRETEli1b0tLSOI4zNjZ2cnLavXt3ixYttD00QoiWcYio7TEQIpTbt29v\n27Zt27ZtiYmJ7JEOHTp4eHhERUVlZGTY2tru27evc+fO2h0kIUS7KBCSV1BOTs7evXu3bNly5MgR\n9gpv3Lixl5fXxIkTBw0axHFcVlbW8OHD4+LiGjduvGPHjoEDB2p7yIQQrakXgTAmJubGjRsRERFO\nTk5OTk5du3a1t7fX19fX9rhIA1NSUhIdHb1ly5Y9e/aUlZUBgJGRkbu7+8SJE4cPH25gYFDpyZMm\nTdq+fbuent6KFSumT5+upVETQrRM+4Hw/Pnz/fr1MzIyevTokepBfX39119/3dHR0cHBwcXFpUeP\nHlZWVlocJKnPlErl6dOnt2zZsn379idPngCAVCp1dXWdOHHi2LFjGzVqVNU3IuKCBQsWLFgAAIGB\ngcuXL5dIKI+aEJ2j5UB47969nj17ZmRk+Pr6jh079sqVK1euXLl8+XJaWlqlgVlZWXXt2pXdL3bt\n2rVTp050y0iSkpK2bNkSFhZ2//599oiDg8PEiRP9/f1btWpVw0Z+++23GTNmWOjrX/Pza7psGZiY\nCDZeQkh9pM1AWFRU1L9//7i4uLfffjs6Olo9l72goCAhIYEFxStXriQkJLArfRUDAwMHBwcWFJ2c\nnLp3796kSRPRfwKiNdeuXfP29r558yb7slOnTuPGjRs3bpydnV0dWjt69OhrP/7Y7sgRePNNiIyE\nGgdRQsgrQGuBUKlU+vj47Nmzx9bW9uzZs82aNav++ffu3Tt//vzVq1eTkpLOnz9/7do1pVKp+tf/\n+7//mzJlSqdOnQQedX2XmJhoaWlZVFTUsWNHbY9FQPn5+aNHjz527FiTJk1Gjhzp6+vbp08fTRtN\nSYGhQ+HGDWjdGvbuhW7d+BgpIaQhQC2ZNWsWADRp0uT69et1+Pb8/Px//vlnzZo1M2bMsLe35zju\n/fff532QDUhhYWFwcLCBgcGbb76pp6cXEBBw7949bQ9KKDExMQDg6OioUCj4bDc7G/v2RQA0M8PI\nSD5bJoTUY9oJhOvXrwcAfX19lt2uoXv37kmlUgMDg0ePHmneWkO0e/fudu3aAYBUKu3WrZuenh4A\nmJqazps3Ly8vT9uj49+qVasAYPLkyfw3XVKCfn4IgFIp/vIL/+0TQuofLeTInThxgqWqr1q1ipf9\nW1ZWVoMGDSorK9u5c6fmrTUsmZmZo0aNeu+99+7cuePs7Hzq1KkLFy4kJSX5+voWFRV9//33HTp0\n+Omnn0pKSrQ9Uj5dvnwZAJycnPhv2tAQwsIgOBiUSpg5E2bOhPJy/nshhPAtQ54hRzkAFCoLlaB8\n6fOfIXLgTU5Obty4MQDMnTuXx2bDwsIAoF+/fjy2Wc/J5fKQkBC2N8DU1FQmk1WaJzx37tyAAQPY\nX7lt27ahoaE8TyRqz1tvvQUAx48fF7CPP/9EY2McNQrlcrx6FR88ELAvQoSjULzyL+Bsefa029MW\nZi2ccmtK9JPouZlzs8qyatWCqIEwOzv79ddfBwAfH5/y8nIeWy4oKDA1NeU4Lj09ncdm6634+Pge\nPXqwIOfl5XXnzh31fy0oKFD9f3R0dLeneR8ODg7h4eGiD5ZnCoXCxMSE47jHjx8L21N8PN65gwMG\n4Ny56O2N338vbHeE8O7+fV14Aa99uHZP7h5ELFOWHcg7UK8DYVlZGbtB6d69u/onNV/GjBkDAIsW\nLeK95XolJycnMDCQ7fu2tbWNiop6/jm+vr6urq4nTpxgX5aXl4eHh9va2rJw2Lt375iYGHFHzafk\n5GQAsLGxEaOz5ctx9+6K/x8yBEtKxOiUEL7oxgs44HbAv/J/VV/WIRCKtEaIiFOmTDl27Ji1tfWe\nPXtMTU1572L8+PEAsGXLFt5brj8iIiLs7e1XrFghlUoDAwOvXLni6elZ6Tk5OTknTpw4c+ZMv379\nfHx8kpOTJRKJr69vcnJyaGhoy5YtT58+/fbbb3t4eKjqUDcsAi4QPi8uDvr2rfj/zp3h1i0xOiWE\nL7rxAh5uMTyuMA4ACpQF8+7Nq0sTPIfmKixcuBAAzMzMLl26JFAXcrm8ZcuWACBcF1p048YNDw8P\n9ifr27dvUlJSNU8uKCiQyWTm5uYAwKKgasY4Pz9fJpOxlUW2yyIzM1OMH4A/c+fOBYD58+eL0Vlo\nKB44UPH/I0eK0SMhPHrhC/hVyRVAxKTipJB/Q+RK+cjUkdNuT5uQPiGxOLGeTo1GRERIJBKJRLJb\ndZMujI8//hgA5syZI2gvIisqKgoODmZld5o0aRIaGqpUKmvyjQ8fPgwKCmLfaGBgEBgYqFpUe/Dg\nQVBQECtCbWJiEhQUlJOTI+DPwCs/v1u9em2PjLwiRmePHuH06ThjBvbujVu3itEjITyq9AJetw7t\n7HDjRm0Pix+pJanWV6zhPGx5tAURC8rrvuImeCCMj483MTEBgOXLlwvd1+nTpwHA2tr6lUmPPHr0\nKCuXw3Gcn5/fw4cPa9vCrVu3AgIC2Jpi48aNZTJZUVER+6dr166NGDGC4zgAaNasmdCXKXyxtkYA\nTEkRq78NG7B/f9y+Xaz+COHVvn3o44OxsYiIv/6KAOjjo+0x8SCzLNM20RbOw4AbA4rLizVsTdhA\neOvWLTZdOWXKFEE7UmGlxXjZp69dRUVFo0aNYnOhb7zxxqlTpzRpLSEhwcvLi7XWpk0b9a0U586d\nGzhwIMdx06dPz8qq3XyC+LKzEQAbNUJek46rNWkSAuDq1SJ1pwPJ7q+MrKysXbt2bdmypV4nq8+a\nhQAYFISImJGBHIdmZlisaeTQrofyh45JjnAe3rr21hPFE80bFDYQ9urVCwA8PDzkcrmgHanMnz8f\nBKo5Iq4TJ0688cYbxsbGwcHBpaWlvLR56NCh7t27s3Do6Oh4QLV4gMhOaY+Pj+elI+H8/TcCoJub\niF12744AFRfUQtONZPdXw9GjR42NjVXJ2FZWVl5eXjKZLCYmpqysTNujU3PsGAJg584VX3brhgB4\n8KBWx6SRPEVej+QecB66XO2SLc/mpU0BA2Fubu7o0aMtLS3FXH+6efMmx3Hm5uaqCcAGyt/fHwCW\nLl3Kb7NKpTI8PPy1114DgB9//FH1eO/evQEgVpyPew38/DMC4IwZYvUnl6OREXIcilOpTjeS3V8B\nZ86cMTMzY5lr3t7elc4MMDc39/T0/P7770+cOKH9DyKFAps2RQC8cQMRcf58BMCPP9byqOqqqLyo\n/43+cB7sEu3ulfFWTlmvLpmmNWNmZnbixInc3NyUlBTV7m+hvfbaa2+++ea5c+f27dvn6+srTqdC\nYEkuvO8z4TjO19d3+PDhGzdu9PPzUz1uZGQEAKWlpfx2x7vLlwEAxNk6AQBw7RqUlICdHZibi9Fd\nXBz4+1f8P0t2t7cXo9/aKy8vT0xMzMzMvH37NjsiraCgQC6Xy+XygoICAHjy5El5eXlZWVlhYSEA\n5OXlKZXK0tLSoqIiAMjNzUXEbt26/e9//2twJ6UkJCQMGTKkoKBgwoQJYWFhbAE+LS0tNjb21KlT\nsbGxycnJBw4cOHDgAADo6ek5OTm5ubn16dOnf//+zZs3F3u4Uim88w788Qfs3w+ffQbDhsF338He\nvbByJXCc2IPRjFwu/799/3fC5kQb/TZ/v/63lT5/p7XzFVFf6LPPPgOAzz77TNBeKvnll18AYPjw\n4WJ2yrvAwEAACAkJQcSsrKzw8HBBd8Gz/Yj79+8XrgtedO2KAHjmjFj9bd0qanJB/d6tUVhYGBMT\nI5PJvLy82PGf9prFaUNDQ2Nj44ZVFz4lJcXKyop9wlS14pOVlRUZGRkUFOTm5lbp/HBbW1s/P7/Q\n0NDExMQapn/zYNs2BMCBAxERlUps3RoBUJRtZg8ePLh69eqCBQuOHDmiYR0VhUIxevRoAPBc45lc\nnMzXCBkB7wgBYPz48SEhIdu2bVuyZAk7EkEEY8aMmT17dlRU1KNHj5o2bSpOp7xTv0W7dOnSqFGj\nBg8ezK4xhe6u3iorg2vXQCIBR0exuhTtDjQ5GfbtA2dn2LUL9u6FS5dgxgzBO62BrKwsdpdz+vTp\nixcvKhQK1T8ZGhpev37d09Oza9euAGBmZqavr6+np8d2qTZq1EhPT09fX59NIZqbm7MjYtgkh4WF\nhUQiGT58eExMzK5du/xV98H1W2ZmpoeHR1ZW1qBBg7Zv317VZ1qrVq2GDRs2bNgwAMjPzz99+vSp\nU6diYmLOnTuXlpaWlpbG6n5YW1tfvHixRYsWgo97yBDQ14eYGMjNBUtLGDIE1q2DvXuFfmHn5eUN\nHjw4JycnPT0dAKRSqb29fZ8+fdzc3AYMGNC2bduaN4WIM2bM+PPPP83NzRf2WNjJiO+jZ/mNq89z\ncHAAgIPirs2y+5v//e9/YnbKr2+++QYAFixYgIhHjx4FgP79+wvXHStQt23bNuG60NzFiwiA9vYi\ndunhgQC4Z4/gHa1YgQA4dSoi4vXr6OGBCxcK3mkVUlNTw8LCAgICHBwcOLXZM6lU6uDgEBAQEBYW\nduHCBYlEYmhomJ+fX+eO1q1bBwAeHh48Dl44Dx48YDllrq6udfup5XJ5fHx8SEiIr69v06ZNOY4z\nNjYWKVV7wAAEqNgFFBkpt7a+6OcnaIeFhYXsuOy2bdsGBASwc1LVQ4+9vf2kSZM2bNhQkyNp58yZ\nAwDGxsaqypH8EjwQfvfddwDgJ/AvvZKtW7cCQJ8+fcTslF/ff/89AHz11Vf4dH9kr169hOvugw8+\nAICN9XinbWEh5ubi2bN4+DBq8NlbO8pWrRAARUiOnzIFAXDlSkTEqCgEQCGveyopKytT/4BW/7Qy\nMzNzc3MLCgqKjIxkC3vMxo0bAcDT01OTfnNzc42MjCQSSUZGhsY/hLBycnDw4JTWrW2cnZ15yf6L\njIxkv+HffvtN89ZebtkylEgef/IJIpYUFZmYmEgkEuFicGlp6eDBg1kUvHXrFnuwoKBANbVuaWmp\n/jJr2bKlKuf2+SR5FkT09fWFW7sRPBDeunWL4zhTU1NNrhxrq6CgwMzMjOO4tLQ00Trl188//wwA\ns2fPRsQLFy4AQLdu3YTrbtq0afX8HnrxYmSfutnZ+MknYvSYlZXVyMzM09UVRVjL6dEDAfDkSUTE\nRYsQAGfOFLxTxL1797q6ulZax7KxsRk/fvzq1asvX75c1SkxI0eOBIBVq1ZpOID3338fRKm2oYnC\nQnRzQwDs0+fuv//++/JvqIFvv/2W/bbFyWZ4lJLStUWLJk2asHVNNm0rUAxWKBQsUbFFixbXrl2r\n6jmJiYmhoaF+fn7sUHEVU1NT1bVXTk4OO4VbKpVuF7KohRgl1lhq/u+//y5CXyp9+/Zt1KjRvn37\nxOyUR+zP//HHHyNiUlISAHRW7QQSwMyZM+v559HixThlCm7fLl4gPHjwIAD07dtX8J4UCjQ2Ro5D\ndss1ZgwC4IYNQnd76NChd955p9KcZ02uHcvKytgVveYXmjt27ACAHj16aNiOcEpL0dMTAbBNGz6n\nBoYPHw4AbHa0sLCQt3arxmpUsVM8165dK1AMViqVU6ZMAQBLS8sLFy4gYk3qfN24cWPjxo2TJ0+u\nlH4llUolEgnHcevXr+d9qOrEOH1iwoQJLVs6nzrVUoS+mNjY2DNnzgDAG2+8IVqn/GLbJ9jJ8iJk\nstTbZJk7d0Amg6NHAQCmTYOICMjNFalr8Y65uH4diouhfXuwsGAdAwA4Owvd7d9//3348GF/f//c\n3NykpKTQ0NCJEyd26NDhpd948uTJ3NxcR0fHmjy5ekOHDrW0tIyPj79+/bqGTQmhvBz8/ODAAWje\nHKKjoX173lpm0zyOjo7FxcXHjh3jrd2qsbvAvXv3AoCXlxfHcYcPH2a7WXg0e/bs9evXm5iY7Nu3\nr1u3bnK53Nvb+8svv6z+u15//fUPPvhg/fr1165dy8vLi46OZjm3EonE0tLS09Nz8uTJ/I6zEjEC\n4ahRk/PyLq5dO+jBAxF6g/T09BEjRpSVlU2ePLnSTXctlJdDcjI8fMjr0GpBPTKpB0WBiNBFreTm\nwubN4OEB7dvD3Lnw668AABIJLFgAwcEAANnZgo9BvEConptaXAw3boCeHnTuLHy3lwHAx8eHJXbW\n3P79+wFAVbRPE0ZGRj4+PgCwbds2zVtT6dmz55gxY1auXHnp0qXy8vK6NYII06ZBeDhYWMDBg9CJ\nv0TF7Ozsu3fvmpmZsRlmFpyExgLhnj17AMDKyqpHjx68x+Cvv/56+fLlBgYGf/31l5ubW3l5+bhx\n46KiojZu3Pigxp/+5ubm7u7uMpksNjZ227Ztjx8/zhbh3S7o/abKsGEIgCtWCN5RXl5ely5dAGDw\n4MF1r+tWDypdhYeHA8DIkSMRkb0OmjZtKlx3P/zwAwDMnTtXuC5qoqgIt29Hb280MEAABEATExw7\nFg8cwMWL8fx5RMRvvkFPT2zUCIUuEs4SnsUoOxcUhAAYHIyIeO4cAmCXLoJ3isjqAKtyGWqObYE/\nyVY0NXbkyBEAsLOz42tfXVpamvpHXFX5Pi81e3bFK5CnH/Q/qll3dl9obW0twp5ChULBKuCwdTuW\ngfLRRx/x1X5ISAgASKXSHTt2IKJSqZw6dSoAWFhYnGdv3dorKioyMTHhOE7odCqRAuH27QiAPXsK\n20tZWZm7uzsAODg41OoVX1k9qHTFksq8vLwQMT8/HwBMTU2F627p0qUAMGvWLOG6qIZCoTh06FBQ\n0MlGjSrin54eenri5s0vThD96CMEQKkUhVvTLCkp0dPTk0qlYpTIevddBMBduxAR161DABw/Xug+\ns7KyAMDS0rK2H8E3b2K7dmWennF8FRAuLy9v06YNAJzhqVCCUqm8evXqunXr/P39WTVBFX19/REj\nHs+ejbt3v6Sw+alTyHFoaIjR0bwM6hmLFi0CgJkzZyKijY2NSNdbiKyY1JIlSxDx4sWLAGBlZcVL\nDN64cSPHcRzHbXi6tj179mwAMDEx0fCCid3Irlu3TvNBVkOkQFhcjBYWCIA12DFSd9OnTweAVq1a\n3b59W6OGxo3Dp0f34ezZWEXik6AOHz4MT7dYyeVydqklXHcsN2eGeEU8KyQmJgYFBbFSHS1bdpNK\n0cEBZTJ8aV53SAhKJAiAH36IQpQ4jo+PZ1dU/Df9nJ89PI7371/CEk8++QQBcPFioTutcyrQsmUI\ngOPG8TkY9qH56aef8tnoU/fv31fVebGwsFJNNgCgrS36+WFoKCYmolKJhYUVpzIolZifj+vXV1yc\n8I4dLLNp0yZ8+qkVzOYDBMbmmVR/dL5i8I4dO6RSKcdxqrRzdviBgYFBVFRUHRo8cuTIlClTTp8+\njU/zery9vTUcZPVECoSI+MEH/03/CIHtNzA2Nv7nn380bev5SleiH3B44sQJAHj77bfZl1KpFACE\nO8Tjt99+AxFPy7px48a3336rXmTS3t5+wYIFqam1OB0mIgKNjREAPTxQk/v/F1q/fj0AjB07lud2\nn8PWTszNzdmF+ZjBgz91ckoR/hwxmUwGAIGBgbX9xkGDEAD5zQE/f/48ADRv3lzoY2ry80sOH8b5\n83HgQDQ1/S8iAqCVFX7yiUhbdNh96pUrVxAxKioKALp37y5gf0/l5+cbGhpKpdIffvhhzpw5rVu3\n9vDwWLt2rSZ3DocOHWJHfMtkMvbIihUr2IV7eHh43dr84osvVBNU9+7dEyG3VrxAGB2NAGhnJ8im\nrP3797NLEn5qo6gf67xqFXp7o+jp3WfPngWAt956i33JClNpWKyvGqwEwXjhZ+Tu37//1ltvqeKf\nlZXV559/Xudr0n/+wZYtK9bU+Eptf/jw4erVq21sbKRS6ahRo/hptGrs1p8Vf1AqlRYWFgBw//59\nofsdO3YsANQ2Kz0/Hw0NUSrFbH5Ov/mPo6MjiFuCSqHAxEQMDUU/P2zbFjkO588XY4tOXl4ex3FG\nRkbstKaSkpJGjRpxHHf37l2hulTz0UcfsYIvlTKkOnbsqMrbrHlrR48eZWl9rPQHIm7atInNkWqy\nSTEmJoYtG7Mv33zzTQDYu3dvnRt8KfECYXk5tmkjSMXkixcvsj+q+rlCGlEo8O+/cdkyLCvDsjJs\n1gwB8MoVfhqvGZbR17VrV/Ylq3GczfvHz1MREREAMGLECIHaV1EqlR06dDAxMfH19Y2MjNT8DiAt\nDR0cEABtbIrOnbtY53YKCwu3bdvm5eWl2l1uZGTEcdw333wjaCLD4sWLAeCTTz7Bp1kerVq1Eq47\nlbqlAu3YgQD4dJ6CTwsXLgTRS1CpS03FxYsxLg5HjMCUFAEDIUvU7KmWMcGqCqxZs0aoLtWsXLmS\n3a5t3rxZVeelcePG6kGxRYsWqjovJVVnSJw9e5bVlVUtqfz111+sjpqG58e9MK8nICBAkzarJ14g\nxKdZWPwuBNy7d48Vb/X39+et0du3USJBY+OKU+imTUMA/PJL3tqvgWvXrrHLNPaltbU1AAiXOqXa\nXSRQ++oSEhL4zUB58gSHDlX27j3OyMiotlMCCoUiJiYmICCAvaXZZ4S7u3tYWNjKlStZUPT19RUu\nZWb8+PGqXIBdu3YBwLvvvitQXyosFUhPT6+4lieVT5qEAPh0DoxPqhJUwk17vBTLTE5MxPHjBQyE\nLDFt+vTpqkc2bNgAAEOHDhWqy6fYoVHP366p13lhC4cqJiYmqpzbx6rMCcSEhARWjW/8+PGs/NDh\nw4fZLqzv+ci0nzhxIgAsXrwY+c7reSFRA+HFi7h8OT58WLEWrbmioiI2z9anT59qrlzqol8/BMCw\nMETEmBgEwLZtsYpyU0K4desWANjY2LAv58+fHxQU9OjRI14aLy4uDg4Onjx5suoRNkHn7u7OS/vi\nKyuTBwQEAADHcYsWLarJt7A8nVatWqne8y4uLiEhIerTkocPH2Zzla6urgJNV7LdPufOncOnZbeC\ngoKE6EhdXFwcADg6Otbqu8rLkdVeTUgQZFS9evUCgD/++EOQ1mtAtUXniy9QuNXhCRMmAMDatWtV\nj/z777+aVzB/qV27drHbtZ9//rn6Z968eXPTpk1Tp07t9OzeSalU6uLiMnPmzFWrVrEEN29vbzap\nc/r0abZ8M5On0oBsjkqVJNG+ffs6TGDUnKiBkN9ykUqlkh1P1aFDhwfVp0LXwdq1CIDvvMN6Qltb\nBMDjx3nupWosu71ly5a8t3zo0CG2Vi+RSK5evcoePHnypPrLroEKCQlhp6ROmjTp+dK9THp6ukwm\nU8/T6dy5c3Bw8M2bN1/4/ISEBPYm7NChQ1JSEr8DLikp0dfXl0qlLBGATZGJcAYIy40aV8vUz7Nn\nEQDbtRNoUBWpy+JMS1Tj/HnU18daXiTUApuUjouLU3/Q1dUVAHYLtjc2Ojqa3a599913tfpGVucl\nODjY3d2dtcDo6+v379+fzSikpaWx68WAgAC+btpUeT0PHz5ExBkzZoCQubViB0L1tej8fKziw6pG\nWGaRubl5YmIif2N86vFjNDREiQTZbOTXX1ek6oslJycHACwtLXlsMysrS3UqfceOHY88TU3MyckZ\nP35806ZNWWnTBi0qKopNcrq5ubG3EJOdnR0aGurm5qY6V8ja2jowMLCa447j4uJYNH348CHLL2jU\nqFHd0sGrwvZTd+rUiX3JKpbxHm6f9+mnnwLATz/9VKvv+uMPNDND4bbYPHjwQF9fX19fX/0PJz65\nHBs3RgCs4tJII4WFheyYxkqT0qyihUBp2//8k25iYgJPi/jXWWFh4bFjx7777jt2huKWLVvY40ql\n8osvvvDx8alJWdGaY4VwWS/sKFbhcmvFDoTqa9ELF6KeHjo4oK8vBgdjZCSmpta0KXYKjL6+/t9/\n/y3UcH18EADZqm9yMgKghQWKsL0aERHj4+MtLCxMTU1lMlltF3KeV15eHhYWxjJuTExMgoOD2Ue8\nUqncvHkze1kbGhrWochIPXTp0iW2bPzaa6/Fx8eHhYV5eXmpzkKzsLDw8/N7aZ7OhQsXWEUSNtlQ\nXFzM0iz19PRWr17N11DZy3jEiBGPHj3KycnhOM7Q0FDoLQSI2LdvX6hNiqZqg11JCd65I+DAhgwZ\nAgC//vqrgH3UACt7HhLCf8vsSDVnZ+dKj1+5cgUAWrRoUdVxH3V2+TI2boz9+sn8/f35ul1jGV6V\n0jJ4HznL62GZ20Ln1oodCNXXoj/9FKXSZ7byAGCLFujujsHBuWFhYRcvXnzhBNfJkyfZTbqwxwbt\n3IkAqLoGcXFBANy5U8Aen4qPj1c/Fs7GxiYsLKzOr7OLFy/27NmTNeXl5ZX+dJ/BzZs3PTw82ONv\nv/22IDfWWnL37l1WI5StW7Aw7+Pjs3PnzhpeVVy4cKF169bs1pnNmiqVymBW5xQgMDBQ87e9QqH4\n66+/Bg0aZGxsPHr06I4dO+rp6Ymwn0ypVLIswZofRyfaGVhLliwBgNGjRwvYRw38/jsC4KBB/LfM\nEiB79ux59uzZSlc8bD7g7NmzPHaXnIzNmyMAjhrFZ4ZDcnIyADRt2pTfW8BKbt++zeb8WBRgCwcC\nfeaLFwizs58pF8neTqWlmJiIYWEYFIReXhV/MwB0c0tlnzh6enq2trZeXl7BwcGRkZGpqampqaks\ns3bOnDnCjri0FJs0QQBMTERERUjIv2+++afwJwCdO3eO3boNHTp0//793bp1Y78KBweH2m5QLSgo\nCAoKYpvxra2tw1juz9NkGXYx0aRJk9DQUBFKHYosPz+/ZcuW5ubmzs7OISEhdZhty8zMdHFxYb+i\nY8eOsQc3bNjAtg+///77ddvhq1QqY2NjZ8yYwV7GAMBxHLvuadWqVWRkZB3arJX09HR28/H8PxUX\nF6elpZ06dWrfvuSVK3HePJw0Cf39RToDa/v27WZmZhKJpJr5anHk5qK+PurrIx9H8P7n+vXrzZs3\nV+VnVUrIZPPV8+bN46u7O3fQxqai4gTvZSJff/11AIiNjeW53Wex44Oio6PxaW7tkCFDhOhIpECY\nmorNm2Nw8Mt309+6hZGRuHJlnK+vr729PfsQV8eu8d977z3e78Rf4MMPESD3hx8Q8d69e1Kp1MDA\nQLjNfIh4/PhxtsQ1atQott9WqVSGh4fb2dmxH79Xr141rN0XGRnJZgj19PQCAwOfPHnCHj969ChL\nBuM4zs/PT7vrMcIpLy9nu0s1+QELCgrYuXEGBgaqy4jY2FgWw5ycnGo1UXP16tXg4GD16pcODg7B\nwcEpKSlPnjzx9PQEACMjI6HTJnfv3g0A77BEMDVsvpTp23eGapLG0BB/+umZRQ3er5rkcnlQUBDr\nety4cWIe4l2V/v0RAHk8C/b27dvsMJy33npr8uTJnTt3Vi1XA4BUKmUvDBsbm3v37mne3b//or09\nAmDv3ijEhpRZs2aB8BnOX3/9NTytf/TgwQOpVCpQbq0YgfDRI+zYEQFw6NBalyorLS1NTEwMCwsL\nCgry8vJq3rx548aNDQwM+Donunr3YmM92rdv3749u2Fii7fqec/82r9/v7GxMQCMHz++0rRJWVlZ\naGgoOy4AANzd3a9UvcH//v377FMVAFxdXS9dusQeV0+Wsbe3PyJ8HS8tunnzJgC0bt1aw3YUCoXq\nM1o1I3rz5k12gmjr1q1fWlk/IyMjJCTEzc1N9anXpk2b5/N05HI5S43jOE7QypMLFix44YSKl5eX\ngYFB27ZtXV1dp09fNH06LliAa9fi3r3400//LWp8/DF6eGBwMG9lB+/evcvO7jY0NAwRYl2uTpYu\n5bP4+f3791mi8oABA1ST8w8ePNi9e/fs2bNdXV1VZRwYOzs7f3//rVvjrl6ty2VHTg5264YA6OzM\n802tCisLIHQxXnasrGoXGdtgs0uACrCCB8KyMhw4EAGwWzd+LkzY72Lz5s08tPUySqWSpc6zz6yw\nsDAA6NevnxB97dmzh81VTps2raqb3fz8fJlMZm5uDgASicTPzy8zM/P5pxUVFdna2lpaWoaEhLBJ\n/KqSZV5hbB8S26SsUCjU9wLXwdq1ayttrn/06FG/fv0AwMzM7IXzmbm5uZXydCwtLVmeTjUrK6od\nIJMnTy4Topo4Ijv/b+vWrZUer2amV31R4733kOMqbjU0z6s8evQou7xr27YtD1WC+ZOSggDYpAlq\nnrqUnZ3NCsi99dZbqomZSlRVWmxtbdn7FADc3FIA0NycpU1gdHSNZjgLC9HNDQGwY0cUrlSfQqFg\n8/k3btwQqg/E8vJyNpOckJCAiD/++CN7a/DekeCBMCCgoqAtX8lma9asAVGqbzDsbOVp06YhYkFB\ngampKcdx6XzVtXzq999/Zx+XX3zxxUuf/PDhw6CgIBY1TUxMgoKCcp676ouPj1dtAK8qWebVNm/e\nPHhaApFVpujfv78mDT6/ub6kpITdYUul0l9++YU9raSkJDIy0s/PjyWss9lOLy+v8PDwGl587Ny5\n08TEhOMkU6Zc1yx8v5itrS0AaJIbFR2NbdsiABobo0xWxywMpVIpk8nY2sfAgQPFmeOplXfeSejf\nP/jkSY02cefl5bFSmV26dKlqVeXmzZtsf/rw4cPlcrlCobh48eKKFSs+/DDf2vqZXEITE+zfH7/5\nBg8exCpCKj58iN27o60tvugimU8sj3q5cGehISLitGnT3N3d2bbLhIQEECa3VthAuGhRxbuFx0yo\nx48fs42WNc9500RSUhIANG7cmFWuGTNmDADUsHZJDa1Zs4bdBNRqwj09Pd3Pz48tMzRp0uSFuyyq\nSpbRBewYsz///BMRN23aBHzkIj6/uZ59mrO/gre3t7+/PwuWLDp6eHhs2rQpjxXqq424uLhhw04C\nYKdOtdhT9FLl5eUHDhzgOM7AwEDD283c3IprXJaLUdvL3Ozs7MGDB7N54KCgIDHW+2tvzpw5oNne\nu6Kiov79+7OpzqpW/u7evcteVIMGDXphSnNaGm7ejAEB6OBQcS/O/pNKsVs3DAzEP//EO3eeOUAq\nNxdF2Am1bds2dhEjeE9qWLYEX0dXqggYCHfuRIkEJRL+z/R67733RLgSUXF2doanRR9YTU4eZ8ZX\nrlzJirW/tO7RC507d27gwIHsk7dt27ahoaGqabeqkmV0BEtMYEV7P//8c+CpJvsLN9eHh4cbGho2\nb96c/SEcHBxkMpmGKQ8ZGdi9OwJg06Z44oSmw05MTAwODmb3ghYWFhzH8bIDZMeOikxvCwsMDa3p\nd8XHx7OtAs2aNRPzuInaYuWWXnvttbp9e1lZmZeXF1tITmOHTT7nwYMHnTt3ZtMMNckBycvD6GgM\nDkZ3dzQy+i8oTpgg0v4Wdbm5uawAwvMzUgIpLCxs37593759q6oDVWdCBcK4uLiePY8LdMIoW/7p\nIdbRSGxvk6+vLyLK5XK2pKHKQNEEOxOO47gVK1Zo0k50dHT37t1Vn8IrV65UJct07969UjEnXcA2\np5uYmLDLggEDBgDA/v37eWm8sLBw5MiR8GyVZG9vbwDw9PS8zt/Z0/n5OGxYRd7m0yIetXP79m2Z\nTMZy0Jn27durTtgYMWKE5me83b+P3t4IgJ06FY0ePf6lObqhoaFs/0mPHj3q+Sy96gyEOvxNU1NT\nhw4dCgDNmzdXFTKsJDc3l+3P6dq1ax3KCBcV4fHjuHAhenrivHli7G95HntnbecxubZqJSUlgwYN\nYq9h3i/rBQmEd+7csbKyMjAw+OorQfYDFRcXW1pagijFqBAxMzNTKpUaGRnl5OQUFRVNmjRJIpGs\nWrVKw2a/+eYbNoG2ceNGzQdZXl6+ZcsWNsfCVqcaN268Zs2a+jnpJLRKJ92wjzMez+5QKpVLly7N\nVTsOmK0DndD83u1ZCgUGBiIAchwGBdU0gfDRI1yzBvv2RXt7Jxb/mjZtOmPGjNjYWJb//Pfff7N3\nkLOzMy+lOjZsQGfnCVDtVsj8/Hy2qgQAAQEBDSJdi60B13C25t9//w0PDw8ICGB33j169LC0tKzq\nMrSwsPDtt99md5yar/KIc4DU85YtWwainGOqUCjY1WeLFi1qdWJiDfEfCPPz81lRj759+wr3Wp86\ndSoAfPPNNwK1Xwm7EvHz82OTbObm5m5ubgEBASEhITExMbW9rFYqlTNnzgQAAwODiIgIHsdZWlrq\n6+vLrjFFONy13goJCYGnB5jdvXuXRQLhulMoFCYmJhzHaZibWpVffqmowVR9DYmiIvzzT/T2RgOD\nihkzd/eQsWPH7t279/kVwRs3brCE/tatW1+4cEHzQd66dUs1S+/r61vpV3Ht2jV2zkajRo3EuYHg\nRXh4OFSbKJ6Tk7N79+7AwECWF6rSpEmTjz76qKr749LSUjZn06ZNG15ui8U5QOp5KSkp7Jpb0LqA\nSqVy8uTJAGBpaXnx4kUhuuA5EJaXl7MNyPb29gJ9KDDskt/Gxkackig7duwYOXKkVCrlOI7tXlCn\np6fn6Og4duzYRYsWRUVFVX/noVAo2B/V0NBQiA0xH330kZgLqPXTpEmTAIAVBd23b5/QS/pXr15l\nMzbCdXHwILZujZcvv/hfr19Hf380N/8vjWLwYNy8ucrEQiY7O5ttojczM+Pl+G+lUhkaGspKXtjY\n2Bw9epQ9/tdff7Ecok6dOjWsSn55eXkGBgZSqVQ94bOoqIgdaevu7q6+/8/ExMTd3Z2dZ1tNYFAo\nFKNGjWKzpsnJybyMkwXC/HwcMgS7deOlyZpi1TmOC3kyD7v9MDU1Fa6QDc+B8LPPPmNXQ4JuLkG1\nHX5C1/hhrl69yqaS2D1oZmZmdHR0SEiIn5+fi4uL+ukkjKWl5QtvGeVyOZtsMTU1PXz4sBBDZfss\nX+3N8i/FVkzZa+P7778HgFmzZgnX3R9//AEAw4cPF64LRHz06JnMwKIiZLd55eV4/nxFCHRwQJkM\naz7TVlJSwo7Hk0qlGi5Uq1y9epVNFHMcN3XqVFaChE2gafHQ3Tpzd3cHgM2bN8fHx7PgZ2RkpH4R\n7OLiEhQUFB0dXZMjUZVKJZvNsrCw4OVGXF1BARoZoUQi4PbB57FTgDQ816Iac+fOZZNnhw4dEqgL\n5DcQskPO9PX1VVeCgmL1PtQPehbIw4cPWfWjkSNHvvAGtLi4OD4+fv369TNnzhwwYIBqP6z6u8XB\nwWH06NGscKiFhcWpU6eEGKpSqWQ3rK9q4bSakMvlRkZGHMexfQtsrljQrSNss+n8+fOF6wKfq3y9\nbBmyAqiZmThtGv76ax23t7Ni4mwHSEBAAC9zXHK5fObMmar6iIaGhsLWxxfSL7/8AgBsgxMjkUhc\nXFy++OKLgwcP1ja0z549m907ClRPdfBgBMBNm4Ro+8ViYmLgudzax48f81KPe/ny5SymCF2Dl7dA\nGB0dzbaEbxLrj8B2+DVp0kTQVffi4mJW/6lHjx41Xwus6pbR1tbW0NCQ3wLz6viqK9agsV23dnZ2\n7Eu2EsZLlm9V2HrPToFPJqlU+bpSINTQ9u3b2Y3Ou+++W4eNjyqPHz8OCwtzd3dXFdL88MMPG3Te\nckZGBrvpYYyNjfv16xccHBwdHV3b89FYfpyBgcGBAwcEGu3q1QiAI0YI1PwLqHJr1XNY/Pz8TE1N\nVSXF1dPKam7Dhg0cx0kkEhGOquYtEN69e9fZ2ZkV8hBN165dAWDPnj0Cta9UKtnEkY2NjSa5J+yW\ncfny5YaGhhzHqcqEHjt2zM/Pj8d15p07d4JgBdobiq1btwKAj48PIhYUFEgkEn19fUGvlqytrQEg\nJSVFuC7wuczAZctw6FCcOhXHjeMhECLi6dOn2cmUb7zxxu3bt2v1vcXFxZGRkb6+vmxrBAsYvr6+\nkZGRAhWKE1NWVtaPP/44ZswYdjKXelDs27fv119/HRUV9dKrB3ZnKZVKa3uGTK3cuYMch2Zm/B83\nUQ223LNkyRLVIyy7UEVfX79nz56zZs3atWtXDUsI7dixg+VkiDOXwOfUaH5+vsin+fz000/w9ORG\nIWxbuhQAzM3Nq6lwXSuffPIJAIwbNw4Ry8vLHRwcgNe6qezAvC+//JKvBhsiVhBkwYIF+LRob9eu\nXYXr7sGDBwDQqFEjoV/8lTID+b0jZFJTU1nug5WVVU1u4xQKRUxMTEBAAKuTyT7o3d3dw8LC6sMJ\nEkLIzMwMDw8PDAx0cXFRny+VSqUODg4BAQFhYWHPb5/ftGkTq5uxfv16oUfo7IwAKGahApZb27dv\nX/UH79+/HxkZGRQU5Obmpro8Uk2M+fn5hYaGJiYmvvBdExkZybKQZDKZOD+CqAfz8k61w69ut94v\nsW1buVQ6Z8AAVQERzd25c4clobFkInZAeadOnfja7cdq7ogwk1CfsdOG2TwBq0w7ceJE4bqLjo4G\nADc3N+G6YCod5ylEIETEx48fs13Spqam1WQ1JyYmBgUFqY7WAwAXF5eQkBCd2rTz5MmT6Ojo4ODg\nShk07ErC19c3JCQkPj5+x44dbNlo2bJlIozqm28QAD/+WISuKuTl5enr60skks8//3zv3r3P7xfI\nz89nv6hBgwapzspmOnbsWOnJR48eZb9MMecXG3YgxKelDTZs2MBzu3FxaGKCALhyJb8Ns70TU6dO\nRcSysjJWa4qv3YTu7iNNTU0bVoY671jpn1u3biHi9OnTAWDp0qXCdffzzz8DwIwZM4TrQmRyuXza\ntGnwogOh0tPTZTIZW3ZlOnfuHBwczHvJqwanuLj45MmTP/7445AhQ1iGuQorcPHDDz+IM5Jz5xAA\n27Xj/9jIqrCUFvWfWv2er9KTFQpFYmJiaGion59fu3btBg8erP6vqlM4RH5DNfhAyFJVBw0axGej\n6enYsiUC4Kef8tksIiKmpKTo6enp6+uzT+pff/0VAJycnDSfWHvyBDkOTUzK5fJX7bj5msvKymLv\nSfb7XLdunZeXl6B7bNgCSWjNS202EKoDoaZOnZqVlRUaGurm5qZKgbG2tn7+SEWikpqaGhYWxqrM\nfPnll6JN8SGiUomtWyNAlbtO+RUWFiaRSDiOmzlz5ldffdW3b99KN8dt2rQZO3bsqlWrLl++/PzU\nl/raakJCAjvaacKECSKXxGrwgTAvL8/Y2FgikfBSKQoR8ckTfOMNBMB33+XhLLIXYYWm2LHLJSUl\nLNVC80qYsbEIgN278zHEBuvAgQMg2JmRL8QqeQqXCaxF4eHh7KRo1WKYpaXl5MmTjx49qpul++qG\nl40EtfLhhwiA338veEe7du1is77qVejkcnl8fHxISIivry9LKFUxMzNzd3dnObfsXE+VlJQUdhaV\nt7e3oHVqXqjBB0JEZDXo1HOW6k6hQC+vip3JQqw7IiJiUlKSRCIxMjJiBxSwuTVXV1cNm/31VwTA\nSZP4GGKDFRoaKpVKBwwYIE53paWlBgYGEomkIW4Vr4kzZ85MmTKlc+fOXl5eYWFhmhfpJiKIjEQA\nfFpqVyjR0dFsY9jChQureZrq5pjlBqqwWgSBgYHh4eFXrlxhi0QDBw6s7aYUXrwKgZDtGWjatOln\nn322YcOG8+fP16TEw4t9/DECYLNmKHAqPCtExw4gLCgoYCf4HGPJD3U1bRoCoCjr8fVXUVERe0d9\n9tlnIlyJsyN/7e3the5Iu8S/pyGaKCpCExOUSGpRY6i2Tp8+zdJe2MxWDWVkZGzfvv3TTz91dnZW\n1Vtgq9FQ47OohPAqBMJp06axHSfq1xqs+KdMJouKiiqs4VHNCgX6+6OREf7zj8BDxvPnz3Mc16hR\nI5Zh9d133wGAu7u7Jm326oUAqNu11RDV9oYPHjxYk73hNcHyfjU/8pcQfrGJrd9+E6TxCxcuseKx\nU6dOrXNyQ15e3oEDB+bNm9evX7+ePXv+8MMPgpanrl6DD4TsnAEjI6OlS5cuWrRo9OjRnTt3ZtPW\nKmVt26KlJbq5YUAAhoRgTAyqz/AoFHj1Kj54UPGlKEc74dMsf7bdLTc3l+Vc1bn0mlJZUXNZ9XPo\nslOnTrGb7K5du9Z2b3j1KkVWVlyXlyN/CeFRaCgC4AvL32o4vX3jBnbs+LhLF1cfH59XZqqgYQfC\nAwcO6OnpcRy3detW9cfVi38Oe+cdbNr0v7Oc2X96eujggGPGYEwMDhiAc+eit7cYi8tqjh8/DgBN\nmjRhh0yy2rLDhg2rW2spKQiA1ta8DrEhS0lJUe0Nj4+P17C1kpKSyMhIPz8/ExOThIQE1eP8HvlL\nCF8yM7FZM/zoo8qPZ2VVfPgFBGBYGNb2KjE9Hdu0YVXcnrwCNYNUGnAgTEpKYrfn7KbqJTIzMToa\nQ0LQzw9dXNDQsCIizp2Lu3dXPGfIEFELEyGykzkXL16MiNnZ2WZmZhzHnWe7pmvpr78QoKIoM2HU\n94bvVv2Va6O8vPzIkSOTJ09W7ZGSSqXr1q1TPYH3I38J4UVhYcWdHzurROXQIdTTe+amoGNHnDQJ\nN2zA69df0ua//6K9PQJg7974iiWHNdRAmJWV1a5dOwAYNWpUXSapi4sxPh43bMCxY1E1MT17Ngpw\n9nE1WK5/y5YtWSYxO623bgtOO3aggwOKW+q1ASgtLfX394cX7Q2vXmJiYnBwMMu7YRwcHGQyGUv0\nZdLT00HgI38JqZtKZ5WoKyjAI0fw22/RwwPNzJ4Jii1bVpl2npOD3bohADo7Y06O0MMXW4MMhEVF\nRa6urgDQu3dvTXNtQ0NRVQl+5EjNx1ZbPXr0AIBVq1YhYkZGhqGhYfv27WuYi19YWOUBda9oocc6\nUt8bXv18zp07d0JCQpydnVXxr127dkFBQdeevUKKj48PDAxs1qxZhw4dJun4hhVSL1U6qyQxETdv\nxudqoKJCgYmJGBqKfn5oY4MAOHToC1orLEQ3t4rbx1eyiF7DC4RKpZJtSG/fvn0NC5lX59EjnD4d\nZ8zA3r3x2YVGcbC9H23btmXHI8TGxtb8nITqD6gj6nbs2MEqXXl4eDxfmVYul69atap3796q3OMW\nLVp8+umn/zybP5yUlPT111+r3yaKUGKUkDqodFbJ/PkV93ytWqGXF8pkGBODz18T3ryJaivgFUpL\n8d13K8q28Zp5Vo80vED41VdfAYC5uXnC83+xOsvNfcGLQhRKpbJLly4AUMOy9HI5pqVhdDQePSrs\nAXWvnjNnzrAypI6Ojunp6ZX+ldXPfOHhQRkZGSEhIW5ubqr417p1ayowRuqzSmeVRETg8OHYrNkz\nE6Hm5jh4MC5ciMeP47NlXp4RG4uGhmhtjampIv4A4uIQERqOzZs3+/v7S6XSPXv2DB06VNvD4cfv\nv/8+YcIEOzu7a9euqW/8KCgoSE1NzciA5GSn1FRIS4O0NLh9G+RyAIBeveD992HAAJDJ4KefICQE\nbG3hyBGwsoKiIjA3h//9T2s/Ub2VkZExbNiwS5cuNWvWbNeuXX369FH90/bt2xFx+PDh7MYRAPLy\n8vbs2RMREXHw4EGFQgEAlpaWw4YN8/X1HTJkiPp2YELqmyVLYNAg6N4d5s+HnBxYubLi8bQ0iI2F\nU6cgNhaSk0H18a+nB05O4OYGffpA//5gagoSCRgZASIUFsK5c9CyJTg6auunEVxDCoSxsbHu7u6l\npaWrV6+eMWOGtofDm/Ly8s6dO9+8eXP69OnNmzdPTU1NS0tLTU1lB905Ok5KStqgejLHQevWYGcH\nLi7QqhUMGgSGhrBoETRuDLa20K0b9O8P9+7BwoUUCF8sPz9/7Nix+/fvNzQ03LBhw7hx4yo9obS0\n9PDhwxERETt37iwqKgIAQ0NDDw8PX1/fkSNHqsIkIQ1dVhbExlb8d/kylJdXPM5x8MknkJICUVHw\n6BF8++1/cfRVpffyp9QP6enpPj4+paWln3/++asUBQFAKpV+8cUXwcHB/3s2dhkZGdna2nbpYuju\nDra2YGcHtrZgawuGhhVPWLIEAMDREWxtISdH9HE3TI0aNdqzZ8/MmTNXr149YcKEGzdufPvttwCg\nVCpPnz4dERGxbdu27OxsAJBIJG5ubhMnThwzZoy5ubmWx00I36yswNcXfH0BAAoL4eLFijvFc+cq\nJpb+/BPc3bU9SlE0jDvCJ0+e9O7dOykpydPTc+/eva/erJRCocjNzQ0MDLSzs7O1tbWzs7Ozs7O2\ntlavG0f49csvv8yaNUupVL733nvt27ePiIjIzMxk/9SjR49x48aNGTOGlcMnRKeUl8OyZc8su7zy\nd4QNIBDK5XJPT88jR444OjqeOnWKbaInRHO7d+8eP368gYFBbm4uALRr127s2LEffPABK0lDiM5i\nS4yqZZdXPhBKtD2AlwsMDDxy5EirVq2ioqIoChIevffeexMmTMjNzXVxcfnnn39u374tk8koChLC\nsGUXXVDf1wiXLFmyZs0aY2Pj3bt3s1IyhPCIZSTNnj2blWgghADAnDkV//Pdd1odh1jq9R3hsWPH\nvvzyS4lEsmXLlp49e2p7OOQVdOnSJQBQLyVDCNE19XqNsKysLCAgoHPnzkFBQdoeC3kFPXnyxNLS\n0sjI6MmTJ5WO7iKE6I56/eY3MDDYtGmTtkdBXlmXL19GREdHR4qChOiyej01SoigLl++DDQvSojO\no0BIdBcLhE5OTtoeCCFEmygQEt3FMmUoEBKi42hphOiociy3CLBw6uL0xhtvaHsshBBtqtdZo4QI\nJ7kk2eGqQ3uD9uld0rU9FkKINtHUKNFRl4ovAYCzibOWx0EI0TYKhERHXS66DABOxrRASIiuo0BI\ndNTlYgqEhBAACoREZ1EgJIQwFAiJLnqoeJglzzKXmncw7KDtsRBCtIwCIdFFl4ouAUBX464c0NHH\nhOg6CoREF9G8KCFEhTbUE13U26z3nJZzBjQaoO2BEEK0jzbUE52TIc9oqddSn9MHgEJlobHEWEJT\nI4ToMHr/Ex3ySPFo+p3pmx5tmn5n+t/5fwPAD/d/eCB/oO1xEUK0iaZGiQ75K/cvTwtPbwtvOcqP\n5B/R9nAIIfUC3RESHRJfFO9q6goA+pz+YPPB2h4OIaReoEBIdMhwi+FxhXEAUKAsmHdvnraHQwip\nF2hqlOiQd8zfGZs+dl/evgJlwZetvtT2cAgh9QJljRKdU6gsNJWYansUhJD6ggIhIYQQnUZrhIQQ\nQnQaBUJCCCE6jQIhIYQQnUaBkBBCiE6jQEgIIUSnUSAkhBCi0ygQEkII0WkUCAkhhOg0CoSEEEJ0\nGgVCQgghOo0CISGEEJ1GgZAQQohOo0BICCFEp1EgJIQQotMoEBJCCNFpFAgJIYToNAqEhBBCdBoF\nQkIIITqNAiEhhBCdRoGQEEKITqNASAghRKdRICSEEKLTKBASQgjRaRQICSGE6DQKhIQQQnQaBUJC\nCCE6jQIhIYQQnUaBkBBCiE6jQEgIIUSnUSAkhBCi0ygQEkII0WkUCAkhhOg0CoSEEEJ0GgVCQggh\nOo0CISGEEJ1GgZAQQohOo0BICCFEp1EgJIQQotMoEBJCCNFpFAgJIYToNAqEhBBCdBoFQkIIITqN\nAiEhhBCdRoGQEEKITqNASAghRKdRICSEEKLT/h8HJKv+bakhnwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGB size=600x200 at 0x10C356DA0>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"smis = ['CC(OC(=O)c1c[nH]c2ccccc12)C1CCCCN1C',\n",
" 'CN1CCOc2c(C(=O)NC3CC4CCC(C3)N4C)cc(Cl)cc21',\n",
" 'CN1CC2CCC1CC2n1nnc2ccc(Cl)cc2c1=O']\n",
"ms = [Chem.MolFromSmiles(x) for x in smis]\n",
"Draw.MolsToGridImage(ms)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ms = [Chem.AddHs(m) for m in ms]\n",
"for m in ms:\n",
" AllChem.EmbedMolecule(m,AllChem.ETKDG())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Get some pre-aligned conformations that we can compare"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.28608696583005955"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from rdkit.Chem import rdMolAlign\n",
"o3d = rdMolAlign.GetO3A(ms[1],ms[0])\n",
"o3d.Align()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.48959622635946043"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"o3d = rdMolAlign.GetO3A(ms[2],ms[0])\n",
"o3d.Align()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from rdkit.Chem.FeatMaps import FeatMaps\n",
"from rdkit import RDConfig"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('Donor', 'Acceptor', 'NegIonizable', 'PosIonizable', 'ZnBinder', 'Aromatic', 'Hydrophobe', 'LumpedHydrophobe')\n"
]
}
],
"source": [
"import os\n",
"fdef = AllChem.BuildFeatureFactory(os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef'))\n",
"print(fdef.GetFeatureFamilies())\n",
"fmParams = {}\n",
"for k in fdef.GetFeatureFamilies():\n",
" fparams = FeatMaps.FeatMapParams()\n",
" fparams.radius=1.0\n",
" fmParams[k] = fparams"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"keep = ('Donor','Acceptor','NegIonizable','PosIonizable','Aromatic')\n",
"featLists = []\n",
"for m in ms:\n",
" rawFeats = fdef.GetFeaturesForMol(m)\n",
" # filter that list down to only include the ones we're intereted in \n",
" featLists.append([f for f in rawFeats if f.GetFamily() in keep])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"fm0 = FeatMaps.FeatMap(feats = featLists[0],weights=[1]*len(featLists[0]),params=fmParams)\n",
"fm1 = FeatMaps.FeatMap(feats = featLists[1],weights=[1]*len(featLists[1]),params=fmParams)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Score the features from each molecule against the feature map and normalize using the number of factures in the smaller molecule"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fm0.ScoreFeats(featLists[0])/fm0.GetNumFeatures()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.3184766924162353"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fm0.ScoreFeats(featLists[1])/min(fm0.GetNumFeatures(),len(featLists[1]))"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.38978992264606704"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fm0.ScoreFeats(featLists[2])/min(fm0.GetNumFeatures(),len(featLists[2]))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.39892979275153484"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fm1.ScoreFeats(featLists[2])/min(fm1.GetNumFeatures(),len(featLists[2]))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment