Доступ к файлу Bam в определенном месте с помощью Pysam

У меня есть номер хромосомы и местоположение (chr1 и местоположение 1599812). Я хочу использовать модуль pysam в python для доступа к файлу bam для получения информации о числах чтения только для этого конкретного региона chr1 и местоположения 1599812. Я попытался использовать pileup() но это требует диапазона местоположений, тогда как в моем случае я хочу только определенное местоположение, а не диапазон таких.

1 ответ

Я не думаю 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)

Обратите внимание, что это работает, потому что, как указано в глоссарии API pysam, 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 читает, покрывая положение 808957 для хромосомы 1.

Другие вопросы по тегам