药物早期设计中,常常需要根据类药五原则(rule of five,RO5, 亦称Lipinski规则)进行初步判断筛选,RO5是辉瑞公司资深药物化学家Christopher A. Lipinski在1997年提出,虽然随时代发展虽然其适用范围逐渐变窄,但仍然非常有参考意义。其主要内容如下:
1.分子量(Mw)小于500;
2.氢键供体(HBD)数目小于5;
3.氢键受体(HBA)数目小于10;
4.脂水分配系数(logP)小于5;
5.可旋转键(rotatable bonds)的数量不超过10个。
除了以上RO5性质,另外还有几个对于药物开发关键的性质:
6. 类药性(QED):0-1区间归一化后的数值,衡量化合物和药物相似性,虽不准确,但简单直接;
7. 手性中心个数(chiral_centers):过多的手性中心,会导致合成与纯化工艺难度的大幅提高。
UPDATE: 2022-5-20: 加入统计芳香环个数的代码,对应示例未更新
以下代码演示如何一次性计算以上所有性质,并批量处理数据。
from rdkit import Chem
import numpy as np
import pandas as pd
from rdkit.Chem import PandasTools, QED, Descriptors, rdMolDescriptors
def cal_mol_props(smi, verbose=False):
try:
m=Chem.MolFromSmiles(smi)
if not m:
return None
mw = np.round(Descriptors.MolWt(m),1)
logp = np.round(Descriptors.MolLogP(m),2)
hbd = rdMolDescriptors.CalcNumLipinskiHBD(m)
hba = rdMolDescriptors.CalcNumLipinskiHBA(m)
psa = np.round(Descriptors.TPSA(m),1)
rob= rdMolDescriptors.CalcNumRotatableBonds(m)
qed= np.round(QED.qed(m),2)
chiral_center=len(Chem.FindMolChiralCenters(m,includeUnassigned=True))
aRings=rdMolDescriptors.CalcNumAromaticRings(m)
if verbose:
print ('Mw ',mw)
print ('Logp ',logp)
print ('HBD ', hbd)
print ('HBA ', hba)
print ('TPSA ', psa)
print ('RotB ', rob)
print ('QED ', qed)
print ('chiral_center ', chiral_center)
print ('aromatic rings ', aRings)
return mw,logp,hbd,hba,psa,rob,qed,chiral_center,aRings
except Exception as e:
print (e)
return None
接下来我们在简单的示范化合物库上,示范如何批量计算以上属性。该示意库有如下三个化合物。
pd.set_option("display.max_colwidth",500)
df=pd.read_csv('data/demo.smi',header=None,names=['SMILES'])
print (df.shape)
df.head()
output:
(3,1)
SMILES
0 CC(C)NCC(O)COc1cccc2ccccc12
1 Cc1cn([C@H]2C[C@H](F)[C@@H](CO)O2)c(=O)[nH]c1=O
2 CCC(=O)C(CC(C)N(C)C)(c1ccccc1)c1ccccc1
接下来计算返回含有所有药物相关性质的表格,
df["Mw"],df["logP"],df["HBD"],df["HBA"],df["TPSA"],df["RotB"],
df["QED"],df["chiral"]= zip(*df['SMILES'].apply(cal_mol_props))
三个化合物均是已知药物分子,可见它们的性质符合RO5规则,并且类药性QED得分均佳。
SMILES | Mw | logP | HBD | HBA | TPSA | RotB | QED | chiral |
---|---|---|---|---|---|---|---|---|
CC(C)NCC(O)COc1cccc2ccccc12 | 259.3 | 2.58 | 2 | 3 | 41.5 | 6 | 0.84 | 0 |
Cc1cn([C@H]2CC@HC@@HO2)c(=O)[nH]c1=O | 244.2 | -0.54 | 2 | 6 | 84.3 | 2 | 0.73 | 3 |
CCC(=O)C(CC(C)N(C)C)(c1ccccc1)c1ccccc1 | 309.5 | 4.29 | 0 | 2 | 20.3 | 7 | 0.76 | 0 |