⽤于化学和⽣物信息学的开源Java库:
TheChemistryDevelopmentKit。。。
化学开发⼯具包 (CDK) 是⽤于结构化学和⽣物信息学的免费开源 Java 库。
Chemistry Development Kit (CDK) 为分⼦信息学中的常见任务提供⽅法,包括化学结构的 2D 和 3D 渲染、I/O 例程、SMILES 解析和⽣成、环搜索、同构检查、结构图⽣成等。 ⽤ Ja v a 实现,它既可⽤于服务器端计算服务(可能配备 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。然后他或她联系其中⼀位项⽬管理员,然后该管理员将新成员添加到项
⽬的开发⼈员列表中。除了良好的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.ls.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 的应⽤程序,使其适合其他需求。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。