phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
bdss.cc
Go to the documentation of this file.
1// BDSS: Linear birth-death with superspreading (C++)
2#include "master.h"
3#include "popul_proc.h"
4#include "generics.h"
5#include "internal.h"
6
7static const int normal = 1;
8static const int superspreader = 2;
9
11typedef struct {
12 int N;
13 int S;
15
17typedef struct {
18 double lambda_nn;
19 double lambda_ns;
20 double lambda_sn;
21 double lambda_ss;
22 double mu;
23 double chi;
24 double pop;
25 double N0;
26 double S0;
28
31
32template<>
33std::string bdss_proc_t::yaml (std::string tab) const {
34 std::string t = tab + " ";
35 std::string p = tab + "parameter:\n"
36 + YAML_PARAM(lambda_nn)
37 + YAML_PARAM(lambda_ns)
38 + YAML_PARAM(lambda_sn)
39 + YAML_PARAM(lambda_ss)
40 + YAML_PARAM(mu)
42 + YAML_PARAM(pop)
43 + YAML_PARAM(N0)
44 + YAML_PARAM(S0);
45 std::string s = tab + "state:\n"
46 + YAML_STATE(N)
47 + YAML_STATE(S);
48 return p+s;
49}
50
51template<>
52void bdss_proc_t::update_params (double *p, int n) {
53 int m = 0;
54 PARAM_SET(lambda_nn);
55 PARAM_SET(lambda_ns);
56 PARAM_SET(lambda_sn);
57 PARAM_SET(lambda_ss);
60 if (m != n) err("wrong number of parameters!");
61}
62
63template<>
64void bdss_proc_t::update_IVPs (double *p, int n) {
65 int m = 0;
66 PARAM_SET(pop);
67 PARAM_SET(N0);
69 if (m != n) err("wrong number of initial-value parameters!");
70}
71
72template<>
73double bdss_proc_t::event_rates (double *rate, int n) const {
74 int m = 0;
75 double total = 0;
76 RATE_CALC(params.lambda_nn * state.N);
77 RATE_CALC(params.lambda_ns * state.N);
78 RATE_CALC(params.lambda_sn * state.S);
79 RATE_CALC(params.lambda_ss * state.S);
80 RATE_CALC(params.mu * state.N);
81 RATE_CALC(params.mu * state.S);
82 RATE_CALC(params.chi * state.N);
83 RATE_CALC(params.chi * state.S);
84 if (m != n) err("wrong number of events!");
85 return total;
86}
87
88template<>
90 double m = params.pop/(params.N0 + params.S0);
91 state.N = nearbyint(m*params.N0);
92 state.S = nearbyint(m*params.S0);
93 graft(normal, state.N);
95}
96
97template<>
99 switch (event) {
100 case 0:
101 state.N += 1; birth(normal, normal);
102 break;
103 case 1:
105 break;
106 case 2:
108 break;
109 case 3:
111 break;
112 case 4:
113 state.N -= 1; death(normal);
114 break;
115 case 5:
116 state.S -= 1; death(superspreader);
117 break;
118 case 6:
119 state.N -= 1; sample_death(normal);
120 break;
121 case 7:
123 break;
124 default: // #nocov
125 assert(0); // #nocov
126 break; // #nocov
127 }
128}
129
static const int normal
Definition bdss.cc:7
master_t< bdss_proc_t, 2 > bdss_genealogy_t
Definition bdss.cc:30
static const int superspreader
Definition bdss.cc:8
popul_proc_t< bdss_state_t, bdss_parameters_t, 8 > bdss_proc_t
Definition bdss.cc:29
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
Population process class.
Definition popul_proc.h:16
double event_rates(double *rate, int n) const
Definition bdss.cc:73
#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 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 S0
Definition seirs_pomp.c:32
#define S
Definition seirs_pomp.c:37
BDSS process parameters.
Definition bdss.cc:17
double lambda_nn
Definition bdss.cc:18
double lambda_sn
Definition bdss.cc:20
double lambda_ns
Definition bdss.cc:19
double lambda_ss
Definition bdss.cc:21
BDSS process state.
Definition bdss.cc:11