| 0 | 1 /* | 
|  | 2  *   Structures, typedefs etc used in Locfit | 
|  | 3  */ | 
|  | 4 | 
|  | 5 typedef struct { | 
|  | 6   double *wk, *coef, *xbar, *f; | 
|  | 7   jacobian xtwx; | 
|  | 8   int lwk, haspc; | 
|  | 9 } paramcomp; | 
|  | 10 #define haspc(pc) ((pc)->haspc) | 
|  | 11 | 
|  | 12 typedef struct { | 
|  | 13   double *x[MXDIM]; | 
|  | 14   double *y; | 
|  | 15   double *w; | 
|  | 16   double *b; | 
|  | 17   double *c; | 
|  | 18   double sca[MXDIM]; | 
|  | 19   double xl[2*MXDIM]; | 
|  | 20   int n, d, ord; | 
|  | 21   int sty[MXDIM]; | 
|  | 22   varname yname, xname[MXDIM], wname, bname, cname; | 
|  | 23 } lfdata; | 
|  | 24 #define resp(lfd,i) (((lfd)->y==NULL) ? 0.0 : (lfd)->y[i]) | 
|  | 25 #define base(lfd,i) (((lfd)->b==NULL) ? 0.0 : (lfd)->b[i]) | 
|  | 26 #define prwt(lfd,i) (((lfd)->w==NULL) ? 1.0 : (lfd)->w[i]) | 
|  | 27 #define cens(lfd,i) (((lfd)->c==NULL) ? 0 : (int)(lfd)->c[i]) | 
|  | 28 #define datum(lfd,i,j) ((lfd)->x[i][j]) | 
|  | 29 #define dvari(lfd,i)   ((lfd)->x[i]) | 
|  | 30 | 
|  | 31 typedef struct { | 
|  | 32   int deflink, canlink, quasi, robust; | 
|  | 33   int (*vallink)(), (*family)(), (*initial)(), (*like)(), (*pcheck)(); | 
|  | 34 } family; | 
|  | 35 #define isquasi(fam) ((fam)->quasi) | 
|  | 36 #define isrobust(fam) ((fam)->robust) | 
|  | 37 extern int inllmix; /* flag needed to ensure correct behavior in llmix. */ | 
|  | 38 | 
|  | 39 typedef struct { | 
|  | 40   double nn, fixh, adpen; | 
|  | 41   int ker, kt; | 
|  | 42   int deg, deg0, p; | 
|  | 43   int acri; | 
|  | 44   int fam, lin; | 
|  | 45   family fami; | 
|  | 46   int ubas; | 
|  | 47   double (*vb)(); | 
|  | 48   void (*vbasis)(); | 
|  | 49 } smpar; | 
|  | 50 #define nn(sp)   ((sp)->nn) | 
|  | 51 #define fixh(sp) ((sp)->fixh) | 
|  | 52 #define pen(sp)  ((sp)->adpen) | 
|  | 53 #define ker(sp)  ((sp)->ker) | 
|  | 54 #define kt(sp)   ((sp)->kt) | 
|  | 55 #define deg(sp)  ((sp)->deg) | 
|  | 56 #define deg0(sp) ((sp)->deg0) | 
|  | 57 #define npar(sp) ((sp)->p) | 
|  | 58 #define acri(sp) ((sp)->acri) | 
|  | 59 #define ubas(sp) ((sp)->ubas) | 
|  | 60 #define fam(sp)  ((sp)->fam) | 
|  | 61 #define fami(sp)  (&(sp)->fami) | 
|  | 62 #define link(sp) ((sp)->lin) | 
|  | 63 | 
|  | 64 typedef struct { | 
|  | 65   int deriv[MXDEG+2]; | 
|  | 66   int nd; | 
|  | 67 } deriv; | 
|  | 68 | 
|  | 69 typedef struct { | 
|  | 70   int ev; | 
|  | 71   double *sv; | 
|  | 72   double cut; | 
|  | 73   double fl[2*MXDIM]; | 
|  | 74   Sint *iwk, *ce, *s, *lo, *hi; | 
|  | 75   int liw, nce, ncm, maxk; | 
|  | 76   int mg[MXDIM]; | 
|  | 77   void (*espec)(); | 
|  | 78 } evstruc; | 
|  | 79 #define ev(evs)   ((evs)->ev) | 
|  | 80 #define cut(evs)  ((evs)->cut) | 
|  | 81 #define mk(evs)   ((evs)->maxk) | 
|  | 82 #define mg(evs)   ((evs)->mg) | 
|  | 83 | 
|  | 84 typedef struct { | 
|  | 85   double *xev, *coef, *nlx, *t0, *lik, *h, *deg, *kap; | 
|  | 86   int lev, lwk; | 
|  | 87   int d, dcor, geth, hasd; | 
|  | 88   int nv, nvm; | 
|  | 89 } fitpt; | 
|  | 90 #define evp(fp)     ((fp)->xev) | 
|  | 91 #define evpt(fp,i)  (&(fp)->xev[(i)*(fp)->d]) | 
|  | 92 #define evptx(fp,i,k) ((fp)->xev[(i)*(fp)->d+(k)]) | 
|  | 93 #define llk(fp) ((fp)->kap[0]) | 
|  | 94 #define df0(fp) ((fp)->kap[1]) | 
|  | 95 #define df1(fp) ((fp)->kap[2]) | 
|  | 96 #define rv(fp)  ((fp)->kap[3]) | 
|  | 97 #define rsc(fp) ((fp)->kap[5]) | 
|  | 98 #define dc(fp)  ((fp)->dcor) | 
|  | 99 #define geth(fp) ((fp)->geth) | 
|  | 100 | 
|  | 101 typedef struct { | 
|  | 102   int (*procv)(), keepv, keepc, nopc, isset; | 
|  | 103   void (*alloc)(), (*pp)(); | 
|  | 104 } module; | 
|  | 105 | 
|  | 106 typedef struct { | 
|  | 107   int       lf_init_id; | 
|  | 108   lfdata    lfd; | 
|  | 109   smpar     sp; | 
|  | 110   evstruc   evs; | 
|  | 111   fitpt     fp; | 
|  | 112   deriv     dv; | 
|  | 113   paramcomp pc; | 
|  | 114   module    mdl; | 
|  | 115   } lfit; | 
|  | 116 #define LF_INIT_ID 34897239 |