Удаление BLAST-хитов с несколькими HSP - PullRequest
0 голосов
/ 22 сентября 2018

У меня большой выходной файл BLAST (outfmt 6).Я заинтересован в поиске взаимных гомологов в этом файле, но я хочу исключить попадания с несколькими HSP, например.

Seq1    Seq2    (alignment 1: evalue bitscore etc)
Seq1    Seq2    (alignment 2: evalue bitscore etc)
Seq3    Seq4    (alignment 1: evalue bitscore etc)
Seq4    Seq5    (alignment 1: evalue bitscore etc)
Seq2    Seq1    (alignment 1: evalue bitscore etc)
Seq2    Seq1    (alignment 2: evalue bitscore etc)
Seq4    Seq3    (alignment 1: evalue bitscore etc)

В этом случае в качестве выравнивания между 1 будут возвращены только выравнивания между последовательностями 3 и 4.и 2 совместно используют несколько HSP, и выравнивания между 4 и 5 имеют только однонаправленное попадание.Я надеюсь сделать это в Python, чтобы я мог подключить его с остальной частью моей программы.

Кто-нибудь может посоветовать какие-либо потоки (и т.д.), которые могут привести меня в правильном направлении?

Спасибо!

1 Ответ

0 голосов
/ 22 сентября 2018

Python отлично подойдет для этого.

from collections import defaultdict

hsp_count = defaultdict(int)
for line in open("file"):
    seq1, seq2, _ = line.split(maxsplit=2)
    hsp_count[seq1, seq2] += 1

already_checked = set()
for (seq1, seq2), val1 in hsp_count.items():
    if (seq2, seq1) in already_checked:
        continue
    val2 = hsp_count.get((seq2, seq1))
    if not val2:
        continue
    already_checked.add((seq1, seq2))
    if val1 == 1 and val2 == 1:
        print(seq1, seq2)
...