用Python绘制分子结构

SMILES文件简介

SMILES,即简化分子线性输入系统(Simplified molecular input line entry system),是通过ASCII描述分子结构的规范。

Smiles文件有如下规则

  1. 原子用方括号括起,仅有有机物中的C、N、O、P、S、Br、Cl、I等原子可以省略方括号
  2. 氢原子常被省略
  3. 双键为=;三键为#
  4. 结构中的环要被打开,断开处的两个原子用同一个数字表示
  5. 芳环中的C、O、S、N原子用小写字母c,o,s,n表示
  6. 碳链分支用圆括号表示。
  7. 芳香结构中的N原子上连有一个H原子,用[nH]表示
  8. 用@和@@表示手性

rdkit绘制分子结构

rdkit中,通过Chem将Smiles字符串转换为化学结构,然后可以通过Draw将化学结构画出来。

考虑到从简单入手,可以先绘制一个苯环,苯环中只有C,而且一般记作单双键交替的结构,根据成环规则,可写为C1=CC=CC=C1,效果如下

在这里插入图片描述

代码为

from rdkit import Chem
from rdkit.Chem import  Draw
import matplotlib.pyplot as plt
Benzene = 'C1=CC=CC=C1'
mol = Chem.MolFromSmiles(Benzene)
img = Draw.MolsToGridImage([mol],molsPerRow=1)
plt.imshow(img)
plt.axis('off')
plt.show()

其中,MolsToGridImage用于将分子结构转化为图像,molsPerRow表示每行绘制的分子数。

rdkit保存分子结构图

RDkit内置的画图程序也可以展示分子结构,相比于调用plt而言更加方便,用下面的函数也可以画出苯环,但是并没有plt提供各种缩放、保存按钮而已。

Draw.ShowMol(mol, size=(400,200))

为了解决保存的问题,rdkit提供了Draw.MolToFile函数,可以输出图像。

Draw.MolToFile(mol, 'Benzene.png', size=(400, 200), kekulize=False)

这个图在保存时使用了kekulize参数,其绘制效果如图所示

在这里插入图片描述

当然,苯环画起来其实没什么意思,接下来可以画一个有意思的,就是网上流传甚广的2,3二氧杂二环[2,2,2]-5-辛烯

smi = 'C1CC2C=CC1OO2'
mol = Chem.MolFromSmiles(smi)
Draw.ShowMol(mol, size=(400,200))
Draw.MolToFile(mol, 'smi.png', size=(400, 200))

效果如图所示

在这里插入图片描述

三维结构

但这个东西虽然看上去萌,但显然不是个二维生物,接下来就学习绘制一下三维分子结构。这个过程并不复杂,但需要通过MMFFOptimizeMolecule来优化其三维构型,最后得到

在这里插入图片描述

好吧,看上去更萌了,其代码如下。

from rdkit.Chem import AllChem
smi = 'C1CC2C=CC1OO2'
m3d = Chem.MolFromSmiles(smi)
AllChem.EmbedMolecule(m3d, randomSeed=3)
AllChem.MMFFOptimizeMolecule(m3d)
Draw.MolToFile(m3d, 'm3d.png', size=(400, 200))

其中,AllChem.EmbedMolecule用于生成3D构象,一般来说需要引入一个随机量来对三维结构进行初始化,输入随机数种子randomSeed,有利于复现计算结果。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值