RDKit|分子指纹提取、相似性比较及应用

一、分子指纹提取

1.Topological Fingerprints

也叫RDKit topological fingerprint。该算法受Daylight fingerprint启发而产生,它会计算所有介于minPath和maxPath之间的分子路径(子图,subgraphs),对每个子图进行哈希运算,产生一个原始的bit ID。对bit ID取模(除数是fpSize),并在相应的位上进行设置。
对子图做哈希运算,其实就是对原子和键做哈希,它考虑了原子类型、芳香性、键的类型三种特征

对每个子图生成指纹的大致流程:

  • 1.对子图计算一个哈希值
  • 2.使用哈希值生成一个raw ID
  • 3.对raw ID取模
  • 4.如果nBitsPerHash大于1,根据raw ID再随机生成一个数,直到达到指定值
  • 5.组成分子指纹相应的位。

使用rdkit来生成拓扑分子指纹

  • 计算拓扑分子指纹:RDKFingerprint(mol, minPath,maxPath, fpSize, nBitsPerHash, useHs, tgtDensity, bitInfo, …)
    mol:mol对象
    minPath:默认1。生成子图所需的最少键的数量
    maxPath:默认7。生成子图时最多键的数量
    fpSize:生成指纹的长度,默认2048
    nBitsPerHash:默认2。每个子图对应的位数。如果大于1,就将raw ID作为种子随机生成若干个数。
    useHs:默认True,将显式氢考虑进指纹中。
    tgtDensity:默认0。如果大于0,指纹长度会不断减半,直到大于等于设置的密度,或到达minSize的设置值。
    bitInfo:用于接收指纹结果的字典。键为位数,值为相同指纹的列表(列表的每个元素为键的序号)。
>>> ms = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO'), Chem.MolFromSmiles('COC')]
>>> fps = [Chem.RDKFingerprint(x) for x in ms]
>>> fps
[<rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7538300>,
 <rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x75383f0>,
 <rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7538670>]

先简单地进行一下相似性比较

  • 相似度比较:DataStructs.FingerprintSimilarity(fp1, fp2)
>>> DataStructs.FingerprintSimilarity(fps[0], fps[1])
0.6
  • 通过传入空字典rdkinfo获取非空分子指纹信息
    黄色表示带有芳香性质的原子
>>> mol = Chem.MolFromSmiles('c1ccccc1CC1CC1')
>>> rdkinfo = {
   }
>>> rdkfp = Chem.RDKFingerprint(mol, bitInfo=rdkinfo)
>>> Draw.DrawRDKitBit(mol, list(rdkinfo.keys())[0], rdkinfo)

1

2.MACCS

是一种基于SMARTS的,长度为167的分子指纹,每一位所代表的含义可以参考openbabel的介绍

>>> from rdkit.Chem import MACCSkeys
>>> fps = [MACCSkeys.GenMACCSKeys(x) for x in ms]
>>> DataStructs.FingerprintSimilarity(fps[0],fps[1])
0.5
>>> fps[0].GetNumBits()
167

3.Atom Pairs and Topological Torsions

这两种指纹算法的概念在30多年前提出,比较相似,指纹会包括原子序号、π电子数和相邻原子数三个维度的信息。此外还可以通过参数,加入手性的信息。两种指纹都可以用sparse form和explicit form形式来表示,并且可以查看指纹所代表的化学信息。

  • 计算atom pair指纹:GetAtomPairFingerprint(mol, minLength, maxLength, …)
  • 同GetAtomPairFingerprintAsIntVect()
    这个方法生成的指纹非常庞大稀疏。
>>> from rdkit
  • 19
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值