美文网首页群体遗传学
群体遗传学一-SNP calling

群体遗传学一-SNP calling

作者: 一直想要成为大牛的科研狗 | 来源:发表于2020-08-15 11:34 被阅读0次

    使用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
    #
    

    相关文章

      网友评论

        本文标题:群体遗传学一-SNP calling

        本文链接:https://www.haomeiwen.com/subject/ritadktx.html