【RDKit】Python化学包RDkit的教程

Python 专栏收录该内容
4 篇文章 0 订阅

官方地址

http://www.rdkit.org/
本文不再给出安装方法,读者可自行网上搜索。

教程

说明:如果某一行有注释,则该注释表示该行的输出

读取文件

RDKit能读取各种各样的化学结构文件,类和方法主要在rdkit.Chem.rdmolfiles这个模块下,因此需要先导入包

from rdkit import Chem

以sdf文件为例,官方给出了4种等价的读取方法,这些方法返回一个或多个rdkit.Chem.rdchem.Mol对象(http://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html#rdkit.Chem.rdmolfiles.SDMolSupplier)

suppl = Chem.SDMolSupplier('in.sdf')
mol = suppl[0]
print(mol.GetNumAtoms()) # 9

奇怪,原子数怎么只有9个?输出所有原子之后发现氢原子被省略了,因此如果你不希望省略氢原子,按照以下方式读取

suppl = Chem.SDMolSupplier('in.sdf', removeHs=False)
mol = suppl[0]
print(mol.GetNumAtoms()) # 23

对分子进行操作

访问单个原子

如果要访问单个原子,可以通过GetAtomWithIndex()获得原子对象rdkit.Chem.rdchem.Atom,以第一个原子碳原子为例,获取它的标签、价电子、原子元素周期编号

atom = mol.GetAtomWithIdx(0)
print(atom.GetSymbol()) # C
print(atom.GetExplicitValence()) # 4
print(atom.GetAtomicNum()) # 6

如果要访问所有原子,可以通过GetAtoms()方法遍历

for atom in mol.GetAtoms():
    print(atom.GetSymbol())

获取所有原子坐标,该方法返回一个numpy数组

mol.GetConformers()[0].GetPositions() # return a numpy array

其他可能用到的属性

atom.GetHybridization() # 返回杂化类型
atom.GetIsAromatic () # 该原子是否在芳香烃内
atom.GetTotalNumHs() # 与该原子连接的氢原子个数
atom.GetNeighbors() # 返回该原子的所有邻居原子,以元祖的形式返回

有关原子的请其他方法点击这里

访问化学键

通过GetBondBetweenAtoms()可以返回一个化学键的对象rdkit.Chem.rdchem.Bond,这个方法的输入参数是两个原子在数组中的编号,如果化学键不存在,则返回None

bond1 = mol.GetBondBetweenAtoms(0,1)
bond2 = mol.GetBondBetweenAtoms(0,2)
print(bond1) # <rdkit.Chem.rdchem.Bond object at 0x000000000084D850>
print(bond2) # None

获得化学键的类型

print(bond1.GetBondType()) # rdkit.Chem.rdchem.BondType.SINGLE

化学键的键长我暂时没有找到相应的方法,但是可以根据原子的坐标手动计算。

化学特征提取

重新打开一个Python文件进行操作。
对于有些原子的特征,其在原子层面上无法判断化学特征,因此需要在分子层面上进行提取。例如化学中的donor和acceptor概念(具体是什么意思我也不知道,没有化学背景,但知道有这些类别就行,并且这些类别是原子的特征)
首先导入包,然后设定特征的参考文件,并实例化一个特征工厂。

from rdkit import Chem
from rdkit.Chem import ChemicalFeatures
from rdkit import RDConfig
import os
fdefName = os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef')
factory = ChemicalFeatures.BuildFeatureFactory(fdefName)

默认情况下对任何化合物都不需要改动上面的代码。
利用MolFromSmiles方法读取分子。Smiles(Simplified molecular-input line-entry system)是一种描述分子的字符串描述符,和高中学过的分子结构式差不多。更多关于Smiles的信息可以参见百度百科维基百科

m = Chem.MolFromSmiles('OCc1ccccc1CN')
feats = factory.GetFeaturesForMol(m)
len(feats) # 8

这里分子为OCc1ccccc1CN,我们最终生成了8个特征,每个特征的提取方法如下所示

feats[0].GetFamily() # 'Donor'
feats[0].GetType() # 'SingleAtomDonor'
feats[0].GetAtomIds() # (0,)
feats[4].GetFamily() # 'Aromatic'
feats[4].GetAtomIds() # (2, 3, 4, 5, 6, 7)

更多关于特征方法请参阅这里

  • 4
    点赞
  • 0
    评论
  • 37
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值