我很高兴地宣布 BioJulia 的下一阶段即将开始!在接下来的几个月里,我将实现许多生物信息学领域的关键功能,这些功能将激励您在工作中使用 Julia 和 BioJulia 库。但在详细介绍项目之前,请允许我简要介绍一下 BioJulia 项目。该项目得到了摩尔基金会和 Julia 项目的支持。
BioJulia 项目 是一项协作的开源项目,旨在为 Julia 编程语言构建生物信息学基础设施。其目标是提供快速且易于访问的软件库。Julia 的即时 (JIT) 编译器使得这一目标得以实现,而无需借助其他编译语言,如 C/C++。该项目开发的核心软件包是 Bio.jl,它提供了基本功能,包括生物符号/序列、文件格式解析器、比对算法、外部软件包装器等。它还支持多种常见的文件格式,例如 FASTA、FASTQ、BED、PDB 等。去年,我作为 Julia Summer of Code (JSoC) 的学生开发了 FMIndexes.jl 软件包,用于为大型基因组构建全文搜索索引,并且我们发布了 Bio.jl 的第一个开发版本。虽然 BioJulia 项目正在变得越来越活跃,贡献者数量也在不断增加,但我们仍然缺乏一些现实应用中必不可少的功能。填补我们现有库与实际用例之间的差距是我新项目的宗旨。
那么,将添加哪些内容呢?以下是我的计划摘要
序列分析
在线序列搜索算法
参考基因组的数据结构
DNA 条形码的纠错算法
BAM 和 CRAM 文件格式的解析器
与数据查看器和数据库的集成
基因组浏览器后端
GFF3 和 VCF/BCF 的解析器
通过 Web API 访问数据库
这些对于编写分析程序至关重要,因为它们连接了软件组件(例如程序、档案、数据库、查看器等);生物信息学中的数据分析软件通常会相互读取/写入格式化数据。下图显示了检测基因变异的常见工作流程;下划线部分的交付成果将连接软件、档案和数据库,以便您可以使用 Julia 语言编写分析软件。
在线序列搜索算法将提供三种类型:精确、近似和正则表达式搜索算法。精确序列搜索字面意思是查找查询序列在另一个序列中完全匹配的位置。近似搜索类似于精确搜索,但允许最多指定数量的错误:错配、插入和删除。正则表达式搜索接受正则表达式中的查询,这使得能够灵活地描述查询模式,例如 基序。对于这些算法,我已经有一些半完成的拉取请求正在处理中:#152、#153、#143。
在 Bio.jl v0.1.0 的最后一个版本发布后,序列数据结构进行了重大重写,使生物序列类型更加一致且可扩展。但由于我们选择的编码需要每碱基 4 位来表示 DNA 序列,因此 DNA 序列类型消耗的内存比存储 参考基因组 所需的多得多,参考基因组通常由四种 DNA 核苷酸(用 A/C/G/T 表示)和(连续且数量相对较少的)未确定核苷酸(用 N 表示)组成。在尝试了一些数据结构之后,我发现可以使用 IndexableBitVectors.jl 大幅节省 N 位置的内存空间,这是一个我在 JSoC 2015 中创建的软件包。我正在为参考基因组开发一个单独的软件包 ReferenceSequences.jl,并将改进其功能和性能以处理人类基因组等大型基因组。
如果您是处理高通量测序数据的研究人员或工程师,那么 BAM 和 CRAM 解析器将是列表中最令人期待的功能添加。BAM 是容纳比对序列的事实标准文件格式,大多数序列比对程序都会以这种格式生成比对结果。CRAM 是 BAM 的一种存储效率更高的替代方案,并且随着积累的测序数据呈爆炸式增长而变得越来越流行。由于这些文件包含来自高通量测序仪的大量 DNA 序列,因此高速解析是一个实用的理想功能。我将通过仔细调整和多线程并行计算来专注于速度,这计划在下一个 Julia 版本中引入。
基因组浏览器能够交互式地可视化在个体和/或群体中发现的遗传特征。例如,使用 UCSC 基因组浏览器,您可以调查遗传区域以及 ABO 基因周围 的序列注释。基因组浏览器是最常见的可视化方法之一,因此已经开发了许多软件,但不幸的是,没有标准化的接口。因此,我们需要选择一个有前途的开源软件,并支持与其他软件的交互。第一个候选者是 JBrowse,它使用现代 JavaScript 和 HTML5 技术构建。它还支持 RESTful API,因此可以通过 HTTP 从后端服务器获取数据。我计划创建一个 API 服务器,该服务器响应来自基因组浏览器的查询,以便交互式地可视化内存中的数据。
许多数据库以一些标准化的文件格式分发其数据。对于遗传注释和变异,GFF3 和 VCF 将是最常见的格式。如果您使用的是人类或小鼠的数据,则应该知道来自 GENCODE 项目 的各种注释。它提供 GTF 或 GFF3 文件格式的数据。NCBI 提供 VCF 文件格式的人类变异集 此处。这些文件格式是文本格式,因此您可能认为在需要时编写解析器是一件微不足道的事情。如果我不在乎完整性和性能,这部分是对的。以一种简单的方式解析文本文件格式(例如,用制表符分割一行)会分配许多临时对象,并且通常会导致性能下降,而仔细调整解析器会导致难以维护的复杂代码。@dcjones 解决了这个问题,并做了大量工作,使 Julia 支持 Ragel,它生成执行有限状态机的 Julia 代码。如果您有兴趣,Daniel 在 JuliaCon 2015 上的演讲有助于了解详细信息。
有时您可能只需要数据库提供的一部分数据。在这种情况下,基于 Web 的 API 非常方便,可以根据需要获取必要的数据。BioMart 中心门户 提供了一个统一的访问点,可以访问一系列可以通过 REST 和 SOAP API 以编程方式访问的生物数据库。Julian 对 BioMart 的包装器将通过自动将响应转换为 Julia 对象,使访问数据变得更加容易。在 R 语言中,biomaRt 软件包是 Bioconductor 软件包中最受欢迎的软件包之一:https://www.bioconductor.org/packages/stats/。
我们需要我们的库的用户和合作者。来自现实世界用户的反馈是我们提高库质量的最宝贵财富。我们欢迎功能请求和讨论,这些将使生物信息学变得更容易和更快。我在这篇文章中没有提到的系统发育学和结构生物学工具也正在积极开发中。您可以在此处发布问题:https://github.com/BioJulia/Bio.jl/issues;如果您想更随意地与我们联系,这个 Gitter 房间可能会更方便:https://gitter.im/BioJulia/Bio.jl。