Как рассчитать штрафы за аффинный разрыв в матрице очков Смита Ватермана? - PullRequest
0 голосов
/ 06 марта 2020

Мне нужна помощь с оценкой моей матрицы Смита-Уотермана. Локальное выравнивание, которое оно производит, начинается и заканчивается в нужных точках, но промежутки смещаются на единицу в нижней последовательности. Максимальная оценка также неверна, но всегда очень близка к правильной.

    def calcScore(self, row, col):

        seqA_letter = self.seqA[col-1]
        seqA_sm_index = self.sm.indexOfProtein(seqA_letter)
        seqB_letter = self.seqB[row-1]
        seqB_sm_index = self.sm.indexOfProtein(seqB_letter)

        scoreObjects = [Score(0, -1, -1, -1, -1)]

        matchMismatchScore = self.allignment_matrix[row-1][col-1].value + self.sm.matrix[seqA_sm_index][seqB_sm_index]
        scoreObjects.append(Score(matchMismatchScore, row, col, row-1, col-1)) 

        counter = 1
        gap = 0
        for back in range(col, 1, -1):
            #gaps in vertical sequence
            s = self.allignment_matrix[row][col-counter].value - (self.gap_penalty_opening + gap * self.gap_penalty_extension)
            scoreObjects.append(Score(s, row, col, row, col-counter))
            counter += 1
            gap += 1

        counter = 1
        gap = 0
        for back in range(row, 1, -1):
            s = self.allignment_matrix[row-counter][col].value - (self.gap_penalty_opening + gap * self.gap_penalty_extension)
            scoreObjects.append(Score(s, row, col, row-counter, col))
            counter += 1
            gap += 1

        return max(scoreObjects, key=operator.attrgetter('value'))

Я использую объекты Оценка, чтобы заполнить матрицу, так как я могу запомнить источник каждой оценки. Я знаю, что вы не можете проходить источники линейно, так как там, где есть большие разрывы, источники оценки также будут иметь разрывы, но я учел это. Я подозреваю, что ошибка в циклах for для нахождения / вычисления того, сколько пробелов дает наивысший результат, но не могу понять, что. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...