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

📄 dynamic.txt

📁 mfold
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	jmt = j%3;


	//search for an open bifurcation:
	for (k=i; k<=j-1; k++) {
	  if (k!=number) wmb[i][jmt] = min(wmb[i][jmt], w.f(i, k)+work[k+1][jmt]);
	  else wmb[i][jmt] = min(wmb[i][jmt], w3[i]+w5[j-number]);


	}

	if (ct->intermolecular) {
	  //intermolecular folding:

	  //search for an open bifurcation:
	  for (k=i; k<=j-1; k++) {
	    if (k!=number) {

	      wmb2[i][jmt] = min(wmb2[i][jmt], w2->f(i, k)+work[k+1][jmt]);
	    }
            	



	  }

	  w2->f(i, j) = min(w2->f(i, j), wmb2[i][j%3]);


	}


      }

      w.f(i, j) = min(w.f(i, j), wmb[i][j%3]);




      //Fill in work, the best energy for columns j, j-1, j-2
    sub3:

      work[i][j%3] = w.f(i, j);

      if (ct->intermolecular)
      	work2[i][j%3] = w2->f(i, j);





      //Calculate vmin, the best energy for the entire sequence
      if (j>(number)) {
      	vmin = min(vmin, v.f(i, j)+v.f(j-(number), i));

      }
    }

    //Compute w5[i], the energy of the best folding from 1->i, and
    //w3[i], the energy of the best folding from i-->numofbases
    if (j==(number)) {

      for (i=0; i<=(minloop+1); i++) {
      	if (lfce[i]) w5[i] = infinity;
	else if (i!=0) w5[i]=w5[i-1]; //condition added 8/18/97
	else w5[i] = 0; //added 8/18/97
	//w5[i]=0;
      }
      for (i=minloop+2; i<=(number); i++) {
      	if (lfce[i]) w5[i] = infinity;
	//else if (fce[i][i]==2) {
	//	w5[i] = w5[i-1] + data->init; //add the initiation
	//}															//for an intermolecular
	//interaction
	else w5[i] = w5[i-1];
	//w5[i]=w5[i-1];
      	for (k=1; k<=5; k++) e[k] = infinity; //e[k]=0;
      	for (k=0; k<=(i-4); k++) {
	  e[1] = min(e[1], (w5[k]+v.f(k+1, i)+penalty(i, k+1, ct, data)));

	  e[2] = min(e[2], (w5[k]+erg4(i, k+2, k+1, 2, ct, data, lfce[k+1])+v.f(k+2, i)+penalty(i, k+2, ct, data)));

	  e[3] = min(e[3], (w5[k]+erg4(i-1, k+1, i, 1, ct, data, lfce[i])+v.f(k+1, i-1)+penalty(i-1, k+1, ct, data)));

	  e[4] = min(e[4], (w5[k]+erg4(i-1, k+2, k+1, 2, ct, data, lfce[k+1])+
			   erg4(i-1, k+2, i, 1, ct, data, lfce[i]) + v.f(k+2, i-1)+
			   penalty(i-1, k+2, ct, data)));

      	}
      	w5[i] = min(w5[i], e[1]);
      	w5[i] = min(w5[i], e[2]);
      	w5[i] = min(w5[i], e[3]);
      	w5[i] = min(w5[i], e[4]);
      }
      w3[0] = 0;
      w3[number+1] = 0;
      for (i=(number); i>=(number-minloop); i--)    //number+1 ... number-minloop
      	if (lfce[i]) w3[i] = infinity;
	else w3[i]=w3[i+1];
      //w3[i]=0;
      for (i=((number)-minloop-1); i>=1; i--) {
      	if (lfce[i]) w3[i] = infinity;
	//else if (fce[i][i]==2) {
	//	w3[i] = w3[i+1] + data->init; //add the initiation
	//}															//for an intermolecular
	//interaction
	else w3[i] = w3[i+1];
	//w3[i]=w3[i+1];
      	for (k=1; k<=5; k++) e[k] = infinity;
      	for (k=((number)+1); k>=(i+4); k--) {
	  e[1] = min(e[1], (v.f(i, k-1)+w3[k]+penalty(k-1, i, ct, data)));


	  e[2] = min(e[2], (v.f(i+1, k-1)+erg4(k-1, i+1, i, 2, ct, data, lfce[i])+penalty(k-1, i+1, ct, data) + w3[k]));

	  e[3] = min(e[3], (v.f(i, k-2)+erg4(k-2, i, k-1, 1, ct, data, lfce[k-1]) + penalty(k-2, i, ct, data) + w3[k]));

	  e[4] = min(e[4], (v.f(i+1, k-2)+erg4(k-2, i+1, i, 2, ct, data, lfce[i]) +
			   erg4(k-2, i+1, k-1, 1, ct, data, lfce[k-1])+w3[k]+
			   penalty(k-2, i+1, ct, data)));

      	}
      	w3[i] = min(w3[i], e[1]);
      	w3[i] = min(w3[i], e[2]);
      	w3[i] = min(w3[i], e[3]);
      	w3[i] = min(w3[i], e[4]);
      }
    }
    //fill in some work array values:
    if (j>=(number)) {
      for (k=j+1; k>=((number)+1); k--)
      	work[k][(j+1)%3] = w.f(k-(number), j+1-(number));

      if (ct->intermolecular) work2[k][(j+1)%3] = w2->f(k-(number), j+1-(number));

    }
  }

  //for (i=((number)+1); i<=(2*(number)-1); i++) {
  //	for (j=((number)+1); j<=(2*(number)); j++) {
  //   	v.f(i, j)=v.f(i-(number), j-(number));
  //      w.f(i, j)=w.f(i-(number), j-(number));
  //   }
  //}



  ////////////////
  //cout << "presave"<<"\n";



  ///debugging:
  //if (ct->intermolecular) {
  //ofstream dump("arrays.out");


  //output w and v along diagonals:
  //for (l=1; l<ct->numofbases; l++) {
  // 	for (i=1; i+l<=2*ct->numofbases; i++) {
  //    	j = i+l;
  //      dump << i <<" "<<j<<" "<<v.f(i, j)<<" "<<w.f(i, j)<<" "<<w2->f(i, j)<<"\n";
  //   }

  //}

  //for (j=1; j<=(2*(number)-1); j++) {
  //for (i=min(j, number); i>=max(1, j-(number)+1); i--) {
  //dump << i <<" "<<j<<" "<<v.f(i, j)<<" "<<w.f(i, j)<<" "<<w2->f(i, j)<<"\n";
  //}
  //}
  //dump.close();
  //}





  if (save!=0) {
    ofstream sav(save, ios::binary);

    //sav << ct->ctlabel[1];
    sav.write((ct->ctlabel[1]), ctheaderlength);

    convert.ch[0] = 0;
    convert.ch[1] = 0;
    convert.ch[2] = 0;
    convert.ch[3] = 0;

    convert.i = ct->numofbases;
    sav.write(convert.ch, 2);

    //sav << ct->numofbases << "\n";

    for (i=1; i<=ct->numofbases; i++) {
      convert.i = int (ct->numseq[i]);
      sav.write(convert.ch, 2);
      sav.write(ct->nucs+i, 1);
      convert.i = int (ct->hnumber[i]);
      sav.write(convert.ch, 2);

      //sav << ct->numseq[i]<<"\n";
    }

    convert.i = ct->npair;
    sav.write(convert.ch, 2);
    //sav << ct->npair << "\n";

    convert.i = ct->ndbl;
    sav.write(convert.ch, 2);
    //sav << ct->ndbl << "\n";

    convert.i = ct->nnopair;
    sav.write(convert.ch, 2);

    convert.i = ct->ngu;
    sav.write(convert.ch, 2);

    //sav << ct->nnopair << "\n";

    for (i=1; i<=ct->npair; i++) {
      convert.i = ct->pair[i][0];
      sav.write(convert.ch, 2);
      convert.i = ct->pair[i][1];
      sav.write(convert.ch, 2);

      //sav << ct->pair[i][0]<<"\n";
      //sav << ct->pair[i][1]<<"\n";
    }

    for (i=1; i<=ct->ndbl; i++) {
      convert.i = ct->dbl[i];
      sav.write(convert.ch, 2);
      //sav << ct->dbl[i] << "\n";
    }

    for (i=1; i<=ct->nnopair; i++) {
      convert.i = ct->nopair[i];
      sav.write(convert.ch, 2);
      //sav << ct->nopair[i] << "\n";
    }
    for (i=0; i<ct->ngu; i++) {
      convert.i = ct->gu[i];
      sav.write(convert.ch, 2);
    }

    if (ct->intermolecular) {
      //sav << 1 <<"\n";
      convert.i = int (1);
      sav.write(convert.ch, 1);
      for (i=0; i<3; i++) {
      	convert.i = ct->inter[i];
	sav.write(convert.ch, 2);
       	//sav << ct->inter[i] << "\n";
      }
    }
    else {
      convert.i = int (0);
      sav.write(convert.ch, 1);
      //sav << 0 <<"\n";
    }

    for (i=0; i<=ct->numofbases; i++) {
      //sav <<w5[i] << "\n";
      if (w5[i] < 0) {
      	convert.i = 0;
       	sav.write(convert.ch, 1);
	convert.i = -w5[i];
      }
      else {
      	convert.i = 1;
      	sav.write(convert.ch, 1);
      	convert.i = w5[i];
      }
      sav.write(convert.ch, 2);
    }
    for (i=0; i<=ct->numofbases+1; i++) {
      //sav <<w3[i] << "\n";

      if (w3[i] < 0) {
       	convert.i = 0;
      	sav.write(convert.ch, 1);
	convert.i = -w3[i];
      }
      else {
      	convert.i = 1;
      	sav.write(convert.ch, 1);
      	convert.i = w3[i];
      }
      sav.write(convert.ch, 2);
    }
    for (i=0; i<=ct->numofbases; i++) {
      for (j=0; j<=ct->numofbases; j++) {
      	//sav << v.dg[i][j] << "\n";
	//sav << w.dg[i][j] << "\n";
	if (v.dg[i][j] < 0) {
	  convert.i = 0;
	  sav.write(convert.ch, 1);
	  convert.i = -v.dg[i][j];
	}
	else {
	  convert.i = 1;
	  sav.write(convert.ch, 1);
	  convert.i = v.dg[i][j];
	}
	sav.write(convert.ch, 2);

	if (w.dg[i][j] < 0) {
	  convert.i = 0;
	  sav.write(convert.ch, 1);
	  convert.i = -w.dg[i][j];
	}
	else {
	  convert.i = 1;
	  sav.write(convert.ch, 1);
	  convert.i = w.dg[i][j];
	}
	sav.write(convert.ch, 2);

	if (ct->intermolecular) {
	  if (w2->dg[i][j] < 0) {
	    convert.i = 0;
	    sav.write(convert.ch, 1);
	    convert.i = -w2->dg[i][j];
	  }
	  else {
	    convert.i = 1;
	    sav.write(convert.ch, 1);
	    convert.i = w2->dg[i][j];
	  }
	  sav.write(convert.ch, 2);
	}

      }
    }
    //sav << vmin << "\n";
    if (vmin<0) {
      convert.i=0;
      sav.write(convert.ch, 1);
      convert.i = -vmin;
    }
    else {
      convert.i = 1;
      sav.write(convert.ch, 1);
      convert.i = vmin;

    }
    sav.write(convert.ch, 2);

    //also save the thermodynamic parameters
    //convert.i = ct->pair[i][0];
    //sav.write(convert.ch, 2);
    for (i=0; i<5; i++) {
      savefile(data->poppen[i], &sav);
    }
    savefile(data->maxpen, &sav);

    for (i=0; i<11; i++) {
      savefile(data->eparam[i], &sav);
    }
    for (i=0; i<6; i++) {
      for (j=0; j<6; j++) {
      	for (k=0; k<6; k++) {
	  for (l=0; l<3; l++) {
	    savefile(data->dangle[i][j][k][l], &sav);
                
	  }
	}
      }
    }
    for (i=0; i<31; i++) {
      savefile(data->inter[i], &sav);
      savefile(data->bulge[i], &sav);
      savefile(data->hairpin[i], &sav);
    }
    for (i=0; i<6; i++) {
      for (j=0; j<6; j++) {
      	for (k=0; k<6; k++) {
	  for (l=0; l<6; l++) {
	    savefile(data->stack[i][j][k][l], &sav);
	    savefile(data->tstkh[i][j][k][l], &sav);
	    savefile(data->tstki[i][j][k][l], &sav);
	    savefile(data->coax[i][j][k][l], &sav);
	    savefile(data->tstackcoax[i][j][k][l], &sav);
	    savefile(data->coaxstack[i][j][k][l], &sav);
	    savefile(data->tstack[i][j][k][l], &sav);
	    savefile(data->tstkm[i][j][k][l], &sav);

	  }
	}
      }
    }
    for (i=0; i<maxtloop+1; i++) {
      for (j=0; j<2; j++) {
      	savefile(data->tloop[i][j], &sav);
      }
    }
    savefile(data->numoftloops, &sav);

    for (i=0; i<6; i++) {
      for (j=0; j<6; j++) {
      	for (k=0; k<6; k++) {
	  for (l=0; l<6; l++) {
	    for (m=0; m<6; m++) {
	      for (n=0; n<6; n++) {
		savefile(data->iloop11[i][j][k][l][m][n], &sav);
		for (o=0; o<6; o++) {
		  savefile(data->iloop21[i][j][k][l][m][n][o], &sav);
		  for (p=0; p<6; p++) {
		    savefile(data->iloop22[i][j][k][l][m][n][o][p], &sav);
		  }
		}
	      }
	    }
	  }
	}
      }
    }
    savefile(data->auend, &sav);
    savefile(data->gubonus, &sav);
    savefile(data->cint, &sav);
    savefile(data->cslope, &sav);
    savefile(data->c3, &sav);
    savefile(data->efn2a, &sav);
    savefile(data->efn2b, &sav);
    savefile(data->efn2c, &sav);
    savefile(data->numoftriloops, &sav);


    for (i=0; i<maxtloop+1; i++) {
      for (j=0; j<2; j++) {
      	savefile(data->triloop[i][j], &sav);
      }
    }
    convert.f = data->prelog;
    sav.write(convert.ch, 4);
    savefile(data->init, &sav);

    sav.close();
  }



  ////////////
  //cout <<"pretrace\n";

  for (i=0; i<2*number+3; i++) {
    delete[] work[i];
    delete[] wmb[i];
  }

  delete[] wmb;
  delete[] work;

  if (ct->intermolecular) {

    for (i=0; i<2*number+3; i++) {
      delete[] work2[i];
      delete[] wmb2[i];
    }

    delete[] wmb2;
    delete[] work2;

  }

  traceback(ct, data, &v, &w, w2, w3, w5, fce, lfce, vmin, cntrl6, cntrl8, cntrl9);





  delete[] lfce;
  de_allocate (fce, 2*number+1);







  delete[] w5;
  delete[] w3;

  if (ct->intermolecular) delete w2;



  return;
}

⌨️ 快捷键说明

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