欢迎关注”生信修炼手册”!
计算测序深度是数据分析中的一个常规操作,常用的工具有以下几种
1. samtools depth
命令如下
samtools depth input.bam > sample.depth
2. samtools mpileup
命令如下
samtools mpileup -A -Q 0 chrY.bam | cut -f1,2,4 > sample.depth
3. bdetools genomecov
命令如下
bedtools genomecov -ibam input.bam -d > sample.depth
尽管方法不同,但是输出结果的格式是相同的,示意如下
第一列是染色体名称,第二列是染色体上的坐标,第三列是对应的测序深度。原本以为计算测序深度就是这么轻松的一件事,但是在比较不同方法的输出结果时,却发现部分区域samtools计算的结果和bedtools的结果对应不上,结果如下
第三列为samtools软件计算出来的结果,第四列为bedtools软件计算出来的结果,可以看到,samtools的结果比bedtools少了很多。
为了确定这段区域真实的测序深度,将bam文件导入IGV软件之中进行查看,对应区域的结果如下
从reads来看,确实应该是10和16条,那么samtools计算出来的结果又是什么, 总不可能是samtools的bug吧,作为一个应用这个广泛的软件,不可能有如此低级的错误。
从结果来看,samtools在计算depth的过程中对reads进行了过滤,那么它过滤的原则是什么呢?通过查看bam文件中第二列的flag我找到了规律,143-150bp的reads有以下10条
第二列的flag含义如下
0x91 145 PAIRED,REVERSE,READ2
0x163 355 PAIRED,PROPER_PAIR,MREVERSE,READ1,SECONDARY
0x63 99 PAIRED,PROPER_PAIR,MREVERSE,READ1
可以看到,其中有一个SECONDARY比对,对应数字355,这样的reads有4条,去除这4条之后,就是samtools计算的最终结果了。
作为SAM文件的官方操作工具,samtools内置了对flag的过滤, 而bedtools默认没有进行这样的过滤,只是简单统计了该区域比对上的reads数目。
在使用IGV展示测序深度时,可以用igvtools先计算出tdf文件再导入IGV中,这样比直接导入bam文件快很多。在tdf文件中,其测序深度和bedtools软件的计算结果是一致的,也是只统计了read数目,没有做过滤。
·end·
—如果喜欢,快分享给你的朋友们吧—
原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!
本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
更多精彩
写在最后
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。
扫描下方二维码,关注我们,解锁更多精彩内容!
一个只分享干货的
生信公众号