RDKit|摩根分子指纹计算、提取与可视化

如何使用RDkit计算Morgan指纹并对其进行可视化 Morgan指纹中更广为人知的是圆形指纹,该指纹是通过将 Morgan 算法应用于一组用户提供的原子不变量而构建的(具体原理参考上一条帖子)。 生成 Morgan 指纹时,还必须提供指纹的半径。Morgan指纹,例如原子对(atom pair)和拓扑扭转(topological torsions),默认使用计数,但也可以将它们计算为位向量。下面我们以丁酰胺为例向大家展示如何计算其指纹(计数和位相连): 图1 丁酰胺的结构式 from rdkit.Chem import AllChem from rdkit 阅读详情
AI摘要

本文详细介绍了使用RDKit进行摩根分子指纹的计算,包括SparseIntVects、ExplicitBitVects、FCFPs的生成,以及指纹的提取与可视化方法。通过实例展示了如何获取和解析指纹信息,以及如何从指纹中提取分子子结构。

一、摩根分子指纹计算

1.简介

摩根分子指纹(Morgan Fingerprints),是一种圆形指纹,也属于拓扑型指纹,是通过对标准的摩根算法进行改造后得到。可以大致等同于扩展连通性指纹(Extended-Connectivity Fingerprints,ECFPs)。

这类指纹有诸多优点,例如计算速度快、没有经过预定义(可以表示无穷多种不同的分子特征)、可以包含手性信息、指纹中的每个元素代表一种特定子结构、可以方便地进行分析和解释、可以根据不同的需要进行相应的修改等。这类指纹设计的最初目的是用于搜索与活性相关的分子特征,而非子结构搜索。此外也可以用于相似性搜索、聚类、虚拟筛选等方向。指纹的生成过程大致分为以下几个步骤:

  • 1.原子初始化。为每个重原子分配一个整数标识符
  • 2.迭代更新。以每个重原子为中心,将周围一圈的重原子合并进来,直到到达指定半径。
  • 3.特征生成。对子结构进行运算,并生成特征列表。

更多内容可以参考ChemAxon的介绍,还有ECFPs的文章。

ECFPs可以捕捉到精确的子结构细节,相对应的,功能基指纹(Functional class fingerprints,FCFPs)则更为泛化,可以将同一类功能基作为一种特征结构。在rdkit中两种特征都可以通过GetMorganFingerprint实现。

  • 先定义两个分子
>>> from rdkit import Chem
>>> from rdkit import DataStructs
>>> from rdkit.Chem import AllChem
>>> from rdkit.Chem import Draw
>>> m1 = Chem.MolFromSmiles('ClC1=COCNC1')
>>> m2 = Chem.MolFromSmiles('BrC1=COCNC1')
>>> Draw.MolsToGridImage([m1, m2], subImgSize=(150, 150), legends=['ClC1CNCOC1', 'BrC1CNCOC1'])

初始化分子

2.SparseIntVects

  • 以SparseIntVects方式生成ECFPs指纹:GetMorganFingerprint(mol, radius, …)
    或者称为SparseBitVects
    mol:mol对象
    radius:考虑半径
  • 使用Dice方法比较两个指纹的相似性:DiceSimilarity()
>>> fp1 = AllChem.GetMorganFingerprint(m1, 2)
>>> fp2 = AllChem.GetMorganFingerprint(m2, 2)
>>> DataStructs.DiceSimilarity(fp1, fp2)
0.7
  • 查看长度:GetLength()
    返回指纹的长度
  • 查看非空元素:GetNonzeroElements()
    返回值是一个字典,键对应非空指纹的位数,值是指纹出现的频数
>>> print(fp1.GetLength())
4294967295
>>> print(fp1.GetNonzeroElements())
{39328034: 1, 211414882: 1, 362715007: 1, 2626911012: 1, 2968968094: 2, ...}

3.ExplicitBitVects

  • 以ExplicitBitVects方式生成ECFPs指纹:GetMorganFingerprintAsBitVect(mol, radius, nBits, …)
    radius:考虑半径
    nBits:长度
>>> fp1 = AllChem.GetMorganFingerprintAsBitVect(m1, 2, nBits=1024)
>>> fp2 = AllChem.GetMorganFingerprintAsBitVect(m2, 2, nBits=1024)
>>> DataStructs.DiceSimilarity(fp1, fp2)
0.6842105263157895

4.FCFPs

  • 通过设置useFeatures=True生成FCFPs
    可以看到ffp1和ffp2完全一致,即Cl和Br在特征上被归为一类
>>> ffp1 = AllChem.GetMorganFingerprintAsBitVect(m1, 2, nBits=10, useFeatures=True)
>>> ffp2 = AllChem.GetMorganFingerprintAsBitVect(m2, 2, nBits=10, useFeatures=True)
>>> DataStructs.DiceSimilarity(ffp1, ffp2)
1.0
  • 查看向量长度:GetNumBits()
  • 将指纹转成字符串:ToBitString()
>>> print(ffp1.GetNumBits())
10
>>> print(ffp1.ToBitString())
1111101111

5.更多泛化

  • 通过设置invariants,忽略原子类型,关注分子骨架
    先来初始化三个分子
>>> m2 = Chem.MolFromSmiles('BrC1=CCCCC1')
>>> m3 = Chem.MolFromSmiles('BrC1CCCCC1')
>>> Draw.MolsToGridImage([m1, m2, m3], subImgSize=(200, 150))

在这里插入图片描述

>>> fp1 = AllChem.GetMorganFingerprint(m1, 2, invariants=[1]*m1.GetNumAtoms())
>>> fp2 = AllChem.GetMorganFingerprint(m2, 2, invariants=[1]*m2.GetNumAtoms())
>>> fp3 = AllChem.GetMorganFingerprint(m3, 2, invariants=[1]*m3.GetNumAtoms())
>>> fp1 == fp2
True
  • 比较fp1和fp2,可以看到指纹忽略了N、O、C等差异,即fp1和fp2指纹一致,但这个时候还会考虑键的信息。例如比较fp1和fp3,它们是不相等的。
>>> fp1 == fp3
False
  • 通过设置useBondTypes,忽略键的类型
>>> fp1 = AllChem.GetMorganFingerprint(m1, 2, invariants=[1]*m1.GetNumAtoms(), useBondTypes=False)
>>> fp3 = AllChem.GetMorganFingerprint(m1, 2, invariants=[1]*m3.GetNumAtoms(), useBondTypes=False)
>>> fp1 == fp3
True

二、摩根分子指纹提取

  • 在生成分子指纹过程中,通过向参数bitInfo传入字典,可以获取所有非空指纹信息
    字典info键表示位的索引,值为原子索引、半径构成的元组,出现多个元组时,表示子结构出现了多次
    键为2968968094的值中含有多个元组,表示原子索引为4,6,半径为0的子结构相同,都记录在这一位上
>>> info = {}
>>> fp_explain = AllChem.GetMorganFingerprint(m1, 2, bitInfo=info)
>>> info
{39328034: ((1, 1),),
 211414882: ((5, 2),),
 362715007: ((6, 1),),
 397705891: ((4, 1),),
 718785834: ((1, 2),),
 1016841875: ((0, 0),),
 1078999752: ((3, 1),),
 1289643292: ((5, 1),),
 2132511834: ((5, 0),),
 2626911012: ((4, 2),),
 2968968094: ((4, 0), (6, 0)),
 ...}

1.提取方法一

  • 以提取出211414882的结构为例,首先提取m1中,半径为2,第5个原子的结构
    submol接收提取出的子结构
    amap用于接收原子索引的映射关系,键为原始分子中的原子索引,值为子结构中的原子索引
    env是被提取出的键的索引
>>> amap = {}
>>> env = Chem.FindAtomEnvironmentOfRadiusN(m1, 2, 5)
>>> submol=Chem.PathToSubmol(m1, env, atomMap=amap)
>>> print(amap)
{1: 4, 3: 0, 4: 1, 5: 2, 6: 3}
>>> print(list(env))
[4, 5, 3, 6]
  • 用SMILES表示该子结构
>>> Chem.MolToSmiles(submol)
'CCNCO'
  • 以第5个原子为中心,用SMILES表示该子结构,可以看出是氮原子
>>> Chem.MolToSmiles(submol, rootedAtAtom=amap[5], canonical=False)
'N(CO)CC'

2.提取方法二

  • 遍历env中的所有键,获取键连接的所有原子,保存在atoms中
    通过给定分子,及要提取的原子信息、键信息,获取子结构
>>> atoms=set()
>>> for bidx in env: 
>>>     atoms.add(m1.GetBondWithIdx(bidx).GetBeginAtomIdx())
>>>     atoms.add(m1.GetBondWithIdx(bidx).GetEndAtomIdx())
>>> Chem.MolFragmentToSmiles(m1, atomsToUse=list(atoms), bondsToUse=env, rootedAtAtom=5)
'N(CC)CO'

三、指纹可视化

查看211414882代表的子结构

  • 绘制子结构:DrawMorganBit(mol, bitId, bitInfo, …)
    mol:mol对象
    bitId:要查看的bit id
    bitInfo:指纹信息
>>> Draw.DrawMorganBit(m1, 211414882, info)

3

  • 在ECFPs中的颜色的含义:
    蓝色:表示中心原子
    黄色:表示带有芳香性质的原子
    灰色:表示在脂肪环中的原子
>>> mol = Chem.MolFromSmiles('c1ccccc1CC1CC1')
>>> bi = {}
>>> fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, bitInfo=bi)
>>> Draw.DrawMorganBit(mol, 872, bi)

4
本文参考自rdkit官方文档。
代码及源文件在这里。

RDkit:介绍smiles编码,smart编码及摩根指纹(ECFP) smiles,smart编码及摩根指纹介绍 阅读详情

相关推荐

【分子指纹】化学分子指纹的概念和应用(非常重要)

分子指纹(Molecular fingerprints)可以低计算成本的方式表示大规模化学数据集中化合物的化学(结构、物理化学等)性质。它们在将化学数据集中的分子转换为适合于计算方法的一致输入格式(bit向量或数值)方面发挥着重要作用。在这篇综述中,

DJJ5210的博客 1万+

Rdkit|化学指纹(fingerprint)

Rdkit|化学指纹(fingerprint)

发呆的比目鱼的博客 1万+

RDKit 摩根指纹解析:从bitInfo字典到5步子结构提取流程

本文详细解析了RDKit中摩根指纹的bitInfo字典机制,并提供了标准化的5步原子环境提取流程,帮助开发者实现从抽象指纹位到具体化学结构的精准映射。通过实战案例和代码示例,展示了如何高效计算分子相似度并提取关键子结构,适用于药物发现和材料科学领域。

weixin_30781433的博客 514

ECFP、FCFP和SMILES的内在原理

指纹是一种非常有用的低分辨率的分子表征,其形式多种多样。在过去几十年中,指纹已被应用于解决各种问题。扩展连通性指纹(Extended Connectivity Fingerprints,ECFP)是当下最广受使用用于构建化合物定量构效关系(QSAR)模型的分子指纹。 ECFP 于 2000 年随着 Pipeline Pilot 的发布而首次引入。在 RDKit 中,ECFP 指纹又叫 Morgan 指纹,其原因为ECFP的核心思想来自于 Morgan 算法,该算法试图为分子中的每个原子分配一个唯一的、连续的

weixin_40551464的博客 1万+

RDKit实战:从摩根指纹到分子相似性计算全流程

本文详细介绍了RDKit在化学信息学中的应用,从安装到分子结构处理,再到摩根分子描述符的生成和分子相似性计算全流程。通过实战案例和性能优化技巧,帮助读者快速掌握RDKit在药物发现和材料设计中的关键应用,提升分子相似性分析的效率和准确性。

weixin_30617695的博客 382

RDKit 4种分子指纹实战对比:Tanimoto/Dice/Cosine 3种相似度指标差异分析

本文深入评测RDKit中四种分子指纹(拓扑指纹、MACCS、原子对和摩根指纹)在Tanimoto、Dice、Cosine三种相似度指标下的表现差异,帮助药物发现和化学信息学领域的从业者在具体项目中做出更明智的技术选型。通过实战案例和性能对比,展示了不同指纹和指标组合的适用场景与优化策略。

cuixie2370的博客 427

rdkit 化学指纹(fingerprint)和相似性

文章目录一、引入所需库二、化学指纹2.1 拓扑指纹 Chem.RDKFingerprint(mol)2.2 MACCS 指纹MACCSkeys.GenMACCSKeys(mol)2.3 原子对Atom Pairs2.4 拓扑扭曲topological torsions2.5 摩根指纹(圆圈指纹)AllChem.GetMorganFingerprint(mol,2)2.6 摩根指纹拓展三、相似性计算3.1 基于指纹计算相似性3.1.1 方案一:基于拓扑指纹和Tanimoto相似性方法指纹计算3个分子的相似性

qq_36801966的博客 1万+

RDKit安装避坑与摩根指纹初体验:用Anaconda搞定化学信息学环境

本文详细介绍了如何通过Anaconda高效安装RDKit化学信息学工具包,并深入解析摩根分子描述符的原理与应用。从环境配置避坑到摩根指纹生成与分子相似度计算,提供完整的实战指南,帮助研究者快速掌握化学信息学核心技术。

weixin_30265103的博客 395

RDKit计算摩根分子描述符

公共版本包含166个键,即166个 “0或1”,其中每个键对应于特定的分子特征,例如存在羰基(键154:('[#6] = [#8]',0),RDkit中的#C = O.实现)摩根型指纹是一种圆形指纹。每个原子的环境和连通性被分析到给定的半径,并且每种可能性都被编码。因此,圆形指纹是原子类型和分子连通性的系统探索,而MACCS键依赖于要匹配的预定义分子特征。“当比较ECFP / FCFP指纹和RDKit生成的Morgan指纹时,请记住ECFP4中的4对应于所考虑的原子环境的直径,而Morgan指纹采用的是。

LRJ的博客 3304

RDKit | 基于分子指纹可视化化学空间

根据化学结构可视化化合物空间 方法 计算分子指纹 为每种化合物生成一个指纹并减小其尺寸,以便可以将其绘制在平面上。根据相似性原理,“相似的化合物具有相似的性质”,具有相似结构和性质的化合物应紧密地分布在一个平面上。 尝试使用Morgan指纹。 PCA降维方法 使用主成分分析(PCA)和UMAP进行尺寸缩减。PCA是最常用的方法,但由于...

DrugOne 4716

RDkit入门

今天开始写RDkit的入门教程,每天学习和写一小点,相信一句话“不积跬步无以至千里,不积小流无以成江海”,所以就慢慢来,一点一滴积累叭,从最简单的开始喽希望自己每天都能保持写博客的好习惯,把自己的代码笔记就极在这里,RDkit一块啃了很久的骨头,今天终于要下定决心,好好总结一波了,希望保持这个更新的频率,每天都能有所学。............

博客而已 6683

Rdkit| 相似性计算

Rdkit| 相似性计算

发呆的比目鱼的博客 3817

FingerprintCalculator:摩根指纹计算器

指纹计算器 用于生成圆形摩根指纹的 Python 类集合。 这些类可以在 python 中独立使用,也可以与它们集成的脚本一起使用。 为此,请键入:./FingerprintCalculator.py -help 指纹以二进制和计数格式计算。 此外,指纹可以是: Hashed:用户定义的固定长度。 可能会出现碰撞。 未散列(键控)。 指纹中的每个位置只对应一个化学亚结构。 这些类和脚本允许知道在每个位置映射了哪些化学子结构,因此如果用于预测建模研究(例如 ,可以解释指纹和化学空间的解卷积 )。 请与我联系以获取更多详细信息、反馈或帮助。 谢谢 ! 例子 ./FingerprintCalculator.py -bits 256 -radii 1 2 3 -mols Compounds.sdf -output Compound_fps -RDkitPath $RDBASE

RDKit 摩根指纹可视化进阶:5步解析bitInfo字典与子结构精准提取

本文深入解析RDKit摩根指纹的bitInfo字典,通过5个关键步骤实现子结构精准提取与可视化。详细介绍了ECFP与FCFP的差异分析方法,帮助化学信息学研究者掌握摩根分子指纹的计算与提取技术,提升分子描述与结构分析的效率。

weixin_34005042的博客 426

Python遥感技术实战:NDWI与MNDWI水体提取算法对比与优化

本文详细对比了NDWI与MNDWI两种水体提取算法在Python遥感技术中的应用。通过实战代码演示,分析了二者在自然与城镇场景下的表现差异,并重点介绍了阈值优化与后处理技巧,旨在帮助读者掌握高效、精准的水体提取方法,提升遥感数据分析能力。

f6g7h8i9j的博客 499

基于plc的工厂除尘控制系统设计(S7-200、仿真、调试、高质量)

工业作为我国第二支柱产业,在近十几年来发展非常迅速,虽然带了了可观的经济效益,但在工业生产中所产生的大量粉尘气体对大气的污染现象也不容忽视。为减少工业粉尘对环境的污染,世界各国制定了严格的环境保护要求。为了减少工业中粉尘的排放,除尘器的研发改良,以及燃煤的使用等等都在不断更改以符合粉尘排放标准。而目前最先进的除尘设备无机膜除尘器具备除尘效率高,稳定性好,结构紧凑易于维护等优点,且无机膜对于粉尘吸附效率高,抗腐蚀能力优秀,耐高温,因此能更有效应用于高温烟气的除尘。本文根据PLC技术在除尘方面的应用,来优化设计

老高的博客 1280

RDKit|摩根指纹实战:从基础计算到化学空间可视化

本文详细介绍了RDKit中摩根指纹的计算与应用,从基础实现到高级参数优化,再到化学空间可视化。通过实战案例展示如何利用摩根指纹进行虚拟筛选、聚类分析和结构-活性关系解读,帮助读者掌握这一在药物发现和材料科学中广泛使用的分子描述符技术。

dy_f的专栏 329

Abaqus中使用Python提取裂缝数据并用matplotlib库绘图

ABAQUS后处理PYTHON二次开发代码:提取裂缝数据并用matplotlib库绘图

qq_42568527的博客 3471

RDKit 摩根指纹实战:3种参数配置对比与10万分子库相似性搜索优化

摩根指纹(Morgan Fingerprints)作为化学信息学中最强大的分子描述工具之一,其性能优化直接决定了大规模分子库筛选的效率。本文将深入探讨三种主流摩根指纹参数配置(SparseIntVect、ExplicitBitVect和FCFP模式)在实际应用中的性能差异,并提供一套完整的10万级分子库相似性搜索优化方案。当处理大规模分子库时,单纯的算法正确性不足以保证实用性,必须结合工程优化技术。图中红色点表示筛选出的高相似度分子,它们确实在化学空间中形成了明显的聚类,验证了方法的有效性。

weixin_30570101的博客 406

基于FPGA的CORDIC算法实现——Verilog版

目前,学习与开发FPGA的程序员们大多使用的是Verilog HDL语言(以下简称为Verilog),关于Verilog的诸多优点一休哥就不多介绍了,在此,我们将重点放在Verilog的运算操作上。 我们都知道,在Verilog中,运算一般分为逻辑运算(与或非等)与算术运算(加减乘除等)。而在一开始学习Verilog时,老司机一定会提醒我们,“切记,千万别用‘/’除、‘%’取模(有的也叫取余)和‘

善良の一休君的博客 6万+

【ArcGIS教程】基于DEM数据的洪水淹没分析——提取淹没区并计算淹没区洪水量

使用ArcGIS开展洪水淹没区分析、提取淹没区并计算淹没区洪水量的详细说明,如果想获取教程中实验数据,请关注微信公众号【GIS小能手】然后在后台留言。

weixin_45469245的博客 6821

RDKit 摩根指纹实战:3种参数组合对比,Dice相似度差异超0.3

本文深入探讨了RDKit摩根指纹的参数调优策略,重点分析了radius、nBits和useFeatures三个关键参数对Dice相似度的影响。通过对比ECFP4、ECFP6和FCFP4等典型配置,揭示了参数组合在虚拟筛选和分子聚类中的量化差异,为化学信息学领域的实践提供了实用指南。

weixin_30882895的博客 421

Python之afdx包语法、参数和实际应用案例

Python 的 afdx 包是针对 AFDX 协议的轻量级开发工具,专注于 AFDX 数据帧的解析、构造、发送/接收、协议合规性校验等核心能力,广泛应用于航空电子设备测试、仿真、数据监控等场景。

王国平的博客 983

终极RDKit教程:从安装到分子结构分析的完整指南

RDKit是一个功能强大的开源化学信息学工具包,广泛应用于分子结构处理、化学信息分析和药物发现研究。本教程将帮助新手快速掌握RDKit的核心功能,从环境搭建到实际应用,让你轻松上手这款强大的化学计算工具。 ## 📋 准备工作:安装RDKit ### 1. 环境要求 - Python 3.6+ - C++编译器(推荐GCC 7.0+或Clang 5.0+) - CMake 3.10+ ###

gitblog_01102的博客 1064

基于Simulink的柔性关节人形机器人振动抑制控制仿真

本文完成了基于Simulink的柔性关节人形机器人振动抑制控制仿真,实现了:✅ 建立二质量柔性关节动力学模型✅ 设计加速度反馈主动阻尼控制器✅ 对比陷波滤波与状态反馈效果✅ 验证大幅运动下的快速振动衰减能力✅ 为高动态人形机器人操作(如击掌、搬运)提供平滑执行基础。

xiaoheshang_123的博客 130

vue3 - 高德地图定位出错Get ipLocation failed.Geolocation permission denied.(info: “FAILED“ | status: 0)报错解决!

vue3,nuxt3,高德地图,定位,位置,报错,AMap.Geolocation,解决报当前定位失败,高德地图H5 定位失败报错,web网页网站,报错详细解决教程,Get ipLocation failed.Geolocation permission denied.,高德地图定位报错info: "FAILED",高德地图status: 0,已经是https了还是报错,确保了浏览器位置已经开了,手机定位也开了,没解决,H5页面在ios的浏览器上使用 高德地图 报当前定位失败Geolocation,移动端设

✅ 精选推荐文章 6771
上一篇: RDKit|分子子结构的删除、替换与切割
下一篇: RDKit|最大公共子结构搜索与参数介绍
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值