繁体   English   中英

使用 Pysam 访问特定位置的 Bam 文件

[英]Accessing Bam file at particular location using Pysam

我有一个给定的染色体编号和位置(chr1 和位置 1599812)。 我想使用 python 的 pysam 模块来访问 bam 文件,以获取仅该特定区域 chr1 和位置 1599812 的读取数字信息。我曾尝试使用 pileup pileup()但它需要一系列位置,而在我的情况下,我只想要一个特定的位置,而不是一个范围。

我不认为pileup()是你想要的 - 根据pysam API ,这个函数返回“基因组位置上的迭代器”,特别是“返回与该区域重叠的'所有'读取。返回的第一个碱基将是第一次读取的第一个碱基'不一定是查询中使用的区域的第一个碱基。”

您是说要获取“读取数字信息”——即该特定位置的读取次数,对吗? 为此, count_coverage()应该完成这项工作。 在你的情况下,我认为这段代码应该给你你正在寻找的答案:

import pysam

my_bam_file = '/path/to/your/bam_file.bam'
imported = pysam.AlignmentFile(my_bam_file, mode = 'rb')  # 'rb' ~ read bam
coverage = imported.count_coverage(
                  contig = '1',     # Chromosome ID; also might be "chr1" or similar 
                  start = 1599812,
                  stop = 1599813,
                  )
print(coverage)

请注意,这是有效的,因为如pysam API 词汇表中所述,pysam 使用半开区间,因此范围 [1599812, 1599813) 将恰好包含一个碱基对。

运行上面的代码会给你这样的东西:

> (array('L', [0]), array('L', [0]), array('L', [0]), array('L', [0]))

这是一个数组元组,分别包含覆盖该基因组位置的读数中的 A、C、G 和 T 碱基的数量。 如果您只是对映射到此特定基因组位置总数的读取数感兴趣,则可以对这个元组求和:

import numpy as np

print(np.sum(coverage))

如果您设置相同的开始和结束,则堆积将仅参考该特定位置。 例如(纯 samtools):

$ samtools mpileup -r chr1:808957-808957 YourFile.bam
chr1    808957  N   102 READSTRING READQUALITYSTRING

显示 102 个读数,覆盖了染色体 1 的位置 808957。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM