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

📄 proml.c

📁 一个神经网络工具箱
💻 C
📖 第 1 页 / 共 5 页
字号:
//    printf("\n  Y to accept these or type the letter for one to change\n");    printf("\n\n");#ifdef WIN32    phyFillScreenColor();#endif    	//scanf("%c%*[^\n]", &ch);    //getchar();    //if (ch == '\n')    //  ch = ' ';   // uppercase(&ch);	 ch='Y';    if (ch == 'Y')      break;    if (strchr("UPLCRAWSGJVOMI012345",ch) != NULL){      switch (ch) {      case 'C':        ctgry = !ctgry;        if (ctgry) {          printf("\nSitewise user-assigned categories:\n\n");          initcatn(&categs);          if (rate){            free(rate);          }          rate    = (double *) Malloc(categs * sizeof(double));          didchangecat = true;          initcategs(categs, rate);        }        break;      case 'P':        if (usejtt) {          usejtt = false;          usepam = true;        } else {            usepam = false;            usejtt = true;        }        break;      case 'R':        if (!rctgry) {          rctgry = true;          gama = true;        } else {          if (gama) {            gama = false;            invar = true;          } else {            if (invar)              invar = false;            else              rctgry = false;          }        }        break;      case 'A':        auto_ = !auto_;        if (auto_)          initlambda(&lambda);        break;      case 'W':        weights = !weights;        break;      case 'S':        improve = !improve;        break;      case 'G':        global = !global;        break;      case 'J':        jumble = !jumble;        if (jumble)          initjumble(&inseed, &inseed0, seed, &njumble);        else njumble = 1;        break;      case 'L':        lngths = !lngths;        break;      case 'O':        outgropt = !outgropt;        if (outgropt)          initoutgroup(&outgrno, spp);        break;      case 'U':        usertree = !usertree;        break;      case 'V':        reconsider = !reconsider;        break;      case 'M':        mulsets = !mulsets;        if (mulsets) {          printf("Multiple data sets or multiple weights?");          loopcount2 = 0;          do {            printf(" (type D or W)\n");#ifdef WIN32            phyFillScreenColor();#endif            scanf("%c%*[^\n]", &ch2);            getchar();            if (ch2 == '\n')                ch2 = ' ';            uppercase(&ch2);            countup(&loopcount2, 10);          } while ((ch2 != 'W') && (ch2 != 'D'));          justwts = (ch2 == 'W');          if (justwts)            justweights(&datasets);          else            initdatasets(&datasets);          if (!jumble) {            jumble = true;            initjumble(&inseed, &inseed0, seed, &njumble);          }        }        break;      case 'I':        interleaved = !interleaved;        break;      case '0':        initterminal(&ibmpc, &ansi);        break;      case '1':        printdata = !printdata;        break;      case '2':        progress = !progress;        break;      case '3':        treeprint = !treeprint;        break;      case '4':        trout = !trout;        break;      case '5':        hypstate = !hypstate;        break;      }    } else      printf("Not a possible option!\n");    countup(&loopcount, 100);  }  if (gama || invar) {    loopcount = 0;if (alpha){	printf("-p%3.2f given, so alpha=1/(%3.2f)^2=%3.2f\n",sqrt(1.0/alpha),sqrt(1.0/alpha),alpha);}else{    do {      printf("\nCoefficient of variation of substitution rate among sites (must be positive)\n");      printf(  " In gamma distribution parameters, this is 1/(square root of alpha)\n");#ifdef WIN32      phyFillScreenColor();#endif      scanf("%lf%*[^\n]", &cv);      getchar();      countup(&loopcount, 10);    } while (cv <= 0.0);    alpha = 1.0 / (cv * cv);  }}  if (!rctgry)    auto_ = false;  if (rctgry) {    printf("\nRates in HMM");    if (invar)      printf(" (including one for invariant sites)");    printf(":\n");	if (rcategs){		printf("-c%d given, so rcategs=%d\n",rcategs,rcategs);	}else{    initcatn(&rcategs);	}    if (probcat){      free(probcat);      free(rrate);    }    probcat = (double *) Malloc(rcategs * sizeof(double));    rrate   = (double *) Malloc(rcategs * sizeof(double));    didchangercat = true;    if (gama)      initgammacat(rcategs, alpha, rrate, probcat);    else {      if (invar) {       loopcount = 0;		if (invarfrac){			printf("-i%3.2f given, so invarfrac=%3.2f\n",invarfrac,invarfrac);		}else{ 			do {			  printf("Fraction of invariant sites?\n");			  scanf("%lf%*[^\n]", &invarfrac);			  getchar();			  countup (&loopcount, 10);			} while ((invarfrac <= 0.0) || (invarfrac >= 1.0));		}        initgammacat(rcategs-1, alpha, rrate, probcat);        for (i = 0; i < rcategs-1; i++)          probcat[i] = probcat[i]*(1.0-invarfrac);        probcat[rcategs-1] = invarfrac;        rrate[rcategs-1] = 0.0;      } else {        initcategs(rcategs, rrate);        initprobcat(rcategs, &probsum, probcat);      }    }  }  if (!didchangercat){    rrate      = (double *) Malloc(rcategs*sizeof(double));    probcat    = (double *) Malloc(rcategs*sizeof(double));    rrate[0]   = 1.0;    probcat[0] = 1.0;  }  if (!didchangecat) {    rate       = (double *) Malloc(categs*sizeof(double));    rate[0]    = 1.0;  }}  /* getoptions */void makeprotfreqs(){  /* calculate amino acid frequencies based on eigmat */  long i, mineig;  mineig = 0;  for (i = 0; i <= 19; i++)    if (fabs(eigmat[i]) < fabs(eigmat[mineig]))      mineig = i;  memcpy(freqaa, probmat[mineig], 20 * sizeof(double));  for (i = 0; i <= 19; i++)    freqaa[i] = fabs(freqaa[i]);} /* makeprotfreqs */void allocrest(){  long i;  y = (Char **) Malloc(spp*sizeof(Char *));  for (i = 0; i < spp; i++)    y[i] = (Char *) Malloc(sites*sizeof(Char));  nayme       = (naym *) Malloc(spp*sizeof(naym));  enterorder  = (long *) Malloc(spp*sizeof(long));  category    = (long *) Malloc(sites*sizeof(long));  weight      = (long *) Malloc(sites*sizeof(long));  alias       = (long *) Malloc(sites*sizeof(long));  ally        = (long *) Malloc(sites*sizeof(long));  location    = (long *) Malloc(sites*sizeof(long));  aliasweight = (long *) Malloc(sites*sizeof(long));}  /* allocrest */void doinit(){ /* initializes variables */  inputnumbers(&spp, &sites, &nonodes2, 2);  getoptions();  makeprotfreqs();  if (printdata)    fprintf(outfile, "%2ld species, %3ld  sites\n", spp, sites);  alloctree(&curtree.nodep, nonodes2, usertree);  allocrest();  if (usertree && !reconsider)    return;  alloctree(&bestree.nodep, nonodes2, 0);  alloctree(&priortree.nodep, nonodes2, 0);  if (njumble <= 1)    return;  alloctree(&bestree2.nodep, nonodes2, 0);}  /* doinit */void inputoptions(){  long i;  if (!firstset)    samenumsp(&sites, ith);  if (firstset) {    for (i = 0; i < sites; i++)      category[i] = 1;    for (i = 0; i < sites; i++)      weight[i] = 1;  }  if (justwts || weights)    inputweights(sites, weight, &weights);  weightsum = 0;  for (i = 0; i < sites; i++)    weightsum += weight[i];  if ((ctgry && categs > 1) && (firstset || !justwts)) {    inputcategs(0, sites, category, categs, "ProML");    if (printdata)      printcategs(outfile, sites, category, "Site categories");  }  if (weights && printdata)    printweights(outfile, 0, sites, weight, "Sites");  fprintf(outfile, "%s model of amino acid change\n\n",          (usejtt ? "Jones-Taylor-Thornton" : "Dayhoff PAM"));}  /* inputoptions */void input_protdata(long chars){  /* input the names and sequences for each species */  /* used by proml */  long i, j, k, l, basesread, basesnew;  Char charstate;  boolean allread, done;  if (printdata)    headings(chars, "Sequences", "---------");  basesread = 0;  basesnew = 0;  allread = false;  while (!(allread)) {    allread = true;    if (eoln(infile))      scan_eoln(infile);    i = 1;    while (i <= spp) {      if ((interleaved && basesread == 0) || !interleaved)        initname(i - 1);      j = (interleaved) ? basesread : 0;      done = false;      while (!done && !eoff(infile)) {        if (interleaved)          done = true;        while (j < chars && !(eoln(infile) || eoff(infile))) {          charstate = gettc(infile);          if (charstate == '\n')            charstate = ' ';          if (charstate == ' ' || (charstate >= '0' && charstate <= '9'))            continue;          uppercase(&charstate);          if ((strchr("ABCDEFGHIKLMNPQRSTVWXYZ*?-", charstate)) == NULL) {        printf("ERROR: bad amino acid: %c at position %ld of species %ld\n",                   charstate, j+1, i);            if (charstate == '.') {          printf("       Periods (.) may not be used as gap characters.\n");          printf("       The correct gap character is (-)\n");            }            exxit(-1);          }          j++;          y[i - 1][j - 1] = charstate;        }        if (interleaved)          continue;        if (j < chars)          scan_eoln(infile);        else if (j == chars)          done = true;      }      if (interleaved && i == 1)        basesnew = j;      scan_eoln(infile);      if ((interleaved && j != basesnew) ||          (!interleaved && j != chars)) {        printf("ERROR: SEQUENCES OUT OF ALIGNMENT AT POSITION %ld.\n", j);        exxit(-1);      }      i++;    }    if (interleaved) {      basesread = basesnew;      allread = (basesread == chars);    } else      allread = (i > spp);  }  if (!printdata)    return;  for (i = 1; i <= ((chars - 1) / 60 + 1); i++) {    for (j = 1; j <= spp; j++) {      for (k = 0; k < nmlngth; k++)        putc(nayme[j - 1][k], outfile);      fprintf(outfile, "   ");      l = i * 60;      if (l > chars)        l = chars;      for (k = (i - 1) * 60 + 1; k <= l; k++) {        if (j > 1 && y[j - 1][k - 1] == y[0][k - 1])          charstate = '.';        else          charstate = y[j - 1][k - 1];        putc(charstate, outfile);        if (k % 10 == 0 && k % 60 != 0)          putc(' ', outfile);

⌨️ 快捷键说明

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