vcf过滤时GATK和bcftools的index报错及解决方式

gatk报错 An index is required but was not found for file drivingVariantFile。 bcftools报错 index: the file is not BGZF compressed, cannot index

一、报错详情


操作:

对GATK call变异后的vcf文件进行过滤,首先使用了bcftools的vcfutils.pl进行过滤,并使用gzip生成了vcf.gz的压缩文件,之后用GATK对该文件进行过滤。


报错及解决过程:

gatk报错  An index is required but was not found for file drivingVariantFile

这个报错是因为GATK读别的软件生成的vcf.gz文件,需要一个索引

所以使用bcftools建立索引

bcftools index -t filter1.vcf.gz
#-t 建立tbi索引

但此时bcftools报错  index: the file is not BGZF compressed, cannot index

这是因为bcftools只能对bgzip压缩后的文件建立索引,而上面使用的压缩方式是gzip


解决方式:

对文件解压之后重新用bgzip压缩,再建立索引,之后用GATK进行过滤。

file.vcf.gz
#用bgzip重新压缩
bgzip file.vcf
#建索引
bcftools index -t file.vcf.gz
#GATK过滤
java -jar GenomeAnalysisTK.jar VariantFiltration -R ref.fa -V file.vcf.gz --filter-expression "QD < 2.0 || FS > 60.0 || MQ < 40.0 " --cluster-window-size 5 --cluster-size 2 --filter-name my_snp_filter -O filter.vcf.gz

注:可以先用GATK进行过滤,再使用其他软件过滤,无需建立索引


二、总结


1.过滤顺序问题

法一:使用GATK call变异后得到vcf文件,可以先用GATK进行过滤,再使用其他软件过滤,这样能有效避免索引问题,无需建立索引

法二:GATK的缺点是不能指定线程,运行很慢,考虑到速度方面,也可以先使用bcftools、vcftools等进行过滤,之后使用bgzip输出为vcf.gz压缩文件,再使用bcftools建立 tbi 索引,最后再进行GATK的过滤


2.gzip与bgzip压缩问题

由于SNP位点数量巨大,对应VCF文件也非常大,为节省存储空间,最常见的做法就是压缩。bgzip 可以压缩VCF文件,用法如下

bgzip  raw.vcf

压缩之后,原本的raw.vcf文件就变成了raw.vcf.gz文件。压缩后缀为.gz, 如果想要解压缩,有以下两种用法

bgzip -d raw.vcf.gz
gunzip raw.vcf.gz

bgzip的压缩算法和gzip压缩算法有着相似之处,所以对于bgzip压缩的文件,解压缩时除了可以使用bgzip软件本身,还可以使用gunzip进行解压缩。


需要注意的是,两种算法虽然有相似之处,但是还是有本质区别的,在对VCF文件压缩时,不可以使用gzip来代替bgzip。 

gzip压缩的vcf文件就会造成开始的报错,导致GATK或bcftools等其他软件不识别。  bgzip 如果系统中安装了samtools就会有附带安装,不需要额外安装。

解决这种错误建议解压之后重新用bgzip压缩

  • 发表于 2023-12-05 10:01
  • 阅读 ( 2056 )
  • 分类:软件工具

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
星莓
星莓

生物信息工程师

58 篇文章

作家榜 »

  1. omicsgene 691 文章
  2. 安生水 340 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. 红橙子 78 文章
  6. xun 76 文章
  7. rzx 74 文章
  8. CORNERSTONE 72 文章