📄 write_tree_string.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 + -