2023-04-07

重测序分析-使用GATK进行SNP和INDEL检测

GATK 是 Broad 开发的用于二代测序数据变异检测的软件,后续推广到
动植物研究中,是目前最广泛使用的变异检测软件。本部分介绍如何使
用 GATK 进行 SNP 和 INDEL 检测及过滤。

• 软件:
GATK
• 文件准备:
基因组文件:genome.fasta
比对结果文件:S1.sort.markdup.bam
• 参考脚本:
第一步:创建 tmp 目录

创建临时文件目录

$ mkdir tmp/
第二步:每个样品进行 HaplotypeCaller 变异检测, 基因组较小时,可以
整个基因组进行变异检测;基因组较大时,建议分染色体进行变异检测,
下面为分染色体运行的示例:

创建S1样品分析结果目录

$ mkdir S1

## S1样品 chr1染色体 $ gatk --java-options "-Xmx10g -Djava.io.tmpdir=./tmp" \ #设置java参数 HaplotypeCaller \ -R ../01.ref/genome.fasta \ # 参考基因组路径 -I ../02.mapping//S1.sort.markdup.bam \ # bam文件路径 -L chr1 \ # 指定染色体名称 -ERC GVCF \ # 输出GVCF文件 -O S1/S1.chr1.g.vcf.gz \ # 指定输出结果 1>S1/S1.chr1.HC.log 2>&1 # 保留日志文件

## S1样品 chr2染色体 $ gatk --java-options "-Xmx10g -Djava.io.tmpdir=./tmp" \ HaplotypeCaller \ -R ../01.ref/genome.fasta \ -I ../02.mapping//S1.sort.markdup.bam \ -L chr2 \ -ERC GVCF \ -O S1/S1.chr2.g.vcf.gz \ 1>S1/S1.chr2.HC.log 2>&1

第三步:多样本 gvcf 变异检测(分染色体)

## 生成chr1染色体map文件 $ ls ./*/*.chr1.g.vcf.gz | awk -F"/" '{print $2"\t"$0}' > gvcf.chr1.map $ cat gvcf.chr1.map S1 ./S1/S1.chr1.g.vcf.gz S2 ./S2/S2.chr1.g.vcf.gz

## 生成chr1染色体的genomeDB $ gatk --java-options "-Xmx10g -Djava.io.tmpdir=./tmp \ -DGATK_STACKTRACE_ON_USER_EXCEPTION=true" \ GenomicsDBImport \ --sample-name-map gvcf.chr1.map \ # 指定map文件名称 --genomicsdb-workspace-path genomeDB.chr1 \ # genomeDB目录名称 -L chr1 \ # 指定染色体 --reader-threads 1 \ # 线程数 --batch-size 50 \ # 每次读取文件个数 --tmp-dir ./tmp \ 1>chr1.GenomicsDBImport.log 2>&1

## 群体变异检测 $ gatk --java-options "-Xmx10g -Djava.io.tmpdir=./tmp" \ GenotypeGVCFs \ -R ../01.ref/genome.fasta \ -V gendb://genomeDB.chr1 \ -O chr1.raw.vcf.gz \ 1>chr1.GenotypeGVCFs.log 2>&1

第四步:分染色体 vcf 文件合并成全基因组 vcf 文件

## 生成vcf列表文件 $ awk '{print $1".raw.vcf.gz"}' chr.list > raw_vcf.list $ cat raw_vcf.list chr1.raw.vcf.gz chr2.raw.vcf.gz $ gatk --java-options "-Xmx10g -Djava.io.tmpdir=./tmp" \ MergeVcfs \ -I raw_vcf.list \ -O all.merge_raw.vcf

第五步:分别提取 SNP 和 INDEL 并过滤
### 提取SNP $ gatk --java-options "-Xmx4g -Djava.io.tmpdir=./tmp" \ SelectVariants \ -R ../01.ref/genome.fasta \ -V all.merge_raw.vcf \ --select-type SNP \ -O all.raw.snp.vcf

### 过滤SNP(Filter列加标记) $ gatk --java-options "-Xmx4g -Djava.io.tmpdir=./tmp" \ VariantFiltration \ -R ../01.ref/genome.fasta \ -V all.raw.snp.vcf \ --filter-expression "QD < 2.0 || MQ < 40.0 || FS > 60.0 \ || SOR > 3.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0" \ --filter-name 'SNP_filter' \ -O all.filter.snp.vcf

### 提取过滤好的SNP $ gatk --java-options "-Xmx4g -Djava.io.tmpdir=./tmp" \ SelectVariants \ -R ../01.ref/genome.fasta \ -V all.filter.snp.vcf \ --exclude-filtered \ -O all.filtered.snp.vcf

### 提取INDEL $ gatk --java-options "-Xmx4g -Djava.io.tmpdir=./tmp" \ SelectVariants \ -R ../01.ref/genome.fasta \ -V all.merge_raw.vcf \ --select-type INDEL \ -O all.raw.indel.vcf

### 过滤INDEL(Filter列加标记) $ gatk --java-options "-Xmx4g -Djava.io.tmpdir=./tmp" \ VariantFiltration \ -R ../01.ref/genome.fasta \ -V all.raw.indel.vcf \ --filter-expression "QD < 2.0 || FS > 200.0 || SOR > 10.0 \ || MQRankSum < -12.5 || ReadPosRankSum < -8.0" \ --filter-name 'INDEL_filter' \ -O all.filter.indel.vcf

### 提取过滤好的INDEL $ gatk --java-options "-Xmx4g -Djava.io.tmpdir=./tmp" \ SelectVariants \ -R ../01.ref/genome.fasta \ -V all.filter.indel.vcf \ --exclude-filtered \ -O all.filtered.indel.vcf

你可能感兴趣的:(2023-04-07)