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

📄 dnapars.c

📁 一个神经网络工具箱
💻 C
📖 第 1 页 / 共 4 页
字号:
  boolean done;  done = false;  do {    treei = findunrearranged(bestrees, nextree, true);    if (treei < 0)      done = true;    else       bestrees[treei].gloreange = true;        if (!done) {      load_tree(treei);      globrearrange();      done = rearrfirst;    }  } while (!done);} /* grandrearr */void maketree(){  /* constructs a binary tree from the pointers in treenode.     adds each node at location which yields highest "likelihood"  then rearranges the tree for greatest "likelihood" */  long i, j, numtrees, nextnode;  boolean done, firsttree, goteof, haslengths;  node *item, *nufork, *dummy;  pointarray nodep;  if (!usertree) {    for (i = 1; i <= spp; i++)      enterorder[i - 1] = i;    if (jumble)      randumize(seed, enterorder);    recompute = true;    root = treenode[enterorder[0] - 1];    add(treenode[enterorder[0] - 1], treenode[enterorder[1] - 1],        treenode[spp], &root, recompute, treenode, &grbg, zeros);    if (progress) {      printf("Adding species:\n");      writename(0, 2, enterorder);#ifdef WIN32      phyFillScreenColor();#endif    }    lastrearr = false;    oldnufork = NULL;    for (i = 3; i <= spp; i++) {      bestyet = -10.0 * spp * chars;      item = treenode[enterorder[i - 1] - 1];      getnufork(&nufork, &grbg, treenode, zeros);      there = root;      memcpy(tempadd->base, item->base, endsite*sizeof(long));      memcpy(tempadd->numsteps, item->numsteps, endsite*sizeof(long));      memcpy(tempadd->oldbase, zeros, endsite*sizeof(long));      memcpy(tempadd->oldnumsteps, zeros, endsite*sizeof(long));      addpreorder(root, item, nufork);      if (!mulf)        add(there, item, nufork, &root, recompute, treenode, &grbg, zeros);      else        add(there, item, NULL, &root, recompute, treenode, &grbg, zeros);      like = bestyet;      rearrange(&root);      if (progress) {        writename(i - 1, 1, enterorder);#ifdef WIN32        phyFillScreenColor();#endif      }      lastrearr = (i == spp);      if (lastrearr) {        bestlike = bestyet;        if (jumb == 1) {          bstlike2 = bestlike;          nextree = 1;          initbestrees(bestrees, maxtrees, true);          initbestrees(bestrees, maxtrees, false);        }        if (progress) {          printf("\nDoing global rearrangements");          if (rearrfirst)            printf(" on the first of the trees tied for best\n");          else            printf(" on all trees tied for best\n");          printf("  !");          for (j = 1; j <= nonodes; j++)            putchar('-');          printf("!\n");#ifdef WIN32          phyFillScreenColor();#endif        }        globrearrange();      }    }    done = false;    while (!done && findunrearranged(bestrees, nextree, true) >= 0) {      grandrearr();      done = rearrfirst;    }    if (progress)      putchar('\n');     recompute = false;    for (i = spp - 1; i >= 1; i--)      re_move(treenode[i], &dummy, &root, recompute, treenode, &grbg, zeros);    if (jumb == njumble) {      if (thorough && (nextree > 2))        reducebestrees(bestrees, &nextree);      if (treeprint) {        putc('\n', outfile);        if (nextree == 2)          fprintf(outfile, "One most parsimonious tree found:\n");        else          fprintf(outfile, "%6ld trees in all found\n", nextree - 1);      }      if (nextree > maxtrees + 1) {        if (treeprint)          fprintf(outfile, "here are the first %4ld of them\n", (long)maxtrees);        nextree = maxtrees + 1;      }      if (treeprint)        putc('\n', outfile);      for (i = 0; i <= (nextree - 2); i++) {        root = treenode[0];        add(treenode[0], treenode[1], treenode[spp], &root, recompute,          treenode, &grbg, zeros);        nextnode = spp + 2;        for (j = 3; j <= spp; j++) {          if (bestrees[i].btree[j - 1] > 0)            add(treenode[bestrees[i].btree[j - 1] - 1], treenode[j - 1],              treenode[nextnode++ - 1], &root, recompute, treenode, &grbg,              zeros);          else            add(treenode[treenode[-bestrees[i].btree[j - 1]-1]->back->index-1],              treenode[j - 1], NULL, &root, recompute, treenode, &grbg, zeros);        }        reroot(treenode[outgrno - 1], root);        postorder(root);        evaluate(root);        treelength(root, chars, treenode);        dnapars_printree();        describe();        for (j = 1; j < spp; j++)          re_move(treenode[j], &dummy, &root, recompute, treenode,                    &grbg, zeros);      }    }  } else {    openfile(&intree,INTREE,"input tree", "r",progname,intreename);    numtrees = countsemic(&intree);    if (numtrees > 2)      initseed(&inseed, &inseed0, seed);    if (numtrees > MAXNUMTREES) {      printf("\nERROR: number of input trees is read incorrectly from %s\n",        intreename);      exxit(-1);    }    if (treeprint) {      fprintf(outfile, "User-defined tree");      if (numtrees > 1)        putc('s', outfile);      fprintf(outfile, ":\n");    }    fsteps = (long **)Malloc(maxuser*sizeof(long *));    for (j = 1; j <= maxuser; j++)      fsteps[j - 1] = (long *)Malloc(endsite*sizeof(long));    if (trout)      fprintf(outtree, "%ld\n", numtrees);    nodep = NULL;    which = 1;    while (which <= numtrees) {      firsttree = true;      nextnode = 0;      haslengths = true;      treeread(intree, &root, treenode, &goteof, &firsttree,                 nodep, &nextnode, &haslengths,                 &grbg, initdnaparsnode);      if (treeprint)        fprintf(outfile, "\n\n");      if (outgropt)        reroot(treenode[outgrno - 1], root);      postorder(root);      evaluate(root);      treelength(root, chars, treenode);      dnapars_printree();      describe();      if (which < numtrees)        gdispose(root, &grbg, treenode);      which++;    }    FClose(intree);    putc('\n', outfile);    if (numtrees > 1 && chars > 1 )      standev(chars, numtrees, minwhich, minsteps, nsteps, fsteps, seed);    for (j = 1; j <= maxuser; j++)      free(fsteps[j - 1]);    free(fsteps);  }  if (jumb == njumble) {    if (progress) {      printf("\nOutput written to file \"%s\"\n\n", outfilename);      if (trout) {        printf("Tree");        if (numtrees > 1)          printf("s");        printf(" also written onto file \"%s\"\n\n", outtreename);      }    }  }}  /* maketree */void reallocchars() { /* The amount of chars can change between runs      this function reallocates all the variables      whose size depends on the amount of chars */  long i;  for (i=0; i < spp; i++){    free(y[i]);    y[i] = (Char *)Malloc(chars*sizeof(Char));  }  free(weight);  free(oldweight);   free(alias);  free(ally);  free(location);  weight = (long *)Malloc(chars*sizeof(long));  oldweight = (long *)Malloc(chars*sizeof(long));  alias = (long *)Malloc(chars*sizeof(long));  ally = (long *)Malloc(chars*sizeof(long));  location = (long *)Malloc(chars*sizeof(long));}void freerest(){ /* free variables that are allocated each data set */  long i;  if (!usertree) {    freenode(&temp);    freenode(&temp1);    freenode(&temp2);    freenode(&tempsum);    freenode(&temprm);    freenode(&tempadd);    freenode(&tempf);    freenode(&tmp);    freenode(&tmp1);    freenode(&tmp2);    freenode(&tmp3);    freenode(&tmprm);    freenode(&tmpadd);  }  for (i = 0; i < spp; i++)    free(y[i]);  free(y);  for (i = 1; i <= maxtrees; i++)    free(bestrees[i - 1].btree);  free(bestrees);  free(nayme);  free(enterorder);  free(place);  free(weight);  free(oldweight);  free(alias);  free(ally);  free(location);  freegrbg(&grbg);  if (ancseq)    freegarbage(&garbage);  free(threshwt);  free(zeros);  freenodes(nonodes, treenode);}  /* freerest */void usage(void){    fprintf(stderr,"Usage is %s [options]\n", progname);    fprintf(stderr,"Options\n");    fprintf(stderr,"  -u<number>  1=More thorough search, 2=Rearrange on best tree, 3=Less thorough\n");    fprintf(stderr,"  -m<number>  Number of trees to save\n");	fprintf(stderr,"  -j<number>  Number of times to jumble (0 = Not randomize input order)\n");	fprintf(stderr,"  -s<number>  Seed\n");    fprintf(stderr,"  -o<number>  Number of outgroup species\n");	fprintf(stderr,"  -t<number>  Parsimony threshold (0 = Not use Threshold parsimony)\n");	// fprintf(stderr,"  -w          Sites weighted\n");    fprintf(stderr,"  -v          Count only transversions\n");	exit (8);}int main(int argc, Char *argv[]){  /* DNA parsimony by uphill search */	long tempint=0;  /* reads in spp, chars, and the data. Then calls maketree to     construct the tree */#ifdef MAC   argc = 1;        /* macsetup("Dnapars","");        */   argv[0] = "Dnapars";#endif  init(argc, argv);  progname = argv[0];  printf("---------------------------------------\n");  printf("  MBETOOLBOX_DNAPARS\n");  printf("  The modified version of DNAPARS\n");  printf("  (in phylip 3.6a3) for MEBToolbox\n");  printf("---------------------------------------\n\n");  if ((argc == 1) || (strcmp(argv[1],"-help") == 0)) {usage();};  openfile(&infile,INFILE,"input file", "r",argv[0],infilename);  openfile(&outfile,OUTFILE,"output file", "w",argv[0],outfilename);  ibmpc = IBMCRT;  ansi = ANSICRT;  msets = 1;  firstset = true;  garbage = NULL;  grbg = NULL;  doinit();	    while ((argc > 1) && (argv[1][0] == '-')) {        switch (argv[1][1]) {            case 'u':						// 1 = More thorough search, 2 = Rearrange on one best tree, 3 = Less thorough				switch (atoi(&argv[1][2]))				{				case 2:					thorough=false;		rearrfirst=true;				break;				case 3:					thorough=false;		rearrfirst=false;				break;				default :					thorough=true;		rearrfirst=false;								break;				}				break;            case 'm':                maxtrees = atoi(&argv[1][2]);		/* Number of trees to save */                break;            case 'j':                tempint = atoi(&argv[1][2]);                if(tempint==0){					jumble = false;				}else{					jumble = true;	njumble=tempint;				};                break;            case 's':                inseed0 = atoi(&argv[1][2]);                inseed = atoi(&argv[1][2]);                break;			case 'o':                tempint = atoi(&argv[1][2]);                if(tempint==0){					outgropt = false;				    // fprintf(stderr,"  -o<number>  Number of outgroup species\n");				}else{					outgropt = true;	outgrno=tempint;				    // fprintf(stderr,"  -o%d Number of outgroup species\n",outgrno );				};                break;            case 't':				tempint = atoi(&argv[1][2]);                if(tempint==0){					thresh = false;				}else{					thresh = true;	threshold=tempint;				};                break;            case 'v':                transvp = true;                break;			default:                fprintf(stderr,"Bad option %s\n", argv[1]);				usage();        }        /*         * move the argument list up one         * move the count down one         */        ++argv;        --argc;    }  if (weights || justwts)    openfile(&weightfile,WEIGHTFILE,"weights file","r",argv[0],weightfilename);  if (trout)    openfile(&outtree,OUTTREE,"output tree file", "w",argv[0],outtreename);  for (ith = 1; ith <= msets; ith++) {    if (!(justwts && !firstset))      allocrest();    if (msets > 1 && !justwts) {    fprintf(outfile, "\nData set # %ld:\n\n", ith);      if (progress)        printf("\nData set # %ld:\n\n", ith);    }    doinput();    if (ith == 1)      firstset = false;    for (jumb = 1; jumb <= njumble; jumb++)      maketree();    if (!justwts)      freerest();  }  freetree(nonodes, treenode);  FClose(infile);  FClose(outfile);  if (weights || justwts)    FClose(weightfile);  if (trout)    FClose(outtree);  if (usertree)    FClose(intree);#ifdef MAC  fixmacfile(outfilename);  fixmacfile(outtreename);#endif  if (progress)    printf("Done.\n\n");#ifdef WIN32  phyRestoreConsoleAttributes();#endif  return 0;}  /* DNA parsimony by uphill search */

⌨️ 快捷键说明

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