比对结果文件 Bam 文件格式介绍
bam
文件格式是生物信息最常用的文件格式,主要用于记录序列比对情况。一般测序下机数据的比对结果,均以该格式进行存储。而用于序列比对的工具,如blast
也提供了bam
格式的输出形式。因此可以说,对生物信息学工具的优化和开发,几乎不可避免地需要对bam
处理,对于基础用户而言,可能经常用到samtools
来进行。
1. SAM 格式详解
要说明bam
文件的内容,需要首先介绍sam
文件的内容。上一篇内容中已经介绍了,sam
文件是记录比对信息的标准结构化文件,从总体上可以分为两个部分
1.1 SAM 文件头部
sam 文件头部信息以@
作为开头,对比对结果的meta信息进行记录,主要涵盖了文件标准格式版本(VN)、比对中使用的参考序列信息(SQ)、测序数据分组信息(RG)、比对或后期处理使用的程序信息(PG)等。上述内容是sam文件标准规定的,因此一般sam文件中必须存在。
不仅如此,用户也可以根据后期分析需要自定义一系列自定义的信息,最为常用的就是UMI标签信息,在此就不展开描述了,关于sam文件头部信息的细节可以参考其格式说明手册。
1.2 SAM 文件中比对信息
sam
文件的比对信息中,每一行是由固定的11列的组成的。其信息内容见下表:
列编号 | 列名称 | 类型 | 说明 |
---|---|---|---|
1 | QNAME | String | query序列名称 |
2 | FLAG | Int | FLAG标签,主要记录比对的基本情况,取值为2的整数次幂 |
3 | RNAME | String | 比对至参考序列的名称,例如:chr1 |
4 | POS | Int | 比对至参考序列的位置 |
5 | MAPQ | Int | 比对质量,不同的比对软件对其定义不尽相同 |
6 | CIGAR | String | 比对的CIGAR字符串,下文有详细说明 |
7 | RNEXT | String | 对于illumina平台的数据而言,该部分指read2比对到的参考序列位置名称,例如:chr2 |
8 | PNEXT | Int | 与RNEXT类似,表示read2比对的参考序列位置 |
9 | TLEN | Int | 比对序列对应的模板(Template)长度 |
10 | SEQ | String | query序列 |
11 | QUAL | String | query序列的碱基质量Phred值 |
上述11列信息,是SAM文件必要的组成部分。除此之外,每行可以追加可选信息。该部分信息以TAG:TYPE:VALUE
形式存储。详细介绍可参考官方文档。值得注意的是,追加信息标签(TAG)的标准定义是一直在不断更新的,基本上每年都会有新增标签加入。
2. 压缩概览
由于本人背景知识有限,因此只能简要描述一下数据压缩相关内容。 对于测序数据这种本质上含有大量冗余的数据而言,如果单纯对每个信息进行记录则会造成非常大的存储资源的浪费。由于数据存在着重复信息,因此一个比较直接的思路就是,对数据中多次出现的部分进行编码,然后对于第一此出现该信息以外的部分,以一定的标识进行替代。当然,被替代的信息长度,应该大于标记信息长度。这样,当压缩软件和解压软件遵守同一套标准的前提下,数据在存储设备上就可以以相对较小的空间,记录完整的信息。
3. BAM 文件
bam
文件作为sam
文件的压缩版本,记录的信息本质上是一样的。但是对其进行了BGZF压缩。该压缩的目的,在减少存储消耗的前提下,提供在有索引的前提下,提供快速的随机访问的功能。
在存储介质上,BGZF文件是由一系列BGZF块(BGZF block)组成的,每个块大小不超过64Kb,每个块的组成见下图
以块数据为基本单位,bam
文件记录如下:
上述表格中基本信息与sam
文件的内容存在对应关系,但其每个记录的类型存在转化关系,以seq信息为例,在sam
文件中是以字符串形式存储的,在bam文件中,该项则是将字符串集转化为了[0,15]的整数进行存储。
因此,一般的linux字符处理工具(如cat、head)是无法直接处理bam文件的读取、修改、查询的。在实际处理过程中,经常使用samtools
和htslib
提供的接口对bam
文件进行处理。目前生信分析常用的主流语言中基本上都涵盖了处理bam
文件的扩展,例如python语言中的pysam
,R中的Rsamtools
等。
小结
sam
和bam
文件是处理测序数据接触的相对较为复杂的第一个文件结构。对于sam
文件为平面文件,相对而言易于查看和处理,但是由于其占用存储空间过大,因此在实际使用中不保存。bam
文件作为sam
文件的压缩版本,采用的压缩方式为BGZF压缩格式,该格式在介质上的存储单位为64Kb 的block。bam
文件记录的信息与sam
相同,但存储空间占用却小很多。
关于bam
文件的索引及后续内容,今后也会陆续分享给大家。欢迎各位读者持续关注 :D