phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
seir.cc
Go to the documentation of this file.
1// SEIR: Classical susceptible-exposed-infected-recovered model (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 S;
13 int E;
14 int I;
15 int R;
17
19typedef struct {
20 double Beta;
21 double sigma;
22 double gamma;
23 double psi;
24 double chi;
25 double omega;
26 double pop;
27 double S0;
28 double E0;
29 double I0;
30 double R0;
32
35
36template<>
37std::string seir_proc_t::yaml (std::string tab) const {
38 std::string t = tab + " ";
39 std::string p = tab + "parameter:\n"
46 + YAML_PARAM(pop)
47 + YAML_PARAM(S0)
48 + YAML_PARAM(E0)
49 + YAML_PARAM(I0)
50 + YAML_PARAM(R0);
51 std::string s = tab + "state:\n"
52 + YAML_STATE(S)
53 + YAML_STATE(E)
54 + YAML_STATE(I)
55 + YAML_STATE(R);
56 return p+s;
57}
58
59template<>
60void seir_proc_t::update_params (double *p, int n) {
61 int m = 0;
68 if (m != n) err("wrong number of parameters!");
69}
70
71template<>
72void seir_proc_t::update_IVPs (double *p, int n) {
73 int m = 0;
74 PARAM_SET(pop);
79 if (m != n) err("wrong number of initial-value parameters!");
80}
81
82template<>
83double seir_proc_t::event_rates (double *rate, int n) const {
84 int m = 0;
85 double total = 0;
86 RATE_CALC(params.Beta * state.S * state.I / params.pop);
87 RATE_CALC(params.sigma * state.E);
88 RATE_CALC(params.gamma * state.I);
89 RATE_CALC(params.chi * state.I);
90 RATE_CALC(params.psi * state.I);
91 RATE_CALC(params.omega * state.R);
92 if (m != n) err("wrong number of events!");
93 return total;
94}
95
96template<>
98 double f = params.pop/(params.S0+params.E0+params.I0+params.R0);
99 state.S = nearbyint(f*params.S0);
100 state.E = nearbyint(f*params.E0);
101 state.I = nearbyint(f*params.I0);
102 state.R = nearbyint(f*params.R0);
105}
106
107template<>
109 switch (event) {
110 case 0:
111 state.S -= 1; state.E += 1; birth(Infectious,Exposed);
112 break;
113 case 1:
114 state.E -= 1; state.I += 1; migrate(Exposed,Infectious);
115 break;
116 case 2:
117 state.I -= 1; state.R += 1; death(Infectious);
118 break;
119 case 3:
121 break;
122 case 4:
124 break;
125 case 5:
126 state.R -= 1; state.S += 1;
127 break;
128 default: // #nocov
129 assert(0); // #nocov
130 break; // #nocov
131 }
132}
133
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 sample(name_t i=1, int n=1)
sample in deme i
Definition master.h:160
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 seir.cc:83
#define GENERICS(X, TYPE)
Definition generics.h:133
#define err(...)
Definition internal.h:18
#define chi
Definition lbdp_pomp.c:7
#define n
Definition lbdp_pomp.c:9
#define psi
Definition lbdp_pomp.c:6
#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
popul_proc_t< seir_state_t, seir_parameters_t, 6 > seir_proc_t
Definition seir.cc:33
static const int Infectious
Definition seir.cc:8
master_t< seir_proc_t, 2 > seir_genealogy_t
Definition seir.cc:34
#define E
Definition seirs_pomp.c:39
#define R0
Definition seirs_pomp.c:36
#define gamma
Definition seirs_pomp.c:29
#define R
Definition seirs_pomp.c:41
#define S0
Definition seirs_pomp.c:33
#define I
Definition seirs_pomp.c:40
#define sigma
Definition seirs_pomp.c:28
#define Beta
Definition seirs_pomp.c:27
#define I0
Definition seirs_pomp.c:35
#define E0
Definition seirs_pomp.c:34
#define omega
Definition seirs_pomp.c:32
#define Exposed
Definition seirs_pomp.c:4
#define S
Definition seirs_pomp.c:38
SEIR process parameters.
Definition seir.cc:19
double omega
Definition seir.cc:25
double Beta
Definition seir.cc:20
double gamma
Definition seir.cc:22
double sigma
Definition seir.cc:21
SEIR process state.
Definition seir.cc:11