4. 常见FASTQ命名约定:Illumina、SRA与10X
命名约定这东西,说白了就是行业里的“土规矩”。你进了哪个圈子,就得守哪个圈子的规矩。今天咱们聊聊最常见的三种:Illumina的15位命名、SRA标准命名、还有10X Genomics那一套。我个人习惯把这三种先记住,因为后面讲元数据嵌入时,你就要决定到底按照哪种体系来改造你的文件名。
核心思路:无论哪种命名,最终目的都是让文件名本身就能回答“这条数据是哪来的、怎么跑的、跑的是哪个样本”三个问题。
4.1 Illumina 15位命名:跑通测序的“通用语”
先说说最多人用的——Illumina的15位命名格式。你可能见过类似SampleName_S1_L001_R1_001.fastq.gz这样的名字,这就是其中之一。15位不是指字符数,而是指信息段有15个位置,其中一部分是可选的。
我记得刚接触这个格式时,最头疼的就是“多出来的那几段到底什么意思”。后来发现,其实核心就是6个字段,用下划线或连字符隔开:
| 序号 | 段名 | 含义 | 示例 |
|---|---|---|---|
| 1 | SampleID | 样本名称或项目代号 | WT_rep1 |
| 2 | SampleNumber | 样本在run中的索引(S开头) | S1、S12 |
| 3 | Lane | 流动槽中的泳道编号 | L001、L003 |
| 4 | ReadDirection | 读段方向(R1或R2) | R1、R2 |
| 5 | SetNumber | 多组间区分(默认001) | 001、002 |
| 6 | FastqNum | 拆分的文件序号 | 001、007 |
但你注意,实际项目中不一定全部都要写全。比如单泳道、单组、没拆分的,只保留前四段就能搞定:
# 完整15位格式
WT_rep1_S1_L001_R1_001.fastq.gz
# 省略可选段后的最小化格式
WT_rep1_S1_L001_R1.fastq.gz
我个人建议:别省。你省下的字符数换来的可能是别人解析时多花的时间。有一次我接手别人的数据,文件名只有WT_rep1_R1.fastq.gz,结果我猜了一天“这是哪个泳道的”,最后只能去翻实验记录——麻烦透顶。
避坑提示:Illumina官方bcl2fastq生成的默认名字经常带下划线,如果你自己写脚本重命名,注意不要把“S1_L001”中的下划线漏掉,否则下游工具会报错“unknown format”。
4.2 SRA标准命名:NCBI的门规
如果你要把数据提交到NCBI的SRA数据库,或者从SRA下载数据,那就得认识另一套命名。SRA的命名不是给文件用的,而是给每一个测序记录(run)分配的唯一标识。
你见过类似SRR1234567、ERR1234567、DRR1234567这样的吗?这三个前缀就代表了不同的数据来源:
| 前缀 | 含义 |
|---|---|
| SRR | NCBI SRA的Run记录 |
| ERR | EBI ENA的Run记录 |
| DRR | DDBJ的Run记录 |
为什么会分成三家?其实它们组成了国际核苷酸序列数据库联盟(INSDC),各管各的区域,但数据是互通的。不过我建议你先搞清楚自己用的是哪家数据库的编号,否则下载时搜不到会以为是数据丢了。
SRA命名还有层级结构。我习惯理解成“树状”:SRA实验(SRX) → SRA样本(SRS) → SRA运行(SRR)。你拿到的FASTQ文件通常是SRR开头的,但如果你想知道这个run属于哪个实验,查SRX就对了。
# SRA命名示例(fastq-dump输出的默认文件名)
SRR1234567.fastq.gz
# 如果启用了拆分,双端数据会变成:
SRR1234567_1.fastq.gz
SRR1234567_2.fastq.gz
注意:SRA命名不是给本地元数据嵌入用的。如果你从SRA下载了数据,建议你在文件名上附加你自己的样本信息,例如:SRR1234567_LiverTumor_Rep1_R1.fastq.gz。纯数字命名到了项目后期会让你疯掉的——我试过。
4.3 10X Genomics命名:单细胞特有的“长名字”
单细胞测序的用户们,你们接触的命名又是另一回事。10X Genomics的Cell Ranger软件生成的文件名,按官方规范可以很长很长,典型例子:
SampleName_S1_L001_R1_001.fastq.gz
SampleName_S1_L001_R2_001.fastq.gz
SampleName_S1_L002_R1_001.fastq.gz
SampleName_S1_L002_R2_001.fastq.gz
看到没?和Illumina的15位非常像,但有一个关键区别:R1和R2的意义不同。在10X系统中:
- R1:通常是16个碱基,包含细胞Barcode和UMI(Unique Molecular Identifier)
- R2:通常是91个碱基,是实际的转录本序列
也就是说,你不能把10X的R1当成普通RNA-seq的R1来分析。我见过有人用传统的比对工具直接跑10X的R1,结果发现几乎对不上基因组——废话,因为R1里存的是barcode而不是cDNA。
还有一点,10X多次强调文件名中的L001、L002等泳道编号不能合并,否则Cell Ranger会认为数据来自同一泳道而报错。我在项目中遇过这个问题,折腾了俩小时才发现是合并后泳道编号不一致导致的。
10X命名的关键字段:
SampleName:你自己定的样本名(别带特殊字符)
S1:样本在测序flowcell中的索引
L001:泳道编号,双端必须匹配同一泳道
R1/R2:读段方向(10X中R1是barcode+UMI,R2是序列)
001:文件拆分序号(如果多文件则递增)
4.4 三种命名的对比如下表:快速参考
| 特性 | Illumina 15位 | SRA标准 | 10X Genomics |
|---|---|---|---|
| 前缀/格式骨架 | SampleID_S1_L001_R1_001 |
SRR/ERR/DRR + 数字 |
与Illumina类似,但R1/R2内容不同 |
| 是否唯一 | 可重复(取决于用户命名) | 全局唯一 | 可重复(取决于项目命名) |
| 主要用途 | 本地管理、测序中心输出 | 公共数据库存档 | 10X生信流程输入 |
| 是否包含元数据 | 部分(样本/泳道/方向) | 极少(仅编号) | 部分(样本/泳道/方向) |
| 解析难度 | 中等(字段定长) | 低(纯数字) | 中等(可用正则) |
技巧:如果你需要在同一项目中混合这三种命名来源(比如公共数据 + 本地测序数据 + 10X数据),建议建立一个映射表,把SRR编号、本地样本名、10X样本名一一对应起来。我曾经用Excel做的,后来发现用YAML或JSON更不易出错:
samples:
- srr: SRR1234567
local_name: LiverTumor_Rep1
tenx_name: LT1_S1
- srr: ERR7654321
local_name: Normal_Rep2
tenx_name: NR2_S2
你想想看,这三种命名其实代表了三类典型的元数据嵌入实践:Illumina式的“把关键字段塞进文件名”、SRA式的“纯编号+依赖数据库查表”、10X式的“延续Illumina但改变字段语义”。搞清楚了它们,你后面自己设计命名规则时就心里有底了。
好,这一章就到这里。三种命名规则,你记住了吗?