BSA分析(五)——变异检测及样本合并

本文中vcf文件的获取主要是使用gatk的HaplotypeCaller模块,该模块的原理大概如下:

  1. 定义active regions 沿着参考基因组以一定的窗口滑动,统计比对的 mismatches, indels 和 softclips等信息计算基因组每个位置的活跃得分,使用平滑算法进行,此处相当于测定该区域熵值。当熵值达到某个设定的阈值是即确定该区域为active region,用于后续组装。
  2. 通过active regions的组装确定单倍型 对于每个active regions,程序构建一个类似 De Bruijn 的图来重新组装active regions并识别 数据中可能存在哪些单倍型。然后,程序将每个单倍型与参考重新对齐 使用 Smith-Waterman 算法进行单倍型分析,以识别潜在的变异位点。
  3. 确定每个read的单倍型的似然值 对于每个active regions,该程序使用PairHMM算法对每个单倍型的每个读数进行成对比对。这就产生了给定读取数据的单倍型可能性矩阵。然后将这些可能性边缘化,以获得给定读取数据的每个潜在变异位点的等位基因的可能性。
  4. 分配样本基因型 对于每个潜在的变异位点,该程序应用贝叶斯规则,使用给定读取数据的等位基因的可能性来计算给定该样本的读取数据的每个样本的每个基因型的可能性。然后将最有可能的基因型分配给样本。

GATK

下载安装

gatk下载网址

wget https://github.com/broadinstitute/gatk/releases/download/4.2.1.0/gatk-4.4.0.0.zip #下载安装包
unzip gatk-4.2.1.0 #解压缩安装包
cd gatk-4.2.1.0/

#导入环境变量
echo "PATH=$PATH:~/softwarepath/gatk-4.2.1.0" >>~/.bashrc
source ~/.bashrc

#同样有懒人安装方法
conda install -c bioconda gatk4

#测试是否安装成功
gatk --help  #检查是否可正常运行

 Usage template for all tools (uses --spark-runner LOCAL when used with a Spark tool)
    gatk AnyTool toolArgs

 Usage template for Spark tools (will NOT work on non-Spark tools)
    gatk SparkTool toolArgs  [ -- --spark-runner <LOCAL | SPARK | GCS> sparkArgs ]

 Getting help
    gatk --list       Print the list of available tools

    gatk Tool --help  Print help on a particular tool

 Configuration File Specification
     --gatk-config-file                PATH/TO/GATK/PROPERTIES/FILE

 gatk forwards commands to GATK and adds some sugar for submitting spark jobs

   --spark-runner <target>    controls how spark tools are run
     valid targets are:
     LOCAL:      run using the in-memory spark runner
     SPARK:      run using spark-submit on an existing cluster
                 --spark-master must be specified
                 --spark-submit-command may be specified to control the Spark submit command
                 arguments to spark-submit may optionally be specified after --
     GCS:        run using Google cloud dataproc
                 commands after the -- will be passed to dataproc
                 --cluster <your-cluster> must be specified after the --
                 spark properties and some common spark-submit parameters will be translated
                 to dataproc equivalents

   --dry-run      may be specified to output the generated command line without running it
   --java-options 'OPTION1[ OPTION2=Y ... ]'   optional - pass the given string of options to the
                 java JVM at runtime.
                 Java options MUST be passed inside a single string with space-separated values.

使用

因为这边只是介绍该软件在BSA分析中如何使用,所以介绍相对单一,也是为了初学者不会被那么多冗余的信息干扰。普通变异检测同样适用,当样本太多的时候可以试试gatk4的GenomicsDB模块,代替这里的CombineGVCFs + GenotypeGVCFs策略。

BSA分析需要通过该软件获得最终用于分析的vcf文件,所以这一步可以说是入门的钥匙。

首先准备输入文件:混池数据比对结果bam文件和参考基因组,比对过程参考前面的推文

这里文件命名分别为:

!!!一定要区分清楚样本之间的对应关系,不能混了

P1.sort.rmdup.bam 亲本1混池比对结果文件

P2.sort.rmdup.bam 亲本2混池比对结果文件

S1.sort.rmdup.bam 子代1混池比对结果文件(与亲本1表型一致)

S2.sort.rmdup.bam 子代2混池比对结果文件(与亲本2表型一致)

ref.fa 参考基因组

# 建立索引
gatk CreateSequenceDictionary -R ref.fa \
     -O ref.dict

# GVCF输出
gatk --java-options "-Xmx4g" HaplotypeCaller  \
   -R ref.fa \
   -I P1.sort.rmdup.bam \
   -O P1.g.vcf.gz \
   -ERC GVCF

##参数解读
"-Xmx4g"  这个是指定给予的运行内存,可以比4g更大,但是要结合服务器本身的资源决定。
-R 参考基因组
-I bam文件
-O 输出文件
-ERC 输出GVCF的格式

##其他样本同样如此操作,分别得到对应的GVCF
P1.g.vcf.gz  P2.g.vcf.gz  S1.g.vcf.gz  S2.g.vcf.gz 

# 合并GVCF
gatk CombineGVCFs \
    -R ref.fa \
    -V P1.g.vcf.gz \
    -V P2.g.vcf.gz \
    -V S1.g.vcf.gz \
    -V S2.g.vcf.gz \
    -O merge.g.vcf.gz

##参数解读
-V 不同样本的gvcf文件
-O 合并后的gvcf文件

# GVCF转VCF
gatk --java-options "-Xmx4g" GenotypeGVCFs \
    -R ref.fa \
    -V merge.g.vcf.gz \
    -O merge.vcf.gz

##参数解读
-V GVCF文件
-O VCF文件

结果文件格式解读

GVCF

##fileformat=VCFv4.2
##ALT=<ID=NON_REF,Description="Represents any possible alternative allele at this location">
##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype quality">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=MIN_DP,Number=1,Type=Integer,Description="Minimum DP observed within the GVCF block">
##FORMAT=<ID=PGT,Number=1,Type=String,Description="Physical phasing haplotype information, describing how the alternate alleles are phased in relation to one another">
##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
##FORMAT=<ID=PL,Number=G,Type=Integer,Description="The phred-scaled genotype likelihoods rounded to the closest integer">
##FORMAT=<ID=SB,Number=4,Type=Integer,Description="Per-sample component statistics which comprise the Fisher's Exact Test to detect strand bias">
##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
##INFO=<ID=ClippingRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref number of hard clipped bases">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Combined depth across samples">
##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
##INFO=<ID=ExcessHet,Number=1,Type=Float,Description="Phred-scaled p-value for exact test of excess heterozygosity">
##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
##INFO=<ID=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts, for each ALT allele, in the same order as listed">
##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency, for each ALT allele, in the same order as listed">
##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
##INFO=<ID=RAW_MQ,Number=1,Type=Float,Description="Raw data for RMS mapping quality">
##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
##CommandLine.Haplotyper=<ID=Haplotyper,Version="gatk.4.0",Date="2023-10-25T18:22:05Z",CommandLine="gatk --java-options "-Xmx4g" HaplotypeCaller -R ref.fa -I P1.sort.rmdup.bam -O P1.g.vcf.gz -ERC GVCFgatk --java-options "-Xmx4g" HaplotypeCaller -R ref.fa -I P1.sort.rmdup.bam -O P1.g.vcf.gz -ERC GVCF "
##contig=<ID=Chr01,length=91897250,assembly=unknown>
##contig=<ID=Chr02,length=34677250,assembly=unknown>
##contig=<ID=Chr03,length=58976660,assembly=unknown>
##contig=<ID=Chr04,length=23665986,assembly=unknown>
##contig=<ID=Chr05,length=32975341,assembly=unknown>
##contig=<ID=Chr06,length=89148132,assembly=unknown>
##reference=file:///path/to/ref.fa
##GVCFBlock0-1=minGQ=0(inclusive),maxGQ=1(exclusive)
##GVCFBlock1-2=minGQ=1(inclusive),maxGQ=2(exclusive)
##GVCFBlock2-3=minGQ=2(inclusive),maxGQ=3(exclusive)
##GVCFBlock3-4=minGQ=3(inclusive),maxGQ=4(exclusive)
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  CY180
Chr01       1       .       A       <NON_REF>       .       .       END=5538        GT:DP:GQ:MIN_DP:PL      0/0:0:0:0:0,0,0
Chr01       5539    .       A       <NON_REF>       .       .       END=5539        GT:DP:GQ:MIN_DP:PL      0/0:1:3:1:0,3,15
Chr01       5540    .       C       <NON_REF>       .       .       END=5540        GT:DP:GQ:MIN_DP:PL      0/0:1:3:1:0,3,38
Chr01       5541    .       C       <NON_REF>       .       .       END=5541        GT:DP:GQ:MIN_DP:PL      0/0:1:3:1:0,3,24
Chr01       5542    .       C       <NON_REF>       .       .       END=5548        GT:DP:GQ:MIN_DP:PL      0/0:1:3:1:0,3,28
......
Chr01       10959   .       A       G,<NON_REF>     15.43   .       DP=2;ExcessHet=3.0103;MLEAC=1,0;MLEAF=0.5,0;RAW_MQ=5200.00      GT:AD:DP:GQ:PL:SB       0/1:0,2,0:2:0:40,0,0,43,6,49:0,0,1,1ChrA01_S1       10959   .       A       G,<NON_REF>     15.43   .       DP=2;ExcessHet=3.0103;MLEAC=1,0;MLEAF=0.5,0;RAW_MQ=5200.00      GT:AD:DP:GQ:PL:SB       0/1:0,2,0:2:0:40,0,0,43,6,49:0,0,1,1

"#"开头的都是注释说明行
##FORMAT=... --> FORMAT那一列对应的参数信息及解释,比如GT是字符串,表示基因型
##INFO=... --> INFO那一列对应的参数信息及解释,比如DP是整数,表示样本组合深度
##CommandLine... --> 执行命令行
##contig=... --> 染色体编号,长度信息
##reference=file:///path/to/ref.fa --> 参考基因组
##GVCFBlock0-1=minGQ=0(inclusive),maxGQ=1(exclusive) --> GVCF才有,VCF没有
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT P1 --> 标题行

以序列编号开头的即为文件主体内容

每列含义与标题行一致

第一列:序列编号

第二列:物理起始位置

第三列:变异位点的rsID号,如果没有的话用"."表示。

第四列:参考基因组在该位点的碱基,REF

第五列:样本在该位点的碱基,ALT

第六列:call出这个位点的质量。这个值等于-10log10(p),p值是call错alt allele错误的概率。也就是QUAL越大出错概率越小。 第七列:对变异位点进行过滤,如果通过则为PASS,如果没有进行过滤就是"."。第八列 INFO:这一列是额外信息。可能是平台的信息,也可以是DP等的信息:

第八列:INFO列,里面具体参数解释在表头的注释行里。这里使用第一行数据作为例子着重说明一下,"END=5538"表示这一行表示的是从1到5538的变异信息。所以GVCF是包含所有位点的信息文件,不管位点是否存在变异。

第九列:FORMAT列,里面具体参数解释在表头的注释行里

第十列:样本位点信息列,数据以:为分隔符,数据含义与第九列保持一致。比如第九列是GT:DP:GQ:MIN_DP:PL,第十列是0/0:1:3:1:0,3,15,那第十列就表示该样本的GT为0/0,DP为1,GQ为3,MIN_DP为1,PL为0,3,15。

VCF

##fileformat=VCFv4.2
##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype quality">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=PGT,Number=1,Type=String,Description="Physical phasing haplotype information, describing how the alternate alleles are phased in relation to one another">
##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
##FORMAT=<ID=PL,Number=G,Type=Integer,Description="The phred-scaled genotype likelihoods rounded to the closest integer">
##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele frequency, for each ALT allele, in the same order as listed">
##fileformat=VCFv4.2
##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read depth">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype quality">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=PGT,Number=1,Type=String,Description="Physical phasing haplotype information, describing how the alternate alleles are phased in relation to one another">
##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
##FORMAT=<ID=PL,Number=G,Type=Integer,Description="The phred-scaled genotype likelihoods rounded to the closest integer">
##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele frequency, for each ALT allele, in the same order as listed">
##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
##INFO=<ID=ClippingRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref number of hard clipped bases">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Combined depth across samples">
##INFO=<ID=ExcessHet,Number=1,Type=Float,Description="Phred-scaled p-value for exact test of excess heterozygosity">
##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
##INFO=<ID=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts, for each ALT allele, in the same order as listed">
##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency, for each ALT allele, in the same order as listed">
##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS mapping quality">
##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
##INFO=<ID=SOR,Number=1,Type=Float,Description="Symmetric Odds Ratio of 2x2 contingency table to detect strand bias">
##CommandLine.GVCFtyper=<ID=GVCFtyper,Version="gatk.4.0",Date="2023-06-10T14:05:36Z",CommandLine="gatk --java-options "-Xmx4g" GenotypeGVCFs -R ref.fa -V merge.g.vcf.gz -O merge.vcf.gz
##contig=<ID=Chr01,length=112420854,assembly=unknown>
##contig=<ID=Chr02,length=103302290,assembly=unknown>
##contig=<ID=Chr03,length=143109472,assembly=unknown>
##contig=<ID=Chr04,length=128801742,assembly=unknown>
##contig=<ID=Chr05,length=116542366,assembly=unknown>
##contig=<ID=Chr06,length=118975115,assembly=unknown>
##reference=file:///path/to/ref.fa
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  P1   P2   S1      
Chr01   6484    .       TAAA    T       41.66   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-1.383;ClippingRankSum=-0.000;DP=31;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=10.42;ReadPosRankSum=-0.000;SOR=0.105    GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   0/0:17,0:17:9:0,9,531   0/0:10,0:10:0:0,0,147   0/1:2,2:4:46:78,0,46
Chr01   15370   .       A       T       47.64   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-1.383;ClippingRankSum=-0.000;DP=25;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=11.91;ReadPosRankSum=-0.000;SOR=0.693    GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:14,0:14:39:.:.:0,39,585     0/1:2,2:4:78:0|1:15370_A_T:78,0,143     0/0:7,0:7:18:.:.:0,18,270
Chr01   15377   .       T       C       47.60   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-1.383;ClippingRankSum=-0.000;DP=25;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=11.90;ReadPosRankSum=-0.000;SOR=0.693    GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:12,0:12:33:.:.:0,33,495     0/1:2,2:4:78:0|1:15370_A_T:78,0,143     0/0:9,0:9:24:.:.:0,24,360
Chr01   28237   .       A       AT      30.55   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-0.000;ClippingRankSum=-0.000;DP=35;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=10.18;ReadPosRankSum=0.967;SOR=0.223     GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   0/0:20,0:20:60:0,60,768 0/0:12,0:12:33:0,33,495 0/1:1,2:3:30:70,0,30
Chr01   28861   .       A       AT      34.02   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-1.408;ClippingRankSum=-0.000;DP=37;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=59.30;MQRankSum=-0.812;QD=3.09;ReadPosRankSum=0.393;SOR=0.883      GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   0/0:19,0:19:14:0,14,605 0/0:6,0:6:18:0,18,205   0/1:7,4:12:72:72,0,169
Chr01   30412   .       G       A       34.35   .       AC=1;AF=0.25;AN=4;BaseQRankSum=-0.812;ClippingRankSum=-0.000;DP=22;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.25;MQ=60.00;MQRankSum=-0.000;QD=3.82;ReadPosRankSum=-1.480;SOR=0.223       GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:13,0:13:36:.:.:0,36,540     0/1:7,2:9:63:0|1:30403_G_A:63,0,368     ./.:0,0:0:.:.:.:.
Chr01   30863   .       C       CTAT    111.58  .       AC=2;AF=1;AN=2;DP=7;ExcessHet=3.0103;FS=0.000;MLEAC=2;MLEAF=1;MQ=60.00;QD=27.89;SOR=1.609       GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   1/1:0,4:4:12:146,12,0 ./.:0,0:0:.:.   ./.:0,0:0:.:.
Chr01   32048   .       T       C       35.59   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-0.619;ClippingRankSum=-0.000;DP=44;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=4.45;ReadPosRankSum=-1.345;SOR=0.307     GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:25,0:25:72:.:.:0,72,1080    0/0:11,0:11:30:.:.:0,30,450     0/1:6,2:8:66:0|1:32048_T_C:66,0,243
Chr01   32072   .       T       C       35.59   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-0.619;ClippingRankSum=-0.000;DP=42;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=4.45;ReadPosRankSum=0.319;SOR=0.693      GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:23,0:23:66:.:.:0,66,990     0/0:11,0:11:33:.:.:0,33,263     0/1:6,2:8:66:0|1:32048_T_C:66,0,243
Chr01   33278   .       G       GA      37.34   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-1.520;ClippingRankSum=-0.000;DP=30;ExcessHet=4.7712;FS=3.136;MLEAC=2;MLEAF=0.333;MQ=60.00;MQRankSum=-0.000;QD=4.67;ReadPosRankSum=-0.272;SOR=1.447     GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   0/0:9,0:9:0:0,0,231     0/1:4,4:8:71:71,0,89    0/0:12,0:12:0:0,0,215
Chr01   36552   .       C       A       36.59   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-1.534;ClippingRankSum=-0.000;DP=29;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=4.57;ReadPosRankSum=0.489;SOR=0.307      GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   0/0:9,0:9:27:0,27,346   0/0:12,0:12:36:0,36,455 0/1:5,3:8:67:67,0,173
Chr01   40038   .       C       CTATA   47.27   .       AC=2;AF=0.5;AN=4;DP=11;ExcessHet=0.7918;FS=0.000;MLEAC=2;MLEAF=0.5;MQ=60.00;QD=23.64;SOR=0.693  GT:AD:DP:GQ:PL  ./.:0,0:0:.:.   1/1:0,2:2:6:87,6,0 ./.:0,0:0:.:.   0/0:5,0:5:15:0,15,148
Chr01   40740   .       A       G       32.64   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-0.812;ClippingRankSum=-0.000;DP=27;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=3.63;ReadPosRankSum=-1.221;SOR=0.495     GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:12,0:12:30:.:.:0,30,450     0/1:7,2:9:63:0|1:40740_A_G:63,0,409     0/0:6,0:6:18:.:.:0,18,205
Chr01   40753   .       T       C       32.64   .       AC=1;AF=0.167;AN=6;BaseQRankSum=-0.812;ClippingRankSum=-0.000;DP=26;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.167;MQ=60.00;MQRankSum=-0.000;QD=3.63;ReadPosRankSum=-0.000;SOR=0.495     GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:11,0:11:33:.:.:0,33,382     0/1:7,2:9:63:0|1:40740_A_G:63,0,409     0/0:6,0:6:18:.:.:0,18,217
Chr01   43274   .       A       T       34.36   .       AC=1;AF=0.25;AN=4;BaseQRankSum=-0.812;ClippingRankSum=-0.000;DP=18;ExcessHet=3.0103;FS=0.000;MLEAC=1;MLEAF=0.25;MQ=60.00;MQRankSum=-0.000;QD=3.82;ReadPosRankSum=-0.431;SOR=0.223       GT:AD:DP:GQ:PGT:PID:PL  ./.:0,0:0:.:.:.:.       0/0:9,0:9:27:.:.:0,27,358       0/1:7,2:9:63:0|1:43248_GT_G:63,0,285    ./.:0,0:0:.:.:.:.

"#"开头的都是注释说明行
##FORMAT=... --> FORMAT那一列对应的参数信息及解释,比如GT是字符串,表示基因型
##INFO=... --> INFO那一列对应的参数信息及解释,比如DP是整数,表示样本组合深度
##CommandLine... --> 执行命令行
##contig=... --> 染色体编号,长度信息
##reference=file:///path/to/ref.fa --> 参考基因组
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT P1 P2 S1 S2 --> 标题行

以序列编号开头的即为文件主体内容

每列含义与标题行一致

除了一下注释信息有所区别,其他列的注释信息与GCVF类似

第二列:物理位置(单个位点)

第八列:INFO列,里面具体参数解释在表头的注释行里。这里就没有END=了,所以VCF文件只包含有变异的位点

第十至最后一列:都是样本位点信息列,数据解释同GVCF。这里就凸显了bam文件的标签作用,样本对应名称是bam的标签。在合并GVCF之前要确定样本名称,不同样本名称不能一样,如:P1;P2;S1;S2。且要注意亲本子代对应关系。

关于GT和DP

GT,基因型,包括0/0,1/1,0/1,2/2,0/2等多种形式,分隔符除了'/',还可以是'|'。0/0的意思是与参考基因组(即REF)一致的基因型,1/1的意思是与变异(即ALT)一致的基因型,0/1则是杂合的基因型,2指的是多向突变的碱基(ALT中存在类似于A,T这种)。"./."为缺失基因型。

DP,样本在这个位置的reads覆盖度。

注意

通过上面对GVCF文件和VCF文件的介绍,大家可能就会明白,为什么在做多样本变异信息文件合并的时候,必须得是用GVCF格式合并之后再转为VCF文件的格式了。

因为VCF包含的位点信息不完整,如果用VCF文件合并,就相当于在原始位点的基础上挑选出各自变异的位点,然后再取不同样本变异位点之间的交集,在这个过程中会丢失大量的计算位点。也不会存在亲本基因型一个为1/1,一个为0/0的情况了。而这个是BSA分析VCF文件过滤的主要步骤之一。

Bcftools同样也可以做变异检测,文件流程差不多,但是不同软件之间的格式会有些许的差别,这里不再详细介绍了,有兴趣的同学可以自行百度。

关于变异检测提速

相信很多同学都遇到过这个问题,非商业版的gatk速度慢的是可以,基因组稍大点就真的不知道要跑到猴年马月了。大家可以采取从bam那一步就按区间(不建议太小,一般按染色体就可以)拆分,然后并行去进行变异检测,这样效率会提高不少。

GVCF和VCF文件压缩和索引建立

软件安装下载

# 软件安装
wget https://sourceforge.net/projects/samtools/files/tabix/tabix-0.2.6.tar.bz2
tar xjvf tabix-0.2.6.tar.bz2
cd tabix-0.2.6/
make
#导入环境变量
echo "PATH=$PATH:~/softwarepath/tabix-0.2.6" >>~/.bashrc
source ~/.bashrc

# 软件使用
## 压缩VCF文件,可用gunzip解压,但压缩方式不一样
bgzip  P1.vcf
## vcf文件建立索引
tabix -p vcf P1.vcf.gz

往期回顾

BSA分析(一)——原理及发展史

BSA分析(二)——分析准备工作

BSA分析(三)——测序数据的质控

BSA分析(四)——序列比对及比对信息统计

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

推荐阅读更多精彩内容