使用多个 HSP 删除 BLAST 命中
Removing BLAST hits with multiple HSPs
我有一个很大的 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 中执行此操作,以便我可以将其插入我的程序的其余部分。
任何人都可以就任何可能引导我走向正确方向的线程(等)提出建议吗?
谢谢!
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)
我有一个很大的 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 中执行此操作,以便我可以将其插入我的程序的其余部分。
任何人都可以就任何可能引导我走向正确方向的线程(等)提出建议吗?
谢谢!
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)