在给定比对参数的情况下,是否存在可以计算比对序列得分的功能?

| 我尝试对已经对齐的序列评分。 说吧
seq1 = \'PAVKDLGAEG-ASDKGT--SHVVY----------TI-QLASTFE\'
seq2 = \'PAVEDLGATG-ANDKGT--LYNIYARNTEGHPRSTV-QLGSTFE\'
具有给定参数
substitution matrix : blosum62
gap open penalty : -5
gap extension penalty : -1
我确实看过biopython食谱,但我能得到的只是替代矩阵blogsum62,但我觉得它一定已经有人实现了这种库。 那么有人可以建议任何可以解决我的问题的库或最短代码吗? 提前Thx     
已邀请:
杰萨达 Blosum62矩阵(请注意拼写为;)位于Bio.SubsMat.MatrixInfo中,并且是具有元组解析为分数的字典(因此
(\'A\', \'A\')
值得4分)。它没有间隙,它只是矩阵的一个三角形(因此它可能是(\'T \',\'A \')但不是(\'A \',\'T \')。Biopython中有一些辅助函数,包括Bio.Pairwise中的一些辅助函数,但这是我想出的答案:
from Bio.SubsMat import MatrixInfo

def score_match(pair, matrix):
    if pair not in matrix:
        return matrix[(tuple(reversed(pair)))]
    else:
        return matrix[pair]

def score_pairwise(seq1, seq2, matrix, gap_s, gap_e):
    score = 0
    gap = False
    for i in range(len(seq1)):
        pair = (seq1[i], seq2[i])
        if not gap:
            if \'-\' in pair:
                gap = True
                score += gap_s
            else:
                score += score_match(pair, matrix)
        else:
            if \'-\' not in pair:
                gap = False
                score += score_match(pair, matrix)
            else:
                score += gap_e
    return score

seq1 = \'PAVKDLGAEG-ASDKGT--SHVVY----------TI-QLASTFE\'
seq2 = \'PAVEDLGATG-ANDKGT--LYNIYARNTEGHPRSTV-QLGSTFE\'

blosum = MatrixInfo.blosum62

score_pairwise(seq1, seq2, blosum, -5, -1)
返回82以进行对齐。实际上,几乎所有方法都可以通过漂亮的方法完成,但这应该是一个好的开始。     
blosum62是276个项目的字典。 我更喜欢用缺少的项来完成,因为它只表示276圈的迭代,而要分析的序列可能包含276个以上的元素。因此,如果您在函数score_match()的帮助下找到每对的得分,则此函数将必须对序列的每个元素执行测试
if pair not in matrix
,也就是说肯定要超过276次。 另一件事要花很多时间:每个ѭ5都会创建一个新的整数并将名称分数绑定到该新对象。每个绑定所花费的时间是生成器立即将其添加到当前数量的整数流所不存在的时间。
from Bio.SubsMat.MatrixInfo import blosum62 as blosum
from itertools import izip

blosum.update(((b,a),val) for (a,b),val in blosum.items())

def score_pairwise(seq1, seq2, matrix, gap_s, gap_e, gap = True):
    for A,B in izip(seq1, seq2):
        diag = (\'-\'==A) or (\'-\'==B)
        yield (gap_e if gap else gap_s) if diag else matrix[(A,B)]
        gap = diag

seq1 = \'PAVKDLGAEG-ASDKGT--SHVVY----------TI-QLASTFE\'
seq2 = \'PAVEDLGATG-ANDKGT--LYNIYARNTEGHPRSTV-QLGSTFE\'

print sum(score_pairwise(seq1, seq2, blosum, -5, -1))
这个score_pairwise()是一个生成器函数,因为存在yield而不是return。     

要回复问题请先登录注册