Skip to content

Instantly share code, notes, and snippets.

@iwatobipen
Created September 12, 2026 05:24
Show Gist options
  • Select an option

  • Save iwatobipen/8d0e3f2437591110dce95657ab638adc to your computer and use it in GitHub Desktop.

Select an option

Save iwatobipen/8d0e3f2437591110dce95657ab638adc 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,
"id": "7b489aec-de5a-4d57-ad65-6e556569eb6c",
"metadata": {},
"outputs": [],
"source": [
"from rdkit import Chem\n",
"from rdkit.Chem import AllChem\n",
"from cosmolkit import EmbedParameters, MoleculeBatch\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "464bb0dd-3543-44dc-a932-fc509a87f1c2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3 μs, sys: 0 ns, total: 3 μs\n",
"Wall time: 4.53 μs\n",
"True\n"
]
}
],
"source": [
"%time\n",
"rdk_sdf = Chem.SDMolSupplier('cdk2.sdf')\n",
"print(\"__getitem__\" in dir(rdk_sdf))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "68be9977-22db-407f-a637-2e9c9d631faa",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
"<table><tr><td colspan=\"2\" style=\"text-align: center;\"><image src=\"data:image/png;base64,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\"></td></tr>\n",
"<tr><th style=\"text-align: right\">id</th><td style=\"text-align: left\">ZINC03814459</td></tr>\n",
"<tr><th style=\"text-align: right\">Cluster</th><td style=\"text-align: left\">2</td></tr>\n",
"<tr><th style=\"text-align: right\">MODEL.SOURCE</th><td style=\"text-align: left\">CORINA 3.44 0027 09.01.2008</td></tr>\n",
"<tr><th style=\"text-align: right\">MODEL.CCRATIO</th><td style=\"text-align: left\">1</td></tr>\n",
"<tr><th style=\"text-align: right\">s_st_Chirality_1</th><td style=\"text-align: left\">13_S_17_12_14_24</td></tr>\n",
"<tr><th style=\"text-align: right\">r_mmffld_Potential_Energy-OPLS_2005</th><td style=\"text-align: left\">-67.4705</td></tr>\n",
"<tr><th style=\"text-align: right\">r_mmffld_RMS_Derivative-OPLS_2005</th><td style=\"text-align: left\">9.48919e-05</td></tr>\n",
"<tr><th style=\"text-align: right\">b_mmffld_Minimization_Converged-OPLS_2005</th><td style=\"text-align: left\">1</td></tr></table>"
],
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x77443dd1ff40>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rdk_sdf[1]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "29ad2856-0252-4b68-a2b6-3cb1dcda6e0e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2 μs, sys: 0 ns, total: 2 μs\n",
"Wall time: 3.34 μs\n"
]
}
],
"source": [
"%time\n",
"rdk_params = AllChem.ETKDGv3()\n",
"for mol in rdk_sdf:\n",
" hmol = Chem.AddHs(mol)\n",
" AllChem.EmbedMolecule(hmol, rdk_params)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f97fbc70-4d9a-4328-a0da-e20dfb7b4604",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2 μs, sys: 0 ns, total: 2 μs\n",
"Wall time: 3.34 μs\n"
]
}
],
"source": [
"%time\n",
"cosmol_sdf = MoleculeBatch.read_sdf('cdk2.sdf', sanitize=True, coordinate_dim=\"2d\")\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9c1483b4-88a2-4e6d-b336-c237595b79ef",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Nc1nc(OCC2CCC(=O)N2)c2nc[nH]c2n1'"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cosmol_sdf[2].to_smiles()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "782b161a-748b-4d63-af8b-607342142961",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns\n",
"Wall time: 3.1 μs\n"
]
}
],
"source": [
"%time\n",
"cos_params = EmbedParameters.etkdg_v3()\n",
"embedded_mols = []\n",
"for cos_mol in cosmol_sdf:\n",
" cos_mol.add_hydrogens_()\n",
" embedded = cos_mol.with_3d_conformer(cos_params)\n",
" embedded_mols.append(embedded)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "b74710ef-1ad8-41e3-a423-24f61ea87028",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 3.59706665 1.40068263 0.78248951]\n",
" [ 3.47140306 -0.04558058 0.37269855]\n",
" [ 4.68308809 -0.4674032 -0.44992851]\n",
" [ 2.23254933 -0.31278363 -0.38887202]\n",
" [ 2.24338025 -0.75354752 -1.54779306]\n",
" [ 0.92556748 -0.05354304 0.231482 ]\n",
" [-0.15513888 -0.36878027 -0.64474239]\n",
" [-1.48605446 -0.2051096 -0.27621191]\n",
" [-2.45779706 -0.54019887 -1.19959407]\n",
" [-3.7961813 -0.40087554 -0.89524538]\n",
" [-4.50395837 -0.79834283 -1.97020606]\n",
" [-3.64981423 -1.18993867 -2.95841013]\n",
" [-2.40352882 -1.01998748 -2.4556846 ]\n",
" [-4.10839979 0.07204562 0.33106939]\n",
" [-3.16889262 0.40738425 1.25362671]\n",
" [-1.86286314 0.26097808 0.9292148 ]\n",
" [-3.58780367 0.89933761 2.52497328]\n",
" [ 4.03926829 2.02945505 -0.02244835]\n",
" [ 4.26752342 1.51581418 1.66311255]\n",
" [ 2.61733124 1.79962548 1.04621236]\n",
" [ 3.52284248 -0.66331623 1.30878053]\n",
" [ 4.95427624 0.3137165 -1.21311808]\n",
" [ 5.57181257 -0.61607835 0.19222686]\n",
" [ 4.45891888 -1.38565414 -1.03359738]\n",
" [ 0.81027035 0.99746415 0.55485708]\n",
" [ 0.74899844 -0.65104688 1.16159941]\n",
" [-5.55887984 -0.80288003 -2.0302632 ]\n",
" [-3.9328534 -1.56030346 -3.94283118]\n",
" [-3.92655704 1.89017795 2.63040437]\n",
" [-3.54557414 0.24868882 3.33185728]]\n"
]
}
],
"source": [
"print(embedded_mols[0].coordinates_3d())"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "905bdd95-34bf-4da6-a2b6-5d113c003b1b",
"metadata": {},
"outputs": [],
"source": [
"from rdkit import DataStructs\n",
"from rdkit.Chem import rdFingerprintGenerator\n",
"from rdkit.Chem import Draw\n",
"\n",
"from cosmolkit import Fingerprint\n",
"from cosmolkit import Molecule"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "84f2e628-365c-4cdf-bef8-064bb0bb362a",
"metadata": {},
"outputs": [],
"source": [
"fp_gen = rdFingerprintGenerator.GetMorganGenerator(radius=2, fpSize=2048)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "c8dc1ec3-2da7-47db-89a0-2ec0e1b9e9b5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nc1nc(OCC2CCCO2)c2nc[nH]c2n1\n",
"Nc1nc(OCC2CCC(=O)N2)c2nc[nH]c2n1\n"
]
}
],
"source": [
"smi1 = cosmol_sdf[1].to_smiles()\n",
"smi2 = cosmol_sdf[2].to_smiles()\n",
"print(f\"{smi1}\\n{smi2}\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "09383edc-e3b1-4e65-bdb3-b57da4188338",
"metadata": {},
"outputs": [],
"source": [
"rd_mol1 = Chem.MolFromSmiles(smi1)\n",
"rd_mol2 = Chem.MolFromSmiles(smi2)\n",
"cos_mol1 = Molecule.from_smiles(smi1)\n",
"cos_mol2 = Molecule.from_smiles(smi2)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "9a396d4a-6f17-486b-a771-2f1e5690b64e",
"metadata": {},
"outputs": [],
"source": [
"def get_tc_from_rdk(m1,m2):\n",
" fp1 = fp_gen.GetFingerprint(m1)\n",
" fp2 = fp_gen.GetFingerprint(m2)\n",
" return DataStructs.TanimotoSimilarity(fp1, fp2)\n",
"\n",
"def get_tc_from_csk(m1,m2):\n",
" fp1 = m1.fingerprint_morgan(radius=2, n_bits=2048)\n",
" fp2 = m2.fingerprint_morgan(radius=2, n_bits=2048)\n",
" return Fingerprint.tanimoto(fp1, fp2)\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "21dd2f36-c2ef-4047-8c17-116aa04d3136",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5660377358490566"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_tc_from_rdk(rd_mol1, rd_mol2)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "7912b70c-71a6-4f8c-ab70-dbf35439aa0f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5660377358490566"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_tc_from_csk(cos_mol1, cos_mol2)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "7dc27ae6-f811-4478-9a07-b87808446fbc",
"metadata": {},
"outputs": [],
"source": [
"for i in range(len(rdk_sdf)):\n",
" for j in range(i):\n",
" rd_m1 = rdk_sdf[i]\n",
" rd_m2 = rdk_sdf[j]\n",
" \n",
" cs_m1 = cosmol_sdf[i]\n",
" cs_m2 = cosmol_sdf[j]\n",
" rdk_tc = get_tc_from_rdk(rd_m1, rd_m2)\n",
" csk_tc = get_tc_from_csk(cs_m1, cs_m2)\n",
" #print(f\"Tc_RDKit : {rdk_tc:.3} Tc_Cosmol :{csk_tc:.3}\")\n",
" assert rdk_tc - csk_tc == 0.\n",
" #print(f\"####\")\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "99a93805-fccf-43a9-8150-dce4ac1c9972",
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import SVG\n",
"from cosmolkit import Molecule\n",
"mol = Molecule.from_smiles(\"c1ccccc1O\").with_2d_coordinates()\n",
"\n",
"svg = mol.to_svg(width=400, height=300)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "877afad2-b7a1-4f31-b3eb-2cd71161fe67",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:rdkit=\"http://www.rdkit.org/xml\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" baseProfile=\"full\" xml:space=\"preserve\" width=\"400px\" height=\"300px\" viewBox=\"0 0 400 300\">\n",
"<!-- END OF HEADER -->\n",
"<rect style=\"opacity:1.0;fill:#FFFFFF;stroke:none\" width=\"400.0\" height=\"300.0\" x=\"0.0\" y=\"0.0\"> </rect>\n",
"<path class=\"bond-0 atom-0 atom-1\" d=\"M 181.1,242.3 L 74.5,242.3\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-1 atom-1 atom-2\" d=\"M 74.5,242.3 L 21.2,150.0\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-1 atom-1 atom-2\" d=\"M 83.7,226.3 L 39.7,150.0\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-2 atom-2 atom-3\" d=\"M 21.2,150.0 L 74.5,57.7\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-3 atom-3 atom-4\" d=\"M 74.5,57.7 L 181.1,57.7\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-3 atom-3 atom-4\" d=\"M 83.7,73.7 L 171.8,73.7\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-4 atom-4 atom-5\" d=\"M 181.1,57.7 L 234.3,150.0\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-5 atom-5 atom-6\" d=\"M 234.3,150.0 L 279.9,150.0\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-5 atom-5 atom-6\" d=\"M 279.9,150.0 L 325.4,150.0\" style=\"fill:none;fill-rule:evenodd;stroke:#FF0000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-6 atom-5 atom-0\" d=\"M 234.3,150.0 L 181.1,242.3\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path class=\"bond-6 atom-5 atom-0\" d=\"M 215.9,150.0 L 171.8,226.3\" style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"/>\n",
"<path d=\"M 175.7,242.3 L 181.1,242.3 L 183.7,237.7\" style=\"fill:none;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;\"/>\n",
"<path d=\"M 79.8,242.3 L 74.5,242.3 L 71.9,237.7\" style=\"fill:none;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;\"/>\n",
"<path d=\"M 23.9,154.6 L 21.2,150.0 L 23.9,145.4\" style=\"fill:none;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;\"/>\n",
"<path d=\"M 71.9,62.3 L 74.5,57.7 L 79.8,57.7\" style=\"fill:none;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;\"/>\n",
"<path d=\"M 175.7,57.7 L 181.1,57.7 L 183.7,62.3\" style=\"fill:none;stroke:#000000;stroke-width:2.0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;\"/>\n",
"<text x=\"328.9\" y=\"170.0\" class=\"atom-6\" style=\"font-size:40px;font-style:normal;font-weight:normal;fill-opacity:1;stroke:none;font-family:sans-serif;text-anchor:start;fill:#FF0000\">O</text>\n",
"<text x=\"356.5\" y=\"170.0\" class=\"atom-6\" style=\"font-size:40px;font-style:normal;font-weight:normal;fill-opacity:1;stroke:none;font-family:sans-serif;text-anchor:start;fill:#FF0000\">H</text>\n",
"</svg>"
],
"text/plain": [
"<IPython.core.display.SVG object>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"SVG(svg)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2e0ff2cb-192d-4bd8-a6db-11a20578ba4c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.14.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment