⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 核酸双序列比对程序
💻 CS
📖 第 1 页 / 共 3 页
字号:
				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 + -