如何从DNA序列中获得比对分数?

时间:2017-11-01 15:08:49

标签: python biopython pairwise

我对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)?

2 个答案:

答案 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)