Rdkit|分子3D构象生成与优化

news/2024/4/28 12:48:12/文章来源:https://blog.csdn.net/weixin_42486623/article/details/131601706


github; 地址

文章目录

  • Rdkit|分子3D构象生成与优化
    • 构象生成算法概述
    • 基于距离(distance-based)
      • 代码示例
    • 距离几何算法生成3D结构
    • 距离几何+ETKDG生成3D构象
    • 距离几何+ETKDG生成多构象
      • 将Conformer类转为Mol类
      • 手动对齐
    • 距离几何+ETKDG+MMFF生成3D构象
    • 距离几何+ETKDG+MMFF生成多构象
    • 多线程生成多构象

Rdkit|分子3D构象生成与优化

RDKit是一款非常强大的分子信息学工具包,其中包含了分子3D构象生成与优化的功能。通过RDKit,您可以将一个分子的2D结构转化为3D结构,并进行能量最小化优化,得到最稳定的构象。

构象生成算法概述

  • 基于距离(distance-based)
  • 基于知识(knowledge-based)

下面是基本代码逻辑

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem import AllChem# 读入分子SMILES字符串
mol = Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(=O)O')# 生成初始3D构象
AllChem.EmbedMolecule(mol)# 进行能量最小化优化
AllChem.MMFFOptimizeMolecule(mol)# 输出优化后的3D结构
print(Chem.MolToMolBlock(mol))

基于距离(distance-based)

传统的距离几何(Distance Geometry)法生成构象步骤:

  • (1) 通过分子的连接表信息和一套规则,生成分子的连接边界矩阵(molecule’s distance bounds matrix )
  • (2) 使用三角形边界平滑算法(triangle-bounds smoothing algorithm),对边界矩阵进行平滑处理
  • (3) 根据边界矩阵,随机产生一个距离矩阵。
  • (4) 把产生的距离矩阵映射到三维空间中,并为每个原子计算坐标。
  • (5) 对计算的坐标结果使用力场和边界矩阵进行粗略的优化。

这种方法虽然计算速度快,也能得到分子的三维坐标,但纯粹基于距离计算会导致部分结构的扭曲,也就是结果比较丑。想得到更好的结构,需要进行更细致的力场优化,比如再使用rdkit的通用力场(Universal Force Field,UFF)进行处理。

代码示例

mol = Chem.MolFromSmiles('CC1=CC=C(C=C1)NC2=C3C(=C(C=C2)NC4=CC=C(C=C4)C)C(=O)C5=CC=CC=C5C3=O')
m3d = Chem.AddHs(mol)
print(mol.GetNumAtoms(), m3d.GetNumAtoms())

距离几何算法生成3D结构

使用距离几何算法初始化3D坐标。

生成3D构象:AllChem.EmbedMolecule(mol, randomSeed, clearConfs, useExpTorsionAnglePrefs, useBasicKnowledge, …)

  • mol:传入mol对象
  • randomSeed:随机种子,方便结果重复
  • clearConfs:清除已有构象,默认True
  • useExpTorsionAnglePrefs和useBasicKnowledge两个参数即控制是否使用ETKDG,默认都为True
AllChem.EmbedMolecule(m3d, randomSeed=10, useExpTorsionAnglePrefs=False, useBasicKnowledge=False)
Draw.MolToImage(m3d, size=(250,250))

距离几何+ETKDG生成3D构象

生成3D构象:AllChem.EmbedMolecule()
先用距离几何初始化3D坐标,再使用ETKDG算法优化
参数同上,默认useExpTorsionAnglePrefsuseBasicKnowledge为True

AllChem.EmbedMolecule(m3d, randomSeed=10)
Draw.MolToImage(m3d, size=(250,250))

距离几何+ETKDG生成多构象

生成多个构象:AllChem.EmbedMultipleConfs(mol, numConfs, maxAttempts, randomSeed, clearConfs, pruneRmsThresh, useExpTorsionAnglePrefs, useBasicKnowledge, …)

其中numConfs控制了生成构象的个数。

  • mol:mol对象
  • numConfs:生成的构象数量
  • maxAttempts:尝试生成构象的最多次数
  • randomSeed:随机种子
  • clearConfs:清除已有构象
  • pruneRmsThresh:根据RMS进行合并
  • ETKDG相关参数同上
cids = AllChem.EmbedMultipleConfs(m3d, numConfs=10)
print(len(cids))


获取某个构象GetConformer(id)
通过传入id获取指定构象

# 获取第n个构象
conformer = m3d.GetConformer(id=6)# 将Conformer对象添加到Mol对象中
m3d.AddConformer(conformer)

将Conformer类转为Mol类

from rdkit import Chem# 创建一个rdkit.Chem.rdchem.Mol对象
mol = Chem.MolFromSmiles('CCOCC')# 创建一个新的rdkit.Chem.rdchem.Mol对象,通过复制已有的Mol对象
new_mol = Chem.Mol(mol)# 创建一个新的rdkit.Chem.rdchem.Conformer对象
conformer = Chem.Conformer()AllChem.EmbedMolecule(mol, randomSeed=1)# 设置Conformer对象的原子坐标
for atom_idx in range(mol.GetNumAtoms()):position = mol.GetConformer().GetAtomPosition(atom_idx)conformer.SetAtomPosition(atom_idx, position)# 将Conformer对象添加到新的Mol对象中
new_mol.AddConformer(conformer)

计算不同构象间的差异:AlignMolConformers(mol, RMSlist, …)

对同一分子不同的构象先进行重叠排列,再计算RMS(root mean square)值
RMSlist:用于接收RMS的列表,它由第一个构象与剩余9个构象依次比对产生。

rmslist = []AllChem.AlignMolConformers(m3d, RMSlist=rmslist)print(len(rmslist))
rmslist


也可以计算任意两个指定构象的RMS值GetConformerRMS(mol, confId1, confId2, atomIds, prealigned)

  • confId1:第一个构象
  • confId2:第二个构象
  • atomIds:需要对比的原子,默认全部
  • prealigned:构象是否已经对齐,默认False(没有时,函数会自动将它们对齐)
AllChem.GetConformerRMS(m3d, 1, 9, prealigned=True)

手动对齐

也可以使用AllChem.AlignMol()方法。这个方法需要两个参数,即待对齐的两个分子。

注意,AlignMol()方法会修改第二个分子的坐标,将其与第一个分子对齐。如果您想保留原来的分子,可以先复制一份再进行对齐。

from rdkit import Chem
from rdkit.Chem import AllChem# 读取分子
mol1 = Chem.MolFromSmiles('CCO')
mol2 = Chem.MolFromSmiles('CC(=O)O')
AllChem.EmbedMolecule(mol1, randomSeed=1)
AllChem.EmbedMolecule(mol2, randomSeed=1)
# 对齐分子
AllChem.AlignMol(mol1, mol2)# 打印对齐后的分子坐标
print(Chem.MolToMolBlock(mol2))

距离几何+ETKDG+MMFF生成3D构象

对距离几何产生的构象,进行ETKDG优化后,还可以继续使用MMFF94等力场进行优化。不过需要注意的是,MMFF力场中的原子类型编码采用了自身的芳香性模型,因此在使用MMFF相关方法后,分子的芳香属性(aromaticity flags)会改变。

使用MMFF94进行优化构象:MMFFOptimizeMolecule(mol, mmffVariant, maxIters, …)

  • mmffVariant:可选"MMFF94"或"MMFF94s",默认MMFF94
  • maxIters:最多迭代次数,默认200
AllChem.EmbedMolecule(m3d, randomSeed=10)
AllChem.MMFFOptimizeMolecule(m3d)
Draw.MolToImage(m3d, size=(250,250))

距离几何+ETKDG+MMFF生成多构象

其实当使用ETKDG算法生成3D构象时,通常无需再使用MMFF94力场优化。如果执意要这么做,有一个方便的函数可以调用

使用MMFF94优化多个构象:MMFFOptimizeMoleculeConfs()
返回的结果是元组组成的列表,每个元组表示每个构象的收敛值能量(not_converged, energy)。如果not_converged是0,则收敛,接近最稳态,否则没有到达最稳态。

res = AllChem.MMFFOptimizeMoleculeConfs(m3d)
res

多线程生成多构象

可以通过numThreads参数进行设置。

  • EmbedMultipleConfs(mol, numThreads)
  • MMFFOptimizeMoleculeConfs(mol, numThreads)
    • numThreads:默认为1,表示单进程执行。设置为0表示将会使用本机最大线程数执行。
cids = AllChem.EmbedMultipleConfs(m3d, numThreads=0)
res = AllChem.MMFFOptimizeMoleculeConfs(m3d, numThreads=0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_331105.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js 版本管理工具 n 使用指南

Node.js 版本更新很快,目前 node v20.x 已经发布,我们在使用时避免不了会需要切换不同的 Node.js 的版本来使用不同版本的特性。 所以就出现了像 windows 上的 nvm,MacOS 上的 n 工具,本文就介绍一下如何使用 n 管理 Node.js 的版…

InsCode Stable Diffusion使用教程【InsCode Stable Diffusion美图活动一期】

记录一下如何使用 InsCode Stable Diffusion 进行 AI 绘图以及使用感受。 一、背景介绍 目前市面上比较权威,并能用于工作中的 AI 绘画软件其实就两款。一个叫 Midjourney(简称 MJ),另一个叫 Stable Diffusion(简称 …

FPGA——按键控制led灯

文章目录 一、实验环境二、实验任务三、系统设计四、实验过程4.1 编写verilog代码4.2 引脚配置 五、仿真5.1 仿真代码5.2 仿真结果 六、实验结果七、总结 一、实验环境 quartus 18.1 modelsim vscode Cyclone IV开发板 二、实验任务 使用开发板上的四个按键控制四个LED灯。按…

【微信小程序创作之路】- 小程序窗口整体配置(导航栏、标题)

【微信小程序创作之路】- 小程序窗口导航栏配置 第五章 微信小程序窗口导航栏配置 文章目录 【微信小程序创作之路】- 小程序窗口导航栏配置前言一、入口文件的配置二、页面配置三、全局默认窗口配置1.navigationBarTitleText:导航栏标题文字2.navigationBarBackgr…

​​Layui之用户管理实例(对数据的增删改查)

目录 ​编辑一、R工具介绍() ​编辑二、数据表的增删改查 ​编辑2.1我们先得从查询数据库的语句入手 2.2优化dao类 2.4UserAction类 2.5前台的页面实现增删改查操作 2.6 userManage页面JS 2.7user新增、修改iframe层js 前言 上一篇我分享了…

SpringCloudAlibaba:消息驱动之RocketMQ学习

目录 一、MQ简介 (一)什么是MQ (二)MQ的应用场景 1、异步解耦 2、流量削峰 (三)常见的MQ产品 二、RocketMQ入门 (一)RocketMQ安装部署 1、环境要求 2、下载RocketMQ 3、安…

nginx的前端集成

对于springcloud项目,后端我们有很多的微服务,当然前端我们也可以有很多的小项目进行集成 前端项目部署思路 通过nginx来进行配置,功能如下 通过nginx的反向代理功能访问后台的网关资源 通过nginx的静态服务器功能访问前端静态页面 配置ng…

CSS3绘制3D银行卡片层叠展示特效

使用纯css3绘制3D银行卡层叠展示特效 具体示例如下 <template><div><div class"tariffCards"><div class"economy"><img src"../images/css-article-imgs/example-css3D-card/tarcs.png" alt"中信银行" he…

图腾柱电路

驱动MOS或者IGBT管&#xff0c;需要比较大的驱动电流或者灌电流 使用图腾柱电路或许是一个好的办法 电流路径是这样的 当CTL1端口输出为高电平的时候 三极管Q2的2脚为高&#xff0c;三极管Q2不导通 三极管Q1的2脚为高&#xff0c;三极管导通 所以Q1的3脚和1脚导通 VCC--…

Linux线程的生产者消费者模型 --- 阻塞队列(blockqueue)

文章目录 线程同步条件变量条件变量的接口 生产者消费者场景消费者和消费者的关系生产者和生产者的关系生产者和消费者的关系从何体现出效率的提高 Blockqueueblockqueue.hpp为什么条件变量的接口有锁作为参数 CP.cc生产者 -> queue -> 消费者兼生产者 -> queue ->…

【HarmonyOS】Stage模型二维码/条码生成与解析

HarmonyOS的官方API中提供了QRCode组件&#xff08;QRCode-基础组件-组件参考&#xff08;基于ArkTS的声明式开发范式&#xff09;-ArkTS API参考-HarmonyOS应用开发&#xff09;&#xff0c;这个组件有个缺点只能用于显示二维码&#xff0c;无法显示条码与解析码内容&#xff…

【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str

文章目录 问题情境报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 问题情境 本解决方案适用情境&#xff1a;在本地可以正常运行的flask项目&#xff0c;放到云服务器报错TypeError: tuple indices must be integers or slices, not str&#xff0c;即代码…

《深度学习推荐系统》笔记

目录 一、推荐系统是什么1.作用和意义2.推荐系统的架构2.1 逻辑架构2.2 技术架构 二、传统的推荐系统方法1. 协同过滤算法1.1 userCF&&ItemCF1.3 矩阵分解算法 2. 逻辑回归算法3. 因子分解机3.1 POLY2模型3.2 FM模型3.3 FFM模型3.4 小结 4. 组合模型4.1 GBDTLR组合模型…

【C++/嵌入式笔试面试八股】二、24.TCP三次握手四次挥手 | TCP可靠性

TCP三次握手四次挥手 64.TCP头部中有哪些信息?❤️ TCP数据报格式(左图) UDP数据报格式也放这(右图),不具体解释了。 结合三次握手四次挥手来看 端口: 区分应用层的不同应用进程 扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口…

Docker安装ElasticSearch/ES

目录 前言准备拉取ElasticSearch镜像安装ElasticSearch拉取elasticsearch-head镜像安装elasticsearch-head参考 前言 TencentOS Server 3.1Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装。 安装 docker 参考&#xff1a;【Centos 8】【Centos 7】安装 docke…

基于STM32 ARM+FPGA伺服控制系统总体设计方案(一)

设计需求 一套完整的伺服控制方案包括了上位机、驱控一体控制器和功率板三者。操作人员 通过上位机发送各种不同指令&#xff0c;然后控制器解析指令后执行相应的伺服功能&#xff0c;其次控 制器将驱动信号传输至功率板驱动电机&#xff0c;最后控制器采集反馈信息进行闭环…

了解PostgreSQL sql shell和VACUUM命令

从SQL Shell进入PostgreSQL&#xff1b;没用过这东西&#xff0c;看一下&#xff1b; 一直回车&#xff1b;最后输入口令就登入了&#xff1b;此时是登入默认的数据库postgres&#xff1b;这个数据库是默认安装的&#xff1b; 看一下有没有表&#xff0c;根据资料可以用 \d 或…

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势&#xff0c;是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤&#xff0c;最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…

Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解

Linux中常用的监控性能的命令有&#xff1a; sar&#xff1a;能查看CPU的平均信息&#xff0c;还能查看指定CPU的信息。与mpstat相比&#xff0c;sar能查看CPU历史信息 mpstat&#xff1a;能查看所有CPU的平均信息&#xff0c;还能查看指定CPU的信息。 与sar相比&#xff0c…

九五从零开始的运维之路(其二十)

[TOC](文章目录) 文章目录 前言一、LAMP是什么二、配置环境及安装1.配置yum源2.关闭防火墙、网络图形化工具及SElinux3.安装软件包 三、配置apache服务器内容四、启动服务五、访问验证总结 前言 本篇将简述的内容&#xff1a;Linux系统下的LAMP平台部署 基于discuz框架的论坛搭…