3 /* Copyright 2006 Emmanuel Paradis */
5 /* This file is part of the R-package `ape'. */
6 /* See the file ../COPYING for licensing issues. */
10 void pic(int *ntip, int *nnode, int *edge1, int *edge2,
11 double *edge_len, double *phe, double *contr,
12 double *var_contr, int *var, int *scaled)
14 /* The tree must be in pruningwise order */
15 int anc, d1, d2, ic, i, j, k;
18 for (i = 0; i < *ntip * 2 - 3; i += 2) {
23 sumbl = edge_len[i] + edge_len[j];
25 contr[ic] = phe[d1] - phe[d2];
26 if (*scaled) contr[ic] = contr[ic]/sqrt(sumbl);
27 if (*var) var_contr[ic] = sumbl;
28 phe[anc - 1] = (phe[d1]*edge_len[j] + phe[d2]*edge_len[i])/sumbl;
29 /* find the edge where `anc' is a descendant (except if at the root):
30 it is obviously below the j'th edge */
31 if (j != *ntip * 2 - 3) {
33 while (edge2[k] != anc) k++;
34 edge_len[k] = edge_len[k] + edge_len[i]*edge_len[j]/sumbl;