phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
strains.cc
Go to the documentation of this file.
1// Strains: Three strains compete for a single susceptible pool. (C++)
2#include "master.h"
3#include "popul_proc.h"
4#include "generics.h"
5#include "internal.h"
6
7static int strain1 = 0;
8static int strain2 = 1;
9static int strain3 = 2;
10
12typedef struct {
13 int S;
14 int I1;
15 int I2;
16 int I3;
17 int R;
18 double N;
20
22typedef struct {
23 double Beta1;
24 double Beta2;
25 double Beta3;
26 double gamma;
27 double omega;
28 double psi1;
29 double psi2;
30 double psi3;
31 int S0;
32 int I1_0;
33 int I2_0;
34 int I3_0;
35 int R0;
37
40
41template<>
42std::string strains_proc_t::yaml (std::string tab) const {
43 std::string t = tab + " ";
44 std::string p = tab + "parameter:\n"
45 + YAML_PARAM(Beta1)
46 + YAML_PARAM(Beta2)
47 + YAML_PARAM(Beta3)
52 + YAML_PARAM(psi3)
53 + YAML_PARAM(S0)
56 + YAML_PARAM(I3_0)
57 + YAML_PARAM(R0);
58 std::string s = tab + "state:\n"
59 + YAML_STATE(S)
60 + YAML_STATE(I1)
61 + YAML_STATE(I2)
62 + YAML_STATE(I3)
63 + YAML_STATE(R)
64 + YAML_STATE(N);
65 return p+s;
66}
67
68template<>
69void strains_proc_t::update_params (double *p, int n) {
70 int m = 0;
71 PARAM_SET(Beta1);
72 PARAM_SET(Beta2);
73 PARAM_SET(Beta3);
78 PARAM_SET(psi3);
79 if (m != n) err("wrong number of parameters!");
80}
81
82template<>
83void strains_proc_t::update_IVPs (double *p, int n) {
84 int m = 0;
88 PARAM_SET(I3_0);
90 if (m != n) err("wrong number of initial-value parameters!");
91}
92
93template<>
94double strains_proc_t::event_rates (double *rate, int n) const {
95 int m = 0;
96 double total = 0;
97 RATE_CALC(params.Beta1 * state.S * state.I1 / state.N);
98 RATE_CALC(params.Beta2 * state.S * state.I2 / state.N);
99 RATE_CALC(params.Beta3 * state.S * state.I3 / state.N);
100 RATE_CALC(params.gamma * state.I1);
101 RATE_CALC(params.gamma * state.I2);
102 RATE_CALC(params.gamma * state.I3);
103 RATE_CALC(params.psi1 * state.I1);
104 RATE_CALC(params.psi2 * state.I2);
105 RATE_CALC(params.psi3 * state.I3);
106 RATE_CALC(params.omega * state.R);
107 if (m != n) err("wrong number of events!");
108 return total;
109}
110
111template<>
113 state.S = params.S0;
114 state.I1 = params.I1_0;
115 state.I2 = params.I2_0;
116 state.I3 = params.I3_0;
117 state.R = params.R0;
118 state.N = double(params.S0+params.I1_0+params.I3_0+params.I3_0+params.R0);
119 graft(strain1,params.I1_0);
120 graft(strain2,params.I2_0);
121 graft(strain3,params.I3_0);
122}
123
124template<>
126 switch (event) {
127 case 0:
128 state.S -= 1; state.I1 += 1; birth(strain1,strain1);
129 break;
130 case 1:
131 state.S -= 1; state.I2 += 1; birth(strain2,strain2);
132 break;
133 case 2:
134 state.S -= 1; state.I3 += 1; birth(strain3,strain3);
135 break;
136 case 3:
137 state.I1 -= 1; state.R += 1; death(strain1);
138 break;
139 case 4:
140 state.I2 -= 1; state.R += 1; death(strain2);
141 break;
142 case 5:
143 state.I3 -= 1; state.R += 1; death(strain3);
144 break;
145 case 6:
147 break;
148 case 7:
150 break;
151 case 8:
153 break;
154 case 9:
155 state.R -= 1; state.S += 1;
156 break;
157 default: // #nocov
158 assert(0); // #nocov
159 break; // #nocov
160 }
161}
162
Encodes the master process.
Definition master.h:22
void birth(name_t i=0, name_t j=0, int n=1)
n births into deme j with parent in deme i
Definition master.h:142
void sample(name_t i=0, int n=1)
sample in deme i
Definition master.h:166
void death(name_t i=0)
death in deme i
Definition master.h:153
void graft(name_t i=0, int m=1)
new root in deme i
Definition master.h:159
Population process class.
Definition popul_proc.h:20
double event_rates(double *rate, int n) const
Definition strains.cc:94
#define GENERICS(X, TYPE)
Definition generics.h:149
#define err(...)
Definition internal.h:18
#define n
Definition lbdp_pomp.c:8
#define YAML_PARAM(X)
Definition popul_proc.h:190
#define RATE_CALC(X)
Definition popul_proc.h:189
#define YAML_STATE(X)
Definition popul_proc.h:191
#define PARAM_SET(X)
Definition popul_proc.h:187
#define N
Definition seirs_pomp.c:32
#define R0
Definition seirs_pomp.c:31
#define gamma
Definition seirs_pomp.c:25
#define R
Definition seirs_pomp.c:36
#define S0
Definition seirs_pomp.c:28
#define omega
Definition seirs_pomp.c:27
#define S
Definition seirs_pomp.c:33
static int strain1
Definition siir.cc:7
static int strain2
Definition siir.cc:8
master_t< strains_proc_t, 3 > strains_genealogy_t
Definition strains.cc:39
popul_proc_t< strains_state_t, strains_parameters_t, 10 > strains_proc_t
Definition strains.cc:38
static int strain3
Definition strains.cc:9
Strains process parameters.
Definition strains.cc:22
Strains process state.
Definition strains.cc:12
#define I2_0
#define psi1
#define I2
#define I1_0
#define psi2
#define I1