1. FASTQ 格式介绍:结构、质量分数编码与常见变体
聊FASTQ格式,我得先说说它的结构。这玩意儿说白了就是测序仪吐出来的原始数据格式,我们做质控的每一步都得跟它打交道。
核心印象:FASTQ 不是 FASTA 加个 Q。它是四行一组的文本格式,每一组代表一条测序读段(read)。
1.1 四行结构
我刚开始做生信那会儿,一直搞混FASTA和FASTQ。后来被老同事一句话点醒:FASTA有两行,FASTQ有四行。多出来的那两行,刚好就是质量信息。
每条read在FASTQ中固定占用四行:
- 标识行(以 @ 开头) —— 包含测序仪器、流动槽位置、坐标等信息
- 碱基序列行 —— A/T/C/G/N 组成的核苷酸序列
- 分隔行(以 + 开头) —— 通常只写一个 +,也可能重复标识信息
- 质量值行 —— 与碱基序列等长的ASCII字符,每个字符对应一个碱基的质量分数
你想想看,如果没有第四行,我们就只能知道测出了什么碱基,却不知道这个碱基可不可靠。这就像拿到一份实验报告,只有数据没有误差范围,谁敢信?
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTCAAGGTTGTTGCAAGACGGGAGGTGGTGTAGCTGTATTCAGCTGCGCAC
+
>>>>>ABABBBABBAABBAABBBBBAABBBAB>ABBBAABBBBBAABBBBB
这里要注意第四行和第一行的长度必须完全一致。空一个碱基都不行,多了也不行。我曾经在项目中遇到过测序仪软件bug,第四行比第二行短了几个字符,结果下游比对工具直接崩溃。嗯,这个问题排查了整整两天才找到原因。
| 行序 | 行首字符 | 内容说明 | 长度约束 |
|---|---|---|---|
| 第1行 | @ | 仪器标识 + 坐标 + 索引 | 可变 |
| 第2行 | 无 | 碱基序列 | 固定长度(读长) |
| 第3行 | + | 分隔符,可附带标识 | 最少1个字符 |
| 第4行 | 无 | 质量序列(ASCII字符) | 与第2行等长 |
1.2 质量分数编码方式
质量值这行,很多人误以为它是乱码。其实它是按一定规则编码后的数字。我刚刚入行时,看到第四行的">>>>>ABABBBAB..."也是一脸懵,还以为数据坏了呢。
每个ASCII字符对应一个Phred质量分数,公式是这样的:
Q = -10 × log₁₀(P)
其中:
Q = Phred质量分数
P = 碱基识别错误的概率
举个例子:如果某个碱基的Q值是30,表示错误概率P=0.001,也就是该碱基每1000次测序中可能错1次。准确率则是99.9%。
记忆小技巧:Q30 = 99.9%准确率,这是我做质控时最常盯着看的阈值。
但注意,质量分数存进FASTQ时,不能直接存数字20、30、40。得把数字映射成ASCII字符。映射方式有两种,这也是新手最容易犯错的地方:
- Phred+33(Sanger格式):目前主流标准。质量分数 + 33 后转成ASCII字符。Q=0对应ASCII 33(即字符'!'),Q=30对应ASCII 63(字符'?')。
- Phred+64(Illumina 1.3/1.5格式):早期Illumina仪器用的。质量分数 + 64。Q=0对应ASCII 64(字符'@'),Q=30对应ASCII 94(字符'^')。
我看过太多人把Phred+64的FASTQ当Phred+33去解析,结果算出的质量值全部多出31分。这会导致本该过滤掉的低质量数据被放行,后续组装、比对的质量直接崩盘。
避坑指南:拿到FASTQ文件,第一件事永远是用head看一眼质量值行首字符。如果出现'!'、'"'、'#'这些字符,大概率是Phred+33;如果出现大量'@'、'A'、'B',可能是Phred+64。我习惯用fastQC或者seqtk直接检测编码方式,省心得多。
1.3 常见FASTQ变体
FASTQ变体,说白了就是不同版本和不同厂商搞出来的小差异。主要有这几种:
1.3.1 根据质量编码区分
根据Sanger/Cock会议达成的社区标准,目前主流变体有:
| 变体名称 | 质量编码范围 | 对应ASCII | 常见来源 |
|---|---|---|---|
| Sanger | 0 ~ 93 | 33 ~ 126 | Illumina 1.8+、Sanger测序、PacBio |
| Solexa/Illumina 1.0 | -5 ~ 62 | 59 ~ 126 | 早期Solexa仪器(现已不多见) |
| Illumina 1.3 | 0 ~ 62 | 64 ~ 126 | Illumina Genome Analyzer II |
| Illumina 1.5 | 3 ~ 62 | 67 ~ 126 | Illumina 1.5 pipeline产物 |
| Illumina 1.8+ | 0 ~ 41 | 33 ~ 74 | 最新Illumina仪器,即Sanger格式 |
你在实际项目中,如果碰到2015年以前的公共数据(比如NCBI SRA里那些老数据),很大概率是Phred+64。现在的仪器基本统一到Phred+33了。但我说的是基本,不是100%。
1.3.2 根据序列格式区分
除了质量编码,FASTQ还能按读段类型分类:
- 单端(Single-end,SE):每个测序片段只从一个方向读一次,文件里一条read只出现一次。
- 双端(Paired-end,PE):同一个片段的两端都测,产生两个文件(R1和R2)。同一个read的R1和R2通过标识行中的read编号关联。我个人习惯在做质控时把R1和R2分开跑QC,因为通常R2的质量比R1差一些。
- 索引(Indexed):在标识行中增加样本索引序列,用于多路复用(multiplexing)。索引有时单独记录在FASTQ标识行末尾。
1.3.3 压缩变体
FASTQ文件体积巨大。一条人类全基因组测序的FASTQ大概几十GB。所以大多数情况下你会看到这样的压缩后缀:
.fastq或.fq—— 纯文本.fastq.gz或.fq.gz—— gzip压缩,最常见.fastq.bz2—— bzip2压缩,压缩率更高但解压慢.fastq.lz4—— LZ4压缩,解压速度快,适合管道处理
我一般只用.gz,因为几乎所有质控工具(fastp、Trimmomatic、fastQC)都原生支持gzip文件。你想想看,要是下个数据还得手动先解压再跑QC,那得多浪费时间。
1.4 本章知识体系
下面这张图是我整理FASTQ质控知识体系时的思路框架,把FASTQ格式的核心结构、质量编码和常见变体串在了一起。你拿着这个图去读任何FASTQ文件,都不容易跑偏。
一句话总结:FASTQ格式看起来简单,就四行,但质量编码的偏移量、压缩方式、双端配对文件的命名规则——任何一处搞错,质控结果都会跟着错。所以理解FASTQ本身,才是质控的第一步。