RDKit | 基于RDKit描述三维分子形状(3D描述符)

本文为博主原创文章,未经博主允许不得转载。
本文链接: https://blog.csdn.net/u012325865/article/details/102627024

        近年来,表达分子的三维特征变得越来越重要。已经提出了许多3D描述符,这次将介绍它们中经常使用的三个,Fsp3PMIPBF

Fsp3是分子复杂性的指标

        二甲基吡啶及其不饱和化合物二甲基哌啶中可以存在多少种异构体?答案是前者有5种,而后者有34种,包括旋光异构体。由于分子量几乎相同,因此简单地将芳族化合物更改为脂肪族化合物会增加分子的复杂性,并大大扩展了化合物可以覆盖的化学空间。

        2009年,Lovering及其同事提出了一个名为sp3碳(Fsp3)在总碳中所占比例的描述符的重要性,以作为该化合物复杂性的指标,同时研究了该化合物的开发和结构 。当然,有许多药物是从天然产物中衍生出来的,而且众不对称碳的比率是天然产物的指标,因此他们的想法并不是特别新颖。

        即便如此,仍使用了易上手的短语“ Flatland ”和易于计算的描述符,因此急切地考虑了分子库的多样性,以此为重要指标。近年来,它在学术界发展中变得越来越重要,有机合成化学家的引用次数也在增加。由于Fsp3本身可以简单地通过从结构式计算而得到,因此它不是需要三维结构的“三维描述符”,而是考虑化合物三维性的重要指标。

 

PMI图可视化分子形状

        学术界和论文中最常见的可能是PMI图。可以看到一个图,该图通过用圆盘/杆/球体表征分子的形状来显示库在三角形周围的分布位置。

        在xy平面上绘制归一化值除以三个主要惯性矩中最大的一个。NPR1在0到1之间,NPR2在0.5到1之间。因此,绘制分布的三角形通常像正三角形一样绘制,但实际上是垂直拉伸的。主惯性矩本身可以通过Descriptors3D.PMI1rdMolDescriptors.CalcPMI1获得。

 

PBF是一种新的描述符,它通过与平面的偏差来表达分子的三维度

        “ 最佳拟合平面(PBF) ”发表于2012年,是一个相对较新的描述符,用于表达一个分子离平面有多远。在此描述符中,首先,使用最小二乘法为不包含氢的原子的坐标创建一个平面。PBF是每个平面与每个原子之间的距离。

        根据定义,PBF的范围可以从0到无穷大,但是通过大规模数据集的验证表明,在大多数情况下,PBF处于“小于2​​的低分子”和“ 10诸如聚合物的蛋白质”的范围内。是的 根据定义,PBF不会根据是否存在氢而变化。


导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, Descriptors, Descriptors3D, rdMolDescriptors
import seaborn as sns
sns.set()
%matplotlib inline

载入数据

suppl = Chem.SDMolSupplier('dataset.sdf',removeHs = False)
mols = [x for x in suppl if x is not None]
len(mols) 

Fsp3值频率分布

flat = [rdMolDescriptors.CalcFractionCSP3(mol) for mol in mols]
bins = [0,0.2,0.4,0.6,0.8,1.0]
pd.value_counts(pd.cut(flat, bins), sort=False)

创建一个PMI图并绘制该化合物的散点图

x = []
y = []
for m in mols:
    x.append(rdMolDescriptors.CalcNPR1(m))
    y.append(rdMolDescriptors.CalcNPR2(m))
xx = np.linspace(0,1,100)
plt.plot(x, y, 'o', ms=4)
plt.plot(xx, 1-xx, 'r', alpha=0.4)
plt.plot(xx, np.ones(100), 'r', alpha=0.4)
plt.plot(xx, xx, 'r', alpha=0.4)
plt.xlabel('NPR1')
plt.ylabel('NPR2')
plt.xlim(-0.01,1.005)
plt.ylim(0.5,1.005)

获取PBF值之后,将颜色图应用于上方的PMI图。

pbf = []
for mol in mols:
    pbf.append(rdMolDescriptors.CalcPBF(mol))
s2 = pd.Series(pbf)
s2.describe().round(2)

plt.scatter(x, y, vmin=min(pbf), vmax=max(pbf), c=pbf, cmap='Paired', alpha=0.6)
plt.plot(xx, 1-xx, 'k', alpha=0.4)
plt.plot(xx, np.ones(100), 'k', alpha=0.4)
plt.plot(xx, xx, 'k', alpha=0.4)
plt.colorbar()
plt.xlim(0,1)
plt.ylim(0.5,1)
plt.show

处理了三个描述符Fsp3PMIPBF,作为表示分子三维特征的描述符。


参考

[1] https://pubs.acs.org/doi/abs/10.1021/jm901241e

[2 ] https://pubs.acs.org/doi/abs/10.1021/ci025599w

猜你喜欢

转载自blog.csdn.net/u012325865/article/details/102627024