3. SNP Calling

以GATK流程为例,简单来说,SNP Calling主要包括以下几步:

1. 给参考基因组建立索引:samtools faidx、bwa index, gatk CreateSequenceDictionary
2. 比对到参考基因组,生成SAM文件:bwa mem
3. 排序并生成BAM文件,并对BAM文件进行PCR重复标记(这一步生成MarkDup.bam):samtools sort、gatk MarkDuplicates
4. 对MarkDup.bam建立索引:samtools index
5. SNP Calling(产生gVCF文件):gatk HaplotypeCaller
6. 合并多个样本gVCFs,生成VCF文件:gatk GenomicsDBImport、gatk GenotypeGVCFs

  1. (未完待续)

SNP Calling的基本步骤

  1. 比对到参考基因组;
  2. 找到差异。

可能遇到的问题:
a.比对位置是否唯一?
*Reads很短
*基因组很复杂
b.测序错误?
*Reads数量大

  1. 使用软件:GATK (Genome Analysis Toolkit)


    GATK
  • GATK主要包括以下几种流程:


    GATK主要流程
  • 当进行BSA-seq分析时,主要使用Germline SNPs & Indel流程:


    GATK-Germline SNPs & Indel pipeline

    3.1 GATK语法结构:

gatk ToolName --argument-name value
#argument names follow a "kebab" convention,即开头两个破折号,中间用单个破折号隔开

#添加Java参数,需要将参数写在双引号内,"-Xmx"指定了内存分配的数量:
gatk --java-options "-Xmx4G" [program arguments]

#一个栗子:
gatk HaplotypeCaller -R reference.fasta -I sample1.bam -O variants.vcf -ERC GVCF

#若使其更可读,可以用反斜杠隔开:
gatk HaplotypeCaller \
    -R reference.fasta \
    -I sample1.bam \
    -O variants.g.vcf \
    -ERC GVCF

一个实操:

拿SARS-CoV作为参考序列,新冠病毒测序数据作为练手:
1.创建环境

conda create -n SNPCalling gatk4 bwa samtools vcftools freebayes bcftools snpeff
conda activate SNPCalling

2.序列下载与预处理:

mkdir 2019-CoV
cd 2019-CoV/
mkdir ref
#参考基因组选用SARS序列,命名为sars_seq.fasta
mkdir raw_data
cd raw_data/
prefetch SRR11085733 -O ./
prefetch SRR11092056 -O ./

fastq-dump --split-files ./SRR11085733.sra
fastq-dump --split-files ./SRR11092056.sra

3.SNP calling
首先用bwa进行序列比对,产生bam文件,再进行SNP calling。目前,能够进行SNP calling的主流软件包括:GATK、bcftools,和freebayes,分别用这三款软件进行SNP calling,流程上参考了:

#!/usr/bin/bash
##定义变量
COV=/home/Leon_Yang/data/2019-CoV
REF=$COV/ref/sars_seq.fasta
SRR1=SRR11085733
SRR2=SRR11092056
BAM1=$COV/align/$SRR1.bam
BAM2=$COV/align/$SRR1.bam
R1_1=$COV/raw_data/${SRR1}_1.fastq
R1_2=$COV/raw_data/${SRR1}_2.fastq
R2_1=$COV/raw_data/${SRR2}_1.fastq
R2_2=$COV/raw_data/${SRR2}_2.fastq
TAG1="@RG\tID:$SRR1\tSM:$SRR1\tLB:$SRR1"
TAG2="@RG\tID:$SRR2\tSM:$SRR2\tLB:$SRR2"
VARI=$COV/variant

##bwa比对,samtools排序并构建索引,为了之后更快调用比对文件
mkdir -p $COV/align && cd $COV/align
bwa index $REF
samtools faidx $REF
bwa mem -R $TAG1 $REF $R1_1 $R1_2 | samtools sort > $BAM1
bwa mem -R $TAG2 $REF $R2_1 $R2_2 | samtools sort > $BAM2
samtools index $BAM1
samtools index $BAM2

mkdir -p $VARI

##SNP calling
##第一种方法:GATK4(版本4.1.4.1)
#注意:使用GATK之前,需要先建立参考基因组索引文件.dict和.fai
#.dict中包含了基因组中contigs的名字,也就是一个字典;
#.fai也就是fasta index file,索引文件,可以快速找出参考基因组的碱基,由samtools faidx构建
#构建.dict文件(原来要使用picard的CreateSequenceDictionary模块,但是现在gatk整合了此模块,可以直接使用)
gatk --java-options "-Xmx8G -Djava.io.tmpdir=./tmp" CreateSequenceDictionary \
    -R $REF \
    -O $COV/ref/sars_seq.dict

#标记PCR重复reads
gatk --java-options "-Xmx20G -Djava.io.tmpdir=./tmp" MarkDuplicates \
    -I $BAM1 -O ${SRR1}_MarkDup.bam \
    -M ${SRR1}.metrics
gatk --java-options "-Xmx20G -Djava.io.tmpdir=./tmp" MarkDuplicates \
    -I $BAM2 -O ${SRR2}_MarkDup.bam \
    -M ${SRR2}.metrics

#用samtools对标记后的文件创建索引
samtools index ${SRR1}_MarkDup.bam
samtools index ${SRR2}_MarkDup.bam

#gatk开始:必选 -I -O -R,代表输入、输出、参考
#接下来可以按照字母顺序依次写出来,这样比较清晰
#-bamout:将一整套经过gatk程序重新组装的单倍体基因型(haplotypes)输出到文件
#-stand-call-conf :低于这个数字的变异位点被忽略,可以设成标准30(默认是10)
gatk --java-options "-Xmx20G -Djava.io.tmpdir=./tmp" HaplotypeCaller \
    -R $REF \
    -I ${SRR1}_MarkDup.bam -O ${VARI}/${SRR1}_gatk.gvcf \
    --emit-ref-confidence GVCF \
    -stand-call-conf 30
gatk --java-options "-Xmx20G -Djava.io.tmpdir=./tmp" HaplotypeCaller \
    -R $REF \
    -I ${SRR2}_MarkDup.bam -O ${VARI}/${SRR2}_gatk.gvcf \
    --emit-ref-confidence GVCF \
    -stand-call-conf 30

#通常,GATK的HaplotypeCaller流程跑完后,得到的是单个样本的gVCF文件,即全基因组层面的变异信息,根据需要进行样本间gVCF文件的合并,并转化为VCF文件:
#合并多样本gVCF文件
gatk GenomicsDBImport \
    -L 1 \
    -V ${VARI}/${SRR1}_gatk.gvcf \
    -V ${VARI}/${SRR2}_gatk.gvcf \
    --genomicsdb-workspace-path $VARI/vcfdb
#gVCF转为VCF
gatk GenotypeGVCFs \
    -R $REF \
    -V gendb://$VARI/vcfdb \
    -O ${VARI}/HaplotypeCaller_gatk.vcf

##第二种方法:bcftools
#首先用samtools mpileup分析参考序列上每个碱基位点的比对结果,并生成VCF文件;
#再使用bcftools对VCF文件进行SNP calling 
samtools mpileup -uvf $REF $BAM1 $BAM2 | bcftools call -vm -Oz > ${VARI}/bcftools.vcf.gz
#参数说明:samtools: -v, 进行基因分型,结果输出到VCF格式,默认输出bgzip压缩格式文件,加-u后,不进行bgzip压缩,用于管道输入下一个命令
#参数说明:samtools: -f, 输入参考基因组序列fasta文件,fasta文件必须经过faidx产生fai索引文件
#参数说明:bcftools: -v, 仅输出变异位点信息,-m, 适合多种allele的算法,适合多样本,与-c只能二选一;
#参数说明:bcftools: -Oz, 设置输出文件格式,z为压缩VCF格式

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

推荐阅读更多精彩内容