1 /*
2  *   Copyright (c) 1996-2001 Lucent Technologies.
3  *   See README file for details.
4  *
5  *
6  *
7  *  setstrval() is a  function for converting string arguments to Locfit's
8  *    numeric values.  A typical call will be setstrval(lf.mi,MKER,"gauss").
9  *
10  *  components that can be set in this manner are
11  *    MKER  (weight function)
12  *    MKT   (kernel type -- spherical or product)
13  *    MTG   (local likelihood family)
14  *    MLINK (link function)
15  *    MIT   (integration type for density estimation)
16  *    MEV   (evaluation structure)
17  *    MACRI (adaptive criterion)
18  *
19  *  INT ppwhat(str) interprets the preplot what argument.
20  *  INT restyp(str) interprets the residual type argument.
21  *
22  */
23 
24 #include "local.h"
25 
26 static char *famil[17] =
27   { "density", "ate",   "hazard",    "gaussian", "binomial",
28     "poisson", "gamma", "geometric", "circular", "obust", "huber",
29     "weibull", "cauchy","probab",    "logistic", "nbinomial", "vonmises" };
30 static int   fvals[17] =
31   { TDEN,  TRAT,  THAZ,  TGAUS, TLOGT,
32     TPOIS, TGAMM, TGEOM, TCIRC, TROBT, TROBT,
33     TWEIB, TCAUC, TPROB, TLOGT, TGEOM, TCIRC };
34 
lffamily(z)35 INT lffamily(z)
36 char *z;
37 { INT quasi, robu, f;
38   quasi = robu = 0;
39   while ((z[0]=='q') | (z[0]=='r'))
40   { quasi |= (z[0]=='q');
41     robu  |= (z[0]=='r');
42     z++;
43   }
44   f = pmatch(z,famil,fvals,16,-1);
45   if ((z[0]=='o') | (z[0]=='a')) robu = 0;
46   if (f==-1)
47   { WARN(("unknown family %s",z));
48     f = TGAUS;
49   }
50   if (quasi) f += 64;
51   if (robu)  f += 128;
52   return(f);
53 }
54 
getlffam(z,x)55 void getlffam(z,x)
56 char **z;
57 INT *x;
58 { *x = lffamily(z[0]);
59 }
60 
61 static char *wfuns[13] = {
62   "rectangular", "epanechnikov", "bisquare",    "tricube",
63   "triweight",   "gaussian",     "triangular",  "ququ",
64   "6cub",        "minimax",      "exponential", "maclean", "parametric" };
65 static int wvals[13] = { WRECT, WEPAN, WBISQ, WTCUB,
66   WTRWT, WGAUS, WTRIA, WQUQU, W6CUB, WMINM, WEXPL, WMACL, WPARM };
67 
68 static char *ktype[3] = { "spherical", "product", "center" };
69 static int   kvals[3] = { KSPH, KPROD, KCE };
70 
71 static char *ltype[8] = { "default", "canonical", "identity", "log",
72                           "logi",    "inverse",   "sqrt",     "arcsin" };
73 static int   lvals[8] = { LDEFAU, LCANON, LIDENT, LLOG,
74                           LLOGIT, LINVER, LSQRT,  LASIN };
75 
76 static char *etype[9] = { "tree",     "phull", "data", "grid", "kdtree",
77                           "kdcenter", "cross", "xbar", "none" };
78 static int   evals[9] = { ETREE, EPHULL, EDATA, EGRID, EKDTR,
79                           EKDCE, ECROS,  EXBAR, ENONE };
80 
81 static char *itype[6] = { "default", "multi", "product", "mlinear",
82                           "hazard",  "monte" };
83 static int   ivals[6] = { IDEFA, IMULT, IPROD, IMLIN, IHAZD, IMONT };
84 
85 static char *atype[5] = { "none", "cp", "ici", "mindex", "ok" };
86 static int   avals[5] = { ANONE, ACP, AKAT, AMDI, AOK };
87 
setstrval(mi,v,z)88 void setstrval(mi,v,z)
89 INT *mi, v;
90 char *z;
91 {
92   switch(v)
93   { case MKER:
94       mi[v] = pmatch(z, wfuns, wvals, 13, WTCUB);
95       return;
96 
97     case MKT:
98       mi[v] = pmatch(z, ktype, kvals, 3, KSPH);
99       return;
100 
101     case MTG:
102       mi[v] = lffamily(z);
103       return;
104 
105     case MLINK:
106       mi[v] = pmatch(z, ltype, lvals, 8, LDEFAU);
107       return;
108 
109     case MIT:
110       mi[v] = pmatch(z, itype, ivals, 6, IDEFA);
111       return;
112 
113     case MEV:
114       mi[v] = pmatch(z, etype, evals, 9, ETREE);
115       return;
116 
117     case MACRI:
118       mi[v] = pmatch(z, atype, avals, 5, ANONE);
119       return;
120   }
121 
122   WARN(("setstrval: invalid value %d",v));
123   return;
124 }
125 
126 static char *rtype[8] = { "deviance", "d2",    "pearson", "raw",
127                           "ldot",     "lddot", "fit",     "mean" };
128 static int   rvals[8] = { RDEV, RDEV2, RPEAR, RRAW, RLDOT, RLDDT, RFIT, RMEAN};
129 
130 static char *whtyp[8] = { "coef", "nlx", "infl", "band",
131                           "degr", "like", "rdf", "vari" };
132 static int   whval[8] = { PCOEF, PNLX, PT0, PBAND, PDEGR, PLIK, PRDF, PVARI };
133 
restyp(z)134 INT restyp(z)
135 char *z;
136 { int val;
137 
138   val = pmatch(z, rtype, rvals, 8, -1);
139   if (val==-1) ERROR(("Unknown type = %s",z));
140   return((INT)val);
141 }
142 
ppwhat(z)143 INT ppwhat(z)
144 char *z;
145 { int val;
146 
147   val = pmatch(z, whtyp, whval, 8, -1);
148   if (val==-1) ERROR(("Unknown what = %s",z));
149   return((INT)val);
150 }
151