1. sam 和 bam 背景知识
现在最流行的短序列比对软件就是bwa 和 bowite2,而sam文件就是通过这些比对软件进行序列比对后 产生的文件的格式。sam (sequence alignment/map)格式是一种通用的比对格式,用来存储reads到参考序列的比对信息。sam是一种序列比对格式标准,由sanger制定,是以tab为分隔符的文件格式。主要应用于测序序列mapping到基因组上的结果表示。
其实,bam文件和sam文件内容是一样的,只是bam是二进制的压缩文件,需要通过特定的软件来进行查看。所以,接下来的描述就只称呼sam啦~
2.sam的内容格式
sam分为两部分,header section (注释信息) 和 alignment section (比对结果)。
2.1 header section 注释信息
其实,在bam 或 sam 文件中,header section 都是可有可无的,它们以@开头,记录一些文件信息
- @HD 说明符合标准的版本、对比序列的排列序列
- @SQ 参考序列说明
- @RG 比对上的序列(read)说明
- @PG 使用的程序说明
- @CO 任意的说明信信息
2.2 alignment section 比对结果
alignment section 才是bam or sam 文件重要的部分,其中每一行都表示一个片段(segment)的比对信息,包括11个必须的字段(mandatory fields)和一个可选字段,字段之间用tab键分隔。其中,必须的11个字段顺序是固定的,不可用时,根据字段定义,可以为0
或*
。
了解数据就是要看得懂alignment section中每一行比对结果表达的含义,所以,要知道11个必须字段和其中1个可选字段所表达的是什么。
看一下sam的11+1个字段都包含了什么(下面的解释内容以此为例):
(1)QNANAME
比对片段的template的编号;read name (通常包括测序平台等信息)
eg: A00602:165:HTHKCDSXX:1:1101:7039:1000
(2)FLAG
位标识,template mapping情况的数字显示,每一个数字代表一种比对情况,这里的值是符合情况的数字相加获得的总和。
flag取值
1(1)该read是成对的paired reads中的一个
2(10)paired reads中每个都正确比对到参考序列上
4(100)该read没比对到参考序列上
8(1000)与该read成对的matepair read没有比对到参考序列上
16(10000)该read其反向互补序列能够比对到参考序列
32(100000)与该read成对的matepair read其反向互补序列能够比对到参考序列
64(1000000)在paired reads中,该read是与参考序列比对的第一条
128(10000000)在paired reads中,该read是与参考序列比对的第二条
256(100000000)该read是次优的比对结果
512(1000000000)该read没有通过质量控制
1024(10000000000)由于PCR或测序错误产生的重复reads
2048(100000000000)补充匹配的read
eg:图1的 flag 99
=1+2+32+64
对应提供的信息即为:
1:该read是成对的paired reads中的一个
2:paired reads中每个都正确比对到参考序列上
32:与该read成对的matepair read其反向互补序列能够比对到参考序列
64:在paired reads中,该read是与参考序列比对的第一条
因此可以看出这条read与参考基因组非常匹配
(3)RNAME
参考序列的编号(就是指 染色体位置),如果注释中对SQ-SN进行了定义,这里必须和其保持一致,另外对于没有mapping上的序列,这里是”*”
eg: chr=1
(4)POS
比对上的位置,如果没有比对上,此处为0
eg:POS=64655942
(5) MAPQ
mapping的质量,比对的质量分数,越高说明该read比对到参考基因组上的位置越唯一
eg: MAPQ=60
为什么要有mapping质量这个指标呢?
因为bowtie2 有时并不能完全确定一个短序列来自参考序列的哪个位置,特别是对那些比较简单的序列,但是bowite2会给出一个值来显示这个段序列来自某个位点的概率值,这个值就是mapping qulity。计算方法:Q=-10log10P(P是这个序列不来自这个位点的估计值)。一般结果是0-60,而且0和60这两个数字出现次数最多。数值越大说明越可靠
(6)CIGAR
简要比对信息表达式(Compact Idiosyncratic Gapped Alignment Report),以参考序列为基础,使用数字加字母表示比对结果,match/mismatch、insertion、deletion对应字母 M、I、D。比如3S6M1D1I4M(这是按照顺序来的:前3个碱基被剪切去除了,然后6个比对上了,然后又缺失了一个碱基,然后又有一个碱基插入,最后4个碱基完全匹配。)
这里插播一下clip的概念
Softclip 是指一条序列上,两端有比对不上的序列部分,虽然比对不到基因组,但是还是存在于SEQ(segment SEQuence)中的序列,在CIGAR列中对应S(Soft)的符号。直白点说,就是虽然比对不上参考基因组,但是在BAM/SAM文件中的reads上还是存在的序列(并没有被扔掉)
Hardclip 表示比对不上并且不会存在于SAM/BAM文件中的序列(被截断扔掉了的序列,此时CIGAR会留下H Hard的符号,但是序列的那一列却没有对应的序列了)
通常来说,Hardclip 是依赖于Softclip 存在的,因为Hardclip 存在的本意是降低BAM文件中序列的冗余度。例如,一条150bp的序列在其70bp处存在剪切,它能比对到参考基因组的A(70M80S)、B(70H80M)两个地方,由于这条read已经在A位置储存了完整的序列信息,因此可以在B位置引入Hardclip的标记(标记为secondary)。
eg:150M
150个碱基完全匹配
(7)RNEXT
下一个片段(相对于read 1,指对应的read2)比对上的参考序列的编号,如果read1 和 read 2对应同一个片段,用“=”表示(没有另外的片段-例如SE测序得到的read,这里是“*”)
(8)PNEXT
下一个片段(相对于read 1,指对应的read2)比对到参考序列上的第一个碱基位置,若无mate(如 单端测序)即为0
eg: Pos=64656194
(9)TLEN
估计出来的片段长度,当mate序列位于本序列上游时该值为负值
由上面可以看出(7)、(8)、(9)是mate的信息,如果是单端测序的数据,这三列都是无意义的
eg: TLEN=402
(10)SEQ
这里储存的是 序列片段的序列信息,值得注意的是CIGAR中的M/I/S=/X对应数字的和要等于序列长度
eg: NGGTGCTACTGCTGCCTGGACTTCTGTTGCAGTCCAACCTAGTACTGACACCGTATGGTTTGAAACCAGGTATGGACAAAGTAGCCAATGGGCTGAACTTAGAGTAGTATGGATGGTGATCACCAAGGAGGTGACACCTATAGTTATCTG
(11)QUAL
序列的质量信息,read质量的ASCII编码,格式同FASTQ一样
eg:
#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFF
(12)可选的字段(field)
AS:i 匹配的得分
XS:i 第二好的匹配的得分
YS:i mate序列匹配的得分
XN:i 在参考序列上模糊碱基的个数
XM:i 错配的个数
XO:i gap open 的个数
XG:i gap延伸的个数
NM:i 经过编辑的序列
YF:i 说明为什么这个序列被过滤的字符串
YT:Z
MD:Z 代表序列和参考序列错配的字符串
eg: NM:i:1 MD:Z:0A149 MC:Z:150M AS:i:149 XS:i:92 RG:Z:NULL