首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pysam.view模拟samtools视图的所有功能

如何使用pysam.view模拟samtools视图的所有功能
EN

Stack Overflow用户
提问于 2016-02-24 18:26:04
回答 1查看 523关注 0票数 1

我正在尝试使用pysam.view()从BAM文件中过滤出某些对齐。我面临的问题是如何在过滤器中包含几个区域。

pysam.view()模拟samtools视图命令,该命令允许用户进入由空格字符分隔的几个区域,例如:

代码语言:javascript
复制
samtools view opts bamfile chr1:2010000-20200000 chr2:2010000-20200000 

但是对应的pysam.view调用:

代码语言:javascript
复制
pysam.view(ops, bamfile, '1:2010000-20200000 2:2010000-20200000')

不起作用。它不返回任何路线。我很确定问题出在如何指定区域列表,因为下面的命令可以很好地工作:

代码语言:javascript
复制
pysam.view(ops, bamfile, '1:2010000-20200000')

并返回对齐。

我的问题是: pysam.view支持多个区域吗?如何指定这个列表?我已经搜索了与此相关的文档,但没有找到任何东西。

EN

回答 1

Stack Overflow用户

发布于 2019-12-13 08:20:22

对你的问题的简短回答是,你要使用的格式是

pysam.view(ops, bamfile, '1:2010000-20200000','2:2010000-20200000')

(还要注意,表示每个区域结束的数字比开始时大了大约10倍-看起来您可能打算使用2010000-2020000。)

我已经使用以下代码对其进行了测试:

代码语言:javascript
复制
import pysam

my_bam_file = '/path/to/my/bam_file.bam'
alignments1 = pysam.view(my_bam_file, '1:2010000-4000000')
alignments2 = pysam.view(my_bam_file, '1:5000000-6000000')
alignments3 = pysam.view(my_bam_file, '1:2010000-4000000', '1:5000000-6000000')

print(len(alignments1) + len(alignments2) == len(alignments3))

[Output:] True

但是,这种提取对齐的方法效率不是很高,因为您得到的输出是一个大的str,而不是单个对齐。要获取单独路线的list,请使用以下代码:

代码语言:javascript
复制
import pysam

my_bam_file = '/path/to/my/bam_file.bam'
imported = pysam.AlignmentFile(my_bam_file, mode = 'rb')
regions = ('1:2010000-20200000','2:2010000-20200000')
alignments = []
for region in regions:
    bam = imported.fetch(region = region, until_eof = True)
    alignments.extend([alignment for alignment in bam])

然后,alignment的每个元素最终成为一个pysam.AlignedSegment对象,您可以使用pysam API中的函数进一步使用该对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35599438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档