Suggest that expectations don't need to know about free parameters
[openmx:openmx.git] / src / libirt-rpf.h
1 /*
2   Copyright 2012-2013 Joshua Nathaniel Pritikin and contributors
3
4   libirt-rpf is free software: you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation, either version 3 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #ifndef _LIBIRT_RPF_
19 #define _LIBIRT_RPF_
20
21 enum RPF_ISpec {
22   RPF_ISpecID,
23   RPF_ISpecOutcomes,
24   RPF_ISpecDims,
25   RPF_ISpecCount
26 };
27
28 #define RPF_ISpecFacts RPF_ISpecDims
29
30 typedef int (*rpf_numSpec_t)(const double *spec);
31 typedef int (*rpf_numParam_t)(const double *spec);
32 typedef void (*rpf_prob_t)(const double *spec,
33                            const double *param, const double *th,
34                            double *out);
35 typedef void (*rpf_dLL1_t)(const double *spec,
36                            const double *param,
37                            const double *where, const double area,
38                            const double *weight, double *out);
39 typedef void (*rpf_dLL2_t)(const double *spec, const double *param, double *out);
40 typedef void (*rpf_rescale_t)(const double *spec, double *param, const int *paramMask,
41                               const double *mean, const double *choleskyCov);
42 typedef void (*rpf_transform_t)(double *spec, double *param);
43 typedef void (*rpf_dTheta_t)(const double *spec, const double *param,
44                              const double *where, const double *dir,
45                              double *grad, double *hess);
46
47 struct rpf {
48   const char name[10];
49   rpf_numSpec_t numSpec;
50   rpf_numParam_t numParam;
51   rpf_prob_t prob;
52   rpf_prob_t logprob;
53   rpf_dLL1_t dLL1;
54   rpf_dLL2_t dLL2;
55   rpf_dTheta_t dTheta;
56   rpf_rescale_t rescale;
57   rpf_transform_t prefit;
58   rpf_transform_t postfit;
59 };
60
61 /* R_GetCCallable */
62 typedef void (*get_librpf_t)(int *version, int *numModels, const struct rpf **model);
63
64 extern const struct rpf librpf_model[];
65 extern const int librpf_numModels;
66
67 #endif