做公司+网站建设,收款 wordpress,个人主体可以做网站吗,用手机设计装修的软件摘要
SMILES是一种用于描述化合物结构的字符串表示法#xff0c;其中子结构搜索是在大规模化合物数据库中查找特定的结构。然而#xff0c;这种搜索方法存在一个误解#xff0c;即将化合物的子结构视为一个独立的实体进行搜索#xff0c;而忽略了它们在更大的化合物中的上…摘要
SMILES是一种用于描述化合物结构的字符串表示法其中子结构搜索是在大规模化合物数据库中查找特定的结构。然而这种搜索方法存在一个误解即将化合物的子结构视为一个独立的实体进行搜索而忽略了它们在更大的化合物中的上下文。 我们使用Chemistry Development Kit (CDK)进行搜索。这种方法可以避免由于上下文缺失而导致的搜索结果不准确的问题。 上图为我们开发的一个编辑器用于方便查询。
Chemistry Development Kit (CDK)介绍
CDK是一种广泛使用的开源化学信息学工具包提供表示化学概念的数据结构以及操纵此类结构和对其执行计算的方法。该库实现了各种各样的化学信息学算法从化学结构规范化到分子描述符计算和药效团感知。它用于药物发现、代谢组学和毒理学。
为什么子串搜索≠子结构搜索
吡啶可以用 SMILES 表示
n1ccccc1. n1ccccc1 。 但是吡啶也可以用其他五个等效的 SMILES 字符串表示 c1ncccc1 c1cnccc1 c1ccncc1 c1cccnc1 c1ccccn1 SMILES 是从相应分子图的深度优先遍历生成的。结果不同的起始原子和不同的相邻原子遍历将产生不同的 SMILES。一个简单的线性子串比较应该在大多数时候失败。
情况变得更糟。 SMILES 支持双键的多种编码方案。吡啶的芳香符号是一种形式。另一种形式使用大写字母和等号 ( ) 来表示双键。六种可能性是 N1CCCCC1 C1NCCCC1 C1CNCCC1 C1CCNCC1 C1CCCNC1 C1CCCCN1 情况变得更糟。单键是可选的这意味着 N1CCCCC1 等同于 N-1C-CC-CC-1 。同样芳香键是可选的这意味着 c1ncccc1 等同于 c:1:n:c:c:c:c:1 。问题还不止于此。注意子串匹配方法在一个很好的反例中变得多么明显错误。还要考虑可以完美运行的简单案例的数量。
SMILES 解析器和生成器
IChemObjectBuilder builder DefaultChemObjectBuilder.getInstance();
SmilesParser parse new SmilesParser(builder);
String smiles N1CCCCC1;
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(N1C(/CC/C(N)O)CCCC1);Pattern pattern SmartsPattern.findSubstructure(query);boolean matches pattern.matches(mol);System.out.println(matches);}匹配不上的情况
实践中我们发现还有一些匹配不上的情况可能需要修改策略可以私信我沟通。