转载:http://blog.sina.com.cn/s/blog_6721167201018jik.html

Change Logs:

13/01/12: 增加了一篇文献,外加一些无聊的修改。
12/08/20: 修正了一个代码错误;增加了对-rf(Read filters)参数的说明。
12/08/14: 补充了2.x版本有改动的一些地方。
12/08/10: 更正一个错误。
12/11/06:因为后面一直都没什么时间,同时也觉得没有什么好讲的了就一直搁置了,在这边再补充说明一下,其实GATK毕竟只是工具,用着方便的地方拿来用就可以,GATK本身也是为了处理千人基因组的数据才开发的,解决了千人基因组测的很多低覆盖度的样本call出来的snp的假阳性太高问题,同时提出了二代测序技术数据处理的一个框架(有兴趣的可以参考这篇文章http://www.nature.com/doifinder/10.1038/ng.806)

这张图的具体实现就是GATK的best practice。不过框架归框架,但实际操作的时候遇到的数据不同,处理方式也不尽相同,毕竟不是每个人都会去大批量的测低覆盖的样本,而且就我看过的文献来说(当然也可能是我文献看的少),其实用到GATK的不算很多,而用到best practice一整个完整流程的好像还没看到过(大部分也就只用其中个别步骤而已) 修正一下,其实有看到过,例如 Jiao, Y. et al. Genome-wide genetic changes during modern breeding of maize. Nature Genetics 44, 812–815 (2012).

不过因为研究目的不同,实际上只要能达到自己数据要说明的问题,用什么工具并不是那么重要,而工具只是方便操作而已,所以在大家用好工具的同时还是要把重点放在数据本身的意义上面,为什么要做这样的处理,这些处理对我的数据有多大的作用,有时候都值得我们去探究(当然其实结果是最重要的(?),谁管你用了哪些花里胡哨的工具,你能自圆其说就可以(当然要圆的很好),这话我敢乱说= = 还是就当我乱说好了。。。)
随便盗个图,顺祝大家科研愉快,多看文献多看报,少打dota少睡觉。

Part2部分主要讲一下GATK用于Variant Detection的一个完整的官方攻略,这个也是我们用GATK最主要的目的,通过对整个流程的了解,也能更好的掌握GATK的使用方法。

这部分就是官网上所谓的best-practices,所用的流程被用于人的基因组数据的处理,但同样也可以用于其他物种。

关于流程的详细描述:

http://www.broadinstitute.org/gatk/guide/best-practices

现在的版本更新到v4,下面先介绍一些之后会用到的一些概念:

Lane: 测序的最基本单位,可以认为是测序的一个run

Library: 建库时候的一个库,一个library可以包含几个lane,即几个lane测的都是同一个库 (一个库包含多个sample或者其他情况这边就暂时不考虑了,能够大致了解这个概念就可以)

Sample: 用来建库的样,一个Sample可以建多个库 (同上这边只考虑这种情况)

Cohort: 所测的样的一个群体,这个取决于实验设计的目的,例如我们测的是某个物种的一个群体,想看看这个群体的一些性质,这边的cohort就是我们测的这个群体的所有samples,他们之间有一定的相互联系,通过把他们放在一起研究可以得到我们所需要的结果。

为了方便起见,假设我们现在测了一个cohort,里面有3个sample (sample01, sample02, sample03),每个sample建了一个paired-end library,每个库一个lane (多库或者多lane的情况只多一些数据合并的步骤,所以这边就举最简单也是一般测序的时候测的比较多的方式,其他方式可以在此基础上增加一些其他处理即可)。这样我们得到的原始reads文件就有6个,分别是

sample01_1.fq, sample01_2.fq,

sample02_1.fq, sample02_2.fq,

sample03_1.fq, sample03_2.fq,

 

而我们的参考基因组序列名称假设为ref.fasta (注:GATK要求reference sequence的格式是fasta格式的,而且必须以.fa或者.fasta结尾,然后文件还需要经过index,前面已经提过,不再赘述)。

测试用的数据可以从网站上给的地址下载,这边我们只用一些假定的数据来进行说明~

整个流程包括3个阶段,每个阶段又分为好几布,下面一一说明

1) Phase I: Raw data processing (对于mapping结果的处理)

(1)   通过mapping得到原始的mapping结果

我们这边是3个sample,假设我们经过mapping得到的结果为

sample01.bam

sample02.bam

sample03.bam

GATK要求输入文件是BAM格式的,网站上推荐使用bwa进行mapping,bwa速度上比较有优势,而且输出的结果就是SAM格式的,用samtools转换成BAM格式即可,以sample01为例用bwa进行mapping的整个流程代码大致如下:


## step1: 建库,-a参数用来选择建库方式,10M以下基因组用默认
## 的is即可,10M以上的推荐-a设置成bwtsw
bwa index -a is ref.fasta

## step2: 对paired-end的两组reads 分别进行aln
bwa aln ref.fasta sample01_1.fq > sample01_1.sai  
bwa aln ref.fasta sample01_2.fq > sample01_2.sai

## step3: 转换得到SAM文件,注意这边@RG这个tag的设置很重要
bwa sampe -r "@RG\tID:sample01\tLB:sample01\tPL:ILLUMINA\tSM:sample01" \
   ref.fasta sample01_1.sai sample01_2.sai \
   sample01_1.fq sample01_2.fq \
   > sample01.sam

## step4:把SAM格式转换成BAM格式
samtools view -bS sample01.sam -o sample01.bam

## step5:对bam文件进行排序
java -Xmx4g -jar  picard-tools-1.70/SortSam.jar \
           INPUT=sample01.bam \
           OUTPUT=sample01.sort.bam \
           SORT_ORDER=coordinate

这一步对bam文件进行排序的时候用的是picard里面的SortSam这个工具,而不是直接用是samtools来进行sort,因为samtools sort排完序以后不会更新BAM文件的头文件,SO这个tag显示的可能还是unsorted,下游程序处理的时候可能会报错;SORT_ORDER这边设置成coordinate表示按照染色体位置进行排序。

通过上面的流程,我们就得到了一个初步的mapping结果:

sample01.sort.bam

sample02.sort.bam

sample03.sort.bam

 

 

(2)   处理原始的mapping结果

GATK提供了几种不同层次的处理方法,这边只讲一下最好也是最耗时的一种方式,其他的几种在此基础上调整一些步骤即可实现。

Best: multi-sample realignment with known sites and recalibration

同时考虑多个sample来进行本地重排以及校正,下面简单的介绍一下涉及到的几个步骤。

: 下面的有些步骤虽然提到要合并文件,但有的工具本身可以指定多个输入文件的话实际上是不需要专门先去合并的,得到的结果就直接是一个合并好的文件,具体情况请根据实际碰到的为准。

for each sample

    lanes.bam <- merged lane.bam's for sample 

    第一步是把同一个sample测了多个lane的结果进行合并,合并可以用picard里面的MergeSamFiles工具来实现。

例如我们要把lane1.bam, lane2.bam, lane3.bam, lane4.bam合并成sample.bam,可以用


## 合并每个sample的bam文件
java -Xmx4g -jar  picard-tools-1.70/MergeSamFiles.jar \
       INPUT=lane1.bam \
       INPUT=lane2.bam \
       INPUT=lane3.bam \
       INPUT=lane4.bam \
       OUTPUT=sample.bam

因为我们这边每个sample只有一个lane,所以这一步跳过。

    dedup.bam <- MarkDuplicates(lanes.bam)

    这一步是对每个sample的一些重复序列进行一些处理,这些重复的序列可能是因为PCR扩增的时候引入的一些引物序列,容易干扰下游结果,这个操作可以通过picard里面的MarkDuplicates工具实现,MarkDuplicates处理完成不会删除这些reads而是加上一个标签,带有这些标签的reads在后续处理的时候会被跳过。(注:dedup这一步只要在library层面上进行就可以了,例如一个sample如果建了多个库的话,对每个库进行dedup即可,不需要把所有库合成一个sample再进行dedup操作)

以sample01为例,命令行代码如下:


## 用picard里面的MarkDuplicates工具去除PCR duplicates,这一步会生成
## 两个文件,一个dedup好的bam文件以及一个纯文本文件,这边起名叫
## sample01.dedup.metrics,里面包含duplicates的一些统计信息

java –Xmx4g -jar picard-tools-1.70/MarkDuplicates.jar \
       MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=8000 \
       INPUT= sample01.sort.bam \
       OUTPUT= sample01.dedup.bam \
       METRICS_FILE= sample01.dedup.metrics

    realigned.bam <- realign(dedup.bam) [with known sites included if available]

这一步是sample层次的一个本地重排,因为在indel周围出现mapping错误的概率很高,而通过在indel周围进行一些重排可以大大减少由于indel而导致的很多SNP的假阳性,如果已经有一些可靠位点的信息的话 (例如dbsnp的数据),这一步可以只在一些已知的可靠位点周围进行,这样得到的结果比较可靠也比较节省时间;而缺少这些数据的情况下则需要对所有位点都进行这样一个操作。

(题外话:之前版本v3的时候realign是在cohort层次进行的,不过相当耗时耗力,所以到这个版本就废弃了。。。(当然也有一些特例可能需要综合考虑才能得到更好的结果)

realign这一步用的是GATK里面的RealignerTargetCreator和IndelRealigner工具,如果已经有可靠的INDEL位点(如dbsnp数据等等,需要是VCF格式的)信息,可以通过-known参数来进行设置,让realign操作主要集中在这些位点附近,实际情况下可能很多物种并没有这样的参考数据,所以需要对所有INDEL位点进行这样的一个操作:


## 对INDEL周围进行realignment,这个操作有两个步骤,第一步生成需要进行
## realignment的位置的信息,第二步才是对这些位置进行realignment,最后生
## 成一个realin好的BAM文件sample01.realn.bam

java -Xmx4g -jar GenomeAnalysisTK.jar \
           -R ref.fasta \
           -T RealignerTargetCreator \
           -o sample01.realn.intervals \
           -I sample01.dedup.bam

java -Xmx4g -jar GenomeAnalysisTK.jar \
       -R ref.fasta \
       -T IndelRealigner \
       -targetIntervals sample01.realn.intervals \
       -o sample01.realn.bam \
       -I sample01.dedup.bam

     recal.bam <- recal(realigned.bam)

     sample.bam <- realigned.bam

最后一步是对realign得到的结果进行校正,因为mapping得到的结果的分值往往不能反应真实情况下的分值,而只有尽量消除这种偏态才能保证得到的结果的可靠性与正确性,所以如果情况允许的条件下都需要进行这样的一个校正步骤。这样最后我们就得到一个对于每个sample而言最好的处理结果。

校正这一步对低覆盖度的数据比较重要,可以消除很多假阳性;对于高覆盖度(10x~)的数据可以不做这一步,这一步最重要的是有已知的可靠位点作为参考, human因为研究的比较多,所以有很多这样的数据(包括dbsnp的数据等等),而其他的物种则可能缺少这些数据,这个时候我们可以考虑先做一次初步的variants calling,然后筛选出我们认为最可靠的那些位点作为参考位点,用这部分的数据再来进行校正,下面提供一种用来生成参考位点的数据的方法,仅供参考:


## step1: variants calling by GATK
java -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
   -T UnifiedGenotyper \
   -I sample01.realn.bam \
   -o sample01.gatk.raw.vcf \
   -stand_call_conf 30.0 \
   -stand_emit_conf 0 \
   -glm BOTH \
   -rf BadCigar

这边有一个-rf参数,是用来过滤掉不符合要求的reads,这边是把包含错误的Cigar字符串的reads给排除掉,关于Cigar字符串可以参考关于sam文件的说明(The SAM Format Specification),sam文件的第六行就是这边的Cigar字符串,-rf的其他参数可以参考GATK网站Read filters下面的条目http://www.broadinstitute.org/gatk/gatkdocs/

## step2: variants calling by samtools
samtools mpileup -DSugf ref.fasta sample01.realn.bam | \
    bcftools view -Ncvg - \
   > sample01.samtools.raw.vcf

## step3: 选取GATK和samtools一致的结果
java -Xmx4g -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
   -T SelectVariants \
   --variant sample01.gatk.raw.vcf \
   --concordance sample01.samtools.raw.vcf \
   -o sample01.concordance.raw.vcf

## step4:筛选上面得到的结果,这边filter用到的几个标准可以根据实际情况
## 灵活更改,对QUAL值的筛选用的是$MEANQUAL,表示所有QUAL值的平均
## 值,linux底下这个值可以通过第一条命令行得到

## 计算平均值
MEANQUAL=`awk '{ if ($1 !~ /#/) { total += $6; count++ } }
                END { print total/count }' sample01.concordance.raw.vcf`

## 筛选
java -Xmx4g -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
   -T VariantFiltration \
   --filterExpression " QD < 20.0 || ReadPosRankSum < -8.0 || FS > 10.0 || QUAL < $MEANQUAL" \
   --filterName LowQualFilter \
   --missingValuesInExpressionsShouldEvaluateAsFailing \
   --variant sample01.concordance.raw.vcf \
   --logging_level ERROR \
   -o sample01.concordance.flt.vcf

## step5:提取通过筛选标准的位点到结果文件中
grep -v "Filter" sample01.concordance.flt.vcf > sample01.confidence.raw.vcf

最后这个sample01.confidence.raw.vcf的结果就可以当作可靠的参考位点用于后面的分析。

校正这个步骤如果使用的是GATK 1.x版本的话需要使用CountCovariates和TableRecalibration等工具,2.x版本取消了这两个工具而改成BaseRecalibrator,下面都给出命令行代码:


## GATK 1.x版本
## step1:生成校正要用的文件sample01.recal_data.pre.csv
java -Xmx4g -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
   -T CountCovariates \
   -cov ReadGroupCovariate \
   -cov QualityScoreCovariate \
   -cov CycleCovariate \
   -cov DinucCovariate \
   -knownSites sample01.confidence.raw.vcf \
   -I sample01.realn.bam \
   -recalFile sample01.recal_data.pre.csv

## step2:这一步和最后两步也可以跳过,主要作用是生成一系列的统计图表,
## 在做完校正之后可以再次生成上一步的文件,这样可以比较清楚的看到校正
## 前后的差别
java -Xmx4g -jar AnalyzeCovariates.jar \
   -recalFile sample01.recal_data.pre.csv \
   -outputDir sample01.graphs.pre \
   -ignoreQ 5

## step3:进行校正,生成校正后的文件sample01.recal.bam
java -Xmx4g -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
   -T TableRecalibration \
   -I sample01.realn.bam \
   -recalFile sample01.recal_data.pre.csv \
   -o sample01.recal.bam

## step4:再次生成校正数据sample01.recal_data.post.csv
java -Xmx4g -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
   -T CountCovariates \
   -cov ReadGroupCovariate \
   -cov QualityScoreCovariate \
   -cov CycleCovariate \
   -cov DinucCovariate \
   -knownSites sample01.confidence.raw.vcf \
   -I sample01.recal.bam \
   -recalFile sample01.recal_data.post.csv

## step5:生成统计图表
java -Xmx4g -jar AnalyzeCovariates.jar \
   -recalFile sample01.recal_data.post.csv \
   -outputDir sample01.graphs.post \
   -ignoreQ 5

2.x版本改动最大的就是淘汰了原来用于生成校正文件以及进行校正的两个工具:CountCovariatesTableRecalibration,取而代之的是新版本里面的BaseRecalibratorPrintReads这两个工具,主要影响的就是原来的step1以及step3,这边就只给出这两步的代码:


## step1:生成校正要用的文件sample01.recal_data.grp
java -Xmx4g -jar GenomeAnalysisTK.jar \
   -R ref.fasta \
  -T BaseRecalibrator \
  -I sample01.realn.bam \
  -knownSites sample01.confidence.raw.vcf \
  -o sample01.recal_data.grp

这一步会生成好几个文件,包括关于分值的一些统计报告。另外这边也有-cov这个参数,可以像上面一样设置,不管设不设ReadGroupCovariate和QualityScoreCovariate两个是一定会有的。

## step3:进行校正,生成校正后的文件sample01.recal.bam
java -jar GenomeAnalysisTK.jar \
  -R ref.fasta \
  -T PrintReads \
  -I sample01.realn.bam \
  -BQSR sample01.recal_data.grp \
  -o sample01.recal.bam

下面是GATK网站上给出的几张校正前后的比较图:

* 2.x版本的一些工具的使用等有之后再补上,其实大部分处理都集中在了Phase I,后面还有两个Phase一个是正式call SNP和INDEL,还有一个是对最后variants结果的处理(VQSR缺少可信的参考数据的话好像很难得到比较满意的结果),如果开始就有一些已知的可靠variants位点文件的话就可以用GATK提供的QUEUE工具来直接完成整个流程(不用一步一步的敲下去),所有东西等后面更新的时候再补上= =

* 所有高亮代码由发芽网提供

转载于:https://www.cnblogs.com/renping/p/7367759.html

17、GATK使用简介 Part2/2相关推荐

  1. 机器学习17:Faster R-CNN简介

    机器学习17:Faster R-CNN简介(转载整理) 知乎上的这篇文章对于Faster R-CNN介绍的非常详细:知乎文章链接,这篇文章比较偏重于Faster R-CNN的原理解释,本文主要整理了F ...

  2. 16、GATK使用简介 Part1/2

    转载:http://blog.sina.com.cn/s/blog_6721167201018fyw.html GATK (全称The Genome Analysis Toolkit)是Broad I ...

  3. springmvc(17)异步消息简介(部分)

    [0]README 1)本文旨在 intro 异步消息的 相关基础知识: [1]intro [1.1]发送消息 1)intro:间接性是异步消息的关键所在: 2)当一个应用向另一个应用发送消息时,两个 ...

  4. 2018-5-22-Python全栈开发day9-Python开发课程简介part2

    1.Python安装 1.1 目前学习主流是使用Python3,在安装时需要点击add to the PATH环境变量.在python2时如果没有设置环境变量,在命令符下每次需要找到python所在路 ...

  5. java grizzly_Grizzly简介

    作为Java EE Web层面的最前端,HTTP引擎是负责接收客户请求的最开始的部分,这部分的性能在很大程度上决定了整个Java EE产品的性能和可扩展性.回顾现有的J2EE产品,大部分的HTTP引擎 ...

  6. python课件 gitbook_gitbook使用教程

    通过NPM安装 安装 GitBook 的最好办法是通过 NPM.在终端提示符下,只需运行以下命令即可安装 GitBook: $ npm install gitbook-cli -g gitbook-c ...

  7. 收集的计算机编程电子书目录,仅供日后查阅方便

    本人有收集电子书的癖好.每日在网上收集经典的电子书籍,尤其喜欢原版的,看起来舒服.不过总是心血来潮,当时下载后瞅几眼,之后就束之高阁,再也不问津了.很为此苦恼,过后找某本书时也总是不知道在哪,为了查找 ...

  8. 用Python写出Gameboy模拟器,还能训练AI模型:丹麦小哥的大学项目火了

      视学算法分享   来源 | 机器之心 [导读]感觉用 Atari 游戏研究人工智能有点「不够接地气」?现在我们可以使用 Gameboy 模拟器了. 对于很多 80 后.90 后来说,任天堂 Gam ...

  9. Playmaker Input篇教程之Playmaker购买下载和导入

    Playmaker Input篇教程之Playmaker购买下载和导入 Playmaker Input篇认识Playmaker Playmaker是Unity的插件,其标志如图1-1所示.开发者使用它 ...

最新文章

  1. 基于REST的MVC架构设计与实现
  2. css面试基础知识,CSS知识点与面试题解析
  3. 复制活动记录记录的最简单方法是什么?
  4. 李宏毅机器学习作业1:预测PM2.5(含训练数据)
  5. 个人项目api接口_5个免费有趣的API,可用于学习个人项目等
  6. c++远征之模板篇——函数模板、类模板
  7. CCF业务总部和学术交流中心落户苏州相城
  8. 剑指offer---二叉树的镜像
  9. 关于EasyUI中DataGrid控件的一些使用方法总结
  10. EasyUI框架介绍
  11. InTouch 如何备份驱动的通信配置
  12. w7系统您的计算机无法启动,Windows7旗舰版启动不了怎么办?电脑无法正常启动Windows7解决方法...
  13. 基于pandas实现K折交叉验证数据集划分
  14. about-page
  15. 手机显示主服务器连接异常怎么办,手机主服务器连接配置异常
  16. 获取淘宝商品分类详情API,抓取淘宝全品类目API接口分享(代码展示、参数说明)
  17. 启动监听时的XDB、XPT和PLSExtProc服务的介绍
  18. Rational统一建模过程的十大要素
  19. 中国大陆收货地址智能解析
  20. 多组input文件,每组 multiple选择多张图片上传可增删其中任意一张图片,用formData对象实现;(ajax做异步,自己做延时同步)

热门文章

  1. 自媒体运营教程:关于百家号内容质量的一些解析,新手必看!
  2. 人群环境中基于深度强化学习的移动机器人避障算法
  3. 输电线路巡检机器人PPT_常见的电力行业智能巡检方案.ppt
  4. 关于嵌入式Qt5配置环境变量导致鼠标显示与隐藏
  5. 2023年除了百度还有哪些搜索引擎推荐?
  6. juce: 跨平台的C++用户界面库
  7. Win10 补丁更新后 VMware 提示升级但仍打不开如何解决
  8. web前端基础——第五章
  9. 什么是wiki?WikiWikiWeb 中文介绍
  10. DC-DC上电时电压输出尖峰电压