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

📄 write_tree_string.c

📁 fastDNAml is an attempt to solve the same problem as DNAML, but to do so faster and using less memo
💻 C
字号:
#include  <stdlib.h>#include  <stdio.h>#include  <string.h>#include  <math.h>#include  "fastDNAml_types.h"#include  "fastDNAml_funcs.h"extern char likelihood_key[];extern char ntaxa_key[];extern char opt_level_key[];extern char smoothed_key[];extern FILE *dbgfp;/*===========  This is a problem if tr->start->back is a tip!  ===========*//*  All routines should be contrived so that tr->start->back is not a tip *//******************************************************************************* * write string with representation of tree *   form == 1 -> Newick tree *   form == 2 -> Prolog fact *   form == 3 -> PHYLIP tree */char *treeString (char *treestr, tree *tr, nodeptr p, int form)  { /* treeString */    double  x, z;    char  *nameptr;    int    c;    if (p == tr->start->back) {      if (form != treePHYLIP) {        if (form == treeProlog) {          (void) sprintf(treestr, "phylip_tree(");          while (*treestr) treestr++;            /* move pointer to null */        }        (void) sprintf(treestr, "[&&%s: version = '%s'",                                 programName, programVersion);        while (*treestr) treestr++;        (void) sprintf(treestr, ", %s = %15.13g",                                 likelihood_key, tr->likelihood);        while (*treestr) treestr++;        (void) sprintf(treestr, ", %s = %d", ntaxa_key, tr->ntips);        while (*treestr) treestr++;        (void) sprintf(treestr,", %s = %d", opt_level_key, tr->opt_level);        while (*treestr) treestr++;        (void) sprintf(treestr, ", %s = %d", smoothed_key, tr->smoothed);        while (*treestr) treestr++;        (void) sprintf(treestr, "]%s", form == treeProlog ? ", " : " ");        while (*treestr) treestr++;      }    }    if (p->tip) {      if (form != treePHYLIP) *treestr++ = '\'';      nameptr = p->name;      while (c = *nameptr++) {        if (form != treePHYLIP) {if (c == '\'') *treestr++ = '\'';}        else if (c == ' ') {c = '_';}        *treestr++ = c;      }      if (form != treePHYLIP) *treestr++ = '\'';    }    else {      *treestr++ = '(';      treestr = treeString(treestr, tr, p->next->back, form);      *treestr++ = ',';      treestr = treeString(treestr, tr, p->next->next->back, form);      if (p == tr->start->back) {        *treestr++ = ',';        treestr = treeString(treestr, tr, p->back, form);      }      *treestr++ = ')';    }    if (p == tr->start->back) {      (void) sprintf(treestr, ":0.0%s\n", (form != treeProlog) ? ";" : ").");    }    else {      z = p->z;      if (z < zmin) { z = zmin; }      x = -log(z) * tr->rdta->fracchange;    /*fprintf(dbgfp," w%f/%f/%fw ",x,z,tr->rdta->fracchange);*//*DKB-debug*/      (void) sprintf(treestr, ": %8.6f", x);  /* prolog needs the space */    }    while (*treestr) treestr++;     /* move pointer up to null termination */    return  treestr;  } /* treeString *//******************************************************************************* * write out file with representation of final tree */void treeOut (FILE *treefile, tree *tr, int form)  { /* treeOut */    int    c;    char  *cptr, *treestr;    treestr = (char *) Malloc((tr->ntips * (nmlngth+32)) + 256);    if (! treestr) {      fprintf(stderr, "treeOut: Malloc failure\n");      exit(1);      }    (void) treeString(treestr, tr, tr->start->back, form);    cptr = treestr;    while (c = *cptr++) putc(c, treefile);    Free(treestr);  } /* treeOut */

⌨️ 快捷键说明

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