logo资料库

生物信息学:任选一种编程语言,设计一个双序列全局比对的程序.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
生物信息学:任选一种编程语言,设计一个双序列全局比对的 生物信息学:任选一种编程语言,设计一个双序列全局比对的 程序程序 任选一种编程语言,设计一个双序列全局比对的程序。要求: 1) 输入两条蛋白质序列,输出比对结果例如: Alignment Score: 12345 E E E E E K K K K K A A A A A F F F E E E E E – – – – – B B B B B F F F 2) 使用BLOSUM62矩阵来对序列中氨基酸符号的match和mismatch打分。 3) 使用动态规划的方法(Needleman-Wunsch算法)。 4) 计算空位(gap)的罚分时,使用仿射空位罚分策略,gap opening的分数为-11,gap extension的分数为-1。 5) 测试程序时,使用Horse Hemoglobin subunit theta-1(马的theta-1亚基血红蛋白)序列和Bullfrog Hemoglobin subunit alpha-type(牛蛙的alpha型亚基血红蛋白)序列。 6) 将程序输出结果与BLAST软件的进行比较。 登录BLAST在线服务器http://blast.ncbi.nlm.nih.gov/Blast.cgi。 代码如下: global S global E global MIN global amino global blosum S = -11 E = -1 MIN = -float("inf") amino = ['A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V', 'B', 'Z', 'X', '*'] blosum = [ [ 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4], [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4], [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4], [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4], [ 0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4], [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4], [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4], [ 0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4], [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4], [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4], [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4], [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4], [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4], [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4], [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4], [ 1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4], [ 0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4], [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4], [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4], [ 0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4], [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4], [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4], [ 0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4], [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1], ] #return match or mismatch score def _match(s, t, i, j): index1=amino.index(t[i-1]) index2=amino.index(s[j-1]) return blosum[index1][index2] #initializers for matrices def _init_x(i, j): if i > 0 and j == 0: return MIN else: if j > 0: return S + E * j else: return 0 def _init_y(i, j): if j > 0 and i == 0: return MIN else: if i > 0: return S + E * i else:
return 0 def _init_m(i, j): if j == 0 and i == 0: return 0 else: if j == 0 or i == 0: return MIN else: return 0 def distance_matrix(s, t): dim_i = len(t) + 1 dim_j = len(s) + 1 #abuse list comprehensions to create matrices X = [[_init_x(i, j) for j in range(0, dim_j)] for i in range(0, dim_i)] Y = [[_init_y(i, j) for j in range(0, dim_j)] for i in range(0, dim_i)] M = [[_init_m(i, j) for j in range(0, dim_j)] for i in range(0, dim_i)] for j in range(1, dim_j): for i in range(1, dim_i): X[i][j] = max((S + E + M[i][j-1]), (E + X[i][j-1])) Y[i][j] = max((S + E + M[i-1][j]), (E + Y[i-1][j])) M[i][j] = max(_match(s, t, i, j) + M[i-1][j-1], X[i][j], Y[i][j]) return [X, Y, M] def backtrace(s, t, X, Y, M): sequ1 = '' sequ2 = '' i = len(t) j = len(s) while (i>0 or j>0): if (i>0 and j>0 and M[i][j] == M[i-1][j-1] + _match(s, t, i, j)): sequ1 += s[j-1] sequ2 += t[i-1] i -= 1 j -= 1 elif (i>0 and M[i][j] == Y[i][j]): sequ1 += '_' sequ2 += t[i-1] i -= 1 elif (j>0 and M[i][j] == X[i][j]): sequ1 += s[j-1] sequ2 += '_' j -= 1 sequ1r = ' '.join([sequ1[j] for j in range(-1, -(len(sequ1)+1), -1)]) sequ2r = ' '.join([sequ2[j] for j in range(-1, -(len(sequ2)+1), -1)]) return [sequ1r, sequ2r] seq1 = input("Please input long sequence:") seq2 = input("Please input short sequence:") [X, Y, M] = distance_matrix(seq1, seq2) [str1, str2] = backtrace(seq1, seq2, X, Y, M) score=M[len(seq2)][len(seq1)] print("Alignment Score:"+ str(score)) print(str1) print(str2) qq_42749535 原创文章 4获赞 1访问量 2485 关注 私信 展开阅读全文 作者:qq_42749535
分享到:
收藏