Created
June 21, 2019 10:31
-
-
Save philopon/e8012661ffbe6921a4485cc78b581a15 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from rdkit.Chem import AllChem, Draw\n", | |
"import json\n", | |
"import math\n", | |
"# pycairo入れておくと描画がマシになる\n", | |
"# condaならconda install pycairo" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class MyDrawer(Draw.MolDrawing):\n", | |
" def __init__(self, *args, **kwargs):\n", | |
" super().__init__(*args, **kwargs)\n", | |
" self.labelSizes = {}\n", | |
"\n", | |
" def _drawBond(self, *args, **kwargs):\n", | |
" # AddMolsで書かれない様に潰す\n", | |
" return\n", | |
"\n", | |
" def _drawLabel(self, label, pos, *args, orientation=None, **kwargs):\n", | |
" # drawBondでlabelSizeが必要になるので保存しておく\n", | |
" size = super()._drawLabel(label, pos, *args, **kwargs)\n", | |
" self.labelSizes[tuple(pos)] = [size, orientation]\n", | |
" return size\n", | |
"\n", | |
" def drawBond(\n", | |
" self,\n", | |
" mol,\n", | |
" a1,\n", | |
" a2,\n", | |
" order=AllChem.BondType.SINGLE,\n", | |
" color=(0, 0, 0),\n", | |
" confId=-1,\n", | |
" bond=None,\n", | |
" ):\n", | |
" if bond is None:\n", | |
" bond = get_stub_bond(order)\n", | |
"\n", | |
" conf = mol.GetConformer(confId)\n", | |
" pos = self.atomPs[mol][a1.GetIdx()]\n", | |
" nbrPos = self.atomPs[mol][a2.GetIdx()]\n", | |
"\n", | |
" super()._drawBond(\n", | |
" bond,\n", | |
" a1,\n", | |
" a2,\n", | |
" pos,\n", | |
" nbrPos,\n", | |
" conf,\n", | |
" color=color,\n", | |
" color2=color,\n", | |
" labelSize1=self.labelSizes.get(tuple(pos), None),\n", | |
" labelSize2=self.labelSizes.get(tuple(nbrPos), None),\n", | |
" )\n", | |
"\n", | |
"\n", | |
"def get_stub_bond(order=AllChem.BondType.SINGLE):\n", | |
" mol = AllChem.RWMol()\n", | |
" mol.AddBond(mol.AddAtom(AllChem.Atom(1)), mol.AddAtom(AllChem.Atom(1)), order=order)\n", | |
" return mol.GetBondWithIdx(0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"mol = AllChem.AddHs(AllChem.MolFromSmiles(\"CN1C=NC2=C1C(=O)N(C(=O)N2C)C\"))\n", | |
"AllChem.Compute2DCoords(mol)\n", | |
"bos = [0.9784406545022302, 0.012979723812850874, 1.3205616899744366, 0.008315877390827722, 0.10669231823030785, 1.4816981150975235, 0.005456793610108694, 0.0806786594430909, 0.013789903606537996, 1.2944104702944248, 0.011135325498817041, 1.1538673742568755, 0.10411164313142404, 0.030978566548676048, 1.394088023769632, 0.0010109646189479726, 0.00798664349734253, 0.008616879485495863, 0.0033696727209053118, 0.011179790650372109, 0.9889068709877913, 0.0010711435394571093, 0.005162156921304463, 0.008909131165467779, 0.0010589378969017857, 0.020551019896890562, 0.05451082381585968, 1.7759164234946956, 7.145657445441766e-05, 0.007757988014040067, 0.002475081136868716, 0.0015665020876004401, 0.009955595580055735, 0.027731661074737887, 1.0236447783112426, 0.1255122024139507, 1.5091664330385348e-05, 0.001186956428181641, 0.0011519710972383078, 0.0070593492397864645, 0.008028162619751355, 0.009192130823941153, 0.011183570914398155, 0.012115674300845262, 1.0117403781285537, 9.283764978308958e-06, 0.0007839014762332851, 0.0006867223903871956, 0.0031600190170664746, 0.010137994204679134, 0.006795635570025315, 0.012187105782210208, 0.004979667637893023, 0.11002838536160614, 1.7469381521940066, 0.0005186113238186544, 0.012437797054617119, 0.006486966266930267, 0.04045951543412697, 1.0638827804115518, 0.04823349819999779, 0.009328064060842573, 0.009509618294066111, 0.03843594839605266, 1.0278936991837901, 0.1130561403247021, 8.401603761897346e-05, 0.0008819182816738659, 0.0004514041174912407, 0.004022715616030339, 0.008532024595043186, 0.006964372972699143, 0.00020438702669855067, 0.0003164886287421653, 0.006973659327362498, 0.010383179051536502, 0.005318591953106206, 0.9678317833718142, 7.279483600708612e-06, 0.0009244988409603432, 0.0001850671002207217, 9.071318383679458e-05, 0.00016893606678952423, 0.007757003349667658, 0.010096678958968403, 0.0067695919597537966, 0.9612032033453696, 0.009887105909180682, 0.00505683006440981, 0.007389042801888629, 0.0009025084935686311, 0.9777755718528447, 0.00278124014430248, 0.006497628061305069, 0.001954341030490233, 0.0016771555810710405, 0.002280714968693177, 4.2963009270414563e-05, 0.0002793441199020373, 7.330895727879175e-05, 2.8860372286888835e-05, 2.029405569416621e-05, 0.00026647995284110845, 9.65607225018074e-06, 6.873363352318726e-07, 0.9775333384091595, 0.0024582995290645684, 0.006333448806669546, 0.0012305814641654861, 0.0008845220853441676, 0.0014027883006172289, 0.00021063062085242203, 0.00121106454230427, 3.102492536047212e-05, 1.833913191028653e-05, 1.2000500086473839e-05, 0.00014285262897414464, 1.2836531151539224e-06, 1.9827538016292306e-06, 0.0004703375887043545, 0.9824266115265705, 0.003044222103822038, 0.0011454280811146454, 0.00017239999114531025, 0.00037540602310965016, 0.006111618129440873, 4.2356441814158904e-06, 2.1354811059343814e-05, 4.687596594637363e-05, 1.4931817313182687e-06, 1.0436797326710248e-06, 8.010425273310935e-05, 2.5624962851656306e-05, 6.685008069859574e-06, 0.0008237250822747278, 0.0005473471499016347, 0.00013211377172599694, 0.012194079269406346, 0.939136185651241, 0.006829230326865294, 0.005999616183623115, 0.005366803042010704, 0.00037611706196950703, 2.4970253804714546e-05, 0.00012375205275296652, 8.099922197313013e-05, 3.284693855724886e-05, 0.00040251793937983826, 9.732851736544864e-06, 1.7379583233771555e-05, 4.9996693055098085e-06, 9.485121475814291e-06, 0.0011486035272126648, 1.818327394396688e-05, 9.38549614525247e-05, 1.897163966016494e-05, 7.69237752220605e-05, 0.00622155952198288, 0.0005320831849054851, 4.792247422639036e-05, 4.112630534129344e-05, 3.24282425678752e-05, 0.0004841197234502756, 0.001494847131503437, 0.0034126725076878365, 0.981065509525319, 2.083467043578811e-06, 1.2850197137825272e-06, 8.282974911110896e-07, 1.4264306842603436e-06, 6.407562812635391e-07, 1.0499690678694753e-07, 0.0002665566711449568, 1.7446397035389206e-06, 0.0007989783681314334, 0.0009907627942339502, 0.0009239405887599672, 0.0002330174994574837, 0.00025866729409944973, 8.860914739167984e-05, 0.0017474270030474507, 0.002008052407857735, 0.007399974668330459, 0.9808951848157969, 1.5876417341884365e-06, 7.774890987788344e-06, 4.1311184214685404e-06, 6.812662078420766e-07, 6.405556096869662e-07, 0.0011929963989129563, 2.7407386905270797e-07, 2.598177929452662e-05, 3.897955071217709e-06, 0.0013867065729291895, 0.0004823596602224264, 9.481899327458549e-05, 2.365751741225682e-05, 3.204966724139506e-05, 0.0006956345357415662, 0.006509450827507815, 0.00014627232095645702, 0.002844909355494738, 0.980360104522184, 0.00014807659327668252, 7.400933992983321e-07, 2.1061595760888e-07, 2.582219392140762e-07, 4.508345987495511e-07, 0.0005638625203421856, 0.001110211236233148, 6.739932388304744e-07, 8.498443292964604e-05, 5.5339964228703846e-05, 3.4595606260981484e-05, 0.00025816314629203556, 2.1178651416845968e-05, 0.001953320982846676, 0.001724613267075057, 0.006654161832348948, 0.0015830672842772693, 0.001508247210706509, 7.86336654626983e-05, 8.907259732930833e-06, 0.9815413199593016, 2.2866443326378774e-06, 6.533595119333914e-07, 4.415848145166768e-08, 2.015322148379202e-08, 7.185756402271916e-07, 8.136382827479415e-07, 2.0248098969238097e-07, 3.4521549887187435e-07, 2.7977999640381122e-05, 6.709611192601907e-06, 1.3214270219862873e-05, 4.326965003960512e-05, 6.932193193167239e-05, 0.0006036639968108115, 0.0022815354470530763, 0.003104290779126184, 0.005847434827149734, 0.00025275689584739185, 0.00064127994480481, 0.00011074391170100852, 0.9804580999575294, 1.5666505904026798e-07, 2.125991970564646e-06, 5.755001339505781e-09, 2.531525348870058e-07, 4.137052660959468e-09, 6.894841825758911e-07, 1.659729116096077e-05, 0.0012279900026497402, 3.9916733898865e-07, 0.00010329956354455926, 2.570753998169784e-05, 6.071141168619222e-06, 6.124654157769827e-05, 0.0004982340902760919, 0.005520831593861113, 0.0003349200558576313, 0.003160189568195824, 0.0005676153230789771, 0.002170943467170256, 7.696003207873256e-05, 1.2976233289203189e-05, 0.980990630661944, 5.118368446858434e-07, 2.1835368264760706e-09, 8.86586107711237e-07, 3.11403682497652e-06, 1.0013524428303192e-06, 6.032563004224099e-07, 6.691110938234733e-07, 0.001196609063533444, 0.0006446790360530376]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<PIL.Image.Image image mode=RGBA size=300x300 at 0x116A6DDA0>" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"image, canvas = Draw._createCanvas((300, 300))\n", | |
"opts = Draw.DrawingOptions()\n", | |
"opts.defaultColor = (0, 0, 0)\n", | |
"drawing = MyDrawer(canvas, opts)\n", | |
"drawing.AddMol(mol, ignoreBonds=True)\n", | |
"index = 0\n", | |
"\n", | |
"for i in range(mol.GetNumAtoms()):\n", | |
" for j in range(i):\n", | |
" bo = bos[index]\n", | |
" bond = mol.GetBondBetweenAtoms(i, j)\n", | |
" index += 1\n", | |
" if bo < 0.05:\n", | |
" continue\n", | |
"\n", | |
" v = 1 - bo / 2\n", | |
"\n", | |
" drawing.drawBond(\n", | |
" mol,\n", | |
" mol.GetAtomWithIdx(i),\n", | |
" mol.GetAtomWithIdx(j),\n", | |
" color=(v, v, v),\n", | |
" bond=bond,\n", | |
" )\n", | |
"\n", | |
"canvas.flush()\n", | |
"image.save(\"caffeine.png\")\n", | |
"image" | |
] | |
} | |
], | |
"metadata": { | |
"file_extension": ".py", | |
"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.7.3" | |
}, | |
"mimetype": "text/x-python", | |
"name": "python", | |
"npconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": 3 | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment