跳转至

glnexus

简介

glnexus (GL, genotype likelihood)用于对大规模 gvcf 进行 joint call,其由DNAnexus公司开发。官方宣称glnexus 可以代替 GATK CombineGVCFsGATK GenotypeGVCFs,且速度要快很多。glnexus 为开源软件,可免费使用。

官网:https://github.com/dnanexus-rnd/GLnexus/

使用手册:https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started

glnexus的输入主要为 gvcf 文件,支持 gatk 和 deepvariant 产生的 gvcf 文件。

如果是 WES 数据则还需要使用 --bed 选项指定 bed 文件,表示对指定的位置进行变异检测;如果不指定 --bed 选项,则表示对所有 contig 的所有位置都进行变异检测。WGS 项目可以不指定 --bed 选项。

glnexus输出文件为bcf(vcf的二进制格式),为方便后续使用可以转成vcf文件。

安装

官方给了编译好的二进制版本,但由于glic版本的问题无法在centos7上运行,源码编译也比较复杂。鉴于官方给了docker镜像,因此可以pull成singularity镜像,集群上下载了该镜像文件,可直接使用。

基本使用

# 运行glnexus
$ module load Singularity/3.7.3
$ singularity exec $IMAGE/glnexus/1.4.1.sif glnexus_cli -m 500 -t 35 --bed ref.bed --config gatk ../gvcf/*gz > merge_glnexus.bcf

# 将bcf文件转成vcf文件并压缩
$ module load BCFtools/1.15.1 HTSlib/1.18
$ bcftools view dv_1000G_ALDH2.bcf | bgzip -@ 4 -c > dv_1000G_ALDH2.vcf.gz

Note

glnexus 需要的内存较大,建议使用 high 队列中的整个节点(-q high -n 36),或 smp 队列(-q smp -n 36)。如果出现内存相关报错(terminate called after throwing an instance of 'std::bad_alloc'),可以寻求管理员协助处理。

软件选项说明:

  • --dir DIR, -d DIR 过程文件目录,如果不指定,软件默认创建目录为 ./GLnexus.DB,软件运行之前须保证该目录不能存在

  • --config X, -c X 配置文件,默认为 gatk

  • --bed FILE, -b FILE 3列的bed文件,该区间为软件分析的区间。如果不指定则表示分析所有contig的所有位置

  • --list, -l 指定放置所有gvcf文件路径的文件。如果样本数过多,可以将所有gvcf路径放在一个文件内,每行一个gvcf文件

  • --more-PL, -P include PL from reference bands and other cases omitted by default。 : 以下为ChatGPT对这个选项的解释 : 在基因分型分析中,根据默认设置可能会忽略一些情况,而这种设置可以通过开启特定的选项来纳入这些情况。具体来说,这些情况包括参考区域中的等位基因,以及由于基础质量较低或对应序列缺失而被省略的等位基因。 : 在GATK等基因组学分析工具中,PL (Phred-scaled likelihoods)是一个常用的参数,用于表示不同基因型之间的似然比较。在默认设置下,由于参考区域的基因型应该是已知的,因此通常会被省略在分析过程中,从而在分析结果中也不包括与之相关的PL信息。类似地,如果样本中的一个等位基因由于低质量或其他原因而被省略,则其PL信息也可能会被忽略。 : 如果需要考虑这些被忽略的情况,可以在基因分型分析的选项中启用“include PL from reference bands and other cases omitted by default”选项,以便保留这些信息并纳入分析结果。这个选项可能会增加计算时间和内存需求,但有助于提高分析的准确性和可靠性,特别是在处理复杂的样本集和变异情况时。

  • --squeeze, -S reduce pVCF size by suppressing detail in cells derived from reference bands

  • --trim-uncalled-alleles, -a remove alleles with no output GT calls in postprocessing。 : 以下为ChatGPT对这个选项的解释 : 在基因组学数据分析中,通常会使用 Variant Call Format (VCF) 文件来存储样本的基因型信息。在 VCF 文件中,每个位点可以有多种不同的等位基因 (alleles),而每个样本都有对应的基因型 (genotype)。 : 在一些情况下,某些基因型可能由于种种原因无法得出合理的基因型调用结果。例如,可能由于覆盖度不足、信噪比过低或其他技术问题而导致这些样本没有输出有效的基因型调用结果。在这种情况下,VCF 文件中可能会包含无输出基因型调用的等位基因信息。 : 为了减少这类无意义的信息对后续分析的影响,在后处理 (postprocessing) 阶段,可以选择从 VCF 文件中移除这些无输出基因型调用的等位基因信息。具体来说,可以通过过滤掉没有输出 GT 调用的等位基因来实现。 : GT 是基因型 (genotype) 的缩写,代表样本的两个等位基因分别来自于哪个父本。如果 VCF 文件中某个位点上的所有样本都没有输出 GT 调用结果,那么该位点对应的所有等位基因信息都可以被认为是无效的,并在后处理阶段被移除。 : 通过移除无输出 GT 调用的等位基因,可以有效减少 VCF 文件的大小,并提高后续分析的可靠性和效率。

  • --mem-gbytes X, -m X 预计能使用的内存大小,单位为GB,默认使用节点绝大多数内存容量

  • --threads X, -t X 设置线程数,默认为节点所有线程

所有支持的gvcf文件类型

NameCRC32CDescription
gatk1926883223Joint-call GATK-style gVCFs
gatk_unfiltered4039280095Merge GATK-style gVCFs with no QC filters or genotype revision
xAtlas1991666133Joint-call xAtlas gVCFs
xAtlas_unfiltered221875257Merge xAtlas gVCFs with no QC filters or genotype revision
weCall2898360729Joint-call weCall gVCFs
weCall_unfiltered4254257210Merge weCall gVCFs with no filtering or genotype revision
DeepVariant2932316105Joint call DeepVariant whole genome sequencing gVCFs
DeepVariantWGS2932316105Joint call DeepVariant whole genome sequencing gVCFs
DeepVariantWES1063427682Joint call DeepVariant whole exome sequencing gVCFs
DeepVariantWES_MED_DP2412618877Joint call DeepVariant whole exome sequencing gVCFs, populating 0/0 DP from MED_DP instead of MIN_DP
DeepVariant_unfiltered3285998180Merge DeepVariant gVCFs with no QC filters or genotype revision
Strelka2395868656[EXPERIMENTAL] Merge Strelka2 gVCFs with no QC filters or genotype revision

错误处理

  • [GLnexus] [error] Failed to bulk load into DB: Failure: One or more gVCF inputs failed validation or database loading; check log for details. Failed to read from merge_glnexus.bcf: unknown file type

    每次失败重新运行时,需要删除之前运行产生的中间文件 GLnexus.DB,如果没有删除,则会出现上述报错。

  • [GLnexus] [error] ../gvcf/AL077.g.vcf.gz Exists: sample already exists; each input gVCF should have a unique sample name (header column #10) (AL077_SM AL077 (../gvcf/AL077.g.vcf.gz))

    经检查是有2个gvcf文件使用的同一个样本导致的报错

    $ zcat AL075.g.vcf.gz |grep CHRO
    #CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  AL077_SM
    
    $ zcat AL077.g.vcf.gz |grep CHRO
    #CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  AL077_SM
    

    如果在前期的 BWA 比对过程中没有添加类似的样本信息 -R "@RG\tID:ERR194146\tSM:ERR194146\tPL:ILLUMINA",gvcf 中每个样本的名称都显示为 sample,使用 glnexus 合并时也会遇到同样的报错。可以使用下面的命令修改。

    module load BCFtools/1.8
    module load HTSlib/1.18
    
    ## 修改g.vcf文件中样本名
    cat sample.name.txt 
    sample  ERR9887846
    
    bcftools reheader -s sample.name.txt ERR9887846.g.vcf.gz -o ERR9887846.g1.vcf.gz
    
    ## 然后创建索引:
    tabix -p vcf ERR9887846.g1.vcf.gz
    
    zcat ERR9887846.g.vcf.gz |sed -n '101,101p'
    #CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  sample
    
    zcat ERR9887846.g1.vcf.gz |sed -n '101,101p'
    #CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  ERR9887846
    
  • terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

    内存不够报错,可以请求管理员协助处理。

速度测试

物种样本数gvcf.gz运行队列耗时内存临时空间
未知400600 GBnormal6 h310 GB1.1 TB
棉花250800 GBsmp15 h230 GB2.3 TB
水稻250250 GBsmp4.5 h250 GB-
水稻28002.8 TBsmp(s004)52 h680 GB8 TB
本文阅读量  次
本站总访问量  次