2 测序数据格式精讲:FASTQ、BAM、VCF/BCF
做GATK质控,说白了就是跟三种文件打交道:FASTQ、BAM、VCF。你想想看,从原始下机数据到最终变异结果,每一步都存在这些文件里。我刚开始接触这行的时候,也整天被这些格式搞晕。今天我就带你把它们掰开揉碎,看看里面到底装了啥。
2.1 FASTQ:最原始的“生数据”
FASTQ文件,可以看作测序仪吐出来的“毛坯房”。它里面存的是每一条读段(read)的碱基序列,以及对应的质量值。GATK的质控,就是从检查这些原始数据开始的。
2.1.1 文件结构:四行一个记录
每个FASTQ记录是固定的四行结构,我习惯叫它“四行打卡”:
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTCAAGGTTGTTGCAAGACGGGAGGTAGGTGTAGCTGGG
+
>;>=;=?==?=?=?>=>?=?=?=?=?>=>?=?=?>=>?
- 第1行(@开头):序列标识符,包含仪器ID、flowcell、lane、tile、X/Y坐标等位置信息。GATK在做标记重复(MarkDuplicates)时,就会解析这行的信息。
- 第2行:碱基序列,就是A、T、C、G的组合。
- 第3行(+开头):分隔符,后面可以再写一遍标识符(但通常省略)。
- 第4行:质量值,用ASCII字符表示。每个字符对应第2行每个碱基的测序质量。
2.1.2 质量值的“数”与“符”
质量值核心是Phred质量分数(Q-score)。公式很简单:Q = -10 × log10(P),P是碱基测序错误的概率。
| Q值 | 错误概率 | 碱基准确率 |
|---|---|---|
| Q10 | 1/10(10%) | 90% |
| Q20 | 1/100(1%) | 99% |
| Q30 | 1/1000(0.1%) | 99.9% |
| Q40 | 1/10000(0.01%) | 99.99% |
那ASCII字符又是怎么对应这些数字的呢?目前常用的是Sanger格式(Phred+33)。具体做法:
ASCII值 = Q值 + 33
例如:Q=30 → ASCII值=63 → 字符 '?'
Q=20 → ASCII值=53 → 字符 '5'
所以,你看到FASTQ文件第4行里那些“HHHH”之类的字符,其实背后都是有数值含义的。GATK的BaseRecalibrator就是依据这些数值,来校正系统性的测序偏差。
zcat或seqtk多看几条记录,确认质量值的中位数。
2.2 BAM:比对后的“集装箱”
FASTQ好比是散装零件,BAM就是把这些零件安装到参考基因组这个“地图”上之后的集装箱文件。我个人觉得,BAM才是GATK质控的主战场。
2.2.1 从SAM到BAM
SAM(Sequence Alignment/Map)是文本格式,BAM是它的二进制压缩版。说白了,BAM就是SAM的“打包快递”,读取更快,占空间更小。GATK所有核心工具都优先读写BAM。
一个BAM文件主要分两部分:
- 头部(Header):以@开头,记录测序样本、参考基因组、比对参数等信息。
- 比对记录(Records):每行一条比对结果,包含11个必填字段(列),用TAB分隔。
2.2.2 核心字段解读
我挑几个GATK经常用到的字段说说:
| 字段 | 列序号 | 说明 | GATK质控作用 |
|---|---|---|---|
| QNAME | 1 | 读段名称(与FASTQ第一行@后面的内容对应) | 用于分组、去重 |
| FLAG | 2 | 比对标志位(数字),指示读段是否比对、是否配对了等等 | 过滤低质量/未比对读段 |
| MAPQ | 5 | 比对质量分数(类似Phred值,越高越可靠) | GATK推荐MAPQ≥20 |
| CIGAR | 6 | 紧凑的比对描述,记录碱基匹配、插入、删除的情况 | 区分真正变异与比对错误 |
| SEQ | 10 | 读段序列(与FASTQ中的序列一致) | 与参考基因组对比发现变异 |
| QUAL | 11 | 序列质量值(与FASTQ中的质量字符串相同) | BaseRecalibrator使用 |
samtools flags工具把FLAG值转换成文字说明,发现这个习惯帮我避了很多坑。
2.2.3 元数据查看
BAM的头部元数据里藏着很多信息,我建议你随时用samtools view -H查看:
@HD VN:1.6 SO:coordinate
@SQ SN:chr1 LN:248956422
@RG ID:sample_01 PL:ILLUMINA SM:NA12878
@PG ID:bwa PN:bwa VN:0.7.17
- @HD:格式版本、排序方式(coordinate或queryname)
- @SQ:参考序列名称(SN)和长度(LN)
- @RG:读组信息。这里面包含样本ID(SM)、文库(LB)、平台(PL)。GATK在做标记重复和BaseRecalibrator时,必须用到读组信息。如果没有RG标签,很多GATK工具会直接报错。
- @PG:处理程序记录,记录每一步用到的工具和参数。
2.3 VCF/BCF:最终的“变异清单”
VCF(Variant Call Format)是变异检测的终极输出。说白了,它就是一份列着所有变异位点的清单。BCF是它的二进制格式,读写更快。
2.3.1 文件结构
VCF也分两部分:元数据和数据体。
元数据行(以##开头):
##fileformat=VCFv4.2
##FILTER=
##INFO=
##FORMAT=
##contig=
数据体(以#CHROM开头为列名):
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample
chr1 12345 . G A 500.73 PASS DP=100 GT:DP:GQ:AD 0/1:50:99:25,25
chr1 23456 rs12345 T C 999.90 PASS DP=200 GT:DP:GQ:AD 1/1:100:99:10,90
2.3.2 核心字段解读
| 字段 | 说明 |
|---|---|
| CHROM & POS | 染色体及位置(1-based) |
| ID | 变异标识,通常是dbSNP编号(如rs12345) |
| REF & ALT | 参考等位基因和替代等位基因 |
| QUAL | Phred-scaled质量值,表示该变异是真实而非错误的概率 |
| FILTER | 过滤状态。PASS表示通过所有过滤器;其他值表示被特定过滤器标记为低质量 |
| INFO | 逗号分隔的字段-值对,如深度(DP)、等位基因频率(AF)等 |
| FORMAT | 每个样本的字段格式定义 |
| 样本列 | 按FORMAT定义的顺序,存放每个样本的具体信息 |
2.3.3 FORMAT字段详解
FORMAT字段里最关键的几个:
- GT(基因型):0表示参考等位基因,1表示第一个ALT等位基因,以此类推。例如“0/1”表示杂合,“1/1”表示纯合变异。
- DP(深度):该位点覆盖的读段总数。
- GQ(基因型质量):Phred-scaled质量,表示该基因型判断的可信度。
- AD(等位基因深度):支持REF和每个ALT的读段数。比如“25,25”说明REF和ALT各有25条读段支持。
2.4 三种格式的“数据流”关系
最后,我用一张SVG图来展示这三种格式在GATK质控流程中是如何串联起来的: