一、原始数据下载
如果是从测序公司拿到数据,一般会得到处理过的fastq格式,而我们在此以SRA为数据源获得原始数据。以PRJNA669198这个项目为例,我们下载SRR12846241,原始数据2.76Gb,样本来自31岁的男性colon,患有林奇综合征(Lynch syndrome,或称HNPCC,遗传性非息肉性大肠癌),测序平台是Illumina,双端测序,以上是基本信息。
1 | prefetch SRR12846241 |
注:prefetch是sratoolkit中的一个程序,用于从SRA数据库下载测序数据,以上是下载单个文件,若要下载多个文件,可以在SRA数据库的原始数据页面获取Accession List (SRR_Acc_List.txt),批量下载命令如下:
1 | prefetch --option-file SRR_Acc_List.txt |
使用prefetch命令下载,数据将默认储存在~/ncbi/public/sra/目录下。
二、原始数据转换
下载完成后,我们获得的原始数据是SRA格式(SRR12846241.sra),需要首先使用sratoolkit转换为fastq格式。
1 | fastq-dump --split-3 ./SRR12846241.sra |
解释一下,对于双端测序,使用–split-3参数,将生成1.fastq和2.fastq两个文件;对于单端测序,需要去掉该参数,只生成一个.fastq文件。
三、测序数据质控
在进行下一步之前,我们先建立一些必要的目录,以便对后续的数据进行分类
1 | mkdir {fastq,qc,bam,nodup} |
如要查看数据质量,我们可以使用经典的程序fastqc,语法如下:
1 | fastqc -o ./qc -t 4 ./fastq/*.fastq |
fastqc是用于查看数据质量的,打开生成的.html文件可以看到,这个数据的质量是相当好的,这得益于近年来测序技术的巨大进步。
数据质控的部分我们可以使用fastp,这个程序可以进行过滤(去除低质量序列,较多N的序列),去掉接头,进行碱基校正,输出质控报告等。
对于单端测序,
1 | fastp -i input.fastq -o output.fastq |
对于双端测序,
1 | fastp -i input.1.fastq -I input.2.fastq -o output.1.fastq -O output.2.fastq |
这个程序的多数功能是默认开启的,不需额外设置
1 | fastp -i ./fastq/SRR12846241_1.fastq -I ./fastq/SRR12846241_2.fastq -o ./qc/cleaned_1.fastq -O ./qc/cleaned_2.fastq -w 4 |
四、比对至基因组
对于DNA的比对,使用BWA这个程序,使用之前,需要为BWA生成索引文件,命令如下:
1 | bwa index hg38.fa |
下面,使用BWA进行MAPPING,
1 | # bwa mem\ |
五、加头文件
这步是外加的,因为在使用BWA进行比对时没有加-R参数,因此缺少Read Group信息,可以通过picard tool中的AddOrReplaceReadGroups.jar加入RG信息,因为picard被整合在GATK中,因此,我们可以使用GATK来加RG
1 | gatk AddOrReplaceReadGroups -I /mnt/d/wes/bam/clean.bam -O /mnt/d/wes/bam/clean.RG.bam -LB genome -PL ILLUMINA -PU unit1 -SM sample1 |
六、PCR去重
1 | gatk MarkDuplicates -I /mnt/d/wes/bam/clean.RG.bam -O /mnt/d/wes/nodup/nodup.bam -M /mnt/d/wes/nodup/metrics.txt --REMOVE_DUPLICATES true --ASSUME_SORTED true |
七、BQSR (Recalibration Base Quality Score)
下面进行变异检测,首先,我们需要先为hg38.fa生成dict文件,这可以通过调用picard中的CreateSequenceDictonary模块来实现,也可以直接在GATK中调用。
1 | java -jar /home/eric/picard/build/libs/picard.jar CreateSequenceDictionary R=hg38.fa O=hg38.dict |
另外,补充hg38.fa.fai文件的生成过程,可以调用samtool faidx来生成
1 | samtools faidx hg38.fa |
上面这两个文件的生成过程都很快,几秒钟就可以完成。
BQSR分两步进行,分别使用BaseRecalibrator与ApplyBQSR两个工具。
第一步:BaseRecalibrator,此工具根据物种的known sites,生成一个校正质量值所需要的表格文件,基本用法如下:
1 | gatk BaseRecalibrator \ |
在本例中,执行如下命令:
1 | gatk BaseRecalibrator -I /mnt/d/wes/nodup/nodup.bam -R /home/eric/ncbi/hg38/chroms/hg38.fa --known-sites /home/eric/ncbi/hg38/vcf/dbsnp_138.hg38.vcf.gz --known-sites /home/eric/ncbi/hg38/vcf/1000G_phase1.snps.high_confidence.hg38.vcf.gz --known-sites /home/eric/ncbi/hg38/vcf/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz -L /home/eric/ncbi/hg38/vcf/hg38_v0_HybSelOligos_whole_exome_illumina_coding_v1_whole_exome_illumina_coding_v1.Homo_sapiens_assembly38.targets.interval_list -O /mnt/d/wes/bqsr/recal_data2.table |
第二步:ApplyBQSR,此工具执行BQSR的第二步,具体来说,它会根据第一步中BaseRecalibrator工具生成的重新校准表来重新校准输入的BAM的质量,并输出重新校准的BAM文件,基本用法如下:
1 | gatk ApplyBQSR \ |
在本例中,执行如下命令:
1 | gatk ApplyBQSR -I /mnt/d/wes/nodup/nodup.bam -R /home/eric/ncbi/hg38/chroms/hg38.fa --bqsr-recal-file /mnt/d/wes/bqsr/recal_data2.table -O /mnt/d/wes/bqsr/bqsr.bam |
下面,可以对生成的BAM文件进行验证,使用ValidateSamFile工具,若显示no errors found,就可以进行变异检测了。
1 | gatk ValidateSamFile -I /mnt/d/wes/bqsr/bqsr.bam |
如发现错误,则可以使用FixMateInformation工具进行修复
1 | gatk FixMateInformation -I /mnt/d/wes/bqsr/bqsr.bam -O /mnt/d/wes/bqsr/fixed_bqsr.bam |
变异检测,使用HaplotypeCaller工具,
1 | gatk HaplotypeCaller\ |
在本例中,使用如下参数,此步极费时间,我这台低配电脑耗时10个小时
1 | gatk HaplotypeCaller -R /home/eric/ncbi/hg38/chroms/hg38.fa -I /mnt/d/wes/bqsr/bqsr.bam -O /mnt/d/wes/caller/output.g.vcf.gz -ERC GVCF |
生成g.vcf.gz文件之后,就可以使用GenotypeGVCFs工具对多个样本执行joint genotyping,目的是将多个样本合成一个文件
1 | gatk GenotypeGVCFs |
提取SNV,使用SelectVariants工具,
1 | gatk SelectVariants \ |
在本例中,使用如下命令:
1 | gatk SelectVariants -R /home/eric/ncbi/hg38/chroms/hg38.fa -V /mnt/d/wes/caller/output.vcf.gz --select-type-to-include SNP -O /mnt/d/wes/caller/snp.vcf |
这个过程极快,只需要几秒即可完成。下面,提取INDEL,仍然使用SelectVariants工具,只是参数选择INDEL,
1 | gatk SelectVariants -R /home/eric/ncbi/hg38/chroms/hg38.fa -V /mnt/d/wes/caller/output.vcf.gz --select-type-to-include INDEL -O /mnt/d/wes/caller/indel.vcf |
突变位点质量值重矫正(VQSR)
这一步是对突变位点进行质控,原理是通过比对与已知变异位点的交集,评估各个突变位点的可信度。已知变异集包括:hapmap,omni,1000G,dbsnp。
第一步:SNP的VQSR的过滤
1 | gatk VariantRecalibrator \ |
INDEL的VQSR的过滤,参数有点变动,–resource也不同
1 | gatk VariantRecalibrator -R /home/eric/ncbi/hg38/chroms/hg38.fa -V /mnt/d/wes/caller/output.vcf.gz --max-gaussians 4 --resource:mills,known=false,training=true,truth=true,prior=12.0 /home/eric/ncbi/hg38/vcf/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz --resource:dbsnp,known=true,training=false,truth=false,prior=2.0 /home/eric/ncbi/hg38/vcf/dbsnp_146.hg38.vcf.gz -an QD -an DP -an MQRankSum -an ReadPosRankSum -an FS -an SOR -mode INDEL -O /mnt/d/wes/caller/output.indel.recal --tranches-file /mnt/d/wes/caller/output.indel.tranches --rscript-file /mnt/d/wes/caller/output.indel.plots.R |
第二步:ApplyVQSR to SNP(Apply a score cutoff to filter variants based on a recalibration table),即将第一步生成的阀值文件应用于vcf.gz,并生成新的vcf.gz文件,这个过程将阀值以下的突变去除
1 | gatk ApplyVQSR \ |
INDEL也是如此,Applying recalibration to INDEL,命令如下:
1 | gatk ApplyVQSR -R /home/eric/ncbi/hg38/chroms/hg38.fa -V /mnt/d/wes/caller/output.vcf.gz -O /mnt/d/wes/caller/output.vqsr.indel.vcf.gz --truth-sensitivity-filter-level 99.0 --tranches-file /mnt/d/wes/caller/output.indel.tranches --recal-file /mnt/d/wes/caller/output.indel.recal -mode INDEL |
位点注释
1 | gatk CNNScoreVariants \ |
附:GATK参考文件下载地址:gatk/bundle/hg38,这些参考文件可以在多个地址下载,但是有些因为压缩格式的问题会报错,这个网站上的参考文件已经验证,可以使用。