用于化学和生物信息学的开源 Java 库:The Chemistry Development Kit (CDK)

化学开发工具包 (CDK) 是用于结构化学和生物信息学的免费开源 Java 库。

Chemistry Development Kit (CDK) 为分子信息学中的常见任务提供方法,包括化学结构的 2D 和 3D 渲染、I/O 例程、SMILES 解析和生成、环搜索、同构检查、结构图生成等。 用 Ja​​va 实现,它既可用于服务器端计算服务(可能配备 Web 界面),也可用于应用程序和客户端小程序。本文介绍了 CDK 的新 QSAR 功能以及最近引入的统计软件接口。

一、介绍

       无论谁致力于从头开始创建更大的化学信息学或计算化学软件包,即实施过去 20 或 30 年发明的化学信息学算法和组件的标准库。解决此问题的明显方法是商业上可用的化学信息学库,这些库已由 MDL Information Systems, Inc.、Daylight Chemical Information Systems, Inc.、Advanced Chemistry Development 以及许多其他公司开发。
        一般来说,科学软件往往是闭源的,给用户留下了一个执行神奇操作的黑匣子。幸运的是,这种趋势被视为对整体科学进步适得其反。在社区内分享想法和结果可能是科学中最核心的范式。通过发表他的结果,科学家允许他的同事验证和建立他的结果,从而推动整个特定领域的发展 (如果我看得更远,那就是站在巨人的肩膀上。-- 艾萨克·牛顿)。除了纯粹的科学好奇心之外,做出这些贡献的动机之一当然是在同行中获得社会认可和声誉。
        近年来,上面勾勒的想法已成为软件开发领域发生的开源革命的一部分,最广泛的认可是通过免费的类 Unix 操作系统 GNU/Linux 的巨大成功,这是许多人的协作工作。个人和组织,包括由 Richard Stallman 领导的自由软件基金会和启动该项目的芬兰计算机科学专业学生 Linus Torvalds。
        最重要的是,如果用户社区足够大并且每个人都可以查看源代码并对其进行更改,那么在发现并修复特定软件错误之前应该不会花太长时间。“只要有足够的眼球,所有的虫子都是浅薄的”,正如埃里克雷蒙德在他广为人知的文章“大教堂和集市”中所说的那样,他在其中分析了开源运动的机制和原则。
        此外,其他科学家可以轻松地建立在现有结果的基础上。仍然可以以适当的形式给予信用,因为开源软件绝不是免费软件或公共领域。恰恰相反,整个包以及每段源代码都标有明确的版权声明,说明版权所有者的姓名和许可的性质。不得删除此版权声明。但是,当然可以添加有关其他人所做更改和改进的其他评论。由版权所有者以外的其他人对现有代码段进行实质性改进通常会导致诸如团队组建之类的事情,包括适当的版权更改。这对于学术科学家尤其重要,他们需要能够指出他们对特定领域的贡献。
        一方面考虑到开源软件的优点,另一方面考虑到科学传统,在自由开源许可的条款下启动 CDK 项目,使用 SourceForge,一个基于 Web 的开源开发平台。SourceForge 提供了所有工具,这些工具通常被认为是协调大型软件项目中开发人员和用户的贡献不可或缺的组件,如 Webspace、邮件列表、错误跟踪器、软件版本控制系统、发布管理器等。

二、化学领域的开源 Java 软件

        许多用 Java 编写的库以二进制形式免费提供,但它们不包括使用和扩展源代码的访问权限。其他计算机语言的库在文献中已有描述,但公众无法使用。
使用 Java 编程语言,值得注意的四个项目: MolMaster 拥有 BSD 许可证:并包括等值面的可视化,具有 GPL 许可的 jVisualizer用于分析 NMR 耦合,CML 拥有艺术许可证 使用围绕化学标记语言的工具,和 JOELib 拥有 GPL 许可证具有基于 OpenBabel 的扩展文件 IO 库和分子描述符库。请注意,前两个并不是真正的库,而是应用程序。然而,CMLDOM 和 JOELib 是具有类似功能的库,用于在内存中存储化学内容。

三、CDK的由来

CDK 起源于几个不同化学信息学软件包的支持项目,即结构编辑器、有机化合物及其 NMR 化学位移的网络数据库、计算机辅助结构解析程序、以及 3D 结构查看器和分析器,仍在移植到 CDK。
这些程序的作者普遍认同 Java 编程语言的优点,如下所示:清晰的面向对象设计、平台独立性以及它已成为客户端和服务器端应用程序的重要标准的事实在网上。由于化学中大多数科学上有趣的应用程序都具有计算要求高的内核,因此它们受益于客户端/服务器架构,因为服务器部分可以在功能强大的机器上运行,而用户友好的 (Web) 界面可以用于用户选择的任何客户端机器。
人们经常对 Java 的性能提出担忧。然而,语言结​​构本身,例如与 C++ 相比,并没有为 Java 的性能提供比其他更常用于高性能计算的语言低的充分理由。事实上,已经为提高 Java 运行时性能做出了巨大努力,因此,如果正确实现并使用正确的运行时环境,服务器端 Java 代码不需要比具有相同作用域的 C++ 慢。

四、 发展模式

参与CDK开发,有兴趣的个人需要在SourceForge(SF)注册以获得一个免费的SF账户,并订阅开发者邮件列表cdk-devel@lists.sourceforge.net。然后他或她联系其中一位项目管理员,然后该管理员将新成员添加到项目的开发人员列表中。除了良好的 Java 编程技能外,还需要具备并发版本系统 (CVS) 的工作知识。CVS 是开源社区中使用最广泛的版本管理系统,它极大地方便了多个开发人员在同一源代码树上工作的协调。
在开始编码之前编写需求规范在计算机科学中很常见。这样的规范描述了软件的预期行为(在这种情况下是类),开发人员可以使用它来检查实现,用户可以使用这些类来查看如何使用这些类。在设计 CDK 时,此类规范仅部分使用统一建模语言 (UML) 图。

五、库功能说明

5.1. 核心课程。CDK 包层次结构的根部分中包含的类都是基本化学概念的形式化表示,例如原子、键、分子等。如下图显示了解释继承层次结构和 CDK 基本类之间的依赖关系的 UML 图。显示的 UML 图仅描述了核心类之间的关系。因此,它们被编辑并且只显示了它们真正的类间关系的一个子集。它们展示了 ChemObject 类的核心作用,它是所有其他类的超类,并提供了为任何派生 CDK 对象存储甚至复杂属性的方法。

在核心类中提到的第一个也是最明显的继承链是 Atom 扩展 AtomType 扩展 Isotope 扩展元素。这不仅从化学的角度来看是合乎逻辑的,而且还为基于单个 IsotopeFactory 工具类的子类创建原子、原子类型、同位素和元素的简单机制提供了基础,这将在下面讨论。将 Atom 置于一长串继承中,为不同级别的系统提供了中央访问点信息。例如,虽然元素提供对符号或原子序数的访问,但某些 AtomType 可以进一步区分原子的杂交状态或力场可能需要的其他一些区别。
AtomContainer 和 ElectronContainer 合并了进一步的抽象级别。ElectronContainer 构成了诸如 Bonds 和 Orbitals 之类的结构的基础,而 AtomContainer 是原子及其键的预想存储,并且是环、分子和子结构的超类。
为了支持更高级的概念,如分子集合或反应,CDK 核心补充了将分子分组为更高阶结构的类,如 SetOfMolecules、ChemSequence、ChemModel 和 ChemFile。
为清楚起见,ChemObject 和 AtomContainer 的关系已移至如下图所示的附加 UML 图。
它显示了分子如何包含在 SetOfMolecules 中,它是 ChemModel 的一部分。ChemModels 旨在存储特定时间点化学系统状态的分子信息。为了允许对时间变化进行建模,引入了将各种 ChemModel 排列到 ChemSequence 中的可能性。ChemFile 类被设计为顶级容器,它可以包含存储在一个化学文档中的所有概念,其中一个或多个 ChemSequences。
Polymer 类扩展了 Molecule 并提供了对其组成的单体的便捷访问。Monomer 本身是作为 AtomContainer 实现的。Polymer 的一个子类是用于表示蛋白质和 DNA 分子的 BioPolymer。Polymer 设计允许 BioPolymers 将每个氨基酸视为 AtomContainer。
5.2. 2D 结构图形处理。显示和操作化学结构的 2D 绘图的能力是任何化学信息学相关程序最重要的功能之一。这包括为那些化学结构生成坐标的能力,例如由结构生成器生成的无坐标化学图。后面这一步的细节在 5.4 节中讨论。
模型-视图-控制器范例在 CDK 库设计中适用。例如,用于 2D 结构图形处理的类在它们显示和操作的 ChemModel 内容之上工作。Renderer2D 类生成的 2D 绘图与主要市售产品生成的绘图相当。可以通过更改 Renderer2DModel 对象的标准设置来自定义此视图。如果要通过操作绘图的选项来补充纯显示,则可以将 Controler2D 添加到设置中。同样,它的设置由 Controler2DModel 确定,并且可以更改,例如,通过使用 setDrawNumbers(true) 以显示注释到结构的原子编号。Controler2D 是可用输入设备的适配器,通常是鼠标和键盘,并将输入转换为对底层模型的更改,这些更改再次反映在 Renderer2D 生成的视图中的更改中。一个简单的结果应用程序如下图所示.

 

5.3. 3D 结构处理。为了提供高性能 3D 图形,CDK 中使用了 Java3D API。然而,这使得基于 CDK 的 3D 应用程序不再独立于平台。这种依赖源于 Java3D API 依赖 OpenGL 或 DirectX更高的性能。SUN microsystems 只为 Windows(OpenGL 和 DirectX)、Solaris 和 SGI IRIX 提供 Java3D,而 Linux 版本由 Blackdown 30开发,可用于各种架构。
关于失去平台独立性,CDK 还包含不基于 Java3D API 的 3D 渲染类。再加上渲染类的分离,由于Model-View-Controller范式,这就导致了3D渲染的四个基本类:Renderer3D、Renderer3DModel、AcceleratedRenderer3D和AcceleratedRenderer3DModel,后两者基于Java3D。
5.4. 结构图布局。化学信息学的关键领域,如虚拟组合化学、虚拟筛选或计算机辅助结构解析,经常将化学结构处理为一维图。例如,这些图是结构生成器的产物,它们使用图论技术详尽无遗地生成与给定分子式一致的所有构成异构体。然而,在这些程序中的任何一个中,在虚拟筛选期间进行选择之后,例如,成功的候选结构需要呈现给化学家。此时,需要一个工具来生成 2D 或 3D 坐标以生成化学家习惯的那种描绘。这个过程被称为结构图生成。虽然 CORINA等 3D 模型构建器在未来的愿望清单上并且尚未实现,但 CDK 具有 2D 结构图生成器,它是从头开始编写的,很容易被视为最好和最CDK 的有用部分,因为它的大多数应用程序需要在几个阶段生成结构图。
5.5. 图不变量。该包包含一些用于计算图不变量的类,例如 Wiener 指数、Morgan 的扩展连接 (EC) 指数、等。例如,摩根的 EC 指数用于化合物的规范标记。这个包很可能是未来发展的热点之一,因为许多化学信息学应用,比如(定量)结构活性关系((Q)SAR)计算,经常依赖于计算不同类型的图不变量的各种组合。
5.6. 结构生成器。这个包包含一些简单的结构生成器,它们被 SENECA 系统用于计算机辅助结构解析。类 SingleRandomStructureGenerator 可用于从特定分子式给出的构成空间生成完全随机的结构。基于这种随机生成的结构,然后可以使用 RandomGenerator 根据 Faulon 建议的算法在构成空间中进行小的随机移动。如果这样的生成器与目标函数和模拟退火协议相结合,就可以有效地搜索具有某些所需特性的结构的结构空间,前提是这些特性可以从给定的结构公式可靠地反算出来。
为了能够基于进化算法(如众所周知的遗传算法)为化学图构建结构生成器,包含一个 CrossOverMachine,它以 AtomContainers 的形式接受两个化学图并产生两个后代。遗传算法是基于种群的方法,通过精心选择的突变和交叉程序组合为下一代产生新的后代,应用于当前种群。因此,CrossOverMachine 确实补充了 RandomGenerator 类中使用的变异操作。
5.7. 环搜索。John Figueras 的用于寻找最小环的最小集 (SSSR) 的快速算法已被实现,并用于例如结构图生成包。特别大的凝聚环系统,由于旧系统中的深度第一环感知算法缓慢,坐标生成过程可能需要长达一分钟的时间,现在可以在几分之一秒内布置,如下图所示。此外,这个包包含一个类,用于将给定的环系统划分为 AtomContainers,每个环一个。

 

在其他应用中,例如芳香性检测,计算所有环的集合 (SAR) 是必不可少的。虽然已经发布了从 SSSR 生成 SAR 的程序,但它的计算效率更高为此目的使用专门的算法。
5.8. 芳香度检测。芳香性有多种定义,并且根据这些定义检测芳香性的方法至少有很多。这个包是所有这些的预期容器,目前确实包含 HueckelAromaticityDetector 类的实现。基于 SAR 检测算法。(参见第 5.7 节)该类从检测到的最大环开始,计算交替双键或三键电子的数量,并且还考虑了杂原子的自由电子对。然后检查环是否包含 4 n+ 2 π 电子,根据著名的 Hückel 规则。环、它的所有原子和键都被标记为芳香族,并且继续寻找相同或更小尺寸的剩余环,排除那些完全属于已检测到的更大芳香系统的环。
5.9. 同构。能够确定两个化学结构是否相同或一个结构是否是另一个结构的子图是化学信息学库最重要的功能之一。同构子包包含一个用于最大公共子结构 (MCSS) 搜索的通用模块。由于 MCSS 确定是图匹配的最一般情况,因此它可用于确定结构身份并进行子图匹配和最大公共子结构搜索。
5.10. 文件输入/输出。文件输入和输出在 CDK 中进行了概括。所有文件 I/O 类都实现 ChemObjectReader 或 ChemObjectWriter。每种文件格式由实现这些接口之一的两个单独的类表示。
CDK 目前支持 XYZ、MDL molfile、PDB、和 CML 的IO 类。后一种格式由 Murray-Rust 和 Rzepa 开发,作为第一种基于 XML 的化学成分文件格式。CDK 包含此格式的输入和输出类。CML 输入阅读器使用 Murray-Rust 的 DOM 方法的替代方法,并且基于 SAX。
5.11. 与其他 Java 库的交互。除了文件I/O,CDK 还支持第二种与其他程序和库交换数据的方法。与其他库的接口使得可以将两个库中的方法结合起来,从而访问更大的功能集。CDK 提供 CDK 类到 JOELib 类的直接转换。计划支持 CMLDOM。
5.12. 微笑。简化的分子线输入规范 (SMILES) 提供分子结构的字符串表示。由于它们的紧凑性和相对简单性,它们现在被广泛用作无坐标分子结构的交换格式。基于唯一(规范)微笑的规范,还可以执行图同构检查。CDK 具有用于规范 SMILES 的生成器,其编写符合 Daylight Inc. 创始人发布的规则。虽然 SMILES 生成器实现了所有已发布的 SMILES 标准,包括手性,但 CDK 包中的 SMILES 解析器仅符合(略微扩展的)超级简化 SMILES 规范,这足以编码大多数有机结构。
5.13. 指纹。指纹是当今判断分子相似性不可或缺的工具,作为同构检查的预过滤器,从而在数据库中进行结构搜索。在这里以及在 SMILES 的情况下,此类算法的自己的子包是合理的,因为有多种计算指纹的方法。通过允许添加不同的指纹识别器而不是只有一个单一的 org.openscience.cdk.tools.Fingerprinter,让用户可以自由选择任何方法,为他的案例产生最佳性能。CDK 中的 Fingerprinter 类生成 Daylight 类型的指纹。它的工作原理是运行广度优先搜索,从分子中的每个原子开始,从而生成长达六个原子的路径的字符串表示。对于每个类似 SMILES 的字符串,使用 Java 语言提供的标准字符串散列算法计算散列代码。使用这些哈希码,生成默认工作范围为 [0-1023] 的伪随机数生成器并检索第一个随机数。该数字表示长度为 1024 的指纹位串中的位置,然后将其设置为“1”。基于来自分子的所有计算路径的整体,以该位串的形式获得分子指纹。
5.14. 工具。工具包包含适用于所有无法证明创建专用包的情况的实用程序类。例如,IsotopeFactory 可以为给定的元素符号或给定的原子质量返回元素和同位素的预配置实例。
ConnectivityChecker 类测试给定的化学图是否连通,即图中每个可能的原子对之间是否存在键路径,在非连通图的情况下,它可以返回一个带有分离部分的向量图,存储在 AtomContainer 对象中。与 ConnectivityChecker 相关的是 PathTools 类,例如,它提供了寻找分子中给定原子之间最短路径的方法。
MFAnalyser 类具有返回给定 Molecule 对象的分子式和从给定分子式字符串创建未绑定的 AtomContainer 对象的方法。HOSECodeGenerator为给定 AtomContainer 中的每个原子生成 HOSE 代码。通过将这些 HOSE 代码输入 BremserOneSphereHOSECodePredictor 类,可以预测碳 13 NMR 化学位移的预期范围。

六、 总结

CDK 现在是许多软件项目的基础。化学编辑器 JChemPaint 11利用 CDK 并为其实现了 CDK 的模型-视图-控制器机制,它再次只是一个支持工具,用于更高级别的应用程序,例如用于有机化合物及其 NMR 化学位移的 Web 数据库 NMRShiftDB,或 SENECA,一种计算机辅助结构解析程序。
虽然允许快速组装诸如 SENECA 或 NMRShiftDB 之类的大型整体应用程序,但 CDK 的真正优势在于其作为化学信息学家工作台的能力。只需编写几行代码,就可以快速测试新想法或修改现有的基于 CDK 的应用程序,使其适合其他需求。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值