Fill in default upper & lower bounds
[openmx:openmx.git] / src / libifa-rpf.h
1 /*
2   Copyright 2012-2013 Joshua Nathaniel Pritikin and contributors
3
4   libifa-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 _LIBIFA_RPF_
19 #define _LIBIFA_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_paramBound_t)(const double *spec, const int param,
33                                  double *upper, double *lower);
34 typedef void (*rpf_prob_t)(const double *spec,
35                            const double *param, const double *th,
36                            double *out);
37 typedef void (*rpf_dLL1_t)(const double *spec,
38                            const double *param,
39                            const double *where, const double area,
40                            const double *weight, double *out);
41 typedef void (*rpf_dLL2_t)(const double *spec, const double *param, double *out);
42 typedef void (*rpf_rescale_t)(const double *spec, double *param, const int *paramMask,
43                               const double *mean, const double *choleskyCov);
44 typedef void (*rpf_dTheta_t)(const double *spec, const double *param,
45                              const double *where, const double *dir,
46                              double *grad, double *hess);
47
48 struct rpf {
49   const char name[10];
50   rpf_numSpec_t numSpec;
51   rpf_numParam_t numParam;
52   rpf_paramBound_t paramBound;
53   rpf_prob_t prob;
54   rpf_prob_t logprob;
55   rpf_dLL1_t dLL1;
56   rpf_dLL2_t dLL2;
57   rpf_dTheta_t dTheta;
58   rpf_rescale_t rescale;
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