BAM
BAM(Binary Alignment Map,二进制比对图)是生物信息学中用于存储序列比对数据的标准文件格式。它是 SAM(Sequence Alignment/Map)格式的二进制压缩版本。
BAM 文件由 Li Heng 等人(Samtools 团队)开发,旨在解决文本格式(SAM)体积庞大、读取速度慢的问题。它采用了专门的 BGZF 压缩算法,既大大减小了文件体积(通常为 SAM 的 1/4),又支持随机访问(Random Access)。
在几乎所有的现代基因组分析流程(如 GATK 变异检测)中,BAM 都是核心的中间数据格式,用于连接上游的比对(Mapping)和下游的变异检出(Variant Calling)。
从文本到二进制:为什么需要 BAM?
虽然 SAM (Sequence Alignment/Map) 格式人类可读(Human-readable),但它对于计算机来说处理效率极低。BAM 的设计初衷就是为了解决这个问题。
| 特性 | SAM (文本) | BAM (二进制) |
|---|---|---|
| 体积 | 巨大 (100GB+) | 压缩 (约 25-30GB) |
| 可读性 | 可以直接用文本编辑器打开 | 乱码,需用 samtools view 查看 |
| 随机访问 | 不支持 (必须从头读到尾) | 支持 (需配合 .bai 索引) |
| 应用场景 | 中间查看、调试 | 存储、分析、IGV 可视化 |
核心机制:索引与随机访问
BAM 文件之所以能被 IGV 快速加载,或被 GATK 并行处理,完全归功于其索引机制。
- BGZF 压缩: BAM 并非一个大的压缩包,而是由许多独立的 64KB 小压缩块(Blocks)串联而成。这使得软件可以解压文件的任意一部分,而无需解压整个文件。
- BAI 索引 (.bai): 类似于书籍的目录。它记录了每条染色体的特定位置(坐标)在 BAM 文件中的字节偏移量(Offset)。
- 使用规则: 在进行任何下游分析前,必须对 BAM 文件进行排序(Coordinate Sort),并生成索引文件。BAM 和 BAI 必须同名且在同一目录下。
关键相关概念 [Key Concepts]
1. CIGAR String (雪茄串): 描述 Read 如何比对到参考序列上的字符串。例如 100M 表示 100 个碱基完全匹配;50M2I48M 表示中间有 2 个碱基的插入(Insertion)。它是 BAM 记录对齐信息的核心。
2. Bitwise Flag (位标识): 一个整数(如 99, 147, 4),其二进制形式的每一位代表不同的含义(如:是否配对、是否反向互补、是否 PCR 重复)。使用 samtools flags 可以解读其含义。
3. CRAM: 下一代格式。比 BAM 压缩率更高(体积减小 30-50%),因为它只记录与参考基因组不同的碱基。随着数据量激增,CRAM 正在逐渐取代 BAM。
学术参考文献 [Academic Review]
[1] Li H, Handsaker B, Wysoker A, et al. (2009). The Sequence Alignment/Map format and SAMtools. Bioinformatics.
[点评]:SAM/BAM 格式的奠基论文。定义了该格式的标准规范,至今仍是生物信息学引用率最高的文献之一。
[2] Bonfield JK, et al. (2021). The SAM/BAM/CRAM format specifications. GitHub / HTS-Specs.
[点评]:GA4GH 组织维护的官方技术文档,详细规定了 BAM 文件的每一个字节如何定义,是开发者必须遵循的“法律”。