首先介绍一下做药效团筛选的背景:

计算机辅助药物设计的主要方式包括两种:

1.基于受体的药物设计;

2.基于配体的药物设计;

由于大量蛋白质的晶体结构仍然是未知的,尤其是膜蛋白,膜蛋白及其疏水的特性使其纯化结晶变得很困难。对晶体结构的未知靶点,当存在多种的结构类似的配体时,可以使用基于药效团的药物设计方法。

接下来介绍一下什么是药效团,关于药效团,书中是这样介绍的:在成药靶点中必定存在着与药物结合的特异性结合位点。对某个靶点发挥活性的化合物在结构特征上必定有相似之处。这些化合物的最普遍的共有特征被定义为药效团。IUPAC将药效团定义为“确保与特定生物靶标的最佳相互作用并触发其生物反应”所需的空间和电子特征的集合。

RDkit是诺华公司开发的一款处理化学信息学问题的工具包,底层由C++编写,其中集成了多数化学信息学处理方法及工具。

rdkit中的药效团信息是以分子指纹的形式呈现的,以SMART编码的形式呈现,具体可参考这篇文献:

https://pubs.acs.org/doi/abs/10.1021/ci7003253https://pubs.acs.org/doi/abs/10.1021/ci7003253其中分子结构信息是以一个三元组的形式存储下来的,包含所有可行的组合:(参与原子数point,原子类型patterns,距离distance bins)均为一位(bit),形成具有固定长度的药效团指纹(pharmacophore fingerprints)。

注:同一个原子可以被分配于若干种原子类型。

# 整体思路
# 利用rdkit在二维角度上搜索药效团,可以分为两个层次:
# 1.第一个层次:生成目标分子的药效团指纹编码(其中就包含了药效团及距离)
# 2.第二个层次:对要筛选的分子生成药效团指纹编码,计算与目标分子相似度,设定阈值选出合适的分子# 代码如下:# 导入需要的包
from rdkit import Chem
from rdkit.Chem import ChemicalFeatures
from rdkit import RDConfig
from rdkit.Chem import Draw
from rdkit.Chem import AllChem
from rdkit.Chem.Pharm2D.SigFactory import SigFactory
from rdkit.Chem.Pharm2D import Generate, Gobbi_Pharm2D# 以下代码部分熟悉BaseFeatures.fdef
# 读取及熟悉rdkit内置药效团文件
fdefName = os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef')
# 实例化特征工厂
factory = ChemicalFeatures.BuildFeatureFactory(fdefName)
# 27
print(f'fdef.GetNumFeatureDefs():{fdef.GetNumFeatureDefs()}')
# 功能族数量 8
print(f'len(fdef.GetFeatureFamilies()):{len(fdef.GetFeatureFamilies())}')
# 功能族类别
print(f'fdef.GetFeatureFamilies():{fdef.GetFeatureFamilies()}')
# 类型,dict方式呈现
print(f'fdef.GetFeatureDefs().keys():{fdef.GetFeatureDefs().keys()}')# 创建药效团类别的DataFrame
import pandas as pd
family_df = pd.DataFrame(columns=['family', 'definition'])
family_names = fdefname.GetFeatureFamilies()for k,v in fdefname.GetFeatureDefs().items():for fam in family_names:if fam in k:family_df.loc[k] = [fam, v]family_df
# 共含8种药效团,其中在我们的分子中比较关注的是:Donor,Acceptor,Hydrophobe# 查看每个家族中的细分类数目
family_df['family'].value_counts()
# Acceptor和Donor均为一个类别,没有限制,Hyropphone中含有两个类型# 查看字典中的具体的范围过程
for k, v in fdef.GetFeatureDefs().items():print(k,':',v)
# 每一个药效团的编码类型均为:SMART形式的'''-------------------------------接下来部分为正式处理过程-----------------------------''''''第一个层次:生成目标分子的药效团指纹编码'''# 读入目标分子
from rdkit.Chem.Pharm2D import Generate
mol1 = Chem.MolFromSmiles('NC(NCCC[C@H](N)C(NCC(N[C@@H](CC(O)=O)C(N[C@@H](CC(C)C)C(O)=O)=O)=O)=O)=N')
Draw.MolToImageFile(mol1,"/Users/lenovo/RGDXXL.jpg")# 使用特征工厂搜索特征
feats = factory.GetFeaturesForMol(mol1)
print(len(feats))
# 搜索到的每个特征都包含了改特征家族(例如受体、供体等)特征类别、该特征对应的原子、特征对应的序号等
for f in feats:print(f.GetFamily(),  # 特征家族信息f.GetType(),    # 特征类型信息f.GetAtomIds()  # 特征对应原子)# 使用特征工厂再来构建指纹工厂signature,factory用于设置指纹参数
# 构建指纹工厂 :
SigFactory(factory,      # 特征工厂useCounts = False,  # 默认False。False不考虑指纹频数,并生成SparseBitVectminPointCount = 2,  # 默认为2.生成指纹时包括的最少的药效团数量。maxPointCount = 3,  # 默认为3。生成指纹时包括的最多的药效团数量。
)
sigFactory=SigFactory(factory, minPointCount = 2, maxPointCount = 3)
# 对拓扑距离进行分段
sigFactory.SetBins([(0, 2), (2, 5), (5, 8)])
# 去除无需考察的几个基团
sigFactory.skipFeats=['PosIonizable','NegIonizable','ZnBinder','LumpedHydrophobe','Aromatic']
# 每次修改参数后,都要初始化一下
sigFactory.Init()
# 查看指纹长度
sigFactory.GetSigSize()# 生成分子指纹并查看
fps = Generate.Gen2DFingerprint(mol1,sigFactory)
print(f'len(fps):{len(fps)}')
print(f'fps.GetNumOnBits():{fps.GetNumOnBits()}')
# 关于指纹每一位所代表特征的信息、特征的距离矩阵等信息,都可以通过signature factory来查看
print(list(fp.GetOnBits()))
print(sigFactory.GetBitDescription(1))'''第二个层次:对要筛选的分子生成药效团指纹编码,计算与目标分子相似度,设定阈值选出合适的分子'''# 写一个相似度检测函数
def similarityMeasure(fps,mol):#     print(f'first')fps2 = Generate.Gen2DFingerprint(mol,sigFactory)
#     print(f'second')similarityPos = DataStructs.FingerprintSimilarity(fps,fps2, metric=DataStructs.TanimotoSimilarity)if similarityPos>=0.65:print (mol2.GetProp('_Name'), Chem.MolToSmiles(mol2), similarityPos)return similarityPos # 读入数据
suppl = pd.read_excel('generate_molecules.xlsx',header=None)
suppl_list = suppl[0].tolist()
suppl_end = [Chem.MolFromSmiles(x) for x in suppl_list]# 设置阈值筛选分子
pos_x=[]
entry = []
i = 0
for mol in suppl_end:
#     print(f'mol:{mol}')i += 1pos = similarityMeasure(fps, mol)print(f'i:{i},pos:{pos}')if pos>=0.5:pos_x.append(pos)entry.append(i)
print(pos_x,entry)

有些时候,我们需要拓展药效团指纹的定义,面对特定的问题,可能想要定制特定的药效团策略。这里需要阅读SMARTS语法及fdef文件的语法:

Daylight Theory: SMARTS - A Language for Describing Molecular Patterns

The RDKit Book — The RDKit 2022.03.1 documentationj

此处推荐一篇博客处理这类问题:

如何理解与定义药效团指纹(2D Pharmacophore Fingerprints)?——以 rdkit 为例_ZOOEEER的博客-CSDN博客条件基本熟悉 rdkit 的使用。正文概念药效团指纹综合考虑了化学信息和结构信息,从原理上适合于描述分子间的相互作用。化学信息指的是利用SMARTS定义的一套原子类型的指定规则;结构信息指的是通过2D分子图上一对原子间的最短路径,为选取的原子对(二元组)、三元组、四元组等等引入几何信息。下面这张图(ref:10.1021/ci7003253)比较形象地说明了三元组的编码方案。值得注意的是,这篇文献的实现着重强调了一个原子可能被同时分配于若干种原子类型,因此同样的原子组合可能贡献了若干指纹位。所https://blog.csdn.net/qq_37364789/article/details/123357365

RDkit二:利用RDkit筛选进行化学小分子2D药效团筛选相关推荐

  1. RDKit|化学特征、药效团提取与2D药效团指纹计算

    文章目录 一.化学特征和药效团提取 二.化学特征文件介绍 1.化学特征(chemical features) 2.FDef文件语法 三.2D药效团指纹 1.编码原理 2.参数设置 3.生成2D药效团指 ...

  2. 酶抑制剂靶点预测:药物靶点评估/药效团筛选定制

    酶抑制剂靶点预测:药物靶点评估/药效团筛选定制 药物靶点评估 药物靶点通常是在代谢或信号通路中与特定疾病或病理状态有关的关键分子.通过绑定到特定活动区域抑制这个关键分子进行药物设计.多靶点药物发现途径 ...

  3. 虚拟筛选涉及的小分子数据库

    药物设计和虚拟筛选依赖化学信息学和生物信息学中大量的靶点.小分子以及靶点-小分子相互作用星系.从大量的有机化合物中有效地遴选出可能有候选化合物,避免了对化合物盲目地活性筛选,从而降低了发现活性先导化合 ...

  4. 关于“QTableWidget设置表头筛选”实现及小改——“QTableWidget设置表头筛选”引用自博主“~南柯一梦~”

    刚开始学习QT,项目要求数据有筛选功能,找到博主"~南柯一梦~"的"QTableWidget设置表头筛选"文章,感觉刚好合用就尝试了下.我先使用的QT5.12版 ...

  5. RDkit一:利用RDkit筛选化学小分子结构特征

    最近在做关于小分子筛选的项目,涉及到一些处理方式,后面会逐篇总结遇到的一些问题及解决方法. 首先简单介绍一下RDkit,RDkit是一款用来处理化学小分子的python开源包,最早是由诺华公司开发的, ...

  6. RDKit:可视化药效团(Pharmacophore)

    药效团 成药靶点中必定存在着能与药物结合的特异性结合位点.对某个靶点发挥活性的化合物在结构特征上必定有相似之处.这些化合物的最普遍的共有特性被定义为药效团(pharmacophore) 药效团模型的重 ...

  7. RDKit | 基于RDKit从分子中提取3D药效团特征

    从分子中提取3D药效团特征 导入库 import os from rdkit import Geometry from rdkit import RDConfig from rdkit.Chem im ...

  8. 基于Gromacs模拟软件分析小分子配体与蛋白结合之后的稳定性

    背景:随着分子病理学的发展,人们对疾病发生和药物发挥药效的分子机制有了更深入的认识,伴随着蛋白质晶体学的发展,越来越多的蛋白质晶体被解析出来,更多的药物与其靶标相互作用的三维结构被揭示,对于理解药物发 ...

  9. Amber小分子-蛋白复合体分子动力学模拟

    Amber小分子-蛋白复合体分子动力学模拟 以前经常用GROMACS进行分子动力学模拟,后来试了一下Amber后发现,在我当前配置的GPU资源上,果然还是Amber更快一些,GROMACS太吃CPU资 ...

最新文章

  1. linux shell 输出文件 指定行
  2. linux 开机错误 Entering emergency mode. Exit the shell to continue.
  3. SQL Server 事务日志的问题
  4. 类的构造函数(分类和调用)
  5. 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类
  6. php 配置远程调试,PHP Linux 环境下搭建 XDEBUG并配置远程调试
  7. HTML5 实现离线数据缓存
  8. Open vSwitch 使用
  9. l380废墨收集垫已到使用寿命_能量收集,没有我们想象的那么新鲜
  10. c语言求前缀后缀大全,温故而知新_C语言_前缀++(--)和后缀++(--)
  11. Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)
  12. idea加载jsp项目无法打开web页面
  13. -XX:SoftRefLRUPolicyMSPerMB从名字看不出什么意思?【官文解读】
  14. 那些值得一读再读的好书
  15. python安全编程培训费用
  16. 云谦:谈谈前端框架的趋势与实践
  17. 18岁以后,大学生长高个子的秘诀是什么?
  18. 《格兰杰计量经济学文集(第一卷)》
  19. 【转】创业公司如何公平分配股权
  20. 达芬奇pro的FPGA学习笔记1--创建vivado工程

热门文章

  1. IP多播(计算机网络-网络层)
  2. 【cubemx】移植正点原子ov2640
  3. linux 删除行首空格
  4. win7不能开启无线服务器,Win7建立无线Wi-Fi热点及常见问题解决办法——无线路由器功能实现...
  5. jQuery—常用API(jQuery 属性操作、jQuery 文本属性值、jQuery 元素操作)
  6. opencv:对`cv :: DescriptorMatcher‘的未定义引用
  7. 2019年9月15日记
  8. 创意相册、3D立体相册
  9. java文件流写入文件_JAVA 输入输出流 本地文件读写
  10. 关于协方差,协方差矩阵的个人理解