Rdkit|最大公共子结构

news2024/9/28 0:54:00


github:地址

文章目录

  • Rdkit|最大公共子结构
    • `rdFMCS.FindMCS`
    • 参数
      • `bondCompare`
      • `atomCompare`
      • `matchValences`
      • `ringMatchesRingOnly`
      • `completeRingsOnly`
      • matchChiralTag
    • 高亮分子的不同子结构
    • 参考

Rdkit|最大公共子结构

rdFMCS.FindMCS

  • mols: 分子对象
  • maximizeBonds一个结构由原子和键组成。默认True情况下,MCS查找的目标是让键的数量最大化,相当于让环的数量最大化。最大化键的数量时,会使环的数量最大化,但也可能出现两个小环键的数量不如一个大环多的情况。可以通过将maximizeBonds参数设为False来取消设置。
  • threshold:线程数,默认:1
  • timeout:超时时间,默认:3600,MCS算法会穷尽每一种可能,寻找到一个最大的公共子结构。一般情况下说,该算法几秒内就能完成,但是有时也会花很长时间甚至花几分钟。这时,可以使用timeout参数来规定最大搜索时长,到达指定时长仍没有搜索完时,会返回现有的最优结果,并将canceled属性设置为True。该参数单位为秒。
  • verbose:输出日志,默认:False
  • matchValences:即忽略化合价信息,默认False。假设要考虑化合价信息,例如不想让一个3价氮与一个5价氮匹配上,那就可以将该参数改为True。
  • ringMatchesRingOnly: 默认为False,这种情况下,线性的碳链可能会匹配上一个环。如果只想让环相互匹配,可以将该参数设置为True。
  • completeRingsOnly:如果只想要能够完整匹配上的环,而不想要匹配一半的环,可以将该参数设置为True。默认False。
  • matchChiralTag: 是否匹配立体化学。默认忽略立体化学:False。如果matchChiralTag为 True,则算法有两处变化:
    • 具有指定手性的原子只能匹配其他具有指定手性的原子
    • 如果 MCS 在指定手性的原子周围包含至少三个原子,则所有分子中的手性必须匹配。
  • atomCompare:原子匹配方式
    • CompareElements:默认值,原子类型一样才算匹配。
    • CompareIsotopes:同位素一样才算匹配(根据同位素标签的值。这个值可以由用户自己定义)。
    • CompareAny: 表示任意原子之间都能匹配(找公共骨架)。
  • bondCompare: 键匹配方式
    • CompareOrderExact:当且仅当键的类型完全一致才相等(芳香键和双键是不相等的)。
    • CompareOrder:默认值为该方法。允许单键和芳香键相互匹配。
    • CompareAny:任意键之间都可以匹配
  • ringCompare:环匹配方式
  • seedSmarts: 随机种子

该函数返回一个MCSResult实例,实例含有以下属性:

  • MCSResult.queryMol: 搜索到结构的mol对象
  • MCSResult.numAtoms: 搜索到结构的原子数
  • MCSResult.numBonds: 搜索到结构的键数量
  • MCSResult.smartsString: 搜索到结构的smarts
  • MCSResult.canceled: 搜索是否超时

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import rdFMCS
from rdkit.Chem import Draw

参数

bondCompare

mols = [Chem.MolFromSmiles('c1ccccc1'),Chem.MolFromSmiles('C1CCCC=C1')]
results = []
res = rdFMCS.FindMCS(mols)
print(res.smartsString)
results.append(Chem.MolFromSmarts(res.smartsString))
res = rdFMCS.FindMCS(mols, bondCompare=rdFMCS.BondCompare.CompareAny)
print(res.smartsString)
results.append(Chem.MolFromSmarts(res.smartsString))
res = rdFMCS.FindMCS(mols, bondCompare=rdFMCS.BondCompare.CompareOrderExact)
print(res.smartsString) # 结果为空
results.append(Chem.MolFromSmarts(res.smartsString))

Draw.MolsToImage(results)

atomCompare

mols = (Chem.MolFromSmiles('NCC'),Chem.MolFromSmiles('OC=C'))
results = [Chem.MolFromSmiles('NCC'), Chem.MolFromSmiles('OC=C')]
res = rdFMCS.FindMCS(mols, atomCompare=rdFMCS.AtomCompare.CompareAny)
print(res.smartsString)
results.append(Chem.MolFromSmarts(res.smartsString))

res = rdFMCS.FindMCS(mols, atomCompare=rdFMCS.AtomCompare.CompareElements)
print(res.smartsString)
results.append(Chem.MolFromSmarts(res.smartsString))


res = rdFMCS.FindMCS(mols, atomCompare=rdFMCS.AtomCompare.CompareIsotopes)
print(res.smartsString)
results.append(Chem.MolFromSmarts(res.smartsString))


Draw.MolsToImage(results)

matchValences

mols = (Chem.MolFromSmiles('NC1OC1'),Chem.MolFromSmiles('C1OC1[N+](=O)[O-]'))
print(rdFMCS.FindMCS(mols).numAtoms)

print(rdFMCS.FindMCS(mols, matchValences=True).numBonds)

Draw.MolsToGridImage(mols)

ringMatchesRingOnly

mols = [Chem.MolFromSmiles("C1CCC1CCC"), Chem.MolFromSmiles("C1CCCCCC1")]
res1 = rdFMCS.FindMCS(mols)
print(res1.numAtoms)

res2 = rdFMCS.FindMCS(mols, ringMatchesRingOnly=True)
print(res2.numAtoms)

mols += [res1.queryMol, res2.queryMol]
Draw.MolsToGridImage(mols)

completeRingsOnly

mols = [Chem.MolFromSmiles("CCC1CC2C1CN2"), Chem.MolFromSmiles("C1CC2C1CC2")]
res = rdFMCS.FindMCS(mols, completeRingsOnly=True).smartsString
print(res)
Draw.MolsToImage(mols+[Chem.MolFromSmarts(res)])

matchChiralTag

# 这是一个具有 的分子@,一个具有 的分子@@,以及一个其中立体未指定的分子。
ms = [Chem.MolFromSmiles(x) for x in ('C[C@H](F)Cl','C[C@@H](F)Cl','CC(F)Cl')]
Draw.MolsToGridImage(ms)

# 默认的 MCS 正是您所期望的 - 每个原子都匹配:
res = rdFMCS.FindMCS(ms)
print(res.smartsString)
results = ms
results = results + [Chem.MolFromSmiles(res.smartsString)]

## 如果我们使用第一个分子和最后一个分子的 MCS matchChiralTag,我们只会得到一个原子(你得到的原子不是先验明显的):
## 这是因为中心 C 原子不再匹配,因为它在第一个分子中指定了手性,而在最后一个分子中指定了未指定的手性。
res = rdFMCS.FindMCS((ms[0],ms[2]),matchChiralTag=True)
print(res.smartsString)
results = results + [Chem.MolFromSmiles(res.smartsString)]

## 另一方面,如果我们对第一个和第二个分子进行 MCS,我们会得到三原子结果:
## 这里中心碳可以匹配,因为它们在两个分子中都具有指定的手性。但我们只能匹配中心碳的两个邻居,因为当我们添加第三个邻居时,实际的手性本身就开始重要。
res = rdFMCS.FindMCS((ms[0],ms[1]),matchChiralTag=True)
print(res.smartsString)
results = results + [Chem.MolFromSmiles(res.smartsString)]

Draw.MolsToGridImage(results)

高亮分子的不同子结构

mol1 = Chem.MolFromSmiles('FC1=CC=C2C(=C1)C=NN2')
mol2 = Chem.MolFromSmiles('CCC1=C2NN=CC2=CC(Cl)=C1')
Draw.MolsToGridImage([mol1, mol2])

## 定义比较分子不同的方法:
mcs = rdFMCS.FindMCS([mol1,mol2])
mcs_mol = Chem.MolFromSmarts(mcs.smartsString)
match1 = mol1.GetSubstructMatch(mcs_mol)

target_atm1 = []
for atom in mol1.GetAtoms():
    if atom.GetIdx() not in match1:
        target_atm1.append(atom.GetIdx())
        
match2 = mol2.GetSubstructMatch(mcs_mol)
target_atm2 = []
for atom in mol2.GetAtoms():
    if atom.GetIdx() not in match2:
        target_atm2.append(atom.GetIdx())
        
Draw.MolsToGridImage([mol1, mol2],highlightAtomLists=[target_atm1, target_atm2])

参考

https://rdkit.org/docs/source/rdkit.Chem.rdFMCS.html
https://www.rdkit.org/docs/GettingStartedInPython.html#maximum-common-substructure

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot 获取上传到minio服务器的文件大小

springboot 获取上传到minio服务器的文件大小 前言探究获取文件大小的方法实践及示例 前言 一般minio上传文件,会在上传时拿到文件大小,并保存在数据库中。若想直接从minio上获取,如何获取? 探究获取文件大小的方法 pom依赖 &l…

ubuntu安装nginx

1、apt-get安装nginx 1.1安装最好用root用户安装 不然很多文件权限的报错会让人崩溃 sudo su root apt-get install nginx nginx -v #查看安装版本 service nginx start #启动nginx 1.2查看网页,能看到nginx的页面 1.3核对nginx的文件 find / -name nginx 看…

【UE4 C++】02-编译、生成当前的C++程序

一、编译 编译快捷键: CtrlF7 如果不使用快捷键,可以点击顶部菜单栏中的下拉按钮,然后选择自定义 点击添加命令 点击“生成”,选择编译“”,点击“确定” 此时可以看到顶部菜单栏多了一个用于编译的按钮 二、生成 鼠…

目标百万尼特亮度,这家公司用激光背光提升XR显示技术

​亮度不足一直是AR/VR显示中想要解决的难题之一,目前的AR光源中有多种方案,比如Micro LED、LCoS、DLP等,尽管Micro LED在亮度等方面优势明显,但制造工艺还不成熟。总的来看,目前AR中高亮度解决方案还有很长一段路​要…

Build input file cannot be found: .pch

xcode真机运行时,报错:Build input file cannot be found: /Users/mac/Desktop/projects/xxx/xxx.pch 实际查看发现,项目中的.pch文件存在,但运行时报错。修改配置里的.pch文件路径后,正常。

聊聊用户故事与测试启发

这是鼎叔的第六十六篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。 用户故事的概念于1998年被正式提出,在2001年开始逐步成熟。目前,…

【G431】DAC+DMA输出正弦波

文章目录 前言1.CubeMx的配置步骤3.测试代码4.演示效果 总结 前言 之前有试过用纯的DAC输出正弦波但是效果不是很好,波形不连续,可以很明显的看出断层 之后尝试了DMA传输,发现波形明显变得更加顺滑。 1.CubeMx的配置步骤 下面以主频150MHz…

Avalon总线协议(二)

4.Avalon中断接口 中断接口允许从组件(agent components)能够向主组件(host components)发送事件信号。 例如,DMA控制器可以在完成一个DMA传输后中断处理器。 4.1 中断发送器 中断发送器将单个中断信号驱动到中断接收器。irq信号的时序必须与其相关联时钟的上升…

学位论文查找下载数据库

中文学位论文可去知网、万方查找下载。 外文学位论文可去ProQuest学位论文全文数据库查找下载。 没有知网、万方、ProQuest等数据库使用权限可去文献党下载器使用这些数据库查找下载学位论文。 文献党下载器首页下载客户端,登录客户端进入资源库,在资…

Prometheus 联邦集群配置及应用

目录 前言一、Prometheus 联邦配置1.1 安装 Prometheus1.2 配置 Prometheus 二、Prometheus 联邦验证 前言 什么是 Prometheus 联邦集群?又是在什么样的场景下应用呢?首先,我们知道 Prometheus 是一个强大的监控平台,它是针对容器…

抖音seo源码--矩阵系统开发者日志

这是矩阵系统源码开发者的日志分享,我们致力于为开发者们提供优质的SEO源码。我们研究用户行为、数据分析和搜索引擎算法,以提高内容的搜索排名和曝光度。通过不断优化关键词、元数据和链接策略,我们帮助抖音用户更好地被发现和分享。这个日志…

安卓JNI从0到1入门教程(二)

经过上一篇《安卓JNI从0到1入门教程(一)》介绍,我们对JNI有了初步认识,接下来我会从ndk-build方式和cmake方式分别来介绍怎么构建native库: 一、ndk-build ndk-build依赖配置文件Android.mk,存放代码的位…

机器学习概括

文章目录 一、机器学习是什么?二、模型训练YouTube流量预测1. 先写一个具有未知参数的函数(Function)2. 定义损失(从训练数据进行计算)3.最优化4.结果分析 Back to framework1.带有未知数的函数:2.定义损失…

20.自定义tabBar(使用vant中的tabbar)

自定义tabBar就是不用官方提供的tabBar了,而是自己搞 目录 1 配置 2 使用vant组件库做TabBar 2.1 引入组件 2.2 使用组件 2.3 自定义图标 2.4 把info与store进行绑定 2.5 tab页面的切换 2.6 改变激活状态下的文本颜色 1 配置 首先你需要在项目根…

4.2 “ P4G42_V1

P4G42_V1 产品参数 产品型号 P4G42_V1 尺寸(mm) 124*90*12mm(不含安装支架) 屏幕尺寸 4.2 inch 显示技术 电子墨水屏显示 显示区域(mm) 84.6(H) * 63.4(V) 分辨率(像素) 400*300 像素密度 120dpi 显示颜色 黑/白 外观颜色 白色&…

springMVC(二)—— 进阶

一、解决中文乱码问题 解决中文乱码问题的关键在于判断字符是什么时候乱码的 先在java程序里刚生成这个值的地方打印一下,如果在控制台输出就乱码了,那就排除浏览器和jsp页面的编码出问题。否则 看浏览器的编码 看这个jsp页面的编码是否设置好了 一般不用…

Python启动TCP服务并监听连接,从客户端发送消息

下面是一个简单的例子,演示如何在Python中启动TCP服务并监听连接,以及如何从客户端发送消息: TCP服务端代码: import socketHOST 192.168.6.211 PORT 8888server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) …

electron的(maximize)最大化方法会导致头部白色横条以及四周大黑边

参考文章:https://www.w3cways.com/2505.html 感谢这位博主 我在使用win.maximize()后发现应用程序虽然最大化了,但是四周和顶部有一定宽度的黑边白边,在百度一段时间后没有发现其他人有这个问题 😔唉 必现步骤: 只要…

禁止 input 输入框显示历史记录

问题概述 在 HTML 开发中会 input 标签是非常常用的, 当在 input 标签 输入数据后,再点击输入框会显示原来输入过的内容,还会出现下拉的历史记录。让使用人员感觉比较恶心。 解决方案(隐藏记录框) 隐藏记录框 aut…

环二肽试剂:7451-73-2,CYCLO(-GLY-TRP),环(甘氨酰-L-色氨酰)

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ CYCLO(-GLY-TRP)环二肽,含有(甘氨酰和色氨酰基团),色氨酸又名α-氨基吲哚基丙酸,分子式:C11H12N2O2,白色至黄白色晶体或结晶性粉末。无臭或微臭,长时间…