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 列

samba查看日志 sam文件查看_samba查看日志

  1. QNAME: read 名称
  2. FLAG: 概括出一个合适的标记,不同的数字代表不同的含义

第二列是对应的十六进制数,对应的二进制如下

samba查看日志 sam文件查看_samba查看日志_02

  • 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
 # 返回为真值就代表是完全匹配
  1. RNAME: 参考基因组的染色体名称
  2. POS: 比对到参考基因组上的位置
  3. MAPQ: 比对质量, 255 表示比对质量不可用
  4. CIGAR:
  • “M”表示 match或 mismatch;
  • “I”表示 insert;
  • “D”表示 deletion;
  • “N”表示 skipped(跳过这段区域);
  • “S”表示 soft clipping(被剪切的序列存在于序列中);
  • “H”表示 hard clipping(被剪切的序列不存在于序列中);
  • “P”表示 padding;
  • “=”表示 match;
  • “X”表示 mismatch(错配,位置是一一对应的);
  1. RNEXT: read2 在参考序列上的染色体名称,如果没有就用 "*", 相同"="
  2. PNEXT: read2 在参考序列上的位置
  3. TLEN: 插入片段的长度
  4. samba查看日志 sam文件查看_github_03

  5. SEQ: read 序列
  6. QUAL: read 质量

比对部分的其他信息

从第 12 列开始信息就不固定了, 格式是 TAG:TYPE:VALUE 大家了解一下就好

samba查看日志 sam文件查看_二进制运算_04


samba查看日志 sam文件查看_github_05


samba查看日志 sam文件查看_samba查看日志_06


参考资料
https://samtools.github.io/hts-specs/SAMv1.pdfhttps://samtools.github.io/hts-specs/SAMtags.pdf