23 个版本
0.3.9 | 2023年7月29日 |
---|---|
0.3.7 | 2022年8月15日 |
0.3.6 | 2022年4月7日 |
0.3.5 | 2022年3月17日 |
0.1.16 | 2020年11月30日 |
#37 in 科学
300 每月下载量
在 4 crates 中使用
115KB
3.5K SLoC
d4
- 密集深度数据转储
概述
密集深度数据转储(D4)格式和工具集为定量基因组数据集(例如,RNA-seq、ChIP-seq、WGS 深度等)的快速分析和紧凑存储提供了一种替代 BigWig 的方案。它支持随机访问、多个轨道(例如,来自同一样本的 RNA-seq、ChIP-seq 等)、HTTP 范围请求,以及任意基因组区间的统计数据。D4tools 软件基于一个 Rust crate 构建。我们提供了一个 C-API 和一个 Python API,并附带一个 Jupyter notebook,其中提供了如何读取、查询和创建单轨道和多轨道 D4 文件的示例。
以下提供了使用示例。还可以查看描述 D4 的动机、性能和工具套件的 幻灯片集
动机
现代 DNA 测序被用作各种测定的读出,其中对齐序列的数量,或“读深度”,作为许多底层细胞现象的定量信号。尽管应用广泛且有数千个数据集,但现有用于存储和分析读深度的格式在大小和速度方面都有限。例如,从对齐文件中重新计算测序深度比分析该计算的文本输出要快。我们寻求通过创建密集深度数据转储(D4)格式和工具集来改进现有格式,如 BigWig 和压缩的 BED 文件。D4 格式是自适应的,因为它从输入 BAM 或 CRAM 文件中抽取一个随机样本的对齐序列深度,以确定一个最佳编码,该编码可以最小化文件大小,同时仍然支持快速数据访问。我们表明,D4 对于 RNA-Seq 和全基因组测序都使用了更少的磁盘空间,并且与现有格式相比,在随机访问、聚合和总结方面提供了 3 到 440 倍的速度提升,这对于可扩展的下游分析非常有用,否则这些分析将难以实现。
论文
了解更多信息,请阅读以下出版物:https://www.nature.com/articles/s43588-021-00085-0。注意:我们在以下硬件和软件配置的服务器上运行了手稿中描述的实验
- 处理器:Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz
- RAM: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
构建htslib
时需要gcc
或clang
。有关详细信息,请检查htslib存储库。
构建步骤
通常,构建步骤非常简单。只需
# For Debug Build
cargo build
# For Release Build
cargo build --release
它将产生d4tools
二进制文件,您可以在target/debug/d4tools
或target/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绑定的步骤。
- 安装或构建绑定库
- 安装d4binding库的最简单方法是使用bioconda。
conda install d4binding
然后头文件将安装到<conda-dir>/include
下。而libd4binding.so
或libd4binding.dylib
将安装到<conda-dir>/lib
下。
- 或者,您也可以选择从源代码进行安装。
# Build the D4 binding library, for debug build, remove "--release" argument
cargo build --package=d4binding --release
运行此命令后,您应该能够在 "target/release/libd4binding.so" 中找到库。
- 在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;
}
- 将C++代码编译到D4绑定库中
gcc print-chrom-info.c -o print-chrom-info -I d4binding/include -L target/release -ld4binding
更多示例,请参阅 d4binding/examples/
示例数据
无运行时依赖
~0–1.8MB
~34K SLoC