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閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容