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

📄 replik.c

📁 模拟RNA的复制
💻 C
📖 第 1 页 / 共 2 页
字号:
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      temp_seq[k]=0;
     }
     length=sq_length[xd5][yd5];
     sq_length[xd4][yd4]=sq_length[xd5][yd5];
     t_n[xd4][yd4]=t_n[xd5][yd5]; r_n[xd4][yd4]=r_n[xd5][yd5]; q_n[xd4][yd4]=q_n[xd5][yd5];
     for(k=1; k<=length; k++)
     {
      sq_seq[xd4][yd4][k]=sq_seq[xd5][yd5][k];
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      sq_seq[xd4][yd4][k]=0;
     }
     length=temp_l;
     sq_length[xd5][yd5]=temp_l;
     t_n[xd5][yd5]=temp_t; r_n[xd5][yd5]=temp_r; q_n[xd5][yd5]=temp_q;
     for(k=1; k<=length; k++)
     {
      sq_seq[xd5][yd5][k]=temp_seq[k];
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      sq_seq[xd5][yd5][k]=0;
     }
     length=sq_length[xd6][yd6];
     temp_l=length;
     temp_t=t_n[xd6][yd6]; temp_r=r_n[xd6][yd6]; temp_q=q_n[xd6][yd6];
     for(k=1; k<=length; k++)
     {
      temp_seq[k]=sq_seq[xd6][yd6][k];
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      temp_seq[k]=0;
     }
     length=sq_length[xd1][yd1];
     sq_length[xd6][yd6]=sq_length[xd1][yd1];
     t_n[xd6][yd6]=t_n[xd1][yd1]; r_n[xd6][yd6]=r_n[xd1][yd1]; q_n[xd6][yd6]=q_n[xd1][yd1];
     for(k=1; k<=length; k++)
     {
      sq_seq[xd6][yd6][k]=sq_seq[xd1][yd1][k];
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      sq_seq[xd6][yd6][k]=0;
     }
     length=sq_length[xd3][yd3];
     sq_length[xd1][yd1]=sq_length[xd3][yd3];
     t_n[xd1][yd1]=t_n[xd3][yd3]; r_n[xd1][yd1]=r_n[xd3][yd3]; q_n[xd1][yd1]=q_n[xd3][yd3];
     for(k=1; k<=length; k++)
     {
      sq_seq[xd1][yd1][k]=sq_seq[xd3][yd3][k];
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      sq_seq[xd1][yd1][k]=0;
     }
     length=temp_l;
     sq_length[xd3][yd3]=temp_l;
     t_n[xd3][yd3]=temp_t; r_n[xd3][yd3]=temp_r; q_n[xd3][yd3]=temp_q;
     for(k=1; k<=length; k++)
     {
      sq_seq[xd3][yd3][k]=temp_seq[k];
     }
     for(k=(length+1); k<=MAXL_N; k++)
     {
      sq_seq[xd3][yd3][k]=0;
     }
  }
 
 void mc_step(void)
  {
   mc_stepi();

   for (j=1; j<=SIZE; j++)
   {
    xy_choose();
    if(randd()<DIFFRATE)
    {
     toff_marg();
    }

    length=sq_length[x][y];

    if(!length) {continue;} /* if empty site -> continue */

    if(randd()<DEATH)        /* if death occurs -> overwrite, continue */
    {
     for(k=1; k<=length; k++)     {      sq_seq[x][y][k]=0;     }     t_n[x][y]=0;     r_n[x][y]=0;     q_n[x][y]=0;     sq_length[x][y]=0;
     n_denz=(n_denz*SIZE-length)/SIZE;     continue;
    }

    if (length<CATCH) {continue;}  /* if too short to be a template -> continue */

    neighbourhood();

    if (!(life*empty)) {continue;} /* if there is no at least one      */
				                   /* empty and one filled site        */
				                   /* among the neighbours -> continue */
    rd=0.3333*life;
    if(randd()>rd) {continue;}

    s1=randl(life)+1;
    s1=lifes[s1];
    s2=randl(empty)+1;
    s2=empties[s2];

    if (s1==1) { xs1=left[x];  ys1=y;       }
    if (s1==2) { xs1=right[x]; ys1=y;       }
    if (s1==3) { xs1=x;        ys1=up[y];   } /* coordinates of replicase */
    if (s1==4) { xs1=x;        ys1=down[y]; }

    if (s2==1) { xs2=left[x];  ys2=y;       }
    if (s2==2) { xs2=right[x]; ys2=y;       }
    if (s2==3) { xs2=x;        ys2=up[y];   } /* coordinates of new chain    */
    if (s2==4) { xs2=x;        ys2=down[y]; }


    /* longest continuous sequences of monomers in replicase */

    max_B=r_n[xs1][ys1];
    max_C=q_n[xs1][ys1];

    r=fgv_replicase[max_B];    q=fgv_fidelity[max_C];

    /* longest continuous sequences of monomers in template */

    max_A=t_n[x][y];

    t=fgv_template[max_A];    length;

    rd=randd();

    n_factor=(NUKLPAR-n_denz)/NUKLPAR;    if(rd<n_factor*(t*r/length))                       /* replication */
    {
     sq_length[xs2][ys2]=length;
     for(k=1; k<=length; k++)
     {
      rd=randd();
      if(rd<q)
      {
       sq_seq[xs2][ys2][k]=sq_seq[x][y][k];
      } else
      {
       nukl=sq_seq[x][y][k];       rl=randl(3)+1;       switch (nukl)       {       case 1:        if(rl==1) sq_seq[xs2][ys2][k]=2;        if(rl==2) sq_seq[xs2][ys2][k]=3;        if(rl==3) sq_seq[xs2][ys2][k]=4;        break;       case 2:        if(rl==1) sq_seq[xs2][ys2][k]=1;        if(rl==2) sq_seq[xs2][ys2][k]=3;        if(rl==3) sq_seq[xs2][ys2][k]=4;       break;       case 3:        if(rl==1) sq_seq[xs2][ys2][k]=1;        if(rl==2) sq_seq[xs2][ys2][k]=2;        if(rl==3) sq_seq[xs2][ys2][k]=4;       break;       case 4:        if(rl==1) sq_seq[xs2][ys2][k]=1;        if(rl==2) sq_seq[xs2][ys2][k]=2;        if(rl==3) sq_seq[xs2][ys2][k]=3;       break;       }      }
     }
     rd=randd();     if(rd<b)     {      length_o=length;      length=randl(length-1)+1;
      sq_length[xs2][ys2]=length;
      if(randd()<0.5)      {       for(k=(length+1); k<=length_o; k++)       {        sq_seq[xs2][ys2][k]=0;
       }      } else      {       for(k=1; k<=length; k++)       {        sq_seq[xs2][ys2][k]=sq_seq[xs2][ys2][length_o-length+k];
       }       for(k=(length+1); k<=length_o; k++)       {        sq_seq[xs2][ys2][k]=0;
       }      }     }     if((rd<(a+b)) && (rd>b))
     {
      length++;
      if(randd()<0.5)      {      sq_length[xs2][ys2]++;
      sq_seq[xs2][ys2][length]=randl(4)+1;
      } else      {      for(k=length; k>=2; k--)      sq_seq[xs2][ys2][k]=sq_seq[xs2][ys2][k-1];
      sq_seq[xs2][ys2][1]=randl(4)+1;      sq_length[xs2][ys2]++;
      }     }
     n_denz=(n_denz*SIZE+length)/SIZE;     trq_update();    }
   }
  }

 void save(void)
 {
  tf2=fopen("pos.dat","w+t");  fprintf(tf2,"%d",position);  fflush(tf2);  fclose(tf2);  position++; }

 void result1(void) {  double elokszama=0;  long int lepesszam;  double a_lanchossz=0, S_lanchossz=0, max_lanchossz=0, min_lanchossz=1000;  double A_atlag=0, B_atlag=0, C_atlag=0, D_atlag=0,         As_atlag=0, Bs_atlag=0, Cs_atlag=0, Ds_atlag=0,         t_atlag=0, r_atlag=0, q_atlag=0, t_r_l_atlag;   double A_szoras=0, B_szoras=0, C_szoras=0, D_szoras=0,         As_szoras=0, Bs_szoras=0, Cs_szoras=0, Ds_szoras=0,         t_szoras=0, r_szoras=0, q_szoras=0;  double A_min=1000, B_min=1000, C_min=1000, D_min=1000,         As_min=1000, Bs_min=1000, Cs_min=1000, Ds_min=1000,         t_min=1000, r_min=1000, q_min=1000;    double A_max=0, B_max=0, C_max=0, D_max=0,         As_max=0, Bs_max=0, Cs_max=0, Ds_max=0,         t_max=0, r_max=0, q_max=0, t_r_l_max=0;  double denzitas=0;  long int dat, len, max, maxA, maxB, maxC, maxD, minA, minB, minC, minD;  long int hossz;  double ar;  FILE * tf;
  FILE * tfd;  lepesszam=i;  for(j=1; j<=SIDE; j++)  {   for(k=1; k<=SIDE; k++)   {    hossz=sq_length[j][k];    if(hossz)     {      denzitas+=1; elokszama+=1;      a_lanchossz+=hossz;     maxA=0, maxB=0, maxC=0, maxD=0;      for(l=1; l<=hossz; l++)     {      if(sq_seq[j][k][l]==1) {A_atlag+=1; maxA++;}      if(sq_seq[j][k][l]==2) {B_atlag+=1; maxB++;}      if(sq_seq[j][k][l]==3) {C_atlag+=1; maxC++;}      if(sq_seq[j][k][l]==4) {D_atlag+=1; maxD++;}     }     max=t_n[j][k];     As_atlag+=max;     if(hossz>=CATCH) t_atlag+=fgv_template[max];     max=r_n[j][k];     Bs_atlag+=max;     if(hossz>=CATCH) r_atlag+=fgv_replicase[max];     max=q_n[j][k];     Cs_atlag+=max;     q_atlag+=fgv_fidelity[max];     len=0; max=0;     for(l=1; l<=hossz; l++)     {      dat=sq_seq[j][k][l];      if(dat==4)      {       len++;      }      if(dat!=4)      {       if(len>max) max=len;       len=0;      }     }     Ds_atlag+=max;    }   }  }  a_lanchossz=a_lanchossz/elokszama;  A_atlag=A_atlag/elokszama;  B_atlag=B_atlag/elokszama;  C_atlag=C_atlag/elokszama;  D_atlag=D_atlag/elokszama;  As_atlag=As_atlag/elokszama;  Bs_atlag=Bs_atlag/elokszama;  Cs_atlag=Cs_atlag/elokszama;  Ds_atlag=Ds_atlag/elokszama;  t_atlag=t_atlag/elokszama;  r_atlag=r_atlag/elokszama;  q_atlag=q_atlag/elokszama;  denzitas=denzitas/SIZE;  tf=fopen("result1.dat","a+t");   fprintf(tf,"%10d", lepesszam);   fprintf(tf,"%8.2f",a_lanchossz);   fprintf(tf,"%6.2f",A_atlag);   fprintf(tf,"%6.2f",B_atlag);   fprintf(tf,"%6.2f",C_atlag);   fprintf(tf,"%6.2f",D_atlag);   fprintf(tf,"%6.2f",As_atlag);   fprintf(tf,"%6.2f",Bs_atlag);   fprintf(tf,"%6.2f",Cs_atlag);   fprintf(tf,"%6.2f",Ds_atlag);   fprintf(tf,"%8.4f",t_atlag);   fprintf(tf,"%8.4f",r_atlag);   fprintf(tf,"%8.4f",q_atlag);   fprintf(tf,"%7.3f\n",denzitas);   fflush(tf);  fclose(tf); } void result2(void) {  double elokszama=0;  long int lepesszam;  long int dat, len, max;  restomb1 arany;  restomb2 composition;  long int hossz;  double ar;  FILE * tf;
  FILE * tfd;  lepesszam=i;  for(j=0; j<=MAXL_N; j++) arany[j]=0;  for(j=0; j<=MAXL_N; j++)  {    for(k=0; k<=8; k++) composition[j][k]=0;  }  for(j=1; j<=SIDE; j++)  {   for(k=1; k<=SIDE; k++)   {    hossz=sq_length[j][k];    if(hossz)     {     arany[hossz]+=1;     for(l=1; l<=hossz; l++)     {      if(sq_seq[j][k][l]==1) composition[hossz][1]+=1;      if(sq_seq[j][k][l]==2) composition[hossz][2]+=1;      if(sq_seq[j][k][l]==3) composition[hossz][3]+=1;      if(sq_seq[j][k][l]==4) composition[hossz][4]+=1;     }     composition[hossz][5]+=t_n[j][k];     composition[hossz][6]+=r_n[j][k];     composition[hossz][7]+=q_n[j][k];     len=0; max=0;     for(l=1; l<=hossz; l++)     {      dat=sq_seq[j][k][l];      if(dat==4)      {       len++;      }      if(dat!=4)      {       if(len>max) max=len;       len=0;      }     }     if(hossz==1) max=len;     composition[hossz][8]+=max;    }    else    {     arany[0]+=1;    }   }  }  for(j=0; j<=MAXL_N; j++)  {   for(k=1; k<=8; k++)   {    if (arany[j]) composition[j][k]=composition[j][k]/arany[j];   }  }  for(j=0; j<=MAXL_N; j++)  {   arany[j]=arany[j]/SIZE;  }  tf=fopen("result2.dat","a+t");   for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][1]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][1]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][2]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][2]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][3]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][3]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][4]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][4]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][5]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][5]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][6]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][6]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][7]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][7]);  for(j=1; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%8.4f", composition[j][8]);  }  fprintf(tf,"%8.4f\n", composition[MAXL_N][8]);  fprintf(tf,"%8d", lepesszam);   for(j=0; j<=(MAXL_N-1); j++)  {   fprintf(tf,"%9.5f", arany[j]);  }  fprintf(tf,"%9.5f\n", arany[MAXL_N]);  fflush(tf);  fclose(tf); } void result3(void) {  tf=fopen("result3.dat","a+t");   for(j=1; j<=SIDE; j++)  {   for(k=1; k<=SIDE; k++)   {    for(l=1; l<=(sq_length[j][k]); l++)    {     fprintf(tf," %1d", sq_seq[j][k][l]);    }    fprintf(tf," 0\n");   }  }  fflush(tf);  fclose(tf); }  main()
 {
  inic();                               /* initialisation */
  for(i=0; i<=STEPNUMBER; i++)          /* Monte-Carlo cycle */
  {
   if((i%SAVEL)==0) {save();}   if((i%RESULTL1)==0) {result1();}   if((i%RESULTL2)==0) {result2();}   if((i%RESULTL3)==0) {result3();}   mc_step();
  }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -