GATK4时代的VCF文件合并可能没那么简单
通常有3个原因,我们需要进行VCF文件合并:
- 首先是分染色体进行HaplotypeCaller得到了基于染色体的多个vcf文件,在GATK3时代需要用 CatVariants 来进行合并,在GATK4时代用
GatherVcfs
命令。 - 其次是在HaplotypeCaller时候选择了
-ERC GVCF
or-ERC BP_RESOLUTION
模式,也就是说多个样本的gvcf结果需要合并,在GATK3时代需要 CombineGVCFs命令 ,在GATK4时代用MergeVcfs
命令。 - 最后一个肯能是对同一个样本选择了不同工具或者参数得到了不同的vcf文件需要进行合并比较,在GATK3时代需要 CombineVariants 命令 ,这个时候会把metadata信息也合并起来,或者取两次vcf结果的交集或并集等等。
最后,通常不建议把多个不同样本的vcf文件进行合并,只能说是合并多个样本的gvcf文件。https://gatkforums.broadinstitute.org/gatk/discussion/53/combining-variants-from-different-files-into-one
GATK4时代一切都变了
GATK3的时候还有CatVariants
命令:https://software.broadinstitute.org/gatk/documentation/tooldocs/3.8-0/org_broadinstitute_gatk_tools_CatVariants.php 但是现在GATK4时代它也取消了,被 GatherVcfs 取代。
所以多了两个命令:
https://software.broadinstitute.org/gatk/documentation/tooldocs/current/picard_vcf_GatherVcfs.php
https://software.broadinstitute.org/gatk/documentation/tooldocs/current/picard_vcf_MergeVcfs.php
多条染色体的同样本的vcf文件合并
# for i in {1..22} X Y ;do echo "-I final_chr$i.vcf" '\';done
# for i in {10..19} {1..9} M X Y ;do echo "-I final_chr$i.vcf" '\';done
module load java/1.8.0_91
GATK=/home/jianmingzeng/biosoft/GATK/gatk-4.0.3.0/gatk
$GATK GatherVcfs \
-I final_chr1.vcf \
-I final_chr2.vcf \
-I final_chr3.vcf \
-I final_chr4.vcf \
-I final_chr5.vcf \
-I final_chr6.vcf \
-I final_chr7.vcf \
-I final_chr8.vcf \
-I final_chr9.vcf \
-I final_chr10.vcf \
-I final_chr11.vcf \
-I final_chr12.vcf \
-I final_chr13.vcf \
-I final_chr14.vcf \
-I final_chr15.vcf \
-I final_chr16.vcf \
-I final_chr17.vcf \
-I final_chr18.vcf \
-I final_chr19.vcf \
-I final_chr20.vcf \
-I final_chr21.vcf \
-I final_chr22.vcf \
-I final_chrX.vcf \
-I final_chrY.vcf \
-O merge.vcf
合并的时候需要注意,vcf文件的顺序跟每个vcf文件里面头文件顺序是相同的。
多个样本的gvcf合并
所以很多以前基于GATK3时代的教程,比如:https://www.jianshu.com/p/840378618a35 就必然过时了,尽管教程写的非常好。
网友评论