介绍
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 分隔:
头部(Header Section)区
:以“@”开始,提供了一些比对的总体信息。比如比对的SAM格式版本、比对的参考序列、比对使用的命令行信息等。这一部分是可选的(optional)。主体区/比对数据(Alignment Section)
:比对结果,每一行存储一个比对结果,一共 11 个必须列,还可以添加多个可选列。
以下是一个例子,显示出实际比对效果以及在 SAM 文件中的样子,其中:
- r001/1 和 r002/2: 组成了一个 read pair,分别对应双端测序的 R1 和 R2
- r002
- r003: 嵌合 read(chimeric read),可以看出 r003 同时比对到多个地方
- r004: 剪切比对
头部区
@HD
头部行,描述文件格式版本和排序信息。可选,但如果存在的话,只能出现一次并且必须在第一行。
VN
: SAM 格式文件的版本SO
: 比对的排序顺序。可以是:unknown
(default)、unsorted
、queryname
和coordinate
。GO
: 比对的分组,。可以是:none
()、query
() 和reference
()SS
:
@SQ
序列行,描述参考序列的 ID 和长度
SN
:LN
:AH
:AN
: 备选的参考序列名称AS
: 基因组组装标识DS
: 描述M5
: MD5SP
: 物种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
: 测序平台 modelPU
: 测序平台 unitSM
: 样本
@PG
程序行,描述生成文件所用的程序信息(所用比对软件,版本,命令行信息)。
ID
: 程序记录标识符。每一个@PG
行必须有一个唯一ID
PN
: 程序名CL
: 命令行PP
:DS
: 描述VN
: 程序版本
@CO
注释行,任意的注释信息。
@HD VN:1.0 SO:unsorted # VN是版本格式;SO表示比对排序类型,有unkown(default),unsorted,queryname和coordinate几种。
@SQ SN:chr01 LN:9401 # 参考基因组序列条数有多少,就会有多少相应的@SQ行数。
@RG ID:sample01 SM:sample1 PL:Illumina # 若对数据进行编号,则将其信息记录在@RG中
@PG ID:bowtie2 PN:bowtie2 VN:2.0.0-beta7 CL:bowtie2 ... # 所用比对软件,版本,命令行信息。
主体区(必须)
第 1 列:QNAME
查询序列的名称。
第 2 列:FLAG
按位计算值,值变成二进制后,不同位表示相应的比对信息。
https://broadinstitute.github.io/picard/explain-flags.html
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
描述比对结果信息:匹配碱基数,可变剪接等。
第 7 列:RNEXT
匹配的另外一条序列,比对上的参考序列名。
第 8 列:PNEXT
比对终止位置(1-based)。
第 9 列:TLEN
插入片段长度。
第 10 列:SEQ
和参考序列在同一个链上的比对序列(若比对结果在负义链上,则序列是反向重复序列)。
第 11 列:QUAL
比对序列的碱基质量(ASCII-33=Phred base quality)。
主体区(可选)
可选的列均以 TAG:TYPE:VALUE
的形式提供信息。其中,
TAG
是一个两个字母的字符串。在每一个比对行中,TAG
出现不能超过两次,其出现的顺序也并不重要。TYPE
是一个区分大小写的字母,定义了VALUE
的格式。
参考
- https://samtools.github.io/hts-specs/SAMv1.pdf
- https://jef.works/blog/2017/03/28/CIGAR-strings-for-dummies/
- 生信技能树 | 【直播】我的基因组(十三):了解sam格式比对结果
- https://en.wikipedia.org/wiki/SAM_(file_format))
- 简书 | 生信阿拉丁 | Sam/Bam文件格式详解
- https://zhuanlan.zhihu.com/p/35574870
- NGS数据格式02-SAM/BAM最详细解读 - pythonic生物人的文章 - 知乎 https://zhuanlan.zhihu.com/p/158719525
- https://mp.weixin.qq.com/s/q6hiMWGscwaAVcNd9IFCpQ