phylopomp
Phylodynamics for POMPs
Loading...
Searching...
No Matches
lbdp.cc
Go to the documentation of this file.
1// LBDP: Linear birth-death-sampling model (C++)
2#include "master.h"
3#include "popul_proc.h"
4#include "generics.h"
5#include "internal.h"
6
7static const int deme = 1;
8
10typedef struct {
11 int n;
13
15typedef struct {
16 double lambda;
17 double mu;
18 double psi;
19 double chi;
20 int n0;
22
25
26template<>
27std::string lbdp_proc_t::yaml (std::string tab) const {
28 std::string t = tab + " ";
29 std::string p = tab + "parameter:\n"
31 + YAML_PARAM(mu)
34 + YAML_PARAM(n0);
35 std::string s = tab + "state:\n"
36 + YAML_STATE(n);
37 return p+s;
38}
39
40template<>
41void lbdp_proc_t::update_params (double *p, int n) {
42 int m = 0;
47 if (m != n) err("wrong number of parameters!");
48}
49
50template<>
51void lbdp_proc_t::update_IVPs (double *p, int n) {
52 int m = 0;
54 if (m != n) err("wrong number of initial-value parameters!");
55}
56
57template<>
58double lbdp_proc_t::event_rates (double *rate, int n) const {
59 int m = 0;
60 double total = 0;
61 RATE_CALC(params.lambda * state.n);
62 RATE_CALC(params.mu * state.n);
63 RATE_CALC(params.chi * state.n);
64 RATE_CALC(params.psi * state.n);
65 if (m != n) err("wrong number of events!");
66 return total;
67}
68
69template<>
71 state.n = params.n0;
72 graft(deme,params.n0);
73}
74
75template<>
77 switch (event) {
78 case 0:
79 state.n += 1; birth();
80 break;
81 case 1:
82 state.n -= 1; death();
83 break;
84 case 2:
85 state.n -= 1; sample_death();
86 break;
87 case 3:
88 sample();
89 break;
90 default: // #nocov
91 assert(0); // #nocov
92 break; // #nocov
93 }
94}
95
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
Population process class.
Definition popul_proc.h:16
double event_rates(double *rate, int n) const
Definition lbdp.cc:58
#define GENERICS(X, TYPE)
Definition generics.h:133
#define err(...)
Definition internal.h:18
static const int deme
Definition lbdp.cc:7
master_t< lbdp_proc_t, 1 > lbdp_genealogy_t
Definition lbdp.cc:24
popul_proc_t< lbdp_state_t, lbdp_parameters_t, 4 > lbdp_proc_t
Definition lbdp.cc:23
#define mu
Definition lbdp_pomp.c:5
#define n0
Definition lbdp_pomp.c:8
#define chi
Definition lbdp_pomp.c:7
#define n
Definition lbdp_pomp.c:9
#define lambda
Definition lbdp_pomp.c:4
#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
LBDP process parameters.
Definition lbdp.cc:15
double lambda
Definition lbdp.cc:16
LBDP process state.
Definition lbdp.cc:10