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;
14
16typedef struct {
17 double lambda;
18 double mu;
19 double psi;
20 double chi;
21 int n0;
24
27
28template<>
29std::string lbdp_proc_t::yaml (std::string tab) const {
30 std::string t = tab + " ";
31 std::string p = tab + "parameter:\n"
33 + YAML_PARAM(mu)
36 + YAML_PARAM(n0)
37 + YAML_PARAM(max_sample);
38 std::string s = tab + "state:\n"
39 + YAML_STATE(n)
41 return p+s;
42}
43
44template<>
45void lbdp_proc_t::update_params (double *p, int n) {
46 int m = 0;
51 if (m != n) err("wrong number of parameters!");
52}
53
54template<>
55void lbdp_proc_t::update_IVPs (double *p, int n) {
56 int m = 0;
58 PARAM_SET(max_sample);
59 if (m != n) err("wrong number of initial-value parameters!");
60}
61
62template<>
63double lbdp_proc_t::event_rates (double *rate, int n) const {
64 int m = 0;
65 double total = 0;
66 RATE_CALC((state.nsample < params.max_sample) ? params.lambda * state.n : 0.0);
67 RATE_CALC((state.nsample < params.max_sample) ? params.mu * state.n : 0.0);
68 RATE_CALC((state.nsample < params.max_sample) ? params.chi * state.n: 0.0);
69 RATE_CALC((state.nsample < params.max_sample) ? params.psi * state.n : 0.0);
70 if (m != n) err("wrong number of events!");
71 return total;
72}
73
74template<>
76 state.n = params.n0;
77 state.nsample = 0;
78 graft(deme,params.n0);
79}
80
81template<>
83 switch (event) {
84 case 0:
85 state.n += 1; birth();
86 break;
87 case 1:
88 state.n -= 1; death();
89 break;
90 case 2:
91 state.n -= 1; state.nsample++; sample_death();
92 break;
93 case 3:
94 state.nsample++; sample();
95 break;
96 default: // #nocov
97 assert(0); // #nocov
98 break; // #nocov
99 }
100}
101
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:63
#define GENERICS(X, TYPE)
Definition generics.h:133
SEXP nsample(TYPE &X)
Definition generics.h:12
#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:26
popul_proc_t< lbdp_state_t, lbdp_parameters_t, 4 > lbdp_proc_t
Definition lbdp.cc:25
#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:16
double lambda
Definition lbdp.cc:17
LBDP process state.
Definition lbdp.cc:10
int nsample
Definition lbdp.cc:12