Skip to content

Commit 2fe7254

Browse files
committed
Fixed trap algorithms
Trap algorithm vignette added
1 parent ac6712e commit 2fe7254

34 files changed

+1275
-115
lines changed

Diff for: NAMESPACE

+1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export(make_tiles)
106106
export(net2patches)
107107
export(outline_points_b)
108108
export(outline_points_q)
109+
export(outline_points_s)
109110
export(plotDDcmf)
110111
export(plotDDpmf)
111112
export(plot_Kbb)

Diff for: R/adult-BQS.R

+16-16
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#' @export
88
adult_dynamics.BQS = function(t, model){
99
with(model,{
10-
with(c(Mpars, Mvars, terms), {
10+
with(c(Mpar, Mvars, terms), {
1111
eggs_t = ova*psiQ*Q
1212
# compute variables
1313
B_t = Mbb %*% B + Mbq %*% Q + Mbs %*% S + Mbl %*% Lambda
@@ -89,10 +89,10 @@ init_adult_model.BQS = function(model, M0_opts){
8989
#' @return model, a compound [list]
9090
#' @export
9191
init_adult_model_BQS = function(model, opts=list(), B0=10, Q0=10, S0=10){with(opts,{
92-
model$Mvars$B = c(B0, model$nb, 1)
93-
model$Mvars$Q = c(Q0, model$nq, 1)
94-
model$Mvars$S = c(S0, model$ns, 1)
95-
model$Mvars$eggs = c(0, model$nq, 1)
92+
model$Mvars$B = rep(B0, model$nb)[1:model$nb]
93+
model$Mvars$Q = rep(Q0, model$nq)[1:model$nq]
94+
model$Mvars$S = rep(S0, model$ns)[1:model$ns]
95+
model$Mvars$eggs = rep(0, model$nq)[1:model$nq]
9696
return(model)
9797
})}
9898

@@ -181,17 +181,17 @@ setup_bionomics_BQS = function(model, opts=list(),
181181
sigb=0.1, sigq=0.1, sigf=0.1,
182182
sigL=0.1, ova=20){
183183
with(opts,{
184-
model$Mpar$setup$pB = pB
185-
model$Mpar$setup$pQ = pQ
186-
model$Mpar$setup$pS = pS
187-
model$Mpar$setup$psiB = psiB
188-
model$Mpar$setup$psiQ = psiQ
189-
model$Mpar$setup$psiS = psiS
190-
model$Mpar$setup$sigb = sigb
191-
model$Mpar$setup$sigq = sigq
192-
model$Mpar$setup$sigf = sigf
193-
model$Mpar$setup$sigL = sigL
194-
model$Mpar$setup$ova = ova
184+
model$Mpar$pB = pB
185+
model$Mpar$pQ = pQ
186+
model$Mpar$pS = pS
187+
model$Mpar$psiB = psiB
188+
model$Mpar$psiQ = psiQ
189+
model$Mpar$psiS = psiS
190+
model$Mpar$sigb = sigb
191+
model$Mpar$sigq = sigq
192+
model$Mpar$sigf = sigf
193+
model$Mpar$sigL = sigL
194+
model$Mpar$ova = ova
195195
return(model)
196196
})}
197197

Diff for: R/adult-interface.R

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#' Adult dynamics
1+
#' Update States for an Adult Mosquito Model
22
#'
33
#' @param model a model defined as a compound [list]
44
#'
@@ -9,7 +9,7 @@ adult_dynamics = function(t, model){
99
UseMethod("adult_dynamics", model$Mpar)
1010
}
1111

12-
#' Save state variables
12+
#' Store State Variables for an Adult Mosquito Model
1313
#'
1414
#' @param t the current time
1515
#' @param model a model defined as a compound [list]
@@ -31,7 +31,7 @@ init_states_M = function(model){
3131
}
3232

3333

34-
#' Set initial values for
34+
#' Set Initial Values for **M** Module
3535
#'
3636
#' @param model a model defined as a compound [list]
3737
#' @param M0_opts a list of options to overwrite defaults
@@ -52,7 +52,7 @@ compute_diffs_M = function(model){
5252
UseMethod("compute_diffs_M", model$Mpar)
5353
}
5454

55-
#' Setup an adult model
55+
#' Setup Adult Mosquito Module
5656
#'
5757
#' @param model a model defined as a compound [list]
5858
#' @param b a point set defining blood feeding sites

Diff for: R/compute_K_matrices.R

+122-66
Original file line numberDiff line numberDiff line change
@@ -10,67 +10,106 @@ compute_Kqb = function(model, Tmax){
1010
UseMethod("compute_Kqb", model$Mpar)
1111
}
1212

13-
#' Compute dispersal to lay eggs within one feeding cycle
13+
#' Compute net dispersal matrix to blood feed within one feeding cycle
1414
#'
1515
#' @param model a model defined as a compound [list]
1616
#' @param Tmax the number of time steps
1717
#'
1818
#' @return the model, a compound [list]
1919
#' @export
20-
compute_Kqb.BQS = function(model, Tmax=200){with(model,with(Mpar,{
21-
nb = dim(Psi_bb)[2]
22-
nq = dim(Psi_qq)[2]
23-
ns = dim(Psi_ss)[2]
24-
25-
Mbb = pB*(1-sigb)*(1-psiB)*Psi_bb
26-
success = pB*(1-sigb)*psiB*Psi_bb
27-
Mbq = pB*psiB*Psi_bq
28-
Mbs = pB*sigb*psiB*Psi_bs
29-
Mqb = pQ*(1-sigf)*psiQ*Psi_qb
30-
Mqq = pQ*(1-sigq)*(1-psiQ)*Psi_qq
31-
Mqs = pQ*(sigf*psiQ + sigq*(1-psiQ))*Psi_qs
32-
Msb = pS*psiS*Psi_sb
33-
Msq = 0*t(Mqs)
34-
Mss = (1-psiS)*Psi_ss
35-
36-
M1 = cbind(Mbb, Mqb, Msb, 0*Mbb)
37-
M2 = cbind(0*Mbq, Mqq, Msq, 0*Mbq)
38-
M3 = cbind(Mbs, Mqs, Mss, 0*Mbs)
39-
M4 = cbind(success, 0*Mqb, 0*Msb, diag(1,nb))
40-
M = rbind(M1, M2, M3, M4)
20+
compute_Kqb.BQ = function(model, Tmax=100){with(model, with(Mpar,{
4121

42-
cohort = Psi_qb%*%diag(pQ,nq)
43-
Cyes = diag(psiB, nb)%*%cohort
44-
Cno = diag(1-psiB, nb)%*%cohort
22+
cohort = Psi_qb %*% diag(pB, nb)
4523

46-
Kt = rbind(Cno, 0*Mqq, 0*Mqs, Cyes)
24+
notpsiQ = diag(1-psiQ, nq)
25+
psiQ = diag(psiQ, nq)
26+
pQ = diag(pQ, nq)
4727

48-
for(i in 1:Tmax) Kt = M%*%Kt
49-
Kt[-c(1:(nb+nq+ns)),]
28+
Kbq = 0*cohort # Success
29+
Bt = cohort # Failure
5030

51-
model$KGV$Kqb = Kt[nb+nq+ns+c(1:nb),]
31+
Kqb = psiQ %*% cohort # Success
32+
Qt = notpsiQ %*% cohort # Failure
33+
for(i in 1:Tmax){
34+
Kqb = Kqb + psiQ %*% Qt
35+
Qt = Psi_qq %*% pQ %*% notpsiQ %*% Qt
36+
}
37+
model$KGV$Kqb = Kqb
5238
return(model)
5339
}))}
5440

55-
#' Compute net dispersal matrix to blood feed within one feeding cycle
41+
42+
#' Compute dispersal to lay eggs within one feeding cycle
5643
#'
5744
#' @param model a model defined as a compound [list]
5845
#' @param Tmax the number of time steps
5946
#'
6047
#' @return the model, a compound [list]
6148
#' @export
62-
compute_Kqb.BQ = function(model, Tmax=100){with(model, with(Mpar,{
63-
cohort = Psi_qb %*% diag(pB, nb)
64-
Kqb = diag(psiQ, nq) %*% cohort # Success
65-
Qt = diag(1-psiQ, nq) %*% cohort # Failure
66-
for(i in 1:Tmax){
67-
Kqb = Kqb + diag(pQ*psiQ, nq) %*% Psi_qq %*% Qt
68-
Qt =diag(pQ*(1-psiQ), nq) %*% Psi_qq %*%Qt
49+
compute_Kqb.BQS = function(model, Tmax=200){with(model,with(Mpar,{
50+
51+
nb = dim(b)[1]
52+
nq = dim(q)[1]
53+
ns = dim(s)[1]
54+
55+
sigF = diag(sigf, nq)
56+
nsigF = diag(1-sigf, nq)
57+
npsiB = diag(1-psiB, nb)
58+
psiB = diag(psiB, nb)
59+
pB = diag(pB, nb)
60+
nsigB = diag(1-sigb, nb)
61+
sigB = diag(sigb, nb)
62+
63+
npsiQ = diag(1-psiQ, nq)
64+
psiQ = diag(psiQ, nq)
65+
pQ = diag(pQ, nq)
66+
nsigQ = diag(1-sigq, nq)
67+
sigQ = diag(sigq, nq)
68+
69+
npsiS = diag(1-psiS, ns)
70+
psiS = diag(psiS, ns)
71+
pS = diag(pS, ns)
72+
73+
Mbb = Psi_bb %*% nsigB %*% pB %*% npsiB
74+
Mbq = 0*Psi_bq
75+
trap = psiQ
76+
Mbs = Psi_bs %*% psiS %*% pS
77+
78+
Mqb = Psi_qb %*% psiB %*% pB
79+
Mqq = Psi_qq %*% nsigQ %*% pQ %*% npsiQ
80+
Mqs = 0*t(Psi_sq)
81+
82+
Msb = Psi_sb %*% sigB %*% pB %*% npsiB
83+
Msq = Psi_sq %*% sigQ %*% pQ %*% npsiQ
84+
Mss = Psi_ss %*% npsiS %*% pS
85+
86+
M1 = cbind(Mbb, Mbq, Mbs, 0*Mbq)
87+
M2 = cbind(Mqb, Mqq, Mqs, 0*Mqq)
88+
M3 = cbind(Msb, Msq, Mss, 0*Msq)
89+
M4 = cbind(0*Mqb, trap, 0*Mqs, diag(1,nq))
90+
M = rbind(M1, M2, M3, M4)
91+
92+
B0 = pB
93+
Q0 = 0*(Psi_qb %*% pB)
94+
S0 = 0*(Psi_sb %*% pB)
95+
T0 = 0*Q0
96+
97+
nix = nb + nq + ns + c(1:nq)
98+
BSQT = rbind(B0, S0, Q0, T0)
99+
100+
looking = 1
101+
while(looking > 1e-6){
102+
BSQT = M%*%BSQT
103+
looking = sum(BSQT[-nix,-nix])
69104
}
105+
106+
nix = 1:(nb+nq+ns)
107+
Kqb = BSQT[-nix,]
70108
model$KGV$Kqb = Kqb
71109
return(model)
72110
}))}
73111

112+
74113
#' Compute dispersal matrix to blood feed within one feeding cycle
75114
#'
76115
#' @param model a model defined as a compound [list]
@@ -90,13 +129,18 @@ compute_Kbq = function(model, Tmax){
90129
#' @return the model, a compound [list]
91130
#' @export
92131
compute_Kbq.BQ = function(model, Tmax=100){with(model, with(Mpar,{
132+
133+
notpsiB = diag(1-psiB, nb)
134+
psiB = diag(psiB, nb)
135+
pB = diag(pB, nb)
136+
93137
cohort = Psi_bq %*% diag(pQ, nq)
94-
Kbq = diag(psiB, nb) %*% cohort # Success
95-
Bt = diag(1-psiB, nb) %*% cohort # Failure
138+
Kbq = 0*cohort # Success
139+
Bt = cohort # Failure
96140

97141
for(i in 1:Tmax){
98-
Kbq = Kbq + diag(pB*psiB, nb) %*% Psi_bb %*% Bt
99-
Bt = diag(pB*(1-psiB), nb) %*% Psi_bb %*% Bt
142+
Kbq = Kbq + psiB %*% Bt
143+
Bt = Psi_bb %*% pB %*% notpsiB %*% Bt
100144
}
101145
model$KGV$Kbq = Kbq
102146
return(model)
@@ -116,31 +160,43 @@ compute_Kbq.BQS = function(model, Tmax = 200){with(model,with(Mpar,{
116160
nq = dim(q)[1]
117161
ns = dim(s)[1]
118162

119-
Mbb = pB*(1-sigb)*(1-psiB)*Psi_bb
120-
success = pB*(1-sigb)*psiB*Psi_bb
121-
Mbq = pB*psiB*Psi_bq
122-
Mbs = pB*sigb*psiB*Psi_bs
123-
Mqb = pQ*(1-sigf)*psiQ*Psi_qb
124-
Mqq = pQ*(1-sigq)*(1-psiQ)*Psi_qq
125-
Mqs = pQ*(sigf*psiQ + sigq*(1-psiQ))*Psi_qs
126-
Msb = pS*psiS*Psi_sb
127-
Msq = 0*t(Mqs)
128-
Mss = (1-psiS)*Psi_ss
129-
130-
M1 = cbind(Mbb, 0*Mqb, Msb, 0*Mqb)
131-
M2 = cbind(Mbq, Mqq, Msq, 0*Mqq)
132-
M3 = cbind(Mbs, Mqs, Mss, 0*Mqs)
133-
M4 = cbind(success, diag(1,nq), 0*Msq, diag(1,nq))
134-
M = rbind(M1, M2, M3, M4)
135-
136-
cohort = Psi_bq%*%diag(pB,nb)
137-
Cyes = diag(psiQ, nq)%*%cohort
138-
Cno = diag(1-psiQ, nq)%*%cohort
139-
140-
Kt = rbind(0*Mbb, Cno, 0*Mbs, Cyes)
141-
for(i in 1:Tmax) Kt = M%*%Kt
142-
Kt[-c(1:(nb+nq+ns)),]
143-
model$KGV$Kbq = Kt[nb+nq+ns+c(1:nq),]
163+
sigF = diag(sigf, nq)
164+
nsigF = diag(1-sigf, nq)
165+
npsiB = diag(1-psiB, nb)
166+
psiB = diag(psiB, nb)
167+
pB = diag(pB, nb)
168+
nsigB = diag(1-sigb, nb)
169+
sigB = diag(sigb, nb)
170+
npsiS = diag(1-psiS, ns)
171+
psiS = diag(psiS, ns)
172+
pS = diag(pS, ns)
173+
174+
cohort = diag(pQ,nq)
175+
B = Psi_bq %*% nsigF %*% diag(pQ,nq)
176+
S = Psi_sq %*% sigF %*% diag(pQ,nq)
177+
178+
Mbb = Psi_bb %*% nsigB %*% pB %*% npsiB
179+
trap = psiB
180+
Msb = Psi_sb %*% sigB %*% pB %*% npsiB
181+
Mbs = Psi_bs %*% pS %*% psiS
182+
Mss = Psi_ss %*% pS %*% npsiS
183+
184+
M1 = cbind(Mbb, Mbs, 0*Mbb)
185+
M2 = cbind(Msb, Mss, 0*Msb)
186+
M3 = cbind(trap, 0*Psi_bs, diag(1,nb))
187+
M = rbind(M1, M2, M3)
188+
189+
nix = nb + ns + c(1:nb)
190+
TBS = rbind(B, S, 0*B)
191+
192+
looking = 1
193+
while(looking > 1e-6) {
194+
TBS = M%*%TBS
195+
looking = sum(TBS[-nix,-nix])
196+
}
197+
nix = 1:(nb+ns)
198+
Kbq = TBS[-nix,]
199+
model$KGV$Kbq = Kbq
144200
return(model)
145201
}))}
146202

0 commit comments

Comments
 (0)