具有仿射空位罚分的Smith-Waterman算法中的回溯

时间:2013-08-07 10:32:07

标签: python bioinformatics biopython sequence-alignment

我正在尝试使用仿射空位罚函数实现用于局部序列比对的Smith-Waterman算法。我想我理解如何启动和计算计算校准分数所需的矩阵,但我不知道如何追溯以找到对齐。要生成所需的3个矩阵,我有以下代码

for j in range(1, len2):
    for i in range(1, len1):
        fxOpen = F[i][j-1] + gap
        xExtend = Ix[i][j-1] + extend
        Ix[i][j] = max(fxOpen, xExtend)

        fyOpen = F[i-1][j] + gap
        yExtend = Iy[i-1][j] + extend
        Iy[i][j] = max(fyOpen, yExtend)

        matchScore = (F[i-1][j-1]  + simMatrixDict[seq1[i-1]+seq2[j-1]])
        xScore = Ix[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]]
        yScore = Iy[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]]
        F[i][j] = max(0, matchScore, xScore, yScore)

我不确定是否需要单个矩阵进行回溯,或者只需要1?任何有关如何从F中的最高分回溯的澄清都将非常感激。

1 个答案:

答案 0 :(得分:6)

史密斯 - 沃特曼关于追溯的重要事项是,一个值所在的矩阵决定了你移动的方向。所以,如果你在F,你正在对角线移动,如果你在Ix,你正在水平移动,如果你在Iy,你就会移动垂直。这意味着您需要存储在指针矩阵中的所有内容都是您从广场到达的矩阵。你来自的矩阵,而不是你要去的那个矩阵,决定了要去的方向。

例如:

说你在F[5][5]

  • 如果指针矩阵表示转到Ix,请转到Ix[4][4]
  • 如果指针矩阵表示转到Iy,请转到Iy[4][4]
  • 如果指针矩阵表示转到F,请转到F[4][4]

而如果你在Ix[5][5]

  • 如果指针矩阵表示转到Ix,请转到Ix[4][5]
  • 如果指针矩阵表示转到F,请转到F[4][5]

或者如果你在Iy[5][5]

  • 如果指针矩阵表示转到Iy,请转到Iy[5][4]
  • 如果指针矩阵表示转到F,请转到F[5][4]

假设第一个索引是x坐标,第二个索引是y坐标。

继续追溯,直到到达最大值为0的单元格。

构建指针矩阵: 对于FIxIy,您需要一个指针矩阵。这些矩阵只需要指示一个值来自哪个矩阵,因为它告诉您正在移动的方向。因此,当您正在运行算法的动态编程阶段时,您还应该构建指针矩阵。每次在FIxIy的单元格中存储新的最大值时,都应更新相应的矩阵以指示其来源。例如,如果F[5][5]中的最高值来自于F[4][4]时对齐下两个基数,则Fpointer [5] [5]应设置为{{1因为你从F矩阵到达那里。