最佳对齐分数和序列的Python代码给出错误的结果
这是我第一次编码,所以请务必理解我的代码非常混乱。我用了两种不同的方法来获得最佳分数和最佳顺序,不幸的是,我的两个答案都是错误的。在我的代码中,我包含了一种打开fasta文件的方法,但由于这似乎不起作用,我自己也只在代码中包含了序列 我的最佳分数是计算出来的,但由于某种原因没有打印出来——这也是错误的,我有208分,而我应该得到275分。我也没有得到一个正确的对齐分数回来。 这两个序列是 需要遵循划线对齐,11表示内部间隙,8表示5'端的端子间隙,7表示3'端的间隙,4表示不匹配,0表示匹配 我的文件位于[已删除链接]最佳对齐分数和序列的Python代码给出错误的结果,python,alignment,sequence,bioinformatics,Python,Alignment,Sequence,Bioinformatics,这是我第一次编码,所以请务必理解我的代码非常混乱。我用了两种不同的方法来获得最佳分数和最佳顺序,不幸的是,我的两个答案都是错误的。在我的代码中,我包含了一种打开fasta文件的方法,但由于这似乎不起作用,我自己也只在代码中包含了序列 我的最佳分数是计算出来的,但由于某种原因没有打印出来——这也是错误的,我有208分,而我应该得到275分。我也没有得到一个正确的对齐分数回来。 这两个序列是 需要遵循划线对齐,11表示内部间隙,8表示5'端的端子间隙,7表示3'端的间隙,4表示不匹配,0表示匹配 我
my_file = open("one.fasta","w")
my_file.write (""">Testseq1
TCTGGTGTCCTAGGCGTAGAGGAACCACACCAATCCATCCCGAACTCTGGTGGTTAAACTCTACTGCGGTGACGATACT""")
sequenceone= open("one.fasta","r")
line = sequenceone.readline()
header = ""
seqA = ""
while line:
line = line.rstrip("\n")
if ">" in line:
header = line
else :
seqA = seqA + line
line = sequenceone.readline()
my_file.close()
my_files = open("two.fasta","w")
my_files.write (""">Testseq2
TGGTGCGGTCATACCAGCGCTAATGCACCGGATCCCATCAGAACTCCGCAGTTAAGCGCGCTTGGGCCAGAACAGTACTGGGATGGGTGTCC""")
sequencetwo= open("two.fasta","r")
line = sequencetwo.readline()
header = ""
seqB = ""
while line:
line = line.rstrip("\n")
if ">" in line:
header = line
else :
seqB = seqB + line
line = sequencetwo.readline()
my_files.close()
alphabet = ["A","C","G","T"]
score = [[8,8,8,8,8],\
[0,4,4,4,11],\
[4,0,4,4,11],\
[4,4,0,4,11],\
[4,4,4,0,11],\
[7,7,7,7,7]]
def Global(a,b):
D = []
for i in range(len(a)+1):
D.append([0]* (len(b)+1))
for i in range(len(a)+1):
D[i][0] = D[i-1][0] + score[alphabet.index(a[i-1])][-1]
for i in range(len(b)+1):
D[0][i] = D[0][i-1] + score[-1][alphabet.index(b[i-1])]
for i in range (1, len(a)+1):
for j in range (1, len(b)+1):
distHor = D[i][j-1] + score[-1][alphabet.index(b[j-1])]
distVer = D[i-1][j] + score[alphabet.index(a[i-1])][-1]
if a[i-1] == b[j-1]:
distDiag = D[i-1][j-1]
else:
distDiag = D[i-1][j-1] + score[alphabet.index(a[i-1])][alphabet.index(b[j-1])]
D[i][j] = min(distHor, distVer, distDiag)
return D[-1][-1]
seqA = "TCTGGTGTCCTAGGCGTAGAGGAACCACACCAATCCATCCCGAACTCTGGTGGTTAAACTCTACTGCGGTGACGATACT"
seqB = "TGGTGCGGTCATACCAGCGCTAATGCACCGGATCCCATCAGAACTCCGCAGTTAAGCGCGCTTGGGCCAGAACAGTACTGGGATGGGTGTCC"
row = len(seqA)+1
column = len(seqB)+1
match = 0
mismatch = 4
gap = 11
align1=""
align2=""
matrix=[[[[None] for i in range (2)] for i in range(column)] for i in range(row)]
for i in range(column):
matrix[0][i][0]=gap*i
if(i>0):
matrix[0][i][1]="hor"
for i in range(row):
matrix[i][0][0]=gap*i
if(i>0):
matrix[i][0][1]="ver"
for i in range(1,row):
for j in range(1,column):
hor=matrix[i][j-1][0]+gap
ver=matrix[i-1][j][0]+gap
if (seqA[i-1]==seqB[j-1]):
diag=matrix[i-1][j-1][0]+match
else:
diag=matrix[i-1][j-1][0]+mismatch
var = {hor:"hor",ver:"ver",diag:"diag"}
hvd=[hor,ver,diag]
matrix[i][j][0]=max(hvd)
matrix[i][j][1]=var.get(max(var))
k=row
l=column
while(True):
if(l==1 and k==1):
break
else:
if(matrix[k-1][l-1][1]=="ver"):
align1+=seqA[k-2]
align2+="-"
k-=1
elif(matrix[k-1][l-1][1]=="hor"):
align1+="-"
align2+=seqB[l-2]
l-=1
elif(matrix[k-1][l-1][1]=="diag"):
align1+=seqA[k-2]
align2+=seqB[l-2]
k-=1
l-=1
align1=align1[::-1]
align2=align2[::-1]
print (align1)
print (align2)
Global(seqA,seqB)
有人能告诉我我做错了什么吗?链接好像断了。我建议您复制并粘贴代码,以提高可读性,而不是将其作为Google文档的链接发布。请在问题中内联包含说明问题的代码的最低版本,而不是作为指向外部站点的链接。我已将其更新为包含代码。对不起