| 0 | 1 #include "mex.h" | 
|  | 2 #include "lfev.h" | 
|  | 3 | 
|  | 4 void lfmxdata(lfdata *lfd, const mxArray *data) | 
|  | 5 { const mxArray *tmp; | 
|  | 6   double *x, *sc, *xl; | 
|  | 7   int n, d, i, k; | 
|  | 8   char c, ststr[16]; | 
|  | 9 | 
|  | 10   n = lfd->n = mxGetM(mxGetField(data,0,"x")); | 
|  | 11   d = lfd->d = mxGetN(mxGetField(data,0,"x")); | 
|  | 12   x = mxGetPr(mxGetField(data,0,"x")); | 
|  | 13   for (i=0; i<d; i++) lfd->x[i] = &x[i*n]; | 
|  | 14 | 
|  | 15   lfd->y = mxGetPr(mxGetField(data,0,"y")); | 
|  | 16 | 
|  | 17   tmp = mxGetField(data,0,"weights"); | 
|  | 18   k = mxGetM(tmp); | 
|  | 19   lfd->w = (k>1) ? mxGetPr(tmp) : NULL; | 
|  | 20 | 
|  | 21   tmp = mxGetField(data,0,"censor"); | 
|  | 22   k = mxGetM(tmp); | 
|  | 23   lfd->c = (k>1) ? mxGetPr(tmp) : NULL; | 
|  | 24 | 
|  | 25   tmp = mxGetField(data,0,"baseline"); | 
|  | 26   k = mxGetM(tmp); | 
|  | 27   lfd->b = (k>1) ? mxGetPr(tmp) : NULL; | 
|  | 28 | 
|  | 29   mxGetString(mxGetField(data,0,"style"),ststr,16); | 
|  | 30   k = strlen(ststr); | 
|  | 31   for (i=0; i<d; i++) | 
|  | 32   { c = (k==1) ? ststr[0] : ststr[i]; | 
|  | 33     switch(c) | 
|  | 34     { case 'a': lfd->sty[i] = STANGL; break; | 
|  | 35       case 'l': lfd->sty[i] = STLEFT; break; | 
|  | 36       case 'r': lfd->sty[i] = STRIGH; break; | 
|  | 37       case 'c': lfd->sty[i] = STCPAR; break; | 
|  | 38       default:  lfd->sty[i] = 1; break; | 
|  | 39     } | 
|  | 40   } | 
|  | 41 | 
|  | 42   sc = mxGetPr(mxGetField(data,0,"scales")); | 
|  | 43   k = mxGetN(mxGetField(data,0,"scales")); | 
|  | 44   for (i=0; i<d; i++) lfd->sca[i] = (k==1) ? sc[0] : sc[i]; | 
|  | 45 | 
|  | 46   xl = mxGetPr(mxGetField(data,0,"xlim")); | 
|  | 47   for (i=0; i<d; i++) | 
|  | 48   { lfd->xl[i] = xl[2*i]; | 
|  | 49     lfd->xl[i+d] = xl[2*i+1]; | 
|  | 50   } | 
|  | 51 } | 
|  | 52 | 
|  | 53 void lfmxsp(smpar *sp, mxArray *mcell, int d) | 
|  | 54 { double *alpha; | 
|  | 55   char str[16]; | 
|  | 56 | 
|  | 57   alpha = mxGetPr(mxGetField(mcell,0,"alpha")); | 
|  | 58   nn(sp)  = alpha[0]; | 
|  | 59   fixh(sp)= alpha[1]; | 
|  | 60   pen(sp) = alpha[2]; | 
|  | 61 | 
|  | 62   mxGetString(mxGetField(mcell,0,"adaptive_criterion"),str,16); | 
|  | 63   acri(sp) = lfacri(str); | 
|  | 64 | 
|  | 65   deg(sp) = mxGetPr(mxGetField(mcell,0,"degree"))[0]; | 
|  | 66   deg0(sp) = -1; | 
|  | 67 | 
|  | 68   mxGetString(mxGetField(mcell,0,"family"),str,16); | 
|  | 69   fam(sp) = lffamily(str); | 
|  | 70   mxGetString(mxGetField(mcell,0,"link"),str,16); | 
|  | 71   link(sp) = lflink(str); | 
|  | 72   setfamily(sp); | 
|  | 73 | 
|  | 74   mxGetString(mxGetField(mcell,0,"kernel"),str,16); | 
|  | 75   ker(sp) = lfkernel(str); | 
|  | 76   mxGetString(mxGetField(mcell,0,"kernel_type"),str,16); | 
|  | 77   kt(sp) = lfketype(str); | 
|  | 78   npar(sp) = calcp(sp,d); | 
|  | 79 | 
|  | 80   de_renorm = (int)(mxGetPr(mxGetField(mcell,0,"deren"))[0]); | 
|  | 81   mxGetString(mxGetField(mcell,0,"deit"),str,16); | 
|  | 82   de_itype = deitype(str); | 
|  | 83   de_mint = (int)(mxGetPr(mxGetField(mcell,0,"demint"))[0]); | 
|  | 84   lf_debug = (int)(mxGetPr(mxGetField(mcell,0,"debug"))[0]); | 
|  | 85 } | 
|  | 86 | 
|  | 87 void lfmxevs(lfit *lf, mxArray *mcell) | 
|  | 88 { int d, i, j; | 
|  | 89   double *ll, *ur, *mg, *drv; | 
|  | 90   char evstr[16], mod[16], mdir[256]; | 
|  | 91   evstruc *evs; | 
|  | 92   fitpt *fp; | 
|  | 93   deriv *dv; | 
|  | 94 | 
|  | 95   evs = &lf->evs; | 
|  | 96   fp  = &lf->fp; | 
|  | 97   dv  = &lf->dv; | 
|  | 98   d   = lf->lfd.d; | 
|  | 99 | 
|  | 100   if (mxIsChar(mxGetField(mcell,0,"type"))) | 
|  | 101   { mxGetString(mxGetField(mcell,0,"type"),evstr,16); | 
|  | 102     ev(evs) = lfevstr(evstr); | 
|  | 103   } | 
|  | 104   else | 
|  | 105   { ev(evs) = EPRES; | 
|  | 106     evs->mg[0] = mxGetN(mxGetField(mcell,0,"type")); | 
|  | 107     fp->xev = mxGetPr(mxGetField(mcell,0,"type")); | 
|  | 108   } | 
|  | 109 | 
|  | 110 | 
|  | 111   mxGetString(mxGetField(mxGetField(mcell,0,"module"),0,"name"),mod,16); | 
|  | 112   mxGetString(mxGetField(mxGetField(mcell,0,"module"),0,"directory"),mdir,256); | 
|  | 113   MODPARAMS(lf) = mxGetPr(mxGetField(mxGetField(mcell,0,"module"),0,"parameters")); | 
|  | 114   MODNPARAMS(lf) = mxGetN(mxGetField(mxGetField(mcell,0,"module"),0,"parameters")); | 
|  | 115   initmodule(&lf->mdl,mod,mdir,lf); | 
|  | 116 | 
|  | 117 | 
|  | 118   ll = mxGetPr(mxGetField(mcell,0,"lower_left")); | 
|  | 119   ur = mxGetPr(mxGetField(mcell,0,"upper_right")); | 
|  | 120   mg = mxGetPr(mxGetField(mcell,0,"grid")); | 
|  | 121   j =  mxGetN(mxGetField(mcell,0,"grid")); | 
|  | 122   cut(evs) = mxGetPr(mxGetField(mcell,0,"cut"))[0]; | 
|  | 123   for (i=0; i<d; i++) | 
|  | 124   { evs->fl[i] = ll[i]; | 
|  | 125     evs->fl[i+d] = ur[i]; | 
|  | 126     if (ev(evs) != EPRES) evs->mg[i] = (j==1) ? mg[0] : mg[i]; | 
|  | 127   } | 
|  | 128   mk(evs) = mxGetPr(mxGetField(mcell,0,"maxk"))[0]; | 
|  | 129 | 
|  | 130   drv = mxGetPr(mxGetField(mcell,0,"derivative")); | 
|  | 131   j = mxGetN(mxGetField(mcell,0,"derivative")); | 
|  | 132   for (i=0; i<j; i++) dv->deriv[i] = drv[i]-1; | 
|  | 133   dv->nd = (drv[0]>0) ? j : 0; | 
|  | 134 } |