Samtools
Samtools 是一套用于解析和处理高通量测序(HTS)数据的开源软件工具集,由著名生物信息学家 Li Heng(李恒)等人开发。它是生物信息学领域最基础、引用率最高的工具之一,被誉为处理 SAM / BAM / CRAM 格式文件的“瑞士军刀”。
与基于 Java 的 Picard 不同,Samtools 采用 C语言 编写,以速度快、内存占用低著称,非常适合在服务器端处理海量数据。
它不仅支持格式转换(如 SAM 转 BAM)、排序、索引和去重,还包含了一个轻量级的变异检测模块(mpileup/bcftools),是构建各类基因组分析流程(Pipeline)的基石。
核心指令:不仅是格式转换
Samtools 的功能覆盖了测序数据处理的各个环节。对于生物信息分析师而言,熟练掌握以下命令是基本功。
| 指令 (Command) | 典型用途 | 应用场景 |
|---|---|---|
samtools view |
SAM ↔ BAM 互转; 提取特定区域的 Reads。 |
view -bS input.sam > output.bam这是最常用的命令,将比对器输出的大体积文本转为二进制。 |
samtools sort |
按染色体坐标排序。 | 后续的索引(Index)、去重(MarkDup)和变异检测(Variant Calling)都要求 BAM 必须是排序过的。 |
samtools index |
生成 .bai 索引文件。 | 使得 IGV 或 GATK 可以随机访问文件中的任意位置,而无需从头读取。 |
samtools tview |
文本模式的基因组浏览器。 | 在没有图形界面的 Linux 服务器上,快速查看某个位点的比对情况(类似简易版 IGV)。 |
HTSlib 与 BCFtools:三驾马车
Samtools 并不是孤立存在的,它与底层的 HTSlib 以及兄弟软件 BCFtools 共同构成了处理测序数据的完整生态。
- HTSlib: 一个独立的 C 语言库,提供了读取和写入 SAM/BAM/CRAM/VCF 文件的底层 API。Samtools 和 BCFtools 都是基于 HTSlib 构建的。
- BCFtools: 专注于变异检测(Variant Calling)和 VCF 文件操作。早期的 samtools 包含一个
mpileup命令用于生殖系变异检测,现在该功能通常配合bcftools call使用。 - 生态位: Samtools 负责比对数据(BAM),BCFtools 负责变异数据(VCF),HTSlib 负责底层 I/O。
关键相关概念 [Key Concepts]
1. Flagstat: Samtools 提供的一个快速质控命令。它能瞬间统计出 BAM 文件中有多少条 Reads,其中多少条比对上了(Mapped),多少条是成对的(Paired),多少条是 PCR 重复。是拿到 BAM 文件后的必做步骤。
2. Random Access (随机访问): Samtools 的核心优势。配合 .bai 索引,samtools view 可以直接提取染色体特定区域(如 chr1:1000-2000)的数据,耗时仅需毫秒级,而无需遍历几十 GB 的文件。
3. Pipe (管道操作): Samtools 支持 Linux 管道流(stdin/stdout)。这意味着你可以将 bwa mem 的输出直接通过 | 传递给 samtools view 再传递给 samtools sort,全程不生成中间文件,极大地节省了磁盘 I/O。
学术参考文献 [Academic Review]
[1] Li H, Handsaker B, Wysoker A, et al. (2009). The Sequence Alignment/Map format and SAMtools. Bioinformatics.
[点评]:Samtools 的创世论文。不仅定义了软件,更定义了 BAM 文件格式标准,是生物信息学领域引用率最高的文献之一(引用数 > 30,000)。
[2] Danecek P, Bonfield JK, Liddle J, et al. (2021). Twelve years of SAMtools and BCFtools. GigaScience.
[点评]:综述性文章。回顾了 Samtools 十多年的发展历程,介绍了 CRAM 格式的支持以及算法性能的显著提升。