我对Biopython的pairwise2功能有点熟悉,但我注意到它在序列中添加了破折号以获得最佳的对齐分数。例如,
for a in pairwise2.align.globalxx("ACCGT", "ACG"):
print(format_alignment(*a))
会产生这样的结果:
ACCGT
|||||
A-CG-
Score=3
<BLANKLINE>
ACCGT
|||||
AC-G-
Score=3
<BLANKLINE>
即使第二序列中的前2个字符(A&amp; C)与第1个序列对齐。有没有办法找到对齐碱基对的数量,而不是最高数量的对齐碱基对(例如:ACTGAA序列对GCCGTA序列的得分为3)?
答案 0 :(得分:0)
如果您只是想阻止该功能添加间隙,则可以增加间隙惩罚。对齐采用参数来设置匹配分数,非匹配罚分,创建空位罚分和延长空位罚分:
pairwise2.align.globalxx("ACCGT", "ACG", 2, -1, -1, -0.5)
答案 1 :(得分:0)
所以你只想在两个序列(相同长度)中计算相同的碱基而不进行任何比对?
像这样:
seq1 = 'ACTGAA'
seq2 = 'GCCGTA'
score = 0
for a, b in zip(seq1, seq2):
if a == b:
score +=1
print(score)
以更加pythonic的方式:
seq1 = 'ACTGAA'
seq2 = 'GCCGTA'
score = sum([1 for a, b in zip(seq1, seq2) if a == b])
print(score)
请注意,此分数的反向(不同碱基的数量)将是汉明距离。虽然您可以强制Biopythons pairwise2
通过强制实施非常高的空位罚分来返回您想要的结果,但上面显示的解决方案似乎更简单。
# I don't recommend this
pairwise2.align.globalxs(seq1, seq2, -1000, -1000)