phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
siir.cc
Go to the documentation of this file.
1// SIIR: Two-strain SIR model (C++)
2#include "master.h"
3#include "popul_proc.h"
4#include "generics.h"
5#include "internal.h"
6
7static const int strain1 = 1;
8static const int strain2 = 2;
9
11typedef struct {
12 int S;
13 int I1;
14 int I2;
15 int R;
17
19typedef struct {
20 double Beta1;
21 double Beta2;
22 double gamma;
23 double psi1;
24 double psi2;
25 double sigma12;
26 double sigma21;
27 double omega;
28 double pop;
29 double S_0;
30 double I1_0;
31 double I2_0;
32 double R_0;
34
37
38template<>
39std::string siir_proc_t::yaml (std::string tab) const {
40 std::string t = tab + " ";
41 std::string p = tab + "parameter:\n"
47 + YAML_PARAM(sigma12)
48 + YAML_PARAM(sigma21)
50 + YAML_PARAM(pop)
54 + YAML_PARAM(R_0);
55 std::string s = tab + "state:\n"
56 + YAML_STATE(S)
57 + YAML_STATE(I1)
58 + YAML_STATE(I2)
59 + YAML_STATE(R);
60 return p+s;
61}
62
63template<>
64void siir_proc_t::update_params (double *p, int n) {
65 int m = 0;
71 PARAM_SET(sigma12);
72 PARAM_SET(sigma21);
74 if (m != n) err("wrong number of parameters!");
75}
76
77template<>
78void siir_proc_t::update_IVPs (double *p, int n) {
79 int m = 0;
80 PARAM_SET(pop);
85 if (m != n) err("wrong number of initial-value parameters!");
86}
87
88template<>
89double siir_proc_t::event_rates (double *rate, int n) const {
90 int m = 0;
91 double total = 0;
92 RATE_CALC(params.Beta1 * state.S * state.I1 / params.pop);
93 RATE_CALC(params.Beta2 * state.S * state.I2 / params.pop);
94 RATE_CALC(params.gamma * state.I1);
95 RATE_CALC(params.gamma * state.I2);
96 RATE_CALC(params.psi1 * state.I1);
97 RATE_CALC(params.psi2 * state.I2);
98 RATE_CALC(params.sigma12 * state.I1);
99 RATE_CALC(params.sigma21 * state.I2);
100 RATE_CALC(params.omega * state.R);
101 if (m != n) err("wrong number of events!");
102 return total;
103}
104
105template<>
107 double f = params.pop/(params.S_0+params.I1_0+params.I2_0+params.R_0);
108 state.S = nearbyint(f*params.S_0);
109 state.I1 = nearbyint(f*params.I1_0);
110 state.I2 = nearbyint(f*params.I2_0);
111 state.R = nearbyint(f*params.R_0);
112 graft(strain1,state.I1);
113 graft(strain2,state.I2);
114}
115
116template<>
118 switch (event) {
119 case 0:
120 state.S -= 1; state.I1 += 1; birth(strain1,strain1);
121 break;
122 case 1:
123 state.S -= 1; state.I2 += 1; birth(strain2,strain2);
124 break;
125 case 2:
126 state.I1 -= 1; state.R += 1; death(strain1);
127 break;
128 case 3:
129 state.I2 -= 1; state.R += 1; death(strain2);
130 break;
131 case 4:
133 break;
134 case 5:
136 break;
137 case 6:
138 state.I1 -= 1; state.I2 += 1; migrate(strain1,strain2);
139 break;
140 case 7:
141 state.I1 += 1; state.I2 -= 1; migrate(strain2,strain1);
142 break;
143 case 8:
144 state.S += 1; state.R -= 1;
145 break;
146 default: // #nocov
147 assert(0); // #nocov
148 break; // #nocov
149 }
150}
151
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 siir.cc:89
#define GENERICS(X, TYPE)
Definition generics.h:133
#define err(...)
Definition internal.h:18
#define n
Definition lbdp_pomp.c:9
#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 gamma
Definition seirs_pomp.c:29
#define R
Definition seirs_pomp.c:40
#define omega
Definition seirs_pomp.c:31
#define S
Definition seirs_pomp.c:37
static const int strain2
Definition siir.cc:8
static const int strain1
Definition siir.cc:7
master_t< siir_proc_t, 2 > siir_genealogy_t
Definition siir.cc:36
popul_proc_t< siir_state_t, siir_parameters_t, 9 > siir_proc_t
Definition siir.cc:35
#define I2_0
#define S_0
#define I2
#define Beta2
#define Beta1
#define I1_0
#define I1
#define R_0
SIIR process parameters.
Definition siir.cc:19
double I1_0
Definition siir.cc:30
double I2_0
Definition siir.cc:31
double psi2
Definition siir.cc:24
double sigma21
Definition siir.cc:26
double omega
Definition siir.cc:27
double Beta1
Definition siir.cc:20
double sigma12
Definition siir.cc:25
double psi1
Definition siir.cc:23
double Beta2
Definition siir.cc:21
double gamma
Definition siir.cc:22
SIIR process state.
Definition siir.cc:11
#define psi1
#define psi2