使用多个HSP删除BLAST匹配

时间:2018-09-22 10:08:18

标签: python bioinformatics biopython blast

我有一个很大的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)

在这种情况下,将仅返回序列3和4之间的比对,因为1和2之间的比对共享多个HSP,而4和5之间的比对仅具有单向命中。我希望在python中执行此操作,以便可以将其与程序的其余部分插入。

有人可以建议任何可能使我朝着正确方向发展的线程(等)吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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)