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


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.mfbz.cn/a/41926.html

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

相关文章

4.日志分布式-ELK

文章目录 日志分布式-ELK概念可以添加的其它组件filebeat 结合 logstash 带来好处为什么要使用 ELK缓存和Fluentd完整日志系统基本特征ELK 的工作原理 部署Elasticsearchjdk环境和防火墙配置安装Elasticsearch修改配置文件优化内存参数启动程序并测试效果安装 Elasticsearch-he…

ThunderScope开源示波器

简介 4CH,1GSa/S 开源示波器。前端很简洁,BUF802LMH6518,ADC是HMCAD1511,用Xilinx A7 FPGA进行控制,数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网,强。 设计日志:h…

AR气象博物馆模拟体验提升青少年认知

国际气象节主要目的是唤起人们对气象工作的重视和热爱。近年来,极端天气频发,人们需要提高警惕,AR气象远程普利用ar技术特有的沉浸式的体感互动,通过模拟演练提升体验者的安全防范意识和求生技巧。 系统结合VR虚拟现实、AR增强现实…

VSCode下载安装(保姆级--一步到胃)

前言 Visual Studio Code(简称“VSCode” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且…

机械臂的雅克比矩阵推导

1. 线速度和角速度的递推通式推导 p i p i − 1 R i − 1 r i − 1 , i i − 1 \mathbf{p}_{i}\mathbf{p}_{i-1}\mathbf{R}_{i-1} \mathbf{r}_{i-1, i}^{i-1} pi​pi−1​Ri−1​ri−1,ii−1​ p i − 1 \mathbf{p}_{i-1} pi−1​是 { i − 1 } \{i-1\} {i−1}坐标系的原点的…

[PHP]解决exec执行unzip出现中文文件名乱码的问题

查看Linux编码,如下图可看出Linux编码是zh_CN.UTF-8 问题截图: 以下代码都会产生乱码 exex(unzip -d /xxx /x/test.zip); exex(unzip -O zh_CN.UTF-8 -d /xxx /x/test.zip); exex(unzip -I zh_CN.UTF-8 -d /xxx /x/test.zip); 解决方法: e…

大模型开发(五):实现Jupyter本地调用OpenAI API

全文共3000余字,预计阅读时间约15分钟 | 满满干货,建议收藏! 大模型开发(五):实现Jupyter本地调用OpenAI API OpenAI作为本轮大语言模型技术进步的先驱,其系列大型模型在效果上一直保持着领先。其推出的各类模型如文本…

Ubuntu搭建docker+laradock

使用Ubuntu搭建dockerlaradock windows 下载Ubuntu工具二选一 链接:https://pan.baidu.com/s/154K6MKdFZxWqaTn2q-6MSQ 提取码:06lc https://www.jianshu.com/p/b7e11d0dbe8c借鉴地址:https://zhuanlan.zhihu.com/p/547169542 备注&#x…

JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

目录 1_前端数据请求方式1.1_前后端分离的优势1.2_网页的渲染过程 – 服务器端渲染1.3_网页的渲染过程 – 前后端分离 2_HTTP协议的解析2.1_HTTP概念2.2_网页中资源的获取2.3_HTTP的组成2.4_HTTP的版本2.5_HTTP的请求方式2.6_HTTP Request Header2.7_HTTP Response响应状态码 3…

成为机器人工程师需要学习那些技术

机器人工程师是未来比较吃香的工作岗位,要成为机器人工程师,ChatGPT的回答是,建议你需要学习以下技术: 1、机械工程:了解机械结构、运动学和动力学,以及机械设计和制造方面的知识。 2、电子工程&#xff1…

opencv -11 图像运算之按位逻辑运算(图像融合图像修复和去除)

按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法,使用OpenCV的按位逻辑运算函数可以对图像进行位与(AND)、位或(OR)、位非(NOT)和位异或(XOR)等操作。 通俗点就是…

i.MX6ULL(十六) linux 设备驱动

一 简介 Linux设备驱动是指驱动Linux内核与硬件设备进行通信的软件模块。设备驱动通常分为两类:字符设备驱动和块设备驱动。 设备驱动的主要功能包括: 设备初始化:在系统启动时,设备驱动需要初始化相应的硬件设备,设…

8、链路层以太网协议,ARP协议32

网络层IP协议描述了通信中的起点到终点,但是数据不是飞过去的,是经过了大量的中间节点转发完成的。 一、以太网协议 1、MAC地址 物理硬件地址,是每一块网卡在出厂时设定的地址,固定且不可修改(早期,现在可…

密码学学习笔记(十五):ECDSA - 椭圆曲线数字签名算法

椭圆曲线数字签名算法是DSA的一种椭圆曲线变体,它发明的初衷只是避免使用Schnorr签名的专利。椭圆曲线数字签名算法依赖于验证器中的私钥和主机用于验证验证器的公钥。它的缺点和DSA一样,它也没有提供安全性证明。 椭圆曲线算法 DSS(数字签…

【Vue面试题系列】四

VNode有哪些属性? Vue内部定义的Vnode对象包含了以下属性: __v_isVNode: true,内部属性,有该属性表示为Vnode __v_skip: true,内部属性,表示跳过响应式转换,reactive转换时会根据此属性进行判断…

Django实现接口自动化平台(十四)测试用例模块Testcases序列化器及视图【持续更新中】

相关文章: Django实现接口自动化平台(十三)接口模块Interfaces序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看: python django…

一条命令解决端口占用,开启mysql

注:最后有面试挑战,看看自己掌握了吗 文章目录 端口占用开启mysql 端口占用 如果发现 8080 端口被占用可以使用命令 sudo lsof -t -i:8080 | sudo xargs kill -9 查找并杀死相应的进程。 开启mysql 打开命令提示符或终端。如果您已经安装了MySQL&…

Cesium Terrain Builder (CTB) 简单使用_地形切片

Cesium Terrain Builder (CTB) 简单使用_地形切片 目录 Cesium Terrain Builder (CTB) 简单使用_地形切片 官网地址: winr(cmd)打开命令提示符工具运行: Create a GDAL Virtual Dataset (optional) Create Cesium Terrain fi…

EasyCVR视频融合平台能正常播放其他协议流,但无法播放HLS流的原因排查

EasyCVR基于云边端一体化架构,支持海量视频汇聚管理,平台支持多协议与多类型设备接入,具体包括国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等,能对外分发RTMP、RTSP、HTTP-FLV、WS-FLV、HLS、WebRTC等。…

部署langchain+chatglm

先参考:window零基础部署langchain-ChatGLM_飞奔的屎壳郎的博客-CSDN博客 安装一部分, 1.GCC安装 gcc64位下载 一定要装64位的gcc,因为我的电脑是w10 64位的,装32位运行langchain报错并配置环境变量 可直接用压缩包中的文件&am…