群体遗传学一-SNP calling

使用BWA+samtools+gatk4.0进行SNP calling

首先下载数据
eg:

$ wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_genomic.fna.gz ###ref
###批量下载NGS数据,首先下载RunInfo
#1
prefetch SRR12424925
#2
wget -c https://sra-download.ncbi.nlm.nih.gov/traces/sra62/SRR/012133/SRR12424925(可以写个循环)#eg for a in list; do ***; done

01.align

首先定义相关用到的变量,然后使用baw创建索引之后进行map。

#!/usr/bin/bash
COV=/public/home/*/data/test
REF=$COV/ref/CM3.6.1_pseudomol.fa
SRR1=m1-115
SRR2=m1-116
BAM1=$COV/align/$SRR1.bam
BAM2=$COV/align/$SRR2.bam
R1_1=$COV/fq/${SRR1}.1.fq.gz
R1_2=$COV/fq/${SRR1}.2.fq.gz
R2_1=$COV/fq/${SRR2}.1.fq.gz
R2_2=$COV/fq/${SRR2}.2.fq.gz
VARI=$COV/variant
##bwa比对,samtools排序并构建索引,为了之后更快调用比对文件
mkdir -p $COV/align && cd $COV/align
bwa index $REF
samtools faidx $REF
bwa mem -R "@RG\tID:$SRR1/tSM:$SRR1\tLB:WGS\tPL:Illumina" $REF $R1_1 $R1_2 |samtools sort > $BAM1
bwa mem -R "@RG\tID:$SRR2/tSM:$SRR2\tLB:WGS\tPL:Illumina" $REF $R2_1 $R2_2 |samtools sort > $BAM2
samtools index $BAM1
samtools index $BAM2
mkdir -p $VARI

02.snp calling

对已经map好的文件使用gatk进行snp的calling,新版本gatk4.0已经整合相关软件的所用功能

##SNP calling
#构建.dict文件
gatk --java-options "-Xmx8G -Djava.io.tmpdir=./tmp" CreateSequenceDictionary \
    -R $REF \
    -O $COV/ref/CM3.6.1_pseudomol.dict
#标记PCR重复reads
gatk --java-options "-Xmx8G -Djava.io.tmpdir=./tmp" MarkDuplicates \
    -I $BAM1 -O ${SRR1}_MarkDup.bam \
    -M ${SRR1}.metrics
gatk --java-options "-Xmx8G -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

#-bamout:将一整套经过gatk程序重新组装的单倍体基因型(haplotypes)输出到文件
#-stand-call-conf :低于这个数字的变异位点被忽略,可以设成标准30(默认是10)
gatk --java-options "-Xmx8G -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 "-Xmx8G -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 --java-options '-DGATK_STACKTRACE_ON_USER_EXCEPTION=true' GenomicsDBImport \
    -L chr00 \
    -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
gatk MergeVcfs \
    -I *.vcf.gz...
    -O *.vcf.gz

03.snp_filter

###过滤结果 
# 使用SelectVariants,选出SNP
gatk SelectVariants \
    -select-type SNP \
    -V chr00.vcf.gz \
    -O chr00.snp.vcf.gz

# 为SNP作硬过滤
gatk VariantFiltration \
    -V chr00.snp.vcf.gz \
    --filter-expression "QD < 2.0 || MQ < 40.0 || FS > 60.0 || SOR > 3.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0" \
    --filter-name "Filter" \
    -O chr00.snp.filter.vcf.gz

# 使用SelectVariants,选出Indel
gatk SelectVariants \
    -select-type INDEL \
    -V chr00.vcf.gz \
    -O chr00.indel.vcf.gz

# 为Indel作过滤
gatk VariantFiltration \
    -V chr00.indel.vcf.gz \
    --filter-expression "QD < 2.0 || FS > 200.0 || SOR > 10.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0" \
    --filter-name "Filter" \
    -O chr00.indel.filter.vcf.gz

# 重新合并过滤后的SNP和Indel
gatk MergeVcfs \
    -I chr00.snp.filter.vcf.gz \
    -I chr00.indel.filter.vcf.gz \
    -O chr00.filter.vcf.gz

# 删除无用中间文件
rm -f 

最终获得相关vcf.gz文件

04.snp annotation

first tool

使用VEP完成变异的注释
#!/usr/bin/bash
VEP=/your_path_to/ensembl-vep/vep
$VEP --fasta CM3.6.1_pseudomol.fa \
--vcf --merged --fork 10 --hgvs --force_overwrite --everything \
--offline --dir_cache /your_path_to/ensembl-vep/cachedir \
-i *.vcf.gz \
-o *.VEP.vcf.gz

second tool

使用snpEFF进行变异的注释

编辑.../snpEff/snpEff.config, 在# Databases & Genomes后增加新的物种信息记录

# melon
melon.genome : melon

在.../snpEff/data/新建一个melon文件夹,存入相关参考数据

mkdir -p .../snpEff/data/melon
$ ll data
sequences.fa.gz #参考基因组
genes.gff.gz #注释文件GFF2/3

build建库

java -jar snpEff/snpEff.jar build -gff3 -v melon

使用snpeff进行注释

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