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
一、流程概括
- 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
- 由于只是学习操作,而一般全基因组测序结果很大,后续流程比较耗时。所以这里对每个样本测序结果抽取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
方法,结果下载失败了,不知道是不是因为网络的原因。还是推荐第一种方法。
三、原始测序数据质控
1、质控
- 软件:fastq
fastqc -t 10 ./*sub1.fastq.gz -o ./qc.out
-
如果质控结果不好,可进行序列过滤。
- 如上图结果,所有的测序结果基本都合格。除了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)LEADING
与TRAILING
分别表示切除read首尾质量低于5的碱基。
(4)MINLEN
表示若read长度小于25,则跳过。
根据trim的结果,可再次进行fastqc检测。由于原始数据的QC结果基本合格,故后续分析还是基于
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的测序过程可以理解为独立的。
所以ID
就是每条lane的编号(一定确保unique),SM
就是样本名(sample),LB
为构建的文库名,PL
为测序平台,目前主流都是illumina
(2)复杂的测序实验设计包括①同一sample建不同文库,多次测序。
②一个文库包括多个样本(序列所加标签不同)在一条lane里同时测序。如下图是文库里包括2个sample,测了两次情况下的@RG
记录情况
在示例代码中,统一用各自的SRR号代替。具体分析根据实际情况设置。
关于sam/bam文件的意义及格式,可参考之前的笔记https://www.jianshu.com/p/f0f1f293f0bd
五、比对结果bam优化之去重复
1、why
-
由于Optical duplicates: (Illumina)、 Library duplicates (aka PCR duplicates)两种误差因素导致在建库及测序时,导致一些reads含量“假阳性”地增高,会影响后续variant calling的结果(False Positive variant call)
- 因此这一步的目的就是通过一些方法,找到这些“异常表达”的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自己的功能了。
note
- 如上图所示,此时应该执行INDEL Realignment。主要目的是检查是否有不合适的比对结果。
- 因为不同的比对结果,往往会出现不同的变异信息(如下图),而BWA只会从最优比对的角度考虑,可能会没有发现最有可能存在的变异信息。
- 这一步就是使用新的比对算法(GATK),并结合已知变异数据库,对BWA比对结果所产生的变异位置进行局部重比对。
- Re-alignment no longer recommended if the genotyping method used downstream involves local haplotype assembly,例如后面使用的HaplotypeCaller。 所以这一步就省略了。
六、比对结果bam优化之校准碱基质量分数
1、why
- 碱基质量分数就是指测序fastq结果的碱基质量值。
- 校正的前提是测序错误碱基的可能性远远大于基因组变异的概率,或者说物种基因变异很小;把所有与参考基因组不一致的碱基视为测序错误导致(可排除已知的变异记录)。
- 然后根据得到的碱基质量分数,进行转换得到碱基数目,比如说100个质量分数为20(10的-2次方)的碱基=1个错误碱基。
- 最后根据一定的算法/模型,进行质量分数的校正(如下图),具体可深入了解。
- 所以这里强调是碱基质量分数校准这一步适合于变异概率很少,并且有已知参考变异数据库的物种基因组。因此这一步基本上只适合人类的测序数据。
测序的系统误差也是校准的重点之一。每条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)提取变异信息了;
-
如上图是先利用pairHMM算法得到的每个样本的gvcf变异记录,然后再汇总所有样本的信息,最后转为VCF结果。
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行)。
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
功能
(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
功能
2、探索
- 得到高质量的vcf后,就可以基于VCF格式的理解,对该结果进行不同角度的探索,比如2号染色体的特定位点的变异信息;质量值高于100的变异信息......
-
vcftools
软件则提供了分析VCF结果的功能,可进一步深入学习下。http://vcftools.sourceforge.net/