分别用samtools coverage和bedtools bedcov计算区域内的Reads数,得到的结果不一致。
软件版本
- samtools 1.18
问题
- samtools coverage的-r参数只能输入1个区域。
- samtools bedcov可以统计整个bed文件的所有区域。
- 但是coverage和bedcov -c,统计同一个bam文件的同一个区域,得到的Reads数不一样。
原因
- bedcov和mpileup一样,受-d depth限制,只统计到设定的深度上限,再多的Reads就不统计了。
- coverage默认的-d是1000000。bedcov的帮助文档没写是多少。
具体参数
bedcov帮助文档
- -d参数:设置此参数后,结果会多一列,是参考碱基超过-d设定的深度的数量
- -c参数:设置此参数后,结果会多一列,是这个区域内的Reads数量
coverage帮助文档
- -d参数:最大深度阈值,默认1000000(一百万),如果设置为0则阈值是整形变量的最大值,相当于没有任何深度限制。
详细说明
- bedcov的-d参数统计有多少个参考碱基超过-d设定的深度,没有注明默认值是多少,当-d有设置值时,会在第4列的总碱基数量后面多1列结果,是参考碱基超过-d设定的深度的数量。但实际上结果中第4列的总碱基数量以及-c统计出的Reads数,都会受到-d限制。
- 在-d不设置的状态下,-c统计出的Reads数最高只会有64020,但是当-d设置为1000000时,Reads数会统计出更高的结果,而且数量与coverage模块的默认参数(-d 1000000)一样。
- coverage模块的-d参数如果设置为0,会去除深度限制。但是如果bedcov模块的-d设置为0,不会去除深度限制,只是总碱基数量后面会多1列,统计有多少个参考碱基深度超过0。
- 查看bedcov的源码,samtools/bedcov.c at 1.18 · samtools/samtools (github.com)
- 默认最大深度阈值应该是DEFAULT_DEPTH 64000(第43行)
- -d输入的参数应该是min_depth(第120行)
- 如果min_depth > 64000则用min_depth作为最大深度阈值,否则64000就是最大深度阈值(第223~226行)
测试代码
1 | echo "# samtools coverage #" |