文章目录
一、摩根分子指纹计算
1.简介
摩根分子指纹(Morgan Fingerprints),是一种圆形指纹,也属于拓扑型指纹,是通过对标准的摩根算法进行改造后得到。可以大致等同于扩展连通性指纹(Extended-Connectivity Fingerprints,ECFPs)。
这类指纹有诸多优点,例如计算速度快、没有经过预定义(可以表示无穷多种不同的分子特征)、可以包含手性信息、指纹中的每个元素代表一种特定子结构、可以方便地进行分析和解释、可以根据不同的需要进行相应的修改等。这类指纹设计的最初目的是用于搜索与活性相关的分子特征,而非子结构搜索。此外也可以用于相似性搜索、聚类、虚拟筛选等方向。指纹的生成过程大致分为以下几个步骤:
- 1.原子初始化。为每个重原子分配一个整数标识符
- 2.迭代更新。以每个重原子为中心,将周围一圈的重原子合并进来,直到到达指定半径。
- 3.特征生成。对子结构进行运算,并生成特征列表。
更多内容可以参考ChemAxon的介绍,还有ECFPs的文章。
ECFPs可以捕捉到精确的子结构细节,相对应的,功能基指纹(Functional class fingerprints,FCFPs)则更为泛化,可以将同一类功能基作为一种特征结构。在rdkit中两种特征都可以通过GetMorganFingerprint实现。
- 先定义两个分子
>>> from rdkit import Chem
>>> from rdkit import DataStructs
>>> from rdkit.Chem import AllChem
>>> from rdkit.Chem import Draw
>>> m1 = Chem.MolFromSmiles('ClC1=COCNC1')
>>> m2 = Chem.MolFromSmiles('BrC1=COCNC1')
>>> Draw.MolsToGridImage([m1, m2], subImgSize=(150, 150), legends=['ClC1CNCOC1', 'BrC1CNCOC1'])

2.SparseIntVects
- 以SparseIntVects方式生成ECFPs指纹:GetMorganFingerprint(mol, radius, …)
或者称为SparseBitVects
mol:mol对象
radius:考虑半径 - 使用Dice方法比较两个指纹的相似性:DiceSimilarity()
>>> fp1 = AllChem.GetMorganFingerprint(m1, 2)
>>> fp2 = AllChem.GetMorganFingerprint(m2, 2)
>>> DataStructs.DiceSimilarity(fp1, fp2)
0.7
- 查看长度:GetLength()
返回指纹的长度 - 查看非空元素:GetNonzeroElements()
返回值是一个字典,键对应非空指纹的位数,值是指纹出现的频数
>>> print(fp1.GetLength())
4294967295
>>> print(fp1.GetNonzeroElements())
{
39328034: 1, 211414882: 1, 362715007: 1, 2626911012: 1, 2968968094: 2, ..

本文详细介绍了使用RDKit进行摩根分子指纹的计算,包括SparseIntVects、ExplicitBitVects、FCFPs的生成,以及指纹的提取与可视化方法。通过实例展示了如何获取和解析指纹信息,以及如何从指纹中提取分子子结构。
最低0.47元/天 解锁文章
4488

被折叠的 条评论
为什么被折叠?



