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但改变字段语义”。搞清楚了它们,你后面自己设计命名规则时就心里有底了。

常见FASTQ命名约定对比 Illumina 15位 SampleID + S# + L# + R# 元数据:样本/泳道/方向 适用:本地管理、测序中心 SRA标准命名 SRR / ERR / DRR + 数字 元数据:极少(仅编号) 适用:公共数据库存档、下载 10X Genomics 类似Illumina但R1含barcode 元数据:R1≠R2(barcode/序列) 适用:单细胞生信流程 选择合适的命名作为元数据嵌入基础 命名嵌入元数据原则 1. 字段定长且顺序固定 → 方便下游解析 2. 避免特殊字符(空格、+, - 等) 3. 保留各级索引,不随意合并

好,这一章就到这里。三种命名规则,你记住了吗?