介绍

SAM(Sequence Alignment/Map)格式是用于存储和描述高通量测序比对结果的标准格式。SAM 文件是纯文本格式,而 BAM(Binary Alignment/Map)文件是其二进制形式,二进制文件占用的磁盘空间比文本文件小,同时运算速度快。

非常多的比对软件可以生成SAM格式,如 HISAT2、bwa、minimap2 等。samtools 专门用于处理 SAM 和 BAM 文件的工具集,包括排序、索引、格式转换等。

https://samtools.github.io/hts-specs/SAMv1.pdf

格式

SAM 由两部分组成,都以 tab 分隔:

  1. 头部(Header Section)区:以“@”开始,提供了一些比对的总体信息。比如比对的SAM格式版本、比对的参考序列、比对使用的命令行信息等。这一部分是可选的(optional)。
  2. 主体区/比对数据(Alignment Section):比对结果,每一行存储一个比对结果,一共 11 个必须列,还可以添加多个可选列。

以下是一个例子,显示出实际比对效果以及在 SAM 文件中的样子,其中:

  • r001/1 和 r002/2: 组成了一个 read pair,分别对应双端测序的 R1 和 R2
  • r002
  • r003: 嵌合 read(chimeric read),可以看出 r003 同时比对到多个地方
  • r004: 剪切比对

格式介绍 | sam - 图1

格式介绍 | sam - 图2

头部区

@HD

头部行,描述文件格式版本和排序信息。可选,但如果存在的话,只能出现一次并且必须在第一行。

  • VN: SAM 格式文件的版本
  • SO: 比对的排序顺序。可以是:unknown (default)、unsortedquerynamecoordinate
  • GO: 比对的分组,。可以是:none ()、query () 和 reference ()
  • SS:

@SQ

序列行,描述参考序列的 ID 和长度

  • SN:
  • LN:
  • AH:
  • AN: 备选的参考序列名称
  • AS: 基因组组装标识
  • DS: 描述
  • M5: MD5
  • SP: 物种
  • TP: 分子拓扑,可以是:linear (default) 和 circular
  • UR:

@RG

read 组行,描述读组信息,数据编号信息,GATK软件运行时输入的SAM格式文件中必须含有该信息。

  • ID: read 的分组标识符。每一个 @RG 行必须有一个唯一 ID
  • BC: 标识样本或文库的 barcode 序列。
  • CN: 生成 read 的测序中心的名字
  • DS: 描述
  • DT: 生成日期
  • FO: 流动槽顺序
  • KS:
  • LB: 文库
  • PG: 生成 read 分组的程序
  • PI: 预测的 insert size 中值,约入临近的整数值
  • PL: 测序平台。可以是:CAPILLARY|DNBSEQ (MGI/BGI) |ELEMENT| HELICOS|ILLUMINA|IONTORRENT|LS454|ONT|PACBIO|SINGULAR|SOLID|ULTIMA
  • PM: 测序平台 model
  • PU: 测序平台 unit
  • SM: 样本

@PG

程序行,描述生成文件所用的程序信息(所用比对软件,版本,命令行信息)。

  • ID: 程序记录标识符。每一个 @PG 行必须有一个唯一 ID
  • PN: 程序名
  • CL: 命令行
  • PP:
  • DS: 描述
  • VN: 程序版本

@CO

注释行,任意的注释信息。

  1. @HD VN:1.0 SO:unsorted # VN是版本格式;SO表示比对排序类型,有unkown(default),unsorted,queryname和coordinate几种。
  2. @SQ SN:chr01 LN:9401 # 参考基因组序列条数有多少,就会有多少相应的@SQ行数。
  3. @RG ID:sample01 SM:sample1 PL:Illumina # 若对数据进行编号,则将其信息记录在@RG中
  4. @PG ID:bowtie2 PN:bowtie2 VN:2.0.0-beta7 CL:bowtie2 ... # 所用比对软件,版本,命令行信息。

主体区(必须)

格式介绍 | sam - 图3

第 1 列:QNAME

查询序列的名称。

第 2 列:FLAG

按位计算值,值变成二进制后,不同位表示相应的比对信息。

https://broadinstitute.github.io/picard/explain-flags.html

格式介绍 | sam - 图4

  • 1: 该 read 是成对的 Paired reads 中的一个
  • 2: Paired reads 中每个都正确比对到参考序列
  • 4: 该 read 没有比对到参考序列上
  • 8: 与该 read 成对的另一端的 read 没有比对到参考序列上
  • 16: 该 read 和参考序列相比,是反向互补的
  • 32: 与该 read 成对的另一端的 read 是反向互补的
  • 64: 在 Paired reads 中,该 read 是第 1 条
  • 128: 在 Paired reads 中,该 read 是第 2 条
  • 256: 非最优的比对结果
  • 512: 没有通过质量控制
  • 1024: PCR 重复或光学重复
  • 2048:

第 3 列:RNAME

参考序列的名称。如果存在头部区的 @SQ 行,RNAME 会是 SQ-SN tag 中的一个。

第 4 列:POS

比对起始位置(1-based)。

第 5 列:MAPQ

比对质量得分。

第 6 列:CIGAR

描述比对结果信息:匹配碱基数,可变剪接等。

格式介绍 | sam - 图5

第 7 列:RNEXT

匹配的另外一条序列,比对上的参考序列名。

第 8 列:PNEXT

比对终止位置(1-based)。

第 9 列:TLEN

插入片段长度。

第 10 列:SEQ

和参考序列在同一个链上的比对序列(若比对结果在负义链上,则序列是反向重复序列)。

第 11 列:QUAL

比对序列的碱基质量(ASCII-33=Phred base quality)。

主体区(可选)

可选的列均以 TAG:TYPE:VALUE 的形式提供信息。其中,

  • TAG 是一个两个字母的字符串。在每一个比对行中,TAG 出现不能超过两次,其出现的顺序也并不重要。
  • TYPE 是一个区分大小写的字母,定义了 VALUE 的格式。

格式介绍 | sam - 图6

参考

  1. https://samtools.github.io/hts-specs/SAMv1.pdf
  2. https://jef.works/blog/2017/03/28/CIGAR-strings-for-dummies/
  3. 生信技能树 | 【直播】我的基因组(十三):了解sam格式比对结果
  4. https://en.wikipedia.org/wiki/SAM_(file_format))
  5. 简书 | 生信阿拉丁 | Sam/Bam文件格式详解
  6. https://zhuanlan.zhihu.com/p/35574870
  7. NGS数据格式02-SAM/BAM最详细解读 - pythonic生物人的文章 - 知乎 https://zhuanlan.zhihu.com/p/158719525
  8. https://mp.weixin.qq.com/s/q6hiMWGscwaAVcNd9IFCpQ