筛除早期药物发现中有害的PAINS与警示结构

基于RO5,即Lipinski规则过滤化合物库在早期药物研发项目中已经很常用,但其适用范围往往是限制口服相关的利用度与PK性质。
本文介绍基于PAINS与警示结构的过滤方式并简单比较异同。
PAINS全称“pan-assay interference compounds”,是药物筛选过程中主要的假阳性来源,其实质包括胶体聚集化合物、自荧光化合物、荧光酶抑制剂、易反应化合物和多靶点化合物。
警示结构(structure alerts)则是更广泛意义上的有害化学结构,例如可以带来毒性的基团,或者是生物体内不稳定易降解,发生特定化学反应的基团。以上这些结构,在早期药物研发过程中,都需要尽可能提前发现筛除,从而避免不必要的实验成本浪费。

1. PAINS

PAINS的过滤已经被集成在了RDkit工具集中,可以直接调用。

from rdkit import Chem
from rdkit.Chem import FilterCatalog, PandasTools
import pandas as pd
param = FilterCatalog.FilterCatalogParams()
param.AddCatalog(FilterCatalog.FilterCatalogParams.FilterCatalogs.PAINS)
filt = FilterCatalog.FilterCatalog(param)

df = PandasTools.LoadSDF('./SDF/1uM.sdf.mol')
len(df) # 28372
df['PAINS'] = df.ROMol.map(filt.HasMatch)
df.head(2)
图一、PAINS过滤结果

需要注意的是,PAINS的过滤有效性在业界中已被多次质疑有错杀太多的情形,因此PAINS滤去的结果仅当参考,有能力时需要药物化学家审查化合物被滤过的结构。

2. 警示结构(Structure alerts)

定义上不同于干扰活性与亲和力实验的PAINS结构,structure alert概念更加宽泛。例如以AI 药物发现技术闻名的公司Insilico Medicine,在短短46天内设计并筛选出了一个DDR1受体抑制剂,该结果于2019年9月发表在Nature Biotechnology上[1]。
文章中提到,Insilico Medicine公司采用了150个内部的structure alert去筛除有毒结构、活性基团或其他不利的基团,包括

  • 对位或邻位卤素取代的吡啶;
  • 2号位卤素取代的呋喃、噻吩、卤代烷和醛
  • 二硫键(不稳定)
  • 靛红或巴比妥类结构 (潜在精神系统副作用)
  • 过氧化物 (不稳定)
  • 其他一些杂环或融合芳香环结构等等

文章原文:
150 in-house MCFs were applied to remove potentially toxic structures and compounds containing reactive and undesirable groups. These include substrates for 1,4-addition (Michael bearing moieties) and other electrophilic species (for example, para- or orthohalogen- substituted pyridines, 2-halogen-substituted furans and thiophenes, alkylhalides, and aldehydes and anhydrides), disulfides, isatins, barbiturates, strainedheterocycles, fused polyaromatic systems, detergents, hydroxamic acids and diazo-compounds, peroxides, unstable fragments, and sulfonyl ester derivatives.

项目中对于这样的警示结构我们可以通过定义SMARTS语法的方式滤除不良化合物。

Insilico_alerts=[
'[Cl,Br,F,I]c1ccncc1',  # para-substituted pyridines
'[Cl,Br,F,I]c1ccccn1', # ortho halogen-substituted pyridines
'[Cl,Br,F,I]C1=CC=CO1',
'[Cl,Br,F,I]C1=CC=CS1',
'[#16][#16]', # disulfide
'O=C1Nc2ccccc2C1=O', #isatin
'O=C1CC(=O)NC(=[O,S])N1', # barbiturates
'[A][$([#6]=[N+]=[N-]),$([#6]-[N+]#[N])]', #diazo-compounds
'[OX2,OX1-][OX2,OX1-]', #peroxides
'[OX2][$([#16X4](=[OX1])=[OX1]),$([#16X4+2]([OX1-])[OX1-])]', #sulfonyl ester
]
#另外文章中还限制了一些基团出现的频率上限
# groups should not exceed the count
count_alert={'Cl':3,'F':6, 'Br':2,'[N+](=O)[O-]':2}

定义好警示结构之后,我们可以采用rdkit中子结构匹配的方式加以滤去

alert_mols=[Chem.MolFromSmarts(smi) for smi in Insilico_alerts]
def checkAlert(smi,alert_mol_list=alert_mols, alert_dict=count_alert):
    mol=Chem.MolFromSmiles(smi)
    for query in alert_mol_list:
        if mol.HasSubstructMatch(query):
            return False
    for alert in alert_dict.keys():
        query=Chem.MolFromSmarts(alert)
        if len(mol.GetSubstructMatches(query))>alert_dict[alert]:
            #print (alert, 'num exceeded')
            return False
    if NumAromaticRings(mol)>=6:
        #print ('too many aromatic rings')
        return False
    return True

对于我们的化合物待筛选库,以dataframe的方式存于SMILES格式,即可应用上面的函数加以筛选。

df['passStructureAlert']=df['SMILES'].apply(checkAlert)
df.head(2)
output:
SMILES                                          passStructureAlert
COc1cc(OC)cc(N(CCNC(C)C)c2ccc3ncc(-c4cnn(C)c4)...       True
C=CC(=O)N1CCC(n2nc(C#Cc3cc(OC)cc(OC)c3)c3c(N)n...       False

和PAINS类似,警示结构也不是绝对的指标,采用之前最好有药物化学家的审核。

另外,GlaxoSmithKline (GSK) 公司从多年积累的高通量筛选结果中,以统计的方式从其公司内部化合物库200万化合物在数百项测试中的实验结果中总结了自己的一套警示结构库,可以作为扩展阅读参考[2]。
GSK的警示结构在文章中,已经存储为了SMARTS结构,省去了对SMARTS不熟悉的读者自行转换的困难。


图二、GSK归纳的警示结构部分示意

参考文献

  1. Zhavoronkov, A., Ivanenkov, Y.A., Aliper, A. et al. Deep learning enables rapid identification of potent DDR1 kinase inhibitors. Nat Biotechnol 37, 1038–1040 (2019).
  2. Chakravorty SJ, Chan J, Greenwood MN, Popa-Burke I, Remlinger KS, Pickett SD, Green DVS, Fillmore MC, Dean TW, Luengo JI, Macarrón R. Nuisance Compounds, PAINS Filters, and Dark Chemical Matter in the GSK HTS Collection. SLAS Discov. 2018 Jul;23(6):532-545.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容