使用Chemistry Development Kit (CDK) 来进行化学SMILES子结构匹配

news/2024/4/20 5:59:35/文章来源:https://blog.csdn.net/qq_27575627/article/details/129198447

摘要

SMILES是一种用于描述化合物结构的字符串表示法,其中子结构搜索是在大规模化合物数据库中查找特定的结构。然而,这种搜索方法存在一个误解,即将化合物的子结构视为一个独立的实体进行搜索,而忽略了它们在更大的化合物中的上下文。
我们使用Chemistry Development Kit (CDK)进行搜索。这种方法可以避免由于上下文缺失而导致的搜索结果不准确的问题。

上图为我们开发的一个编辑器,用于方便查询。

Chemistry Development Kit (CDK)介绍

CDK是一种广泛使用的开源化学信息学工具包,提供表示化学概念的数据结构以及操纵此类结构和对其执行计算的方法。该库实现了各种各样的化学信息学算法,从化学结构规范化到分子描述符计算和药效团感知。它用于药物发现、代谢组学和毒理学。

为什么子串搜索≠子结构搜索

吡啶可以用 SMILES 表示:

n1ccccc1. n1ccccc1 。
但是吡啶也可以用其他五个等效的 SMILES 字符串表示:
c1ncccc1
c1cnccc1
c1ccncc1
c1cccnc1
c1ccccn1
SMILES 是从相应分子图的深度优先遍历生成的。结果,不同的起始原子和不同的相邻原子遍历将产生不同的 SMILES。一个简单的线性子串比较应该在大多数时候失败。

情况变得更糟。 SMILES 支持双键的多种编码方案。吡啶的芳香符号是一种形式。另一种形式使用大写字母和等号 ( = ) 来表示双键。六种可能性是:
N1=CC=CC=C1
C1=NC=CC=C1
C1=CN=CC=C1
C1=CC=NC=C1
C1=CC=CN=C1
C1=CC=CC=N1
情况变得更糟。单键是可选的,这意味着 N1=CC=CC=C1 等同于 N-1=C-C=C-C=C-1 。同样,芳香键是可选的,这意味着 c1ncccc1 等同于 c:1:n:c:c:c:c:1 。问题还不止于此。注意子串匹配方法在一个很好的反例中变得多么明显错误。还要考虑可以完美运行的简单案例的数量。

SMILES 解析器和生成器

IChemObjectBuilder builder = DefaultChemObjectBuilder.getInstance();
SmilesParser parse = new SmilesParser(builder);
String smiles = "N1=CC=CC=C1";
IAtomContainer mol = parse.parseSmiles(smiles);

子结构和 SMARTS 匹配

子结构匹配是基本的化学信息学操作,在指纹和描述符生成以及原子分型等许多其他功能中起着关键作用。从 CDK v1.2 开始,添加了处理 SMARTS 查询语言的功能。 SMARTS 语言得到很好的支持,包括立体化学、组件分组和原子图(以匹配反应转换)等功能。 CDK v2.0 中添加了一个新的 Pattern API,它简化了搜索结果的查找、过滤和转换。 API 是不可变的,允许一个模式被初始化一次,然后与多个分子或跨多个线程的反应进行匹配。在初始化期间,检查模式以确定需要哪些不变量(例如环大小),并且仅计算所需的不变量。内部匹配算法提供了一个惰性迭代器,以便仅在需要时才计算下一个匹配项。除了分子之外,API 还处理反应,两者都可以指定为查询或目标。

public void test2() throws InvalidSmilesException {IChemObjectBuilder builder = DefaultChemObjectBuilder.getInstance();SmilesParser parse = new SmilesParser(builder);String smiles = "你的smiles表达式";IAtomContainer mol = parse.parseSmiles(smiles);IAtomContainer query = parse.parseSmiles("N1=C(/C=C/C(N)=O)C=CC=C1");Pattern pattern = SmartsPattern.findSubstructure(query);boolean matches = pattern.matches(mol);System.out.println(matches);}

匹配不上的情况

实践中我们发现还有一些匹配不上的情况,可能需要修改策略,可以私信我沟通。

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

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

相关文章

极光笔记 | 埋点体系建设与实施方法论

PART 01 前 言随着网络技术的发展,从粗犷型到精细化运营型,再到现在的数字化运营,数据变得越来越细分和重要,不仅可以进行策略调整,还可以实现自动化的精细化运营。而数据价值的起点就是埋点,只有合理地埋点…

lammps教程:Ovito选择特定晶粒的方法

大家好,我是小马老师。 本文介绍如何使用ovito提取特定的晶粒。 在多晶的lammps模拟中,可能会对某一个特定晶粒的变形情况进行分析,此时,需要找到这个晶粒,并进行单独分析。 ovito有专用的晶粒识别命令,…

【系统分析师之路】2022上案例分析历年真题

【系统分析师之路】2022上案例分析历年真题 【系统分析师之路】2022上案例分析历年真题【系统分析师之路】2022上案例分析历年真题2022上案例分析历年真题第一题(25分)2022上案例分析历年真题第二题(25分)2022上案例分析历年真题第…

RocketMQ 5.x新版本部署优化一览

​ RocketMQ从2022年9月份开始推出了新的5.x大版本。相比于之前的4.x版本,5.x版本向云原生前进了一大步。在增强原因功能的基础上,更是支持多语言客户端,周边生态也进行了补强和完善,明显可以看到离Kafka老大哥又近了很大一步。 …

由Geoscene Enterprise 2.1 升级至Geoscene Enterprise 3.1

文章目录一、升级前工作二、升级Geoscene portal三、升级Web Adaptor(针对portal门户)四、升级Server 站点(作为门户托管服务器)五、升级Web Adaptor(针对server)六、升级Data Store需求:由GeoS…

springboot自定义starter时使用@AutoConfigureBefore、@AutoConfigureAfter的细节问题

正常利用springboot的自动装配 ConfB Configuration(proxyBeanMethodsfalse) public class ConfB {public ConfB(){System.out.println("ConfB构造方式执行...");} }不加spring.factories 项目包结构 此时resources中没有spring.factories 执行结果 2023-02-24…

教你用反射机制如何几分钟搭建完后端

如果想快速搭建后台跨域使用这些技术 反射mybatis-plusjson 反射可以实现动态数据的传输 一般对数据库进行操作肯定离不开这些代码 如果我们用反射机制只需要这一个就行 而说到反射的好处,一般情况下我们做增删改查需要大量的接口才能完成,而用反射我…

通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作

1.通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作 例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led2灯熄灭 5.例如在串口输入led…

LabVIEW主VI前面板中显示或使用多个子VI

LabVIEW主VI前面板中显示或使用多个子VI想在程序中连接一个或多个子VI的前面板,但是当调用它们时,每个子VI在计算机屏幕上显示为一个新窗口。那么怎么能让每个子VI作为主VI前面板的一部分进行显示,而不是在屏幕上显示多个窗口?正在…

Malware Dev 00 - Rust vs C++ 初探

写在最前 如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里: https://discord.gg/9XvvuFq9Wb我会提供备考过程中尽可能多的帮助,并分享学习和实践过程…

mysql 内存架构

1. 背景 从 innodb 的整体架构中可以知道 innodb 的内存架构中分为 buffer pool 缓存区, change pool 修改缓冲区, adaptive hash index 自适应哈希索引, 和 log buffer 日志缓冲区. 2. buffer pool buffer pool 是用于缓冲磁盘页的数据,mysql 的80%的内存会分配给…

GroupDocs.Merger for Java

GroupDocs.Merger for Java GroupDocs.Merger for Java是一个文档操作API,可帮助您合并、拆分、交换或删除文档页面。API通过启用或禁用密码提供保护,并允许开发人员加入PDF、Microsoft Word、Excel和Powerpoint文档。 支持的文件格式 Microsoft Office格…

内存管理框架---Slab(二)

站在Arnold Lu南京大佬的肩膀,俯瞰内存管理之slab 文章目录slab层的由来slab/slub/slobslab层的设计思想slab相关数据结构创建slab描述符分配slab对象释放slab对象销毁缓存在内核栈上的静态分配高端内存的映射永久映射临时映射每个CPU的分配新的每个CPU接口编译时的…

为什么需要这个岗位,软件测试是干什么

目录 一、软件测试概念 二、软件测试目的 三、软件测试基本原则 四、软件测试主要工作内容 五、软件测试方法 六、测试工程师的职责 七、为什么要软件测试这个岗位 一、软件测试概念 软件测试:为了发现软件错误和缺陷(统称bug)而执行…

浅谈liunx init.d 和 rc.local 两种起动方式

浅谈liunx init.d 和 rc.local 两种起动方式 以rabbitmq 举例 (一).init.d 方式 开机自动重启设置 1.在/etc/init.d 目录下新建一个 rabbitmq [rootlocalhost init.d]# vi rabbitmq具体脚本如下所示: #!/bin/bash # # chkconfig: 2345 …

全球智慧能源解决方案服务商「雄韬股份」牵手企企通,谱写采购数字化变革之路

近日,全球知名智慧能源解决方案服务商「深圳市雄韬电源科技股份有限公司」(以下简称“雄韬股份”)与企企通达成合作。本次合作,企企通将为雄韬股份提供专业的采购数字化解决方案,推动企业采购更加智能、高效、透明&…

计算机网络(2)从十六进制的ip数据报中得到详细字段信息

本博文介绍如何将十六进制的ip报文拆分出具体的字段信息。社会计算机网络和网络协议分析的初学者参考(今天看了网络协议分析期末复习重点的最后一个大题,竟然一头雾水,然后快马加鞭翻阅各种资料,然后差不多学会 了)wir…

浏览器输入www.baidu.com后执行的全部过程

日升时奋斗&#xff0c;日落时自省 <1>URL输入 URL称为 : 统一资源定位符,用于定位互联网上的资源,也就是平常提起的"网址" 地址栏输入网址之后按下回车,浏览器会对输入的信息进行评判 (1)检查输入的内容是否是是一个合法的网址连接(非法地址不行) (2)合法的…

Python Unittest框架

1、unittest简介 unittest是Python自带的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件,主要适用于单元测试,可以用来作自动化测试框架的用例组织执行框架。 2、unittest框架的特性: 提供用例组织与执行:当测试用例只有几条的时候可以不考虑…

Nginx 02篇——Nginx基本配置与参数说明篇

Nginx 02篇——Nginx基本配置与参数说明篇前言-默认配置文件1. 前言——关于nginx1.1 关于nginx1. 2 Nginx 01篇——Nginx安装2. Nginx 配置文件结构2.1 Nginx 安装后的默认文件2.2 Nginx 的三大组成部分3. 配置参说明-1——整个配置3.1 配置说明3.2 参考4. 配置说明-2—详细说…