10#define Beta1 (__p[__parindex[0]])
11#define Beta2 (__p[__parindex[1]])
12#define Beta3 (__p[__parindex[2]])
13#define gamma (__p[__parindex[3]])
14#define chi (__p[__parindex[4]])
15#define S_0 (__p[__parindex[5]])
16#define I1_0 (__p[__parindex[6]])
17#define I2_0 (__p[__parindex[7]])
18#define I3_0 (__p[__parindex[8]])
19#define R_0 (__p[__parindex[9]])
20#define POP (__p[__parindex[10]])
21#define S (__x[__stateindex[0]])
22#define I1 (__x[__stateindex[1]])
23#define I2 (__x[__stateindex[2]])
24#define I3 (__x[__stateindex[3]])
25#define R (__x[__stateindex[4]])
26#define ll (__x[__stateindex[5]])
27#define ellI1 (__x[__stateindex[6]])
28#define ellI2 (__x[__stateindex[7]])
29#define ellI3 (__x[__stateindex[8]])
30#define node (__x[__stateindex[9]])
33 event_rates(__x,__p,t, \
34 __stateindex,__parindex,__covindex, \
35 __covars,rate,logpi,&penalty) \
42 const int *__stateindex,
43 const int *__parindex,
44 const int *__covindex,
45 const double *__covars,
50 double event_rate = 0;
63 event_rate += (*rate = alpha*pi); rate++;
65 *penalty += alpha*(1-pi);
69 event_rate += (*rate = alpha*pi); rate++;
70 *logpi = log(pi); logpi++;
71 *penalty += alpha*(1-pi);
78 event_rate += (*rate = alpha*pi); rate++;
80 *penalty += alpha*(1-pi);
84 event_rate += (*rate = alpha*pi); rate++;
85 *logpi = log(pi); logpi++;
86 *penalty += alpha*(1-pi);
93 event_rate += (*rate = alpha*pi); rate++;
95 *penalty += alpha*(1-pi);
99 event_rate += (*rate = alpha*pi); rate++;
100 *logpi = log(pi); logpi++;
101 *penalty += alpha*(1-pi);
105 assert(R_FINITE(event_rate));
115 const int *__stateindex,
116 const int *__parindex,
117 const int *__covindex,
118 const double *__covars
121 S = nearbyint(
S_0*m);
125 R = nearbyint(
R_0*m);
140 const int *__stateindex,
141 const int *__parindex,
142 const int *__covindex,
143 const double *__covars,
147 double tstep = 0.0, tmax = t + dt;
154 int parent = (int) nearbyint(
node);
155 int c = child[index[parent]];
161 assert(parent<=nnode);
167 switch (nodetype[parent]) {
171 assert(sat[parent]==1);
172 assert(lineage[parent]==lineage[c]);
185 assert(sat[parent]==0);
186 switch (
deme[parent]) {
211 if (sat[parent]!=2)
break;
212 switch (
deme[parent]) {
241 if (tmax > t && R_FINITE(
ll)) {
249 tstep = exp_rand()/event_rate;
251 while (t + tstep < tmax) {
253 assert(event>=0 && event<
nrate);
254 ll -= penalty*tstep + logpi[event];
279 tstep = exp_rand()/event_rate;
287# define lik (__lik[0])
297 const int *__obsindex,
298 const int *__stateindex,
299 const int *__parindex,
300 const int *__covindex,
301 const double *__covars,
305 lik = (give_log) ?
ll : exp(
ll);
get_userdata_int_t * get_userdata_int
static int rcateg(double erate, double *rate, int nrate)
void strains_gill(double *__x, const double *__p, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double t, double dt)
void strains_dmeas(double *__lik, const double *__y, const double *__x, const double *__p, int give_log, const int *__obsindex, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double t)
Measurement model likelihood (dmeasure).
static double event_rates(double *__x, const double *__p, double t, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double *rate, double *logpi, double *penalty)
void strains_rinit(double *__x, const double *__p, double t, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars)
Latent-state initializer (rinit).