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 omega;
25 double pop;
26 double S0;
27 double E0;
28 double I0;
29 double R0;
31
34
35template<>
36std::string seir_proc_t::yaml (std::string tab) const {
37 std::string t = tab + " ";
38 std::string p = tab + "parameter:\n"
44 + YAML_PARAM(pop)
45 + YAML_PARAM(S0)
46 + YAML_PARAM(E0)
47 + YAML_PARAM(I0)
48 + YAML_PARAM(R0);
49 std::string s = tab + "state:\n"
50 + YAML_STATE(S)
51 + YAML_STATE(E)
52 + YAML_STATE(I)
53 + YAML_STATE(R);
54 return p+s;
55}
56
57template<>
58void seir_proc_t::update_params (double *p, int n) {
59 int m = 0;
65 if (m != n) err("wrong number of parameters!");
66}
67
68template<>
69void seir_proc_t::update_IVPs (double *p, int n) {
70 int m = 0;
71 PARAM_SET(pop);
76 if (m != n) err("wrong number of initial-value parameters!");
77}
78
79template<>
80double seir_proc_t::event_rates (double *rate, int n) const {
81 int m = 0;
82 double total = 0;
83 RATE_CALC(params.Beta * state.S * state.I / params.pop);
84 RATE_CALC(params.sigma * state.E);
85 RATE_CALC(params.gamma * state.I);
86 RATE_CALC(params.psi * state.I);
87 RATE_CALC(params.omega * state.R);
88 if (m != n) err("wrong number of events!");
89 return total;
90}
91
92template<>
94 double f = params.pop/(params.S0+params.E0+params.I0+params.R0);
95 state.S = nearbyint(f*params.S0);
96 state.E = nearbyint(f*params.E0);
97 state.I = nearbyint(f*params.I0);
98 state.R = nearbyint(f*params.R0);
101}
102
103template<>
105 switch (event) {
106 case 0:
107 state.S -= 1; state.E += 1; birth(Infectious,Exposed);
108 break;
109 case 1:
110 state.E -= 1; state.I += 1; migrate(Exposed,Infectious);
111 break;
112 case 2:
113 state.I -= 1; state.R += 1; death(Infectious);
114 break;
115 case 3:
117 break;
118 case 4:
119 state.R -= 1; state.S += 1;
120 break;
121 default: // #nocov
122 assert(0); // #nocov
123 break; // #nocov
124 }
125}
126
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 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:80
#define GENERICS(X, TYPE)
Definition generics.h:133
#define err(...)
Definition internal.h:18
#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
static const int Infectious
Definition seir.cc:8
master_t< seir_proc_t, 2 > seir_genealogy_t
Definition seir.cc:33
popul_proc_t< seir_state_t, seir_parameters_t, 5 > seir_proc_t
Definition seir.cc:32
#define E
Definition seirs_pomp.c:38
#define R0
Definition seirs_pomp.c:35
#define gamma
Definition seirs_pomp.c:29
#define R
Definition seirs_pomp.c:40
#define S0
Definition seirs_pomp.c:32
#define I
Definition seirs_pomp.c:39
#define sigma
Definition seirs_pomp.c:28
#define Beta
Definition seirs_pomp.c:27
#define I0
Definition seirs_pomp.c:34
#define E0
Definition seirs_pomp.c:33
#define omega
Definition seirs_pomp.c:31
#define Exposed
Definition seirs_pomp.c:4
#define S
Definition seirs_pomp.c:37
SEIR process parameters.
Definition seir.cc:19
double omega
Definition seir.cc:24
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