📄 form1.cs
字号:
int maxlign=0;
double ident,fmaxlen,fmaxlign;
m=seq1.Length+1;
n=seq2.Length+1;
if(m<=n)
{
maxlen=n-1;
minlen=m-1;
}
else
{
maxlen=m-1;
minlen=n-1;
}
for(int i=0;i<minlen;i++)
{
if(seqs[i]==seqa[i])
maxlign++;
}
fmaxlen=maxlen*1.0;
fmaxlign=maxlign*1.0;
ident=fmaxlign*100.0/fmaxlen;
indent.AppendText(maxlign.ToString());
indent.AppendText("/");
indent.AppendText(maxlen.ToString());
indent.AppendText("=");
indent.AppendText(ident.ToString());
indent.AppendText("%");
// array:back is used to save the backdata path
// array:path is used to save the optimal path
int[,] back=new int[m-1,n-1];
int[,] path=new int[m,n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
path[i,j]=0;
}
}
//Matrix D:scores matrix
int[,] d=new int[m,n];
//Initialize metrix d
int x=0,y=0;
for(int i=0;i<m;i++)
{
d[i,0]=x;
x--;
}
for(int j=0;j<n;j++)
{
d[0,j]=y;
y--;
}
//compute d[i,j]
int d1,d2,d3;
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
d1=d[i-1,j-1]+p(seqs[i-1],seqa[j-1]);
d2=d[i-1,j]+p(seqs[i-1],' ');
d3=d[i,j-1]+p(' ',seqa[j-1]);
d[i,j]=max(d1,d2,d3);
if(d[i,j]==d1)
{
back[i-1,j-1]=1;
}
else if(d[i,j]==d2)
{
back[i-1,j-1]=2;
}
else
{
back[i-1,j-1]=3;
}
}
}
//back the path:
path[m-1,n-1]=1;
int a,b;
for(a=m-2;a>=0;)
{
for(b=n-2;b>=0;)
{
if(back[a,b]==1)
{
path[a,b]=1;
a--;
b--;
}
else if(back[a,b]==2)
{
path[a,b+1]=1;
a--;
}
else
{
path[a+1,b]=1;
b--;
}
if((a<0)||(b<0))
{
break;
}
}
if((a<0)||(b<0))
{
break;
}
}
//compute the optimal path
char[] temp1=new char[100];
char[] temp2=new char[100];
int j1=0,j2=0,k=0;
int y1=0,y2=0;
for(int k0=1;k0<m;k0++)
{
for(int k1=1;k1<n;k1++)
{
if(path[k0,k1]==1)
{
j1=k0;
j2=k1;
y1=j1;
y2=j2;
goto loop;
}
}
}
//
loop:
if(j1<=j2)
{
k=j2;
temp1[j2-1]=seqs[j1-1];
temp2[j2-1]=seqa[j2-1];
j2--;
while(j2>0)
{
j2--;
temp1[j2]='_';
temp2[j2]=seqa[j2];
}
}
else
{
k=j1;
temp1[j1-1]=seqs[j1-1];
temp2[j1-1]=seqa[j2-1];
j1--;
while(j1>0)
{
j1--;
temp1[j1]=seqs[j1];
temp2[j1]='_';
}
}
//
int[,] path1=new int[100,100];
int a1,a2;
for(a1=0;a1<100;a1++)
{
for(a2=0;a2<100;a2++)
{
if((a1<m)&&(a2<n))
path1[a1,a2]=path[a1,a2];
else
path1[a1,a2]=0;
}
}
//
int k3=y1,k4=y2;
while(k3<=m-1)
{
if(path1[k3,k4+1]==1)
{
temp1[k]='_';
temp2[k]=seqa[k4];
k++;
k4++;
}
else if(path1[k3+1,k4+1]==1)
{
temp1[k]=seqs[k3];
temp2[k]=seqa[k4];
k++;
k3++;
k4++;
}
else if(path1[k3+1,k4]==1)
{
temp1[k]=seqs[k3];
temp2[k]='_';
k++;
k3++;
}
else
break;
}
//display results
//diaplay the optimal alignment
for(int i=0;i<temp1.Length;i++)
{
oplign.AppendText(temp1[i].ToString());
}
oplign.AppendText('\n'.ToString());
for(int j=0;j<temp2.Length;j++)
{
oplign.AppendText(temp2[j].ToString());
}
//diaplay the scores
char[] ch=new char[100];
int len=temp1.Length;
for(int i=0;i<len;i+=1)
{
if(temp1[i].CompareTo(ch[i])!=0&&temp2[i].CompareTo(ch[i])!=0)
{
score+=p(temp1[i],temp2[i]);
}
}
textBox3.Text=score.ToString();
//dispaly the score matrix
for(int si=0;si<m;si++)
{
for(int sj=0;sj<n;sj++)
{
if(d[si,sj]>=0)
{
matrixd.AppendText(' '.ToString());
}
matrixd.AppendText(d[si,sj].ToString());
if(abs(d[si,sj])<10)
{
matrixd.AppendText(' '.ToString());
}
}
matrixd.AppendText('\n'.ToString());
}
}
}
//
private void button3_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void button2_Click(object sender, System.EventArgs e)
{
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
matrixd.Clear();
oplign.Clear();
indent.Clear();
return;
}
private void matrixd_TextChanged(object sender, System.EventArgs e)
{
}
private void label3_Click(object sender, System.EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -