sam/bam 是一种序列比对格式标准,由sanger制定,是以TAB为分割符的文本格式。主要应用于测序序列mapping到基因组上的结果表示,当然也可以表示任意的多重比对结果。通常是把FASTQ文件格式的测序数据比对到对应的参考基因组版本得到的。
header 部分
sam 分为两部分,注释信息(header section )和比对结果部分 (alignment section)。通常是把FASTQ文件格式的测序数据比对到对应的参考基因组版本得到的。注释信息并不是SAM文件的重点,是该SAM文件产生以及被处理过程的一个记录,规定以@开头,用不同的tag表示不同的信息,主要有:
- @HD,说明符合标准的版本、对比序列的排列顺序;
- @SQ,参考序列说明;
- @RG,比对上的序列(read)说明;
- @PG,使用的程序说明;
- @CO,任意的说明信息。
samtools 查看 header 命令
samtools view -H <.bam>
比对部分
比对部分我们主要看前 11 列
-
QNAME: read 名称
-
FLAG: 概括出一个合适的标记,不同的数字代表不同的含义
第二列是对应的十六进制数,对应的二进制如下
- 1 :代表这个序列采用的是PE双端测序
- 2: 代表这个序列和参考序列完全匹配,没有插入缺失
- 4: 代表这个序列没有mapping到参考序列上
- 8: 代表这个序列的另一端序列没有比对到参考序列上,比如这条序列是R1,它对应的R2端序列没有比对到参考序列上
- 16:代表这个序列比对到参考序列的负链上
- 32 :代表这个序列对应的另一端序列比对到参考序列的负链上
- 64 : 代表这个序列是R1端序列, read1;
- 128 : 代表这个序列是R2端序列,read2;
- 256: 代表这个序列不是主要的比对,一条序列可能比对到参考序列的多个位置,只有一个是首要的比对位置,其他都是次要的
- 512: 代表这个序列在QC时失败了,被过滤不掉了(# 这个标签不常用)
- 1024: 代表这个序列是PCR重复序列(#这个标签不常用)
- 2048: 代表这个序列有一部分嵌合了 PCR 引物
最终的数值是符合上面条条件的数字加起来的值,比如 $99 = 1+2+32+64$,
也可以用二进制运算给算出来:>>> bin(99) '0b1100011' # 其实就是 0000 0000 0001 + 0000 0000 0010 + 0000 0010 0000 + 0000 0100 0000
我们也可以通过这个值快速计算是不是完全匹配,或者判断是否符合其他条件
>>> 99 & 2 2 # 返回为真值就代表是完全匹配
-
RNAME: 参考基因组的染色体名称
-
POS: 比对到参考基因组上的位置
-
MAPQ: 比对质量, 255 表示比对质量不可用
-
CIGAR:
- “M”表示 match或 mismatch;
- “I”表示 insert;
- “D”表示 deletion;
- “N”表示 skipped(跳过这段区域);
- “S”表示 soft clipping(被剪切的序列存在于序列中);
- “H”表示 hard clipping(被剪切的序列不存在于序列中);
- “P”表示 padding;
- “=”表示 match;
- “X”表示 mismatch(错配,位置是一一对应的);
-
RNEXT: read2 在参考序列上的染色体名称,如果没有就用 "*", 相同"="
-
PNEXT: read2 在参考序列上的位置
-
TLEN: 插入片段的长度
-
SEQ: read 序列
-
QUAL: read 质量
比对部分的其他信息
从第 12 列开始信息就不固定了, 格式是 TAG:TYPE:VALUE
大家了解一下就好
参考资料
https://samtools.github.io/hts-specs/SAMv1.pdf
https://samtools.github.io/hts-specs/SAMtags.pdf