Skip to content

Instantly share code, notes, and snippets.

@iwatobipen
Created July 21, 2021 11:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iwatobipen/16986c791c78b18d7eabad6eeb01633e to your computer and use it in GitHub Desktop.
Save iwatobipen/16986c791c78b18d7eabad6eeb01633e 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": "pleased-restriction",
"metadata": {},
"outputs": [],
"source": [
"from rdkit import Chem\n",
"from rdkit.Chem import Draw\n",
"from rdkit.Chem.Draw import IPythonConsole\n",
"from rdkit.Chem import rdFingerprintGenerator\n",
"from rdkit.Chem import DataStructs"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "numeric-standing",
"metadata": {},
"outputs": [],
"source": [
"mol1 = Chem.MolFromSmiles('Fc1cc(Cl)ccc1')\n",
"mol2 = Chem.MolFromSmiles('Fc1c(Cl)cccc1')\n",
"mol3 = Chem.MolFromSmiles('F.c1ccccc1.Cl')\n",
"mol4 = Chem.MolFromSmiles('F.Cl.c1ccccc1')\n",
"mols = [mol1, mol2, mol3, mol4]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "objective-columbus",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Draw.MolsToGridImage(mols)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "narrative-survey",
"metadata": {},
"outputs": [],
"source": [
"fpgen = rdFingerprintGenerator.GetMorganGenerator(radius=2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "second-contrast",
"metadata": {},
"outputs": [],
"source": [
"fps = [fpgen.GetFingerprint(m) for m in mols]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "collective-grant",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7f37f2c06580>,\n",
" <rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7f37f2c06990>,\n",
" <rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7f37f2c069e0>,\n",
" <rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7f37f2c06a30>]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fps"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "strange-satisfaction",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mol2-mol1 tanimoto 0.3333333333333333\n",
"mol3-mol1 tanimoto 0.1\n",
"mol3-mol2 tanimoto 0.1111111111111111\n",
"mol4-mol1 tanimoto 0.1\n",
"mol4-mol2 tanimoto 0.1111111111111111\n",
"mol4-mol3 tanimoto 1.0\n"
]
}
],
"source": [
"for i in range(len(fps)):\n",
" for j in range(i):\n",
" tc = DataStructs.TanimotoSimilarity(fps[i], fps[j])\n",
" print(f'mol{i+1}-mol{j+1} tanimoto {tc}')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "compressed-heather",
"metadata": {},
"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.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment