static double testInsertThorough(tree *tr, nodeptr r, nodeptr q, boolean useVector) { double result, qz[NUM_BRANCHES], z[NUM_BRANCHES]; nodeptr x = q->back, s = r->back; int j; for(j = 0; j < tr->numBranches; j++) { qz[j] = q->z[j]; z[j] = sqrt(qz[j]); if(z[j] < zmin) z[j] = zmin; if(z[j] > zmax) z[j] = zmax; } hookup(r->next, q, z, tr->numBranches); hookup(r->next->next, x, z, tr->numBranches); hookupDefault(r, s, tr->numBranches); newviewGeneric(tr, r); localSmooth(tr, r, smoothings); if(useVector) result = evaluateGenericVector(tr, r); else result = evaluateGeneric(tr, r); hookup(q, x, qz, tr->numBranches); r->next->next->back = r->next->back = (nodeptr) NULL; return result; }
static void insertFast (tree *tr, nodeptr p, nodeptr q, int numBranches) { nodeptr r, s; int i; r = q->back; s = p->back; for(i = 0; i < numBranches; i++) tr->lzi[i] = q->z[i]; if(Thorough) { double zqr[NUM_BRANCHES], zqs[NUM_BRANCHES], zrs[NUM_BRANCHES], lzqr, lzqs, lzrs, lzsum, lzq, lzr, lzs, lzmax; double defaultArray[NUM_BRANCHES]; double e1[NUM_BRANCHES], e2[NUM_BRANCHES], e3[NUM_BRANCHES]; double *qz; qz = q->z; for(i = 0; i < numBranches; i++) defaultArray[i] = defaultz; makenewzGeneric(tr, q, r, qz, iterations, zqr, FALSE); makenewzGeneric(tr, q, s, defaultArray, iterations, zqs, FALSE); makenewzGeneric(tr, r, s, defaultArray, iterations, zrs, FALSE); for(i = 0; i < numBranches; i++) { lzqr = (zqr[i] > zmin) ? log(zqr[i]) : log(zmin); lzqs = (zqs[i] > zmin) ? log(zqs[i]) : log(zmin); lzrs = (zrs[i] > zmin) ? log(zrs[i]) : log(zmin); lzsum = 0.5 * (lzqr + lzqs + lzrs); lzq = lzsum - lzrs; lzr = lzsum - lzqs; lzs = lzsum - lzqr; lzmax = log(zmax); if (lzq > lzmax) {lzq = lzmax; lzr = lzqr; lzs = lzqs;} else if (lzr > lzmax) {lzr = lzmax; lzq = lzqr; lzs = lzrs;} else if (lzs > lzmax) {lzs = lzmax; lzq = lzqs; lzr = lzrs;} e1[i] = exp(lzq); e2[i] = exp(lzr); e3[i] = exp(lzs); } hookup(p->next, q, e1, numBranches); hookup(p->next->next, r, e2, numBranches); hookup(p, s, e3, numBranches); } else { double z[NUM_BRANCHES]; for(i = 0; i < numBranches; i++) { z[i] = sqrt(q->z[i]); if(z[i] < zmin) z[i] = zmin; if(z[i] > zmax) z[i] = zmax; } hookup(p->next, q, z, tr->numBranches); hookup(p->next->next, r, z, tr->numBranches); } newviewGeneric(tr, p); if(Thorough) { localSmooth(tr, p, smoothings); for(i = 0; i < numBranches; i++) { tr->lzq[i] = p->next->z[i]; tr->lzr[i] = p->next->next->z[i]; tr->lzs[i] = p->z[i]; } } }