phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
bdei.cc
Go to the documentation of this file.
1// BDEI: Linear birth-death with exposed and infectious classes (C++)
2#include "master.h"
3#include "popul_proc.h"
4#include "generics.h"
5#include "internal.h"
6
7static const int exposed = 1;
8static const int infectious = 2;
9
11typedef struct {
12 int E;
13 int I;
15
17typedef struct {
18 double sigma;
19 double lambda;
20 double mu;
21 double chi;
22 double pop;
23 double E0;
24 double I0;
26
29
30template<>
31std::string bdei_proc_t::yaml (std::string tab) const {
32 std::string t = tab + " ";
33 std::string p = tab + "parameter:\n"
36 + YAML_PARAM(mu)
38 + YAML_PARAM(pop)
39 + YAML_PARAM(E0)
40 + YAML_PARAM(I0);
41 std::string s = tab + "state:\n"
42 + YAML_STATE(E)
43 + YAML_STATE(I);
44 return p+s;
45}
46
47template<>
48void bdei_proc_t::update_params (double *p, int n) {
49 int m = 0;
54 if (m != n) err("wrong number of parameters!");
55}
56
57template<>
58void bdei_proc_t::update_IVPs (double *p, int n) {
59 int m = 0;
60 PARAM_SET(pop);
63 if (m != n) err("wrong number of initial-value parameters!");
64}
65
66template<>
67double bdei_proc_t::event_rates (double *rate, int n) const {
68 int m = 0;
69 double total = 0;
70 RATE_CALC(params.sigma * state.E);
71 RATE_CALC(params.lambda * state.I);
72 RATE_CALC(params.mu * state.I);
73 RATE_CALC(params.chi * state.I);
74 if (m != n) err("wrong number of events!");
75 return total;
76}
77
78template<>
80 double m = params.pop/(params.E0 + params.I0);
81 state.E = nearbyint(m*params.E0);
82 state.I = nearbyint(m*params.I0);
85}
86
87template<>
89 switch (event) {
90 case 0:
91 state.E -= 1; state.I += 1; migrate(exposed, infectious);
92 break;
93 case 1:
94 state.E += 1; birth(infectious, exposed);
95 break;
96 case 2:
97 state.I -= 1; death(infectious);
98 break;
99 case 3:
101 break;
102 default: // #nocov
103 assert(0); // #nocov
104 break; // #nocov
105 }
106}
107
static const int exposed
Definition bdei.cc:7
static const int infectious
Definition bdei.cc:8
popul_proc_t< bdei_state_t, bdei_parameters_t, 4 > bdei_proc_t
Definition bdei.cc:27
master_t< bdei_proc_t, 2 > bdei_genealogy_t
Definition bdei.cc:28
Encodes the master process.
Definition master.h:21
void graft(name_t i=1, int m=1)
new root in deme i
Definition master.h:153
void birth(name_t i=1, name_t j=1, int n=1)
n births into deme j with parent in deme i
Definition master.h:136
void sample_death(name_t i=1, int n=1)
sample_death in deme i
Definition master.h:169
void death(name_t i=1)
death in deme i
Definition master.h:147
void migrate(name_t i=1, name_t j=1)
migration from deme i to deme j
Definition master.h:179
Population process class.
Definition popul_proc.h:16
double event_rates(double *rate, int n) const
Definition bdei.cc:67
#define GENERICS(X, TYPE)
Definition generics.h:133
#define err(...)
Definition internal.h:18
#define mu
Definition lbdp_pomp.c:5
#define chi
Definition lbdp_pomp.c:7
#define n
Definition lbdp_pomp.c:9
#define lambda
Definition lbdp_pomp.c:4
#define YAML_PARAM(X)
Definition popul_proc.h:136
#define RATE_CALC(X)
Definition popul_proc.h:135
#define YAML_STATE(X)
Definition popul_proc.h:137
#define PARAM_SET(X)
Definition popul_proc.h:134
#define E
Definition seirs_pomp.c:38
#define I
Definition seirs_pomp.c:39
#define sigma
Definition seirs_pomp.c:28
#define I0
Definition seirs_pomp.c:34
#define E0
Definition seirs_pomp.c:33
BDEI process parameters.
Definition bdei.cc:17
double lambda
Definition bdei.cc:19
double sigma
Definition bdei.cc:18
BDEI process state.
Definition bdei.cc:11