int main (int argc, char **argv) { FILE *ofile; int nlambda = 0; int i, m; double zn, zvar, tw, tail; double *xx[0], *lambda; readcommands (argc, argv); settwxtable (twxtab); if (oname == NULL) ofile = stdout; else openit (oname, &ofile, "w"); if (iname == NULL) fatalx ("i paraameter compulsory\n"); nlambda = numlines (iname); ZALLOC(lambda, nlambda, double); xx[0] = lambda; nlambda = getxx (xx, nlambda, 1, iname); vst (lambda, lambda, -1.0, nlambda); sortit (lambda, NULL, nlambda); vst (lambda, lambda, -1.0, nlambda); m = numgtz (lambda, nlambda); fprintf (ofile, "%4s %12s", "#N", "eigenvalue"); fprintf (ofile, "%12s", "difference"); fprintf (ofile, " %9s %12s", "twstat", "p-value"); fprintf (ofile, " %9s", "effect. n"); fprintf (ofile, "\n"); for (i = 0; i < m; ++i) { zn = nval; tail = dotwcalc (lambda + i, m - i, &tw, &zn, &zvar, minleneig); fprintf (ofile, "%4d %12.6f", i + 1, lambda[i]); if (i == 0) fprintf (ofile, "%12s", "NA"); else fprintf (ofile, "%12.6f", lambda[i] - lambda[i - 1]); if (tail >= 0.0) fprintf (ofile, " %9.3f %12.6g", tw, tail); else fprintf (ofile, " %9s %12s", "NA", "NA"); if (zn > 0.0) { fprintf (ofile, " %9.3f", zn); } else { fprintf (ofile, " %9s", "NA"); } fprintf (ofile, "\n"); } return 0; }
void gettw(double x, double *tailp, double *densp) // main routine for accessing twtable { int k, n ; double x0, x1, f0, f1, f0p, f1p ; double *xx[3] ; if (twtabsize = -1) { if (settwxtable(TWXTABLE) < 0) fatalx("twtable not readable %s\n", TWXTABLE) ; k = numlines(twxtable) ; ZALLOC(twxval, k, double) ; ZALLOC(twxpdf, k, double) ; ZALLOC(twxtail, k, double) ; xx[0] = twxval ; xx[1] = twxtail ; xx[2] = twxpdf ; twtabsize = getxx(xx, k, 3, twxtable) ; } n = twtabsize ; k = firstgtx(x, twxval, n) ; if (k<=0) { *tailp = 1.0 ; *densp = 0.0 ; return ; } if (k>=n) { *tailp = twdensx(x) ; *densp = twtailx(x) ; return ; } x0 = twxval[k-1] ; x1 = twxval[k] ; f0 = twxtail[k-1] ; f0p = twxpdf[k-1] ; f1 = twxtail[k] ; f1p = twxpdf[k] ; // now do cubic interpolation cinterp(x, x0, x1, f0, -f0p, f1, -f1p, tailp, densp) ; *densp = - *densp ; /** printf("zzz %9.3f %9.3f %9.3f\n", x0, x1, x) ; printf("zz1 %9.3f %9.3f %9.3f\n", f0, f1, *tailp) ; printf("zz2 %9.3f %9.3f %9.3f\n", f0p, f1p, *densp) ; */ }