理解sam/bam flags

sam/bam是目前通用的比对文件格式,其第二列称为flag,用于表征当前read及其mate的某些‘property’。每一个特定的property都由一个固定的数字来代表,对read的所有property对应的数字求和就得到...

sam/bam是目前通用的比对文件格式,其第二列称为flag,用于表征当前read及其mate的某些‘property’。每一个特定的property都由一个固定的数字来代表,对read的所有property对应的数字求和就得到了该read的flag。


这其中需要解决一个问题,即保证不同property组合的数字求和是唯一的。只有保证这样的唯一性,在依据flag逆向解析property时才能保证完全正确。在刚刚接触sam/bam文件时,我注意到property对应的数字(例如1,2,4等)都是2^n,其中n=0,1,2,……,但依然不明白为什么这些数字可以保证组合的唯一性。直到很久之后,我在某处看到将这些数字转换为二进制之后的结果,才理解其中的原理。


attachments-2019-11-y2TrFHg15dc3db7eddbf9.png

如上图所示,对每一个property的十进制数字进行二进制转换,得到的数字在第一位为1而其他位全为0,且这些数字的位数为1,2,……,12,依次对应一种properity。这样任意property组合的求和结果将是特异的,即满足了上文提到的唯一性。而实际上,如果用0对求和结果左侧补全至12位之后,可以依次考察它的每一位,为1表示read具有该位所代表的property,为0表示read不具有该位所代表的property。下图展示一个例子:


attachments-2019-11-WQSanf2D5dc3e872b0a82.png


有人会问,为什么不直接用1,10,100,……等类似的十进制数字直接表示各种property呢?部分原因是这些十进制数比二进制数占用的内存空间小很多,另外可能在计算中使用二进制会更快更便捷。


相信到这里大家对sam/bam flags,以及对二进制的实际应用有了进一步的认识。



参考资料:

<https://www.samformat.info/sam-format-flag-single>

<https://davetang.org/muse/2014/03/06/understanding-bam-flags/>


  • 发表于 2019-11-07 18:17
  • 阅读 ( 43 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
余胜
余胜

1 篇文章

作家榜 »

  1. 张旭东 3 文章
  2. 余胜 1 文章
  3. 李国成 0 文章
  4. zsqh 0 文章
  5. Haixia Wang 0 文章
  6. 任静 0 文章
  7. 葛键 0 文章
  8. Hui 0 文章