2. 高通量测序原理与 FASTQ 格式
讲 BWA 和 GATK 之前,我觉得还是得先聊清楚一件事:你手上的 FASTQ 文件到底是怎么来的?里面那些符号又代表什么?
我个人习惯是,不管用什么工具,先搞清楚数据源头。你想想看,如果连原始数据长什么样都不清楚,后面做再多的分析,心里也没底。
2.1 测序原理:从 DNA 到 FASTQ
高通量测序的核心,说白了就是“边合成边测序”。我们以 Illumina 平台为例,它是目前最主流的平台。
大致流程是这样的:
- 文库构建:把基因组 DNA 打断成几百 bp 的片段,两端接上接头(adapter)。
- 簇生成:DNA 片段固定在 flow cell 上,通过桥式 PCR 扩增成一个个簇(cluster)。
- 测序:加入带荧光标记的 dNTP,每合成一个碱基就释放一次荧光信号并拍照。
- 碱基识别:根据荧光信号的强度和位置,软件(如 RTA)判断每个位置的碱基是什么,同时给出这个判断的可靠程度——也就是质量值。
这一步的结果就是 FASTQ 文件。嗯,这里要注意,你从测序公司拿到的数据,通常就是 FASTQ,而不是原始的图像文件。
2.2 FASTQ 格式:四行一条记录
FASTQ 格式其实不复杂,每一条 read 用四行表示:
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTACGTAGGTACGTGACGTACGTAGCTACGATCGATCGATCGATCGATC
+
JJJJJIIJJJJIIJIIIIJJJJJJIIJJJJJIJJJJJJJJIIIJJJJJIJJ
你看到的这四行,每一行都有它的意义:
| 行号 | 标识符 | 内容 |
|---|---|---|
| 第1行 | @ | read 的描述信息。包含仪器ID、flow cell编号、坐标、是否过滤等 |
| 第2行 | (无) | 碱基序列,A/T/C/G/N |
| 第3行 | + | 分隔符。有时 + 后面会重复第1行的描述 |
| 第4行 | (无) | 质量字符串。长度必须等于第2行的序列长度 |
质量值是用 ASCII 码表示的。我把这个转换关系整理了一下:
ASCII 码值 = Phred 质量值 + 33(现代编码)
Phred 质量值(Q)= -10 * log10(P_error)
举例:
Q=30 -> 错误概率 0.001 -> ASCII 码 63 -> 字符 '?'
Q=20 -> 错误概率 0.01 -> ASCII 码 53 -> 字符 '5'
Q=10 -> 错误概率 0.1 -> ASCII 码 43 -> 字符 '+'
质量值越高,代表你越有信心这个碱基是读对的。我在项目中遇到过,有些旧数据用的是 Phred+64 编码,如果搞混了编码方式,质控报告会看着一团糟。所以拿到 FASTQ 文件的第一件事,就是确认它的质量值编码。
2.3 质量值编码的历史与分辨
为什么会存在不同编码?主要是因为测序平台的发展历史。早期的 Solexa 平台用过一个不同的公式,后来被 Illumina 收购后,又改成了标准的 Sanger 编码。
我建议你用一个简单的办法来区分:
- Sanger / Illumina 1.8+:ASCII 码范围 33-126,字符最低是 '!'。这是目前最常见的标准。
- Illumina 1.3-1.7:ASCII 码范围 64-126,字符最低是 '@'。老数据可能会遇到。
你可以用 Linux 的 head 和 od 命令快速看一下质量字符串第一个字符的 ASCII 码:
head -4 your.fastq | tail -1 | od -c
# 如果第一列是 '!' 或 '#',属于 Sanger 编码
# 如果第一列是 '@' 或 'A',可能是 Illumina 1.3+ 编码
曾经有一位刚入行的同事,直接拿旧平台的数据跑了整个 GATK 流程,结果变异检测的假阳性率高得吓人。我帮他一查,就是质量编码搞错了。所以,别小看这一步。
2.4 FASTQ 文件的基本质控
拿到 FASTQ 后,不能直接扔给 BWA 就开始跑。你需要先做一次质量评估。最常用的工具就是 FastQC。
运行 FastQC 的命令非常简单:
fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o ./qc_reports/
它会生成一个 HTML 报告,里面包含 12 个模块。我个人最看重的是以下几个:
- Per base sequence quality:看看每个位置的质量分布。如果 3' 端质量掉得厉害,可能需要考虑修剪(trim)。
- Per sequence GC content:如果 GC 分布出现双峰,可能存在污染或文库扩增偏差。
- Adapter Content:检查接头是否残留。如果接头含量高,跑 BWA 之前必须先做去接头。
- Overrepresented sequences:看看有没有异常高的序列出现。
我记得有一次做 ChIP-seq 的数据,FastQC 报告显示 adapter 含量超过了 15%。后来我加了 Trimmomatic 做预处理,结果比对率从 60% 直接升到了 90% 以上。这就是预处理的价值。
2.5 测序数据产生的完整流程
下面这张图,概括了从原始样本到 FASTQ 文件的完整路径。你看一遍,应该能对整个流程有个清晰的印象。
这张图把数据产生的关键路径串起来了。从文库构建到最终生成 FASTQ,每一个环节都可能引入误差。你后面用 BWA 做比对时,能不能把 read 正确比对到参考基因组上,很大程度就取决于这些步骤的质量。
2.6 实战小贴士:如何快速检查一个 FASTQ
在你开始正式分析之前,我建议先做三个快速检查:
- 检查行数:FASTQ 的记录数应该是 4 的倍数。用
wc -l看一下。 - 检查序列长度:看看 read 的长度是否一致。如果不一致,可能是测序故障或文库问题。
- 检查质量字符串长度:第2行和第4行长度必须完全一样。如果不一样,文件可能已损坏。
你可以用下面这个命令快速验证:
zcat sample.fastq.gz | awk 'NR%4==2 {len=length; print len}' | sort | uniq -c
# 输出会告诉你不同长度的 read 各有多少条
# 正常情况下应该只有一种长度