药物早期设计中,常常需要根据类药五原则(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):过多的手性中心,会导致合成与纯化工艺难度的大幅提高。
以下代码演示如何一次性计算以上所有性质,并批量处理数据。
from rdkit import Chem
import numpy as np
from rdkit.Chem import QED, Descriptors, rdMolDescriptors
def cal_mol_props(smi, verbose=False):
try:
m = Chem.MolFromSmiles(smi)
if not m:
return None, None, None, None, None, None, None, None
logp = np.round(Descriptors.MolLogP(m), 2)
tpsa = np.round(Descriptors.TPSA(m), 1)
mw = np.round(Descriptors.MolWt(m), 1)
qed = np.round(QED.qed(m), 2)
hba = rdMolDescriptors.CalcNumLipinskiHBA(m)
hbd = rdMolDescriptors.CalcNumLipinskiHBD(m)
rob = rdMolDescriptors.CalcNumRotatableBonds(m)
chiral_center = len(Chem.FindMolChiralCenters(m, includeUnassigned=True))
if verbose:
print(smi)
print('Logp ', logp)
print('TPSA ', tpsa)
print('MW ', mw)
print('QED ', qed)
print('HBA ', hba)
print('HBD ', hbd)
print('RotB ', rob)
print('chiral_center ', chiral_center)
return logp, tpsa, mw, qed, hba, hbd, rob, chiral_center
except Exception as e:
print(e)
return None, None, None, None, None, None, None, None
logp, tpsa, mw, qed, hba, hbd, rob, chiral_center = cal_mol_props("O=C1c2ccc[n+]3c2-c2c1ccc[n+]2CC3", verbose=True)