void treeout(node *p) { /* write out file with representation of final tree */ long i, n, w; Char c; double x; if (p->tip) { n = 0; for (i = 1; i <= nmlngth; i++) { if (nayme[p->index - 1][i - 1] != ' ') n = i; } for (i = 0; i < n; i++) { c = nayme[p->index - 1][i]; if (c == ' ') c = '_'; putc(c, outtree); } col += n; } else { putc('(', outtree); col++; treeout(p->next->back); putc(',', outtree); col++; if (col > 55) { putc('\n', outtree); col = 0; } treeout(p->next->next->back); if (p == curtree.start) { putc(',', outtree); col++; if (col > 45) { putc('\n', outtree); col = 0; } treeout(p->back); } putc(')', outtree); col++; } x = p->v; if (x > 0.0) w = (long)(0.43429448222 * log(x)); else if (x == 0.0) w = 0; else w = (long)(0.43429448222 * log(-x)) + 1; if (w < 0) w = 0; if (p == curtree.start) fprintf(outtree, ";\n"); else { fprintf(outtree, ":%*.8f", (int)w + 7, x); col += w + 8; } } /* treeout */
void treeout(node *p, long *col, double m, boolean njoin, node *start) { /* write out file with representation of final tree */ /* used in fitch & neighbor */ long i=0, n=0, w=0; Char c; double x=0.0; if (p->tip) { n = 0; for (i = 1; i <= nmlngth; i++) { if (nayme[p->index - 1][i - 1] != ' ') n = i; } for (i = 0; i < n; i++) { c = nayme[p->index - 1][i]; if (c == ' ') c = '_'; putc(c, outtree); } *col += n; } else { putc('(', outtree); (*col)++; treeout(p->next->back, col, m, njoin, start); putc(',', outtree); (*col)++; if (*col > 55) { putc('\n', outtree); *col = 0; } treeout(p->next->next->back, col, m, njoin, start); if (p == start && njoin) { putc(',', outtree); treeout(p->back, col, m, njoin, start); } putc(')', outtree); (*col)++; } x = p->v; if (x > 0.0) w = (long)(m * log(x)); else if (x == 0.0) w = 0; else w = (long)(m * log(-x)) + 1; if (w < 0) w = 0; if (p == start) fprintf(outtree, ";\n"); else { fprintf(outtree, ":%*.5f", (int) w + 7, x); *col += w + 8; } } /* treeout */
void treeout(node *p, long nextree, long *col, node *root) { /* write out file with representation of final tree */ /* used in dollop, dolmove, dolpenny, & move */ long i, n; Char c; node *q; if (p->tip) { n = 0; for (i = 1; i <= nmlngth; i++) { if (nayme[p->index - 1][i - 1] != ' ') n = i; } for (i = 0; i < n; i++) { c = nayme[p->index - 1][i]; if (c == ' ') c = '_'; putc(c, outtree); } *col += n; } else { q = p->next; putc('(', outtree); (*col)++; while (q != p) { treeout(q->back, nextree, col, root); q = q->next; if (q == p) break; putc(',', outtree); (*col)++; if (*col > 65) { putc('\n', outtree); *col = 0; } } putc(')', outtree); (*col)++; } if (p != root) return; if (nextree > 2) fprintf(outtree, "[%6.4f];\n", 1.0 / (nextree - 1)); else fprintf(outtree, ";\n"); } /* treeout */
void maketree() { /* construct the tree */ long i ; inputdata(replicates, printdata, lower, upper, x, reps); /* if (njoin && (spp < 3)) { mexPrintf("\nERROR: Neighbor-Joining runs must have at least 3 species\n\n"); exxit(-1); } */ if (progress) putchar('\n'); if (ith == 1) setuptree(&curtree, nonodes2 + 1); for (i = 1; i <= spp; i++) enterorder[i - 1] = i; if (jumble) randumize(seed, enterorder); for (i = 0; i < spp; i++) cluster[i] = curtree.nodep[i]; jointree(); if (njoin) curtree.start = curtree.nodep[outgrno - 1]->back; printree(curtree.start, treeprint, njoin, (boolean)(!njoin)); if (treeprint) summarize(); if (trout) { col = 0; if (njoin) treeout(curtree.start, &col, 0.43429448222, njoin, curtree.start); else curtree.root = curtree.start, treeoutr(curtree.start,&col,&curtree); } if (progress) { mexPrintf("\nOutput written on file \"%s\"\n\n", outfilename); if (trout) mexPrintf("Tree written on file \"%s\"\n\n", outtreename); } } /* maketree */
void describe() { /* prints ancestors, steps and table of numbers of steps in each character */ if (treeprint) fprintf(outfile, "\nrequires a total of %10.3f\n", -like); if (stepbox) { putc('\n', outfile); writesteps(weights, dollo, numsteps); } if (questions) guesstates(guess); if (ancseq) { hypstates(fullset, dollo, guess, treenode, root, garbage, zeroanc, oneanc); putc('\n', outfile); } putc('\n', outfile); if (trout) { col = 0; treeout(root, nextree, &col, root); } } /* describe */
void summarize(long numtrees) { /* print out branch lengths etc. */ long i, j, totalnum; fprintf(outfile, "\nremember:"); if (outgropt) fprintf(outfile, " (although rooted by outgroup)"); fprintf(outfile, " this is an unrooted tree!\n\n"); if (!minev) fprintf(outfile, "Sum of squares = %11.5f\n\n", -curtree.likelihood); else fprintf(outfile, "Sum of branch lengths = %11.5f\n\n", -curtree.likelihood); if ((power == 2.0) && !minev) { totalnum = 0; for (i = 1; i <= nums; i++) { for (j = 1; j <= nums; j++) { if (i != j) totalnum += reps[i - 1][j - 1]; } } fprintf(outfile, "Average percent standard deviation = "); fprintf(outfile, "%11.5f\n\n", 100 * sqrt(-curtree.likelihood / (totalnum - 2))); } fprintf(outfile, "Between And Length\n"); fprintf(outfile, "------- --- ------\n"); describe(curtree.start->next->back); describe(curtree.start->next->next->back); describe(curtree.start->back); fprintf(outfile, "\n\n"); if (trout) { col = 0; treeout(curtree.start, &col, 0.43429445222, true, curtree.start); } } /* summarize */
void maketree() { /* construct the tree */ long i ; inputdata(replicates, printdata, lower, upper, x, reps); if (progress) putchar('\n'); if (ith == 1) setuptree(&curtree, nonodes2 + 1); for (i = 1; i <= spp; i++) enterorder[i - 1] = i; if (jumble) randumize(seed, enterorder); for (i = 0; i < spp; i++) cluster[i] = curtree.nodep[i]; jointree(); if (outgropt) curtree.start = curtree.nodep[outgrno - 1]->back; printree(&curtree, curtree.start->next, treeprint, njoin, !njoin); if (treeprint) summarize(); if (trout) { col = 0; if (njoin) treeout(curtree.start, &col, 0.43429448222, njoin, curtree.start); else curtree.root = curtree.start, treeoutr(curtree.start,&col,&curtree); } if (progress) { printf("\nOutput written on output file\n\n"); if (trout) printf("Tree written on tree file\n\n"); } } /* maketree */
void summarize(void) { /* print out branch lengths etc. */ double chilow,chihigh; fprintf(outfile, "\nremember: "); if (outgropt) fprintf(outfile, "(although rooted by outgroup) "); fprintf(outfile, "this is an unrooted tree!\n\n"); fprintf(outfile, "Ln Likelihood = %11.5f\n", curtree.likelihood); if (df == 1) { chilow = 0.000982; chihigh = 5.02389; } else if (df == 2) { chilow = 0.05064; chihigh = 7.3777; } else { chilow = 1.0 - 2.0 / (df * 9); chihigh = chilow; chilow -= 1.95996 * sqrt(2.0 / (df * 9)); chihigh += 1.95996 * sqrt(2.0 / (df * 9)); chilow *= chilow * chilow; chihigh *= chihigh * chihigh; } fprintf(outfile, "\nBetween And Length"); fprintf(outfile, " Approx. Confidence Limits\n"); fprintf(outfile, "------- --- ------"); fprintf(outfile, " ------- ---------- ------\n"); describe(curtree.start->next->back, chilow,chihigh); describe(curtree.start->next->next->back, chilow,chihigh); describe(curtree.start->back, chilow, chihigh); fprintf(outfile, "\n\n"); if (trout) { col = 0; treeout(curtree.start); } } /* summarize */