GATK4变异检测(bwa+samtools+Picard+GATK)

一.软件下载安装

🔸bwa:https://github.com/lh3/bwa
安装及命令详解参考:http://starsyi.github.io/2016/05/24/BWA-%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/
🔸samtools:https://github.com/samtools/
🔸Picard:https://github.com/broadinstitute/picard
🔸GATK:https://github.com/broadinstitute/gatk/releases

二.运行流程
2.1 原始数据处理
(1)下机数据过滤和比对

因为下机数据是clean reads,所以省略过滤的步骤,直接使用bwa和参考基因组比对

(a)bwa index
#bwa(version:0.7.17-r1188)
bwa index ref.fa

bwa index选项:
🔹-a BWT构造算法: bwtsw, is or rb2 [auto]

is:用于构建后缀数组的 IS 线性时间算法。简单、速度较快,但不适用于大于 2GB 的基因组。
bwtsw:在 BWT-SW 中实现的算法,对大于10M的基因组才生效。这种方法适用于整个人类基因组。

🔹-p index的前缀 [默认和fasta保持一致]
🔹-b bwtsw算法的block size (仅当-a bwtsw有效) [默认10000000]

(b)bwa alignment
bwa mem -t 10 -M -Y -R '@RG\tID:foo\tPL:Illumina\tSM:example' ref.fa read_1_clean.fq.gz read_2_clean.fq.gz  > sample.sam

选项:
🔹-R设定头文件,ID:通道名或样本名,通过这个信息分组,必须唯一;SM:样本名;LB:文库名;PL:测序平台信息[COMPLETE,ILLUMINA,SANGER]。以上这些信息后续GATK和markduplicate会用到,不可出错。
🔹-M对于一条序列同时比对到基因组不同区域的情况,bwa认为都是最优匹配,但是会与Picard tools不兼容,影响后面GATK检测,这个时候可以设置-M选项,将较短的比对标记为次优,与picard兼容。
🔹-Y把默认的hard clip变为soft clip。hard clip 不会显示不匹配的碱基串,soft clip会显示不匹配的碱基串。
-M -Y参数的详细解释可以参考http://t.zoukankan.com/timeisbiggestboss-p-8856888.html

(2)samtools格式转换
(a)sam转bam格式

bam是二进制文件,运算速度快

#samtools(version:1.9)
samtools view -bS example.sam -o example.bam 
# -b 输出bam格式文件 -S 输入sam格式文件
(b)质控

输出MAPQ≥30的序列

samtools view -h -b -q30 example.bam > example.q30.bam
# -q 比对的最低质量值 -h 输出的文件包含头部信息 -b 输出bam格式文件
(c)排序
samtools sort -@ 5  example.q30.bam >  example.q30.sorted.bam
# @ 线程数
2.2 运行GATK4
(1)Picard去重

在制备文库的过程中,由于PCR扩增过程中会存在一些偏差,也就是说有的序列会被过量扩增。这样,在比对的时候,这些过量扩增出来的完全相同的序列就会比对到基因组的相同位置。而这些过量扩增的reads并不是基因组自身固有序列,不能作为变异检测的证据,因此,要尽量去除这些由PCR扩增所形成的duplicates,这一步可以使用picard-tools来完成。去重复的过程是给这些序列设置一个flag以标志它们,方便GATK的识别。还可以设置 REMOVE_DUPLICATES=true 来丢弃duplicated序列。对于是否选择标记或者删除,对结果应该没有什么影响,GATK官方流程里面给出的例子是仅做标记不删除。这里定义的重复序列是这样的:如果两条reads具有相同的长度而且比对到了基因组的同一位置,那么就认为这样的reads是由PCR扩增而来,就会被GATK标记。

#Picard(version:2.27.1)
java -jar picard.jar MarkDuplicates -I example.q30.sorted.bam -O markdup.bam -M markdup.bam.mat -MAX_FILE_HANDLES 1000 --REMOVE_DUPLICATES false --TMP_DIR /path/to/tmpdir
(2)构建索引

samtools构建索引

samtools index markdup.bam

gatk对参考基因组构建索引

gatk CreateSequenceDictionary -R ref.fa
(3)gatk变异检测
(a)分染色体生成gvcf、vcf文件
#批量生成分染色体生成gvcf的命令
for i in {01..17};do
echo "gatk --java-options \"-Xmx8G -XX:ParallelGCThreads=8 -Djava.io.tmpdir=./tmpdir \" HaplotypeCaller -R ref.fa -I markdup.bam -L chr$i -ERC GVCF -O Chr$i.g.vcf.gz"
done >total.gvcf.sh
bash total.gvcf.sh
#批量生成分染色体生成vcf的命令
for i in {01..17};do echo "gatk --java-options \"-Xmx4G -XX:ParallelGCThreads=8 -Djava.io.tmpdir=./tmpdir \" GenotypeGVCFs -R ref.fa --variant Chr$i.g.vcf.gz -O Chr$i.vcf.gz" ;done  >total.vcf.sh
bash total.vcf.sh

GVCF(Genomic VCF)是一种 VCF,因此基本格式与常规 VCF 相同,但GVCF包含额外信息。参考gvcf文件与vcf文件_卡西莫多的礼物的博客-CSDN博客_gvcf文件

在将多个样本的vcf文件进行合并的时候,需要区分./.和0/0的情况,./.是未检出的基因型,而0/0是未突变的基因型,如果仅使用普通的vcf文件进行合并,那么就无法区分这两种情况,进而对合并结果产生偏差。实际上,我们也可以直接将gvcf文件和vcf文件使用bcftools merge进行merge,但是这样拿到的结果会有偏差,因为vcf文件没有未突变的位点的情况。

image.png
(b)提取SNP
#批量生成分染色体提取SNP的命令
for i in {01..17};do echo "gatk SelectVariants -R ref.fa -V Chr$i.vcf.gz --select-type-to-include SNP -O Chr$i.snp.vcf";done >select_snp.sh
bash select_snp.sh
(c)VariantsFiltration

参考https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7204223/
https://bio-protocol.org/bio101/r9594358
https://gencore.bio.nyu.edu/variant-calling-pipeline-gatk4/

for i in {01..17};do echo "gatk VariantFiltration -R ref.fa -V Chr$i.snp.vcf \
-O Chr$i.snp.filterd.vcf -filter-name \"QD_filter\" -filter \"QD < 2.0\" \
-filter-name \"FS_filter\" -filter \"FS > 60.0\" -filter-name \"MQ_filter\" \
-filter \"MQ < 40.0\" -filter-name \"SOR_filter\" -filter \"SOR > 4.0\" \
-filter-name \"MQRankSum_filter\" -filter \"MQRankSum < -12.5\" \
-filter-name \"ReadPosRankSum_filter\" -filter \"ReadPosRankSum < -8.0\" ";done >filter.snp.sh
bash filter.snp.sh

选项:
-R参考序列
-V输入变异文件
-O输出文件
filter过滤条件
-filter-name被过滤的SNP不会被删除,而是加上标签
过滤指标的含义可参考:
https://gatk.broadinstitute.org/hc/en-us/articles/360035890471?id=11069
https://gencore.bio.nyu.edu/variant-calling-pipeline-gatk4/
测序分析之Variants - 知乎 (zhihu.com)
运行过程中有warning显示undefined variable

image.png

在论坛中搜索后得知,https://gatk.broadinstitute.org/hc/en-us/community/posts/4408733963803-GATK-Variant-Filtration-undefined-variable,这些警告最有可能出现在文件中没有 ReadPosRankSum 或 MQRankSum 值的位置,指出 VariantFiltration 将无法在不存在这些注释的位点上过滤这些注释。这些不是实际的错误消息。

(d)合并vcf文件
#删除被过滤的snp,grep -v意思是显示不包含匹配文本的所有行,”_filter"是上一步给出的标签
 for i in {01..17};do echo "grep -v \"_filter\" Chr$i.snp.filterd.vcf >Chr$i.snp.2.vcf";done >filter2.snp.sh
bash filter2.snp.sh
#将所有过滤后的vcf文件合并成一个文件
gatk MergeVcfs -I Chr01.snp.2.vcf -I Chr02.snp.2.vcf -I Chr03.snp.2.vcf -I Chr04.snp.2.vcf -I Chr05.snp.2.vcf -I Chr06.snp.2.vcf -I Chr07.snp.2.vcf -I Chr08.snp.2.vcf -I Chr09.snp.2.vcf -I Chr10.snp.2.vcf -I Chr11.snp.2.vcf -I Chr12.snp.2.vcf -I Chr13.snp.2.vcf -I Chr14.snp.2.vcf -I Chr15.snp.2.vcf -I Chr16.snp.2.vcf -I Chr17.snp.2.vcf -O Filter.snp.vcf

参考文章:https://zhuanlan.zhihu.com/p/69726572
http://starsyi.github.io/2016/05/25/%E5%8F%98%E5%BC%82%E6%A3%80%E6%B5%8B%EF%BC%88BWA-SAMtools-picard-GATK%EF%BC%89/
https://cloud.tencent.com/developer/article/1720656
http://bio-bwa.sourceforge.net/bwa.shtml
http://t.zoukankan.com/timeisbiggestboss-p-8856888.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容