20 个版本

0.3.9 2023 年 7 月 29 日
0.3.7 2022 年 7 月 6 日
0.3.6 2022 年 4 月 7 日
0.3.5 2022 年 3 月 17 日
0.1.16 2020 年 11 月 30 日

#164 in 解析器实现

Download history 22/week @ 2024-03-13 32/week @ 2024-03-20 37/week @ 2024-03-27 1985/week @ 2024-04-03 440/week @ 2024-04-10 27/week @ 2024-04-17 243/week @ 2024-04-24 251/week @ 2024-05-01 160/week @ 2024-05-08 12/week @ 2024-05-15 11/week @ 2024-05-22 12/week @ 2024-05-29 22/week @ 2024-06-05 25/week @ 2024-06-12 15/week @ 2024-06-19 224/week @ 2024-06-26

288 每月下载量
2 crates 中使用

MIT 许可协议

290KB
7.5K SLoC

d4 - 密集深度数据转储

概要

密集深度数据转储 (D4) 格式和工具集为定量基因组数据集(例如 RNA-seq、ChIP-seq、WGS 深度等)的快速分析和紧凑存储提供了一种替代 BigWig 的方法。它支持随机访问、多个轨道(例如来自同一样本的 RNA-seq、ChiP-seq 等)、HTTP 范围请求,以及对任意基因组区间的统计信息。D4tools 软件建立在 Rust 包 之上。我们提供 C-API 和一个 Python API,以及一个 Jupyter 笔记本,其中提供了如何读取、查询和创建单轨道和多轨道 D4 文件的示例。

以下提供了使用示例。还可以查看描述 D4 的动机、性能和工具集的 幻灯片

动机

现代 DNA 测序被用作各种测定的读出,其中对齐序列的数量,或“读取深度”,作为许多潜在细胞现象的定量信号。尽管应用广泛且数据集众多,但用于读取深度存储和分析的现有格式在大小和速度方面都有限。例如,从对齐文件重新计算测序深度比分析该计算的文本输出要快。我们试图通过创建密集深度数据转储 (D4) 格式和工具集来改进现有的格式,如 BigWig 和压缩的 BED 文件。D4 格式是自适应的,因为它从输入 BAM 或 CRAM 文件中提取对齐序列深度的随机样本,以确定一种最优编码,该编码最小化文件大小,同时也能实现快速数据访问。我们发现,D4 在 RNA-Seq 和全基因组测序中使用的磁盘空间更少,并且对于随机访问、聚合和汇总等可扩展的下游分析,D4 相比现有格式提供了 3 到 440 倍的速度提升。

手稿

要了解更多信息,请阅读以下出版物:https://www.nature.com/articles/s43588-021-00085-0。注意:我们在以下硬件和软件的服务器上运行了论文中描述的实验

  • 处理器:Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz
  • 内存:376GB
  • 操作系统:CentOS 7.6.180带Linux内核3.0.10
  • Rust版本:1.47.0-nightly

通过示例说明基本用法(每个示例应几秒钟完成)

创建D4文件

使用d4tools create子命令可以将BAM、CRAM、BigWig和BedGraph文件转换为D4文件。

USAGE:
    create [FLAGS] [OPTIONS] <input-file> [output-file]

FLAGS:
    -z, --deflate      Enable the deflate compression
    -A, --dict-auto    Automatically determine the dictionary type by random sampling
        --dump-dict    Do not profile the BAM file, only dump the dictionary
    -h, --help         Prints help information
    -S, --sparse       Sparse mode, this is same as '-zR0-1', which enable secondary table compression and disable
                       primary table
    -V, --version      Prints version information

OPTIONS:
        --deflate-level <level>          Configure the deflate algorithm, default 5
    -d, --dict-file <dict_spec_file>     Provide a file that defines the values of the dictionary
    -R, --dict-range <dict_spec>         Dictionary specification, use "a-b" to specify the dictionary is encoding
                                         values from A to B(exclusively)
    -f, --filter <regex>                 A regex that matches the genome name should present in the output file
    -g, --genome <genome_file>           The genome description file (Used by BED inputs)
    -q, --mapping-qual <mapping-qual>    The minimal mapping quality (Only valid with CRAM/BAM inputs)
    -r, --ref <fai_file_path>            Reference genome file (Used by CRAM inputs)
    -t, --threads <num_of_threads>       Specify the number of threads D4 can use for encoding

ARGS:
    <input-file>     Path to the input file
    <output-file>    Path to the output file
  • 从CRAM/BAM文件
  d4tools create -Azr hg19.fa.gz.fai hg002.cram hg002.d4
  • 从BigWig文件
  d4tools create -z input.bw output.d4
  • 从BedGraph文件(扩展名必须是".bedgraph")
  d4tools create -z -g hg19.genome input.bedgraph output.d4

查看D4文件

USAGE:
    view [FLAGS] <input-file> [chr:start-end]...

FLAGS:
    -h, --help           Prints help information
    -g, --show-genome    Show the genome file instead of the file content
    -V, --version        Prints version information

ARGS:
    <input-file>          Path to the input file
    <chr:start-end>...    Regions to be viewed
  • 将d4文件转换为bedgraph文件
$ d4tools view hg002.d4 | head -n 10
chr1    0       9998    0
chr1    9998    9999    6
chr1    9999    10000   9
chr1    10000   10001   37
chr1    10001   10002   59
chr1    10002   10003   78
chr1    10003   10004   100
chr1    10004   10005   116
chr1    10005   10006   130
chr1    10006   10007   135
  • 打印给定区域
$ d4tools view hg002.d4 1:1234560-1234580 X:1234560-1234580
1       1234559 1234562 28
1       1234562 1234565 29
1       1234565 1234566 30
1       1234566 1234572 31
1       1234572 1234573 29
1       1234573 1234576 28
1       1234576 1234578 27
1       1234578 1234579 26
X       1234559 1234562 26
X       1234562 1234563 25
X       1234563 1234565 26
X       1234565 1234574 25
X       1234574 1234575 26
X       1234575 1234576 25
X       1234576 1234578 26
X       1234578 1234579 25
  • 打印基因组布局
$ d4tools view -g hg002.d4 | head -n 10
1       249250621
2       243199373
3       198022430
4       191154276
5       180915260
6       171115067
7       159138663
8       146364022
9       141213431
10      135534747

对D4文件运行统计

USAGE:
    stat [OPTIONS] <input_d4_file>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -r, --region <bed_file_path>      A bed file that describes the region we want to run the stat
    -s, --stat <stat_type>            The type of statistics we want to perform, by default average. You can specify
                                      statistic methods: mean, median, hist, percentile=X% (If this is not speficied
                                      d4tools will use mean by default)
    -t, --threads <num_of_threads>    Number of threads

ARGS:
    <input_d4_file>
  • 每个染色体的平均覆盖率
$ d4tools stat hg002.d4
chr1    0       249250621       27.075065016588262
chr10   0       135534747       31.59483947684648
chr11   0       135006516       25.970025943044114
chr11_gl000202_random   0       40103   14.47213425429519
chr12   0       133851895       25.80992053194316
chr13   0       115169878       24.18613685602758
chr14   0       107349540       24.25194093053403
chr15   0       102531392       23.04176524785697
chr16   0       90354753        28.106620932271266
chr17   0       81195210        25.58382477242192
...
  • 每个染色体的中值覆盖率
$ d4tools stat -s median hg002.d4 | head -n 10
1       0       249250621       25
10      0       135534747       26
11      0       135006516       26
12      0       133851895       26
13      0       115169878       26
14      0       107349540       25
15      0       102531392       24
16      0       90354753        24
17      0       81195210        25
18      0       78077248        26
  • 给定区域(由bed文件定义)的前5%
$ d4tools stat -s percentile=95 -r region.bed hg002.d4
1       2000000 3000000 33
2       0       150000000       38

通过静态HTTP服务器读取D4文件

D4现在支持显示和运行HTTP服务器上提供的D4文件的统计信息,而无需将文件下载到本地。要打印文件内容,请使用以下命令

$ d4tools show https://d4-format-testing.s3.us-west-1.amazonaws.com/hg002.d4 | head -n 10
1       0       9998    0
1       9998    9999    6
1       9999    10000   10
1       10000   10001   38
1       10001   10002   55
1       10002   10003   72
1       10003   10004   93
1       10004   10005   110
1       10005   10006   126
1       10006   10007   131

要在网络上对D4文件运行统计,我们要求D4文件包含数据索引,以避免完全访问文件。

  • (在服务器端)准备需要通过网页访问的D4文件
d4tools index build --sum hg002.d4
  • (在客户端)对此文件运行平均深度统计
$ d4tools stat https://d4-format-testing.s3.us-west-1.amazonaws.com/hg002.d4
1       0       249250621       23.848327146193952
2       0       243199373       25.02162749408075
3       0       198022430       23.086504175309837
4       0       191154276       23.18471121200553
5       0       180915260       23.2536419094774
6       0       171115067       24.515156108374722
7       0       159138663       24.398102314080646
8       0       146364022       26.425789139628865
9       0       141213431       19.780247114029827
10      0       135534747       25.475887087464

....

构建

先决条件

要构建d4,需要Rust工具链。要安装Rust工具链,请运行以下命令,并按照提示完成Rust安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

需要gccclang来构建嵌入在d4库中的htslib。有关详细信息,请检查htslib存储库。

构建步骤

通常,构建步骤非常简单。只需

# For Debug Build
cargo build
# For Release Build
cargo build --release

它将生成d4tools二进制文件,您可以在target/debug/d4toolstarget/release/d4tools中找到,具体取决于您选择的构建模式。

故障排除

  • 编译错误:请求-fPIC或-fPIE选项

在某些环境中,Rust工具链将要求编译-fPIC或-fPIE以构建d4tools二进制文件。在这种情况下,您可以使用以下解决方案

# To build a debug build :
cd d4tools && cargo rustc --bin d4tools -- -C relocation-model=static

# To build a release build :
cd d4tools && cargo rustc --bin d4tools --release -- -C relocation-model=static

安装(<2分钟)

  • 安装bioconda

假设您已安装并配置了bioconda环境,您可以从bioconda存储库简单地安装d4tools和d4binding。

conda install d4tools
  • 从crates.io安装:假设您有Rust编译器工具链,您也可以从crate.io安装。
cargo install d4tools
  • 从源代码安装:以下步骤允许您从源代码安装d4tools。您可以选择运行以下命令来安装d4tools二进制文件
cargo install --path .

在C/C++中使用D4

D4提供了一个C绑定,允许在C和C++中使用D4库。以下是构建D4绑定的步骤。

  1. 安装或构建绑定库
  • 安装d4binding库最简单的方法是使用bioconda。
conda install d4binding

然后头文件将被安装到 <conda-dir>/include 之下。而 libd4binding.solibd4binding.dylib 将被安装到 <conda-dir>/lib 之下。

  • 或者,您也可以选择从源代码安装。
# Build the D4 binding library, for debug build, remove "--release" argument
cargo build --package=d4binding --release

运行此命令后,您应该能够找到名为 "target/release/libd4binding.so" 的库。

  1. 在 C 中使用 D4

以下是一个打印 D4 文件中定义的所有染色体名称和大小的简单示例。

#include <stdio.h>
#include <d4.h>

int main(int argc, char** argv) 
{
    d4_file_t* fp = d4_open("input.d4", "r");

    d4_file_metadata_t mt = {};
    d4_file_load_metadata(fp, &mt);

    int i;
    for(i = 0; i < mt.chrom_count; i ++)
        printf("# %s %d\n", mt.chrom_name[i], mt.chrom_size[i]);
    
    d4_close(fp);
    return 0;
}
  1. 将 C++ 代码编译与 D4 绑定库相抗衡
gcc print-chrom-info.c -o print-chrom-info -I d4binding/include -L target/release -ld4binding  

更多示例,请参阅 d4binding/examples/

样本数据

依赖项

~1–14MB
~174K SLoC