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));
142 event_rate += (*rate =
omega*
R); rate++;
146 assert(R_FINITE(event_rate));
161 const int *__stateindex,
162 const int *__parindex,
163 const int *__covindex,
164 const double *__covars
167 S = nearbyint(
S0*adj);
168 IL = nearbyint(
IL0*adj);
169 IH = nearbyint(
IH0*adj);
170 R = nearbyint(
R0*adj);
185 const int *__stateindex,
186 const int *__parindex,
187 const int *__covindex,
188 const double *__covars,
192 double tstep = 0.0, tmax = t + dt;
193 double *color = &
COLOR;
200 int parent = (int) nearbyint(
node);
206 assert(parent<=nnode);
209 int parlin = lineage[parent];
210 int parcol = color[parlin];
211 assert(parlin >= 0 && parlin <
nsample);
216 switch (nodetype[parent]) {
221 assert(sat[parent]==1);
222 int c = child[index[parent]];
223 assert(lineage[parent]==lineage[c]);
226 if (unif_rand() < x) {
227 color[lineage[c]] =
Low;
231 color[lineage[c]] =
High;
239 color[lineage[c]] =
Low;
244 assert(sat[parent]==0);
249 }
else if (parcol ==
High) {
256 color[parlin] = R_NaReal;
259 assert(sat[parent]==2);
260 int c1 = child[index[parent]];
261 int c2 = child[index[parent]+1];
263 assert(lineage[c1] != lineage[c2]);
264 assert(lineage[c1] != parlin || lineage[c2] != parlin);
265 assert(lineage[c1] == parlin || lineage[c2] == parlin);
268 if (
S >= 1 &&
POP > 0) {
272 color[lineage[c1]] =
Low;
273 color[lineage[c2]] =
Low;
277 color[lineage[c1]] =
Low;
278 color[lineage[c2]] =
Low;
280 }
else if (parcol ==
High) {
282 if (
S>=1 &&
POP > 0) {
286 if (unif_rand() < 0.5) {
287 color[lineage[c1]] =
Low;
288 color[lineage[c2]] =
High;
290 color[lineage[c1]] =
High;
291 color[lineage[c2]] =
Low;
298 color[lineage[c1]] =
Low;
299 color[lineage[c2]] =
High;
309 if (tmax > t && R_FINITE(
ll)) {
313 double event_rate = 0;
317 tstep = exp_rand()/event_rate;
319 while (t + tstep < tmax) {
321 assert(event>=0 && event<
nrate);
322 ll -= decay*tstep + logpi[event];
325 assert(
S>=1 &&
IL>=1);
330 assert(
S>=1 &&
IH >= 1);
335 assert(
S>=1 &&
IH >= 1);
388 tstep = exp_rand()/event_rate;
397# define lik (__lik[0])
407 const int *__obsindex,
408 const int *__stateindex,
409 const int *__parindex,
410 const int *__covindex,
411 const double *__covars,
415 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)