10 return floor(R_unif_index(
n));
14 int n,
int from,
int to) {
18 if (!ISNA(color[i]) && nearbyint(color[i]) == from)
n--;
22 assert(nearbyint(color[i]) == from);
26#define Beta (__p[__parindex[0]])
27#define kappa (__p[__parindex[1]])
28#define gamma (__p[__parindex[2]])
29#define omega (__p[__parindex[3]])
30#define chi (__p[__parindex[4]])
31#define etaL (__p[__parindex[5]])
32#define etaH (__p[__parindex[6]])
33#define POP (__p[__parindex[7]])
34#define S0 (__p[__parindex[8]])
35#define IL0 (__p[__parindex[9]])
36#define IH0 (__p[__parindex[10]])
37#define R0 (__p[__parindex[11]])
38#define S (__x[__stateindex[0]])
39#define IL (__x[__stateindex[1]])
40#define IH (__x[__stateindex[2]])
41#define R (__x[__stateindex[3]])
42#define ll (__x[__stateindex[4]])
43#define node (__x[__stateindex[5]])
44#define ellL (__x[__stateindex[6]])
45#define ellH (__x[__stateindex[7]])
46#define COLOR (__x[__stateindex[8]])
49 event_rates(__x,__p,t, \
50 __stateindex,__parindex,__covindex, \
51 __covars,rate,logpi,&decay) \
58 const int *__stateindex,
59 const int *__parindex,
60 const int *__covindex,
61 const double *__covars,
66 double event_rate = 0;
69 assert(R_FINITE(event_rate));
71 assert(
S>=0 &&
IL>=0);
75 event_rate += (*rate = alpha*pi); rate++;
76 *logpi = log(pi); logpi++;
77 assert(R_FINITE(event_rate));
79 assert(
S>=0 &&
IH>=0);
83 event_rate += (*rate = alpha*pi); rate++;
84 *logpi = log(pi); logpi++;
85 assert(R_FINITE(event_rate));
88 event_rate += (*rate = alpha*pi); rate++;
89 *logpi = log(pi/
ellH); logpi++;
90 assert(R_FINITE(event_rate));
96 event_rate += (*rate = alpha*pi); rate++;
97 *logpi = log(pi); logpi++;
98 assert(R_FINITE(event_rate));
101 event_rate += (*rate = alpha*pi); rate++;
102 *logpi = log(pi/
ellL); logpi++;
103 assert(R_FINITE(event_rate));
109 event_rate += (*rate = alpha*pi); rate++;
110 *logpi = log(pi); logpi++;
111 assert(R_FINITE(event_rate));
114 event_rate += (*rate = alpha*pi); rate++;
115 *logpi = log(pi/
ellH); logpi++;
116 assert(R_FINITE(event_rate));
121 event_rate += (*rate = alpha); rate++;
128 assert(R_FINITE(event_rate));
133 event_rate += (*rate = alpha); rate++;
140 assert(R_FINITE(event_rate));
143 event_rate += (*rate = alpha); rate++;
148 assert(R_FINITE(event_rate));
163 const int *__stateindex,
164 const int *__parindex,
165 const int *__covindex,
166 const double *__covars
169 S = nearbyint(
S0*adj);
170 IL = nearbyint(
IL0*adj);
171 IH = nearbyint(
IH0*adj);
172 R = nearbyint(
R0*adj);
187 const int *__stateindex,
188 const int *__parindex,
189 const int *__covindex,
190 const double *__covars,
194 double tstep = 0.0, tmax = t + dt;
195 double *color = &
COLOR;
202 int parent = (int) nearbyint(
node);
208 assert(parent<=nnode);
211 int parlin = lineage[parent];
212 int parcol = color[parlin];
213 assert(parlin >= 0 && parlin <
nsample);
218 switch (nodetype[parent]) {
223 assert(sat[parent]==1);
224 int c = child[index[parent]];
225 assert(lineage[parent]==lineage[c]);
228 if (unif_rand() < x) {
229 color[lineage[c]] =
Low;
233 color[lineage[c]] =
High;
241 color[lineage[c]] =
Low;
246 assert(sat[parent]==0);
251 }
else if (parcol ==
High) {
258 color[parlin] = R_NaReal;
261 assert(sat[parent]==2);
262 int c1 = child[index[parent]];
263 int c2 = child[index[parent]+1];
265 assert(lineage[c1] != lineage[c2]);
266 assert(lineage[c1] != parlin || lineage[c2] != parlin);
267 assert(lineage[c1] == parlin || lineage[c2] == parlin);
270 if (
S >= 1 &&
POP > 0) {
274 color[lineage[c1]] =
Low;
275 color[lineage[c2]] =
Low;
280 color[lineage[c1]] =
Low;
281 color[lineage[c2]] =
Low;
283 }
else if (parcol ==
High) {
285 if (
S>=1 &&
POP > 0) {
289 if (unif_rand() < 0.5) {
290 color[lineage[c1]] =
Low;
291 color[lineage[c2]] =
High;
293 color[lineage[c1]] =
High;
294 color[lineage[c2]] =
Low;
301 color[lineage[c1]] =
Low;
302 color[lineage[c2]] =
High;
312 if (tmax > t && R_FINITE(
ll)) {
316 double event_rate = 0;
320 tstep = exp_rand()/event_rate;
322 while (t + tstep < tmax) {
324 assert(event>=0 && event<
nrate);
325 ll -= decay*tstep + logpi[event];
328 assert(
S>=1 &&
IL>=1);
333 assert(
S>=1 &&
IH >= 1);
338 assert(
S>=1 &&
IH >= 1);
391 tstep = exp_rand()/event_rate;
400# define lik (__lik[0])
410 const int *__obsindex,
411 const int *__stateindex,
412 const int *__parindex,
413 const int *__covindex,
414 const double *__covars,
418 lik = (give_log) ?
ll : exp(
ll);
get_userdata_int_t * get_userdata_int
static int rcateg(double erate, double *rate, int nrate)
void si2rs_rinit(double *__x, const double *__p, double t0, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars)
static void change_color(double *color, int nsample, int n, int from, int to)
void si2rs_gill(double *__x, const double *__p, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double t, double dt)
static int random_choice(double n)
void si2rs_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 *decay)