GATK4流程学习之DNA-Seq variant calling(Germline:SNP+INDEL)

GATK4流程学习之背景知识与前期准备 -
GATK4流程学习之DNA-Seq variant calling(Germline:SNP+INDEL) -
GATK4流程学习之RNA-Seq variant calling(SNP+INDEL) -
补:Mutect2+scRNAseq+cancer cell -

从四个样本(human sample)的全基因组测序(WGS)结果fastq.gz开始,通过GATK Best Practices系列分析,得到基于参考基因组的样本SNP+INDEL变异信息,以VCF文件为最终结果。笔记中主要使用之前搭建的conda环境

conda activate GATK
mkdir dna-seq
cd dna-seq
GATK Best Practices

一、流程概括

  • 1、下载原始测序文件fastq.gz。如果下载到的是sra格式,还需要进行一步转换操作。
  • 2、对fastq.gz进行质控。如有必要,还要进行必要的过滤。
  • 3、测序信息比对到参考基因组,得到原始的bam格式文件。
  • 4、对比对结果的bam文件进行“优化”。主要包括去重复与校准碱基质量分数两步。
  • 5、根据优化好的多样本bam结果进行variant calling,最终得到VCF结果。

二、下载数据

示例数据来自D. melanogaster WGS paired-end Illumina data with NCBI accessions SRR1663608,SRR1663609, SRR1663610, SRR1663611, corresponding to samples ZW155, ZW177, ZW184, and ZW185 respectively.

法1、直接下载fastq.gz格式(推荐)

  • 数据源来自EBI,https://www.ebi.ac.uk/ena/browser/view/SRR1663608
  • 使用软件aspera-cli
mkdir raw_fq
cd raw_fq
cat > fq.txt
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/008/SRR1663608/SRR1663608_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/008/SRR1663608/SRR1663608_2.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/009/SRR1663609/SRR1663609_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/009/SRR1663609/SRR1663609_2.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/000/SRR1663610/SRR1663610_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/000/SRR1663610/SRR1663610_2.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/001/SRR1663611/SRR1663611_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR166/001/SRR1663611/SRR1663611_2.fastq.gz

cat fq.txt |while read id
do
ascp -QT -l 300m -P33001  \
-i ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh   \
era-fasp@$id  .
done
download result
  • 由于只是学习操作,而一般全基因组测序结果很大,后续流程比较耗时。所以这里对每个样本测序结果抽取10%序列进行演示。
  • 软件:seqtk
mkdir ../raw_fq_sub
ls *fastq.gz | cut -d "." -f 1 > sample.txt
cat sample.txt | while read id 
do
seqtk sample ${id}.fastq.gz 0.1 | gzip > ../raw_fq_sub/${id}_sub1.fastq.gz
done

ls lh

法2、下载sra格式,再转为fastq.gz

  • 数据源来自NCBI,https://www.ncbi.nlm.nih.gov/sra/?term=SRR1663608
  • 使用软件 sra-tools ,可直接根据提供的SRR号下载
mkdir raw_fq
cd raw_fq
cat fq.txt
prefetch SRR1663608
prefetch SRR1663609
prefetch SRR1663610
prefetch SRR1663611
#格式转换
fastq-dump --split-files *.sra --gzip 

试了prefetch方法,结果下载失败了,不知道是不是因为网络的原因。还是推荐第一种方法。

image.png

三、原始测序数据质控

1、质控

  • 软件:fastq
fastqc -t 10 ./*sub1.fastq.gz -o  ./qc.out
  • 如果质控结果不好,可进行序列过滤。


    image.png
  • 如上图结果,所有的测序结果基本都合格。除了read后面的碱基测序质量不咋样,因此也可不进行过滤。
  • 如果需要过滤的话,软件有很多,这里使用的是trimmomatic
mkdir ../clean_fq
ls *sub1.fastq.gz  |cut -d"_" -f 1 | cut -d"/" -f 2 | uniq| while read  id
do
trimmomatic PE -phred33  -threads 10 \
${id}_1_sub1.fastq.gz ${id}_2_sub1.fastq.gz \
../clean_fq/out.${id}_1_sub1.fastq.gz ../clean_fq/out.trim.${id}_1_sub1.fastq.gz \
../clean_fq/out.${id}_2_sub1.fastq.gz ../clean_fq/out.trim.${id}_2_sub1.fastq.gz \
ILLUMINACLIP:/home/shensuo/biosoft/Trimmomatic/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
SLIDINGWINDOW:4:5 LEADING:5 TRAILING:5 MINLEN:25
done
#out***文件为过滤结果
#out.trim***文件为被去除点的不合格序列信息
  • 过滤参数释义
    (1)ILLUMINACLIP是为了删除fastq里的接头信息。在手动安装trimmomatic软件时,可找到提供的参考接头信息。
    (2)SLIDINGWINDOW:当检测到某read序列出现连续4个碱基时,把包括这4个碱基在内的后面所有碱基切除掉。
    (3)LEADINGTRAILING分别表示切除read首尾质量低于5的碱基。
    (4)MINLEN表示若read长度小于25,则跳过。

根据trim的结果,可再次进行fastqc检测。由于原始数据的QC结果基本合格,故后续分析还是基于raw_fq_sub文件夹的结果进行分析。

raw_fq_sub

四、测序序列比对到参考基因组

  • 软件:bwa 【better for DNA-seq】
mkdir bam
#参考数据库索引文件
#由于人类基因组较大,故建索引较耗时,大概需要1-2h。因此在准备工作时已建好
BWA_INDEX=/home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/bwa_index/gatk_hg38
ls ./raw_fq_sub/*gz | cut -d"/" -f 3 | cut -d"_" -f 1 | uniq | while read  id
do
bwa mem -t 30 -M  -R "@RG\tID:${id}\tSM:${id}\tLB:${id}\tPL:Illumina" $BWA_INDEX \
./raw_fq_sub/${id}_1_sub1.fastq.gz ./raw_fq_sub/${id}_2_sub1.fastq.gz | \
samtools view -Sb - > ./bam/${id}.bam ;\
samtools sort -@ 10 -m 4G -O bam -o ./bam/${id}.sorted.bam  ./bam/${id}.bam 
done
#先利用bwa比对得到sam文件,再利用samtools转为bam二进制文件

  • bwa参数解释
    (0)mem Maximal Exact Match:Reports only one alignment for each read
    (1)-M表示如果一条read的不同部分有不同的最合适比对位点,则分别记录各个part的最佳位点。
    (2)-t表示多线程比对
    (3)-R表示为测序结果补充read group信息@RG,再后续操作步骤中起到重要作用,因此着重说明下
  • @RG
    (1)一般理想NGS测序过程是:一张测序玻片有8条lane,每条lane为1个样本的1个文库进行测序,每条lane的测序过程可以理解为独立的。
    image.png

    所以ID就是每条lane的编号(一定确保unique),SM就是样本名(sample),LB为构建的文库名,PL为测序平台,目前主流都是illumina
    @RG

    (2)复杂的测序实验设计包括①同一sample建不同文库,多次测序。
    情况1

    ②一个文库包括多个样本(序列所加标签不同)在一条lane里同时测序。如下图是文库里包括2个sample,测了两次情况下的@RG记录情况
    情况2

在示例代码中,统一用各自的SRR号代替。具体分析根据实际情况设置。
关于sam/bam文件的意义及格式,可参考之前的笔记https://www.jianshu.com/p/f0f1f293f0bd

五、比对结果bam优化之去重复

1、why

image.png
  • 由于Optical duplicates: (Illumina)、 Library duplicates (aka PCR duplicates)两种误差因素导致在建库及测序时,导致一些reads含量“假阳性”地增高,会影响后续variant calling的结果(False Positive variant call)


    image.png
  • 因此这一步的目的就是通过一些方法,找到这些“异常表达”的read,并进行去重处理至一个正常的水平。

2、how

  • 软件:GATK4的MarkDuplicates
cd bam
ls *sorted.bam | cut -d"." -f 1-2 | while read id
do
gatk MarkDuplicates \
-I ${id}.bam \
-O ${id}.dedup.bam \
-M ${id}.dedup_metrics.txt ; \
samtools index ${id}.dedup.bam 
done

rm *[0-9].bam
rm *[0-9].sorted.bam

其实GATK4的MarkDuplicates功能是来自Picard软件,在4.0版本时,将功能集成到gatk里了,便于用户使用。在后面的步骤中,基本上用的都是GATK自己的功能了。

image.png

note

  • 如上图所示,此时应该执行INDEL Realignment。主要目的是检查是否有不合适的比对结果。
  • 因为不同的比对结果,往往会出现不同的变异信息(如下图),而BWA只会从最优比对的角度考虑,可能会没有发现最有可能存在的变异信息。
  • 这一步就是使用新的比对算法(GATK),并结合已知变异数据库,对BWA比对结果所产生的变异位置进行局部重比对。
  • Re-alignment no longer recommended if the genotyping method used downstream involves local haplotype assembly,例如后面使用的HaplotypeCaller。 所以这一步就省略了。
    image.png

六、比对结果bam优化之校准碱基质量分数

1、why

  • 碱基质量分数就是指测序fastq结果的碱基质量值。
  • 校正的前提是测序错误碱基的可能性远远大于基因组变异的概率,或者说物种基因变异很小;把所有与参考基因组不一致的碱基视为测序错误导致(可排除已知的变异记录)。
  • 然后根据得到的碱基质量分数,进行转换得到碱基数目,比如说100个质量分数为20(10的-2次方)的碱基=1个错误碱基。
  • 最后根据一定的算法/模型,进行质量分数的校正(如下图),具体可深入了解。
  • 所以这里强调是碱基质量分数校准这一步适合于变异概率很少,并且有已知参考变异数据库的物种基因组。因此这一步基本上只适合人类的测序数据。
    image.png

测序的系统误差也是校准的重点之一。每条lane的测序过程是相对独立的,即需要分别对来自不同lane的测序结果单独校正,这也是之前在生成sam文件,需要添加@RG的原因。

2、how

  • 软件:GATK4
  • 分为两步,首先BaseRecalibrator利用已有的snp数据库,建立相关性模型,产生重校准表( recalibration table),输入已知的变异位点数据库,用于屏蔽那些不需要重校准的部分。
  • 然后ApplyBQSR根据上一步得到的模型对原始碱基质量分数进行调整,且只会调整非已知SNP区域。
ls *sorted.dedup.bam | cut -d"." -f 1-3 | while read id
do
gatk BaseRecalibrator \
-I ${id}.bam \
-R /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/Homo_sapiens_assembly38.fasta \
--known-sites /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/dbsnp_146.hg38.vcf.gz \
--known-sites /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz \
--known-sites /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/1000G_phase1.snps.high_confidence.hg38.vcf.gz \
-O ${id}.recal_data.table ; \
gatk ApplyBQSR \
--bqsr-recal-file ${id}.recal_data.table \
-R /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/Homo_sapiens_assembly38.fasta \
-I ${id}.bam \
-O ${id}.recal.bam
done

rm *dedup.bam*

六、Varint calling

  • 在完成上述的处理后,就可以对每个样本的比对结果(*.bam)提取变异信息了;


    image.png
  • 如上图是先利用pairHMM算法得到的每个样本的gvcf变异记录,然后再汇总所有样本的信息,最后转为VCF结果。


    image.png

step1 对每个样本产生 gvcf 文件(十分耗时,建议后台运行)

mkdir ../vcf
cd ../vcf

nohup ls ../bam/*.recal.bam | cut -d"/" -f 3 | cut -d"." -f 1 | while read id
do
gatk HaplotypeCaller \
--native-pair-hmm-threads 10 \
-R /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/Homo_sapiens_assembly38.fasta \
--dbsnp /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/dbsnp_146.hg38.vcf.gz \
-I ../bam/${id}.sorted.dedup.recal.bam \
--minimum-mapping-quality 30 \
-ERC GVCF \
-O ${id}.g.vcf
done > log.out 2>&1 &
#花费了4.5h

--dbsnp参数表示如果有与参考变异数据库一致的变异记录,则将数据库该记录的ID编号整合到gvcf里(vcf格式的第2行)。

image.png

step2 合并gvcf,combine g.vcf files


gatk CombineGVCFs \
-R /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/Homo_sapiens_assembly38.fasta \
--variant SRR1663608.g.vcf \
--variant SRR1663609.g.vcf \
--variant SRR1663610.g.vcf \
--variant SRR1663611.g.vcf \
-O SRR4.g.vcf

step3 转为vcf,joint variant calling with GenotypeGVCFs

gatk GenotypeGVCFs \
-R /home/shensuo/biosoft/GATK/gatk-4.1.9.0/bundle/hg38/Homo_sapiens_assembly38.fasta \
-V SRR4.g.vcf \
-stand-call-conf 5 \
-O SRR4.vcf

七、之后的处理(未代码演示)

1、过滤

得到原始VCF文件后,首先要过滤到低质量的Variant。有如下两种方法

(1)硬过滤
  • 根据VCF记录的各个角度描述的变异评价信息指标进行过滤
  • gatk的VariantFiltration功能
    image.png
(2)软过滤
  • Machine learning model, recommended instead of hard (threshold-based) filtering when a set of true, reliable variants is available。
  • 当得到的原始VCF文件里包含一些与参考变异数据库相同的calling时。可通过对这些variant的指标情况建立模型,去评价raw vcf里未知的变异记录。
  • gatk的VariantRecalibrator, ApplyVQSR功能
    image.png

2、探索

  • 得到高质量的vcf后,就可以基于VCF格式的理解,对该结果进行不同角度的探索,比如2号染色体的特定位点的变异信息;质量值高于100的变异信息......
  • vcftools软件则提供了分析VCF结果的功能,可进一步深入学习下。http://vcftools.sourceforge.net/
    image.png

你可能感兴趣的:(GATK4流程学习之DNA-Seq variant calling(Germline:SNP+INDEL))