89 const int *__stateindex,
90 const int *__parindex,
91 const int *__covindex,
92 const double *__covars,
97 double event_rate = 0;
98 double alpha, pi, disc;
104 *penalty += alpha*disc;
105 event_rate += (*rate = alpha*(1-disc)); rate++;
107 assert(R_FINITE(event_rate));
112 *penalty += alpha*disc;
113 event_rate += (*rate = alpha*(1-disc)); rate++;
115 assert(R_FINITE(event_rate));
123 event_rate += (*rate = alpha*pi); rate++;
124 *logpi = log(pi); logpi++;
125 assert(R_FINITE(event_rate));
128 pi = (
I1 > 0) ? 1-pi : 1;
129 event_rate += (*rate = alpha*pi); rate++;
130 *logpi = log(pi)-log(
ell1); logpi++;
131 assert(R_FINITE(event_rate));
136 event_rate += (*rate = alpha*pi); rate++;
137 *logpi = log(pi); logpi++;
138 assert(R_FINITE(event_rate));
140 pi = (
I2 > 0) ? 1-pi : 0;
141 event_rate += (*rate = alpha*pi); rate++;
142 *logpi = log(pi)-log(
ell2); logpi++;
143 assert(R_FINITE(event_rate));
148 event_rate += (*rate = alpha); rate++;
154 assert(R_FINITE(event_rate));
159 event_rate += (*rate = alpha); rate++;
165 assert(R_FINITE(event_rate));
169 event_rate += (*rate = alpha); rate++;
171 assert(R_FINITE(event_rate));
175 event_rate += (*rate = alpha); rate++;
177 assert(R_FINITE(event_rate));
181 event_rate += (*rate = alpha); rate++;
183 assert(R_FINITE(event_rate));
187 event_rate += (*rate = alpha); rate++;
189 assert(R_FINITE(event_rate));
193 event_rate += (*rate = alpha); rate++;
195 assert(R_FINITE(event_rate));
200 event_rate += (*rate = alpha); rate++;
206 assert(R_FINITE(event_rate));
210 event_rate += (*rate = alpha); rate++;
212 assert(R_FINITE(event_rate));
216 event_rate += (*rate = alpha); rate++;
218 assert(R_FINITE(event_rate));
223 event_rate += (*rate = alpha); rate++;
229 assert(R_FINITE(event_rate));
233 event_rate += (*rate = alpha); rate++;
235 assert(R_FINITE(event_rate));
294 const int *__stateindex,
295 const int *__parindex,
296 const int *__covindex,
297 const double *__covars,
301 double tstep = 0.0, tmax = t + dt;
302 double *color = &
COLOR;
311 int parent = (int) nearbyint(
node);
316 assert(parent<=nnode);
319 int parlin = lineage[parent];
320 int parcol = color[parlin];
321 int deme = nodedeme[parent];
322 assert(parlin >= 0 && parlin <
nsample);
323 assert(nearbyint(
N1)==nearbyint(
S1+
I1+
R1));
324 assert(nearbyint(
N2)==nearbyint(
S2+
I2+
R2));
330 switch (nodetype[parent]) {
335 assert(sat[parent]==1);
336 int c = child[index[parent]];
337 assert(parlin==lineage[c]);
340 if (unif_rand() < x) {
341 color[lineage[c]] =
host1;
345 color[lineage[c]] =
host2;
352 if (unif_rand() < 0.5) {
353 color[lineage[c]] =
host1;
356 color[lineage[c]] =
host2;
360 assert(nearbyint(
N1)==nearbyint(
S1+
I1+
R1));
361 assert(nearbyint(
N2)==nearbyint(
S2+
I2+
R2));
365 if (parcol !=
deme) {
368 if (sat[parent] == 0) {
369 if (parcol ==
host1) {
371 if (
C1 < 1 && unif_rand() >
C1) {
377 }
else if (parcol ==
host2) {
379 if (
C2 < 1 && unif_rand() >
C2) {
389 }
else if (sat[parent] == 1) {
390 int c = child[index[parent]];
391 color[lineage[c]] = parcol;
394 }
else if (parcol==
host2) {
404 color[parlin] = R_NaReal;
405 assert(nearbyint(
N1)==nearbyint(
S1+
I1+
R1));
406 assert(nearbyint(
N2)==nearbyint(
S2+
I2+
R2));
410 assert(sat[parent]==2);
411 if (parcol ==
host1) {
415 double lambda = lambda11+lambda21;
417 int c1 = child[index[parent]];
418 int c2 = child[index[parent]+1];
420 assert(lineage[c1] != lineage[c2]);
421 assert(lineage[c1] != parlin || lineage[c2] != parlin);
422 assert(lineage[c1] == parlin || lineage[c2] == parlin);
423 if (unif_rand() < x) {
424 color[lineage[c1]] =
host1;
425 color[lineage[c2]] =
host1;
436 if (unif_rand() < 0.5) {
437 color[lineage[c1]] =
host1;
438 color[lineage[c2]] =
host2;
440 color[lineage[c1]] =
host2;
441 color[lineage[c2]] =
host1;
454 }
else if (parcol ==
host2) {
458 double lambda = lambda12+lambda22;
460 int c1 = child[index[parent]];
461 int c2 = child[index[parent]+1];
463 assert(lineage[c1] != lineage[c2]);
464 assert(lineage[c1] != parlin || lineage[c2] != parlin);
465 assert(lineage[c1] == parlin || lineage[c2] == parlin);
466 if (unif_rand() < x) {
467 color[lineage[c1]] =
host2;
468 color[lineage[c2]] =
host2;
479 if (unif_rand() < 0.5) {
480 color[lineage[c1]] =
host1;
481 color[lineage[c2]] =
host2;
483 color[lineage[c1]] =
host2;
484 color[lineage[c2]] =
host1;
501 assert(nearbyint(
N1)==nearbyint(
S1+
I1+
R1));
502 assert(nearbyint(
N2)==nearbyint(
S2+
I2+
R2));
513 double event_rate = 0;
517 tstep = exp_rand()/event_rate;
519 while (t + tstep < tmax) {
521 assert(event>=0 && event<
nrate);
522 ll -= penalty*tstep + logpi[event];
525 assert(
S1>=1 &&
I1>=0);
529 assert(
S2>=1 &&
I2>=0);
533 assert(
S2>=1 &&
I1>=0);
539 assert(
S2>=1 &&
I1>=0);
548 assert(
S1>=1 &&
I2>=0);
554 assert(
S1>=1 &&
I2>=0);
587 assert(
S1>=1 &&
N1>=1);
591 assert(
I1>=1 &&
N1>=1);
595 assert(
R1>=1 &&
N1>=1);
599 assert(
S2>=1 &&
N2>=1);
603 assert(
I2>=1 &&
N2>=1);
607 assert(
R2>=1 &&
N2>=1);
619 assert(nearbyint(
N1)==nearbyint(
S1+
I1+
R1));
620 assert(nearbyint(
N2)==nearbyint(
S2+
I2+
R2));
625 tstep = exp_rand()/event_rate;
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 twospecies_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).
void twospecies_rinit(double *__x, const double *__p, double t0, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars)
void twospecies_gill(double *__x, const double *__p, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double t, double dt)