一起学 RDKit Cookbook (1)

这部分内容来自于RDKIT的简单教程:https://www.rdkit.org/docs/Cookbook.html RDKIT算是化学生物的神器了,以前每一次都是即时查接口,现在按照这个简易教程走一遍,增加感觉。 最好的办法就是全程过一遍。

当然啦,在这些过程中,也有我自己对RDKit的一些理解吧。如果有不对的地方,请多多指正!

一、画分子

Chem.MolFromSmiles()输入的字符串是SMILES(用于表示分子的一种方法),得到的是mol对象;

mol对象是rdkit的特殊的对象,专门用于保存化学分子的;

mol.GetAtoms()则是将分子中每一个原子提取出来,都保存成atom对象,于是mol.GetAtoms()返回的是分子中所有原子atom对象组成的列表;

atom.SetAtomMapNum(),则是atom对象的方法,用于标记原子;

atom.GetIdx():用于获取其在分子中的编号。rdkit中,会自动按照一定的规则给原子进行标号。

from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import Draw

IPythonConsole.ipython_useSVG=False #如果想展示PNG请设置为FALSE
#将分子中的原子都标记上原子编号
def mol_with_atom_index(mol):
    for atom in mol.GetAtoms():
        atom.SetAtomMapNum(atom.GetIdx())
    return mol
#这个分子是一个Kinase的抑制剂
mol = Chem.MolFromSmiles("C1CC2=C3C(=CC=C2)C(=CN3C1)[C@H]4[C@@H](C(=O)NC4=O)C5=CNC6=CC=CC=C65")
mol

在这里插入图片描述
这样一个分子的结构式就画出来了。还是很简单的。

标记原子编号:

mol2 = mol_with_atom_index(mol)
mol2

在这里插入图片描述
可以看到,分子中原子的标号被直接标记在了结构式上了。

再次查看mol,发现mol,也被改编了。

mol

在这里插入图片描述

所以rdkit中的对象,有点像list,指向同一个内存地址,不需要返回赋值的

为了显示原子在分子中的编号,也可以直接在ipythonconsole中直接设置:

mol = Chem.MolFromSmiles("C1CC2=C3C(=CC=C2)C(=CN3C1)[C@H]4[C@@H](C(=O)NC4=O)C5=CNC6=CC=CC=C65")
IPythonConsole.drawOptions.addAtomIndices = True
IPythonConsole.molSize = 300,300
mol

显示结果上,有所差异, 如下图。
在这里插入图片描述

二、进行简单的计算

from rdkit.Chem import Draw, AllChem
IPythonConsole.molSize=300, 300
IPythonConsole.drawOptions.addAtomIndices = False #由于上文中设置了True,会直接显示原子编号,所以这里要显示False

计算各原子的Gasteiger Charges。(关于什么是Gasteiger Charges, 请自行百度或google哈,我也不是很明白)

m = Chem.MolFromSmiles('c1ncncc1C(=O)[O-]')
AllChem.ComputeGasteigerCharges(m)
m

在这里插入图片描述

AllChem.ComputeGasteigerCharges(m)已经将m中每个原子的Gasteiger Charges已经计算出来了,
并保存在每一个原子的_GasteigerCharge中;

然后对原子逐个使用atom.SetProp,添加原子的性质,同步可以实现直接显示。

for atom in m.GetAtoms():
    value = '%.2f'%(atom.GetDoubleProp('_GasteigerCharge'))
    atom.SetProp('atomNote',value) #设置原子的属性,设置完以后,会在mol中直接显示
    #这里要注意,不能直接使用atom.SetAtomMapNum(value),因为matom.SetAtomMapNum()用于添加原子编号,只能添加整数
m

在这里插入图片描述
设置完原子的属性后,可以直接调用的,例如:

for atom in m.GetAtoms():
    print(atom.GetProp('atomNote'))

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值