Genozip
Genozip是一种专为基因组数据设计的高效压缩工具。它采用了一系列先进的压缩算法和技术,能够将原始的基因组数据文件(如FASTA、VCF和BAM格式)压缩成更小的文件,同时保持数据的完整性和可访问性。
以下是Genozip的一些主要特点和优势:
高压缩率:Genozip能够以很高的压缩率压缩基因组数据,通常能够将数据体积减小到原始大小的10%至20%。
快速压缩和解压缩速度:Genozip使用多线程处理和并行压缩算法,能够实现快速的数据压缩和解压缩过程。
数据完整性:Genozip压缩的数据文件可以方便地进行随机访问和部分解压缩,而不需要解压整个文件。这使得在处理大规模基因组数据时,可以快速获取所需的子集或特定区域的数据。
数据安全性:Genozip支持数据加密,可以对压缩的数据文件进行加密保护,确保数据的安全性。
多种数据格式支持:Genozip适用于各种常见的基因组数据格式,包括FASTA、VCF、BAM和CRAM等。
支持压缩目录。
Genozip为商业软件,为了让用户相信他们的诚意,也在github上开放了软件源码。Genozip 商业用户需要购买授权,学术用户可以申请免费使用。
源码:https://github.com/divonlan/genozip
Note
压缩和解压建议使用相同的 genozip 版本。
license¶
如果自行安装,则需要向官方申请license。
集群上使用
# 载入genozip
$ module load genozip/15.0.4
# 将license拷到自己的home目录下
# 执行一次即可,后续使用不用再执行
$ cp $LIC ~
# 或使用 --licfile 参数指定license位置
$ genozip --licfile $LIC
基本使用¶
压缩/解压单个fastq文件
# 压缩
# -@4, 设置使用4个线程,默认使用所有CPU核
# --reference 使用参考基因组压缩,可以获得较高的压缩率,解压时需要指定参考基因组
# 第一次使用该参考基因组时,会在参考基因组相同目录生成一个后缀为 .genozip的文件,如下面的命令会生成 IRGSP-1.0_genome.fasta.genozip
$ genozip -@4 HW84_NDSW31815_1.clean.fq.gz --reference IRGSP-1.0_genome.fasta
# 解压,解压时需要用到参考基因组,默认使用的参考基因组路径为压缩时使用的参考基因组,若该参考基因组路径发生变化则使用 --reference 参数指定
$ genounzip -@4 HW84_NDSW31815_1.clean.fq.genozip
# 压缩,使用--REFERENCE,输出文件中会包含部分参考基因组,解压时不需要指定参考基因组
$ genozip -@4 HW84_NDSW31815_1.clean.fq.gz --REFERENCE IRGSP-1.0_genome.fasta
# 解压,不需要使用基因组
$ genounzip -@4 HW84_NDSW31815_1.clean.fq.genozip
genounzip HW84_NDSW31815_1.clean.fq.gz : Done (32 seconds)
$
# 将fq1和fq2压缩到一起,可以压缩到更小一点
$ genozip -@4 --reference IRGSP-1.0_genome.fasta --pair HW84_NDSW31815_1.clean.fq.gz HW84_NDSW31815_2.clean.fq.gz
# 解压
$ genounzip -@4 --reference IRGSP-1.0_genome.fasta HW84_NDSW31815_1+2.clean.fq.genozip
压缩/解压bam文件
# 压缩
$ genozip -@4 HW84_NDSW31815_sorted.bam
# 解压
$ genounzip -@4 HW84_NDSW31815_sorted.bam.genozip
fq和bam以前压缩之后,bam文件的大小几乎可以不计。
# 压缩
$ genozip -@4 --deep --reference IRGSP-1.0_genome.fasta HW84_NDSW31815_sorted.bam HW84_NDSW31815_1.clean.fq.gz HW84_NDSW31815_2.clean.fq.gz
# 解压
$ genounzip HW84_NDSW31815_sorted.deep.genozip
# 压缩
$ genozip -@4 HW84_NDSW31815_sorted.vcf.gz
# 解压
$ genozip -@4 HW84_NDSW31815_sorted.vcf.gz
数据一致性说明¶
软件官方对数据一致性的说明 Verifying file integrity Losslessness
genozip压缩数据过程分为2步:压缩和校验,压缩完成后会自动进行数据一致性校验-将压缩完成后的文件在内存中解压并与原始文件比较,完整性检查没问题才算压缩完成,否则会报错。
压缩完成后会输出类似如下的校验信息,表示压缩的文件解压后与原始文件一致。
testing: genounzip sample.R1.fq.gz : verified as identical to the original FASTQ
需要注意的是,原始gz文件的md5值与使用genozip压缩解压后的gz文件的md5值不一致,只有两者都解压成文本文件后的md5才一致,测试命令如下:
# FASTQ:
$ zcat file.fastq.gz | md5sum
# BAM:
$ zcat file.bam | md5sum
# genozip 压缩
$ genozip --md5 -@4 sample.R1.fq.gz --reference ref.fa
$ ll -h
-rw-r----- 1 user group 1.4G Apr 16 10:35 shoot_MH63_LTSD_rep1_trim_2.fq.genozip
-rw-rw-r-- 1 user group 3.2G Apr 16 10:46 shoot_MH63_LTSD_rep1_trim_2.fq.gz
drwxrwxr-x 2 user group 4.0K Apr 16 10:45 tmp
# 将原始 gz 文件放到 tmp 目录下
mv sample.R1.fq.gz tmp
# genozip 解压
$ genounzip -@4 sample.R1.fq.genozip
# 原始 fq 文件 md5
$ zcat tmp/sample.R1.fq.gz |md5sum
e1ab55ea344b7b7440949f8bf19b172c -
# 解压后 fq 文件 md5,可以看到两者md5一致
$ zcat sample.R1.fq.gz |md5sum
e1ab55ea344b7b7440949f8bf19b172c -
各物种数据压缩情况¶
fastq¶
物种 | 文件 | 原始大小 | genozip |
---|---|---|---|
棉花 | BYU21001_1.fastq.gz | 15G | 3.2G |
棉花 | BYU21001_2.fastq.gz | 15G | 3.4G |
水稻 | HW84_NDSW31815_1.clean.fq.gz | 4.6G | 1.1G |
水稻 | HW84_NDSW31815_2.clean.fq.gz | 4.8G | 1.2G |
玉米 | Q114_1.trimed.fq.gz | 9.4G | 3.0G |
玉米 | Q114_2.trimed.fq.gz | 11G | 3.7G |
小麦 | LAN91_L01_49_1.fq.gz | 14G | 6.7G |
小麦 | LAN91_L01_49_2.fq.gz | 15G | 7.6G |
油菜 | ZS11_1.fq.gz | 15G | 4.6G |
油菜 | ZS11_2.fq.gz | 17G | 6.1G |
大豆 | 15-2_L2_I114.R1_clean.fq.gz | 6.3G | 2.6G |
大豆 | 15-2_L2_I114.R2_clean.fq.gz | 6.5G | 2.8G |
人 | ERR194146_1.fastq.gz | 52G | 30G |
人 | ERR194146_2.fastq.gz | 53G | 30G |
bam¶
物种 | 文件 | 原始大小 | genozip |
---|---|---|---|
棉花 | L1_sorted.bam | 52G | 16G |
水稻 | HW84_NDSW31815_sorted.bam | 7.0G | 2.3G |
玉米 | Q114_sorted.bam | 20G | 7.1G |
油菜 | ZS11_sorted.bam | 28G | 11G |
大豆 | 15-2_L2_I114_sorted.bam | 12G | 5.3G |
小麦 | LAN91_L01_49_sorted.bam | 35G | 16G |
人 | ERR194146.bam | 113G | 52G |
fq+bam¶
物种 | 原始大小(R1.fq.gz+R2.fq.gz+bam) | genozip |
---|---|---|
棉花 | 35G + 37G + 52G | 18G |
水稻 | 4.6G + 4.8G + 7.0G | 2.5G |
玉米 | 9.4G + 11G + 20G | 7.4G |
油菜 | 4.6G + 6.0G + 28G | 12G |
大豆 | 6.3G + 6.5G + 12G | 5.5G |
小麦 | 14G + 15G + 35G | 15G |
人 |
vcf¶
物种 | 文件 | 原始大小 | genozip |
---|---|---|---|
棉花 | L1.vcf.gz | 165M | 67M |
水稻 | HW84_NDSW31815.vcf.gz | 18M | 7.5M |
玉米 | Q114.vcf.gz | 493M | 186M |
油菜 | ZS11.vcf.gz | 13M | 5.8M |
大豆 | 15-2_L2_I114.vcf.gz | 12M | 4.9M |
人 | ERR194146.vcf.gz | 167M | 67M |
下游分析¶
interleaved 文件¶
使用genozip将双端测序文件压缩成一个文件之后,该文件内容格式为 interleaved
,在该文件中序列条目交替存储两个配对的序列。
对于双末端测序数据,通常会有两个文件,一个包含每个配对的第一个序列(如read1),另一个包含每个配对的第二个序列(如read2)。而在交错(interleaved
)格式中,这两个序列被交错存储在同一个文件中。
如下所示,@
开头的行表示序列的名称和配对信息,接着是序列本身和质量分数。
@Seq1/1
<seq1_read1>
+
<seq1_quality1>
@Seq1/2
<seq1_read2>
+
<seq1_quality2>
@Seq2/1
<seq2_read1>
+
<seq2_quality1>
@Seq2/2
<seq2_read2>
+
<seq2_quality2>
...
interleaved
作为输入文件,因此可以直接将genozip压缩后的文件作为比对软件的输入文件,而不用另外将其解压为 gz
文件,有效减少了计算量和存储空间。 官方示例¶
https://www.genozip.com/fastq-to-bam-pipeline
官方给了个从 .genozip
文件到质控比对排序去重后的 bam
文件的示例脚本。
#!/bin/bash
ref=GRCh38_full_analysis_set_plus_decoy_hla.fa
study=mystudy
fastq=myfastqdir
mapped=mymappeddir
files=($fastq/*.genozip)
processed=1
while (( processed == 1 )); do
processsed=0
for file in ${files[@]}
do
sample=`echo $file | grep -o -E sample'[[:digit:]]{2}'` # convert the file name to a sample name
out=$mapped/${sample}.bam.genozip
if [ -f $out ]; then continue; fi # already processed
if [ -f ${out}.doing_now ]; then continue; fi # another instance of this script is working on it
processed=1
touch ${out}.doing_now
echo =========================================
echo Sample $sample
echo =========================================
( genocat $file -e ${ref%.fa}.ref.genozip || >&2 echo "genocat exit=$?" )|\
( fastp --stdin --interleaved_in --stdout --html ${fastq}/${sample}.html --json ${fastq}/${sample}.json || >&2 echo "fastp exit=$?" )|\
( bwa mem $ref - -p -t 54 -T 0 -R "@RG\tID:$sample\tSM:$study\tPL:Illumina" || >&2 echo "bwa exit=$?" )|\
( samtools view -h -OSAM || >&2 echo "samtools exit=$?")|\
( bamsort fixmates=1 adddupmarksupport=1 inputformat=sam outputformat=sam inputthreads=5 outputthreads=5 sortthreads=30 level=1 || >&2 echo "bamsort exit=$?" )|\
( bamstreamingmarkduplicates inputformat=sam inputthreads=3 outputthreads=3 level=1 || >&2 echo "bamstreamingmarkduplicates exit=$?" )|\
( genozip -e $ref -i bam -o $out || >&2 echo "genozip exit=$?" )
rm ${out}.doing_now
done
done
BWA¶
可以将上面的脚本稍微改一下,用于 BWA
比对流程中,BWA-MEM2
同理。
$ genocat sample_1+2.fq.genozip | bwa mem $ref - -p -t 20 -T 0 -R "@RG\tID:id\tSM:sample\tPL:Illumina" | samtools sort -@20 -o sample_sorted.bam
Bowtie2¶
Bowtie2 的 --interleaved
选项也支持 interleaved
格式的输入文件。
注意事项¶
CST Error in buf_low_level_malloc:726 15.0.24: Out of memory in sam_deep_merge:208: malloc failed (size=37526397330 bytes). Try limiting the number of concurrent threads with --threads (affects speed) or reducing the amount of data processed by each thread with --vblock (affects compression ratio)
减少genozip使用的线程数
genozip: Warning: buf_alloc called from hash_alloc_global:248 for "zctx->global_ents" requested 9.2 GB. This is suspiciously high and might indicate a bug - please report to support@genozip.com. vb->vblock_i=0 buf="contexts->global_ents" ctx=Q2NAME memory=(nil) data=(nil) param=0(0x0000000000000000) len=0 size=0 type=UNALLOCATED shared=false promiscuous=true spinlock=0x564ea57cc6f0 locked=0 link_count=1 allocated in (no func):0 by vb=0 line_i=0
26-Oct-2023 07:08:54 CST Error in buf_low_level_malloc:719: Out of memory in sam_deep_merge:211: malloc failed (size=57459513106 bytes). Try limiting the number of concurrent threads with --threads (affects speed) or reducing the amount of data processed by each thread with --vblock (affects compression ratio) If this is unexpected, please contact support@genozip.com.
在使用
genozip --deep
压缩人的fq+bam数据时,出现上面的报错,整个压缩时间非常长,暂时无法解决。
本站总访问量 次