import numpy as np # Sekwencje i ich dlugosci sekw1 = list('GATACTA') # sekw1 = list('TTTTACTGAA') sekw2 = list('GATTACCA') # sekw2 = list('TTACTAGGAA') sekw1_len = len(sekw1) sekw2_len = len(sekw2) # kara kara = 1 #przerwa przerwa = 2 # Macierz scoringowa F = np.zeros((sekw2_len + 1, sekw1_len + 1), dtype=int) # Slownik porownan S = {'GG': 1, 'GA': -1, 'GT': -1, 'GC': -1, 'CG': -1, 'CA': -1, 'CT': -1, 'CC': 1, 'TG': -1, 'TA': -1, 'TT': 1, 'TC': -1, 'AG': -1, 'AA': 1, 'AT': -1, 'AC': -1} #wypelnianie 1 wiersza for j in range(0, F.shape[1]): F[0][j] = -j #wypelnianie 1 kolumny for i in range(0, F.shape[0]): F[i][0] = -i #wypelnianie macierzy for i in range(1, F.shape[0]): for j in range(1, F.shape[1]): literka_gura = sekw1[j - 1] literka_bok = sekw2[i - 1] literka = literka_gura + literka_bok pszekontna = F[i - 1][j - 1] + S[literka] gura = F[i - 1][j] - kara dul = F[i][j - 1] - kara F[i][j] = max(pszekontna, gura, dul) print(F) #sekwencje wynikowe sekw1_wynikowa = list() sekw2_wynikowa = list() #traceback i = F.shape[0] - 1 j = F.shape[1] - 1 while i != 0 and j != 0: literka_gura = sekw1[j - 1] literka_bok = sekw2[i - 1] literka = literka_gura + literka_bok pszekontna = F[i - 1][j - 1] gura = F[i - 1][j] - kara dul = F[i][j - 1] - kara F[i][j] = max(pszekontna, gura, dul) if F[i][j] == pszekontna: i = i - 1 j = j - 1 sekw1_wynikowa.append(literka_gura) sekw2_wynikowa.append(literka_bok) elif F[i][j] == gura: i = i - 1 sekw1_wynikowa.append("-") sekw2_wynikowa.append(literka_bok) else: j = j - 1 sekw1_wynikowa.append("-") sekw2_wynikowa.append(literka_bok) print() # print(sekw1_2_wynikowa) tt = 0 sekw1_2_wynikowa = list() for i in reversed(sekw1_wynikowa): sekw1_2_wynikowa.append(i) tt = tt + 1 print("".join(sekw1_2_wynikowa)) # print(sekw2_2_wynikowa) tt = 0 sekw2_2_wynikowa = list() for i in reversed(sekw2_wynikowa): sekw2_2_wynikowa.append(i) tt = tt + 1 print("".join(sekw2_2_wynikowa))