Skip to content

Commit 3d1f3b2

Browse files
authored
Merge pull request #335 from mrc-ide/dev
Dev
2 parents e598c66 + 9cc9141 commit 3d1f3b2

104 files changed

Lines changed: 6320 additions & 1460 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

DESCRIPTION

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: malariasimulation
22
Title: An individual based model for malaria
3-
Version: 1.6.0
3+
Version: 2.0.0
44
Authors@R: c(
55
person(
66
given = "Giovanni",
@@ -70,12 +70,12 @@ Remotes:
7070
mrc-ide/malariaEquilibrium,
7171
mrc-ide/individual
7272
Imports:
73-
individual (>= 0.1.7),
73+
individual (>= 0.1.17),
7474
malariaEquilibrium (>= 1.0.1),
7575
Rcpp,
7676
statmod,
7777
MASS,
78-
dqrng,
78+
dqrng (>= 0.4),
7979
sitmo,
8080
BH,
8181
R6,
@@ -91,7 +91,7 @@ Suggests:
9191
ggplot2,
9292
covr,
9393
mgcv
94-
RoxygenNote: 7.2.3
94+
RoxygenNote: 7.3.2
9595
Roxygen: list(markdown = TRUE)
9696
LinkingTo:
9797
Rcpp,

NAMESPACE

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,21 @@ export(get_parameters)
1313
export(parameterise_mosquito_equilibrium)
1414
export(parameterise_total_M)
1515
export(peak_season_offset)
16+
export(r21_booster_profile)
17+
export(r21_profile)
1618
export(rtss_booster_profile)
1719
export(rtss_profile)
1820
export(run_metapop_simulation)
21+
export(run_resumable_simulation)
1922
export(run_simulation)
2023
export(run_simulation_with_repetitions)
24+
export(set_antimalarial_resistance)
2125
export(set_bednets)
2226
export(set_carrying_capacity)
2327
export(set_clinical_treatment)
2428
export(set_demography)
2529
export(set_drugs)
30+
export(set_epi_outputs)
2631
export(set_equilibrium)
2732
export(set_mass_pev)
2833
export(set_mda)

NEWS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# malariasimulation 1.6.1 (wip)
2+
3+
* Fix bug in competing hazards between mass and EPI vaccines. Where individuals
4+
can be enrolled onto both strategies if applied on the same timestep.
5+
* Fix bug with min_wait. Min wait was working off of the final primary dose. It
6+
now works of of the first dose.
7+
18
# malariasimulation 1.6.0
29

310
* Fix MDA bug where undetectable asymptomatics are treated

R/RcppExports.R

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ adult_mosquito_model_update <- function(model, mu, foim, susceptible, f) {
99
invisible(.Call(`_malariasimulation_adult_mosquito_model_update`, model, mu, foim, susceptible, f))
1010
}
1111

12+
adult_mosquito_model_save_state <- function(model) {
13+
.Call(`_malariasimulation_adult_mosquito_model_save_state`, model)
14+
}
15+
16+
adult_mosquito_model_restore_state <- function(model, state) {
17+
invisible(.Call(`_malariasimulation_adult_mosquito_model_restore_state`, model, state))
18+
}
19+
1220
create_adult_solver <- function(model, init, r_tol, a_tol, max_steps) {
1321
.Call(`_malariasimulation_create_adult_solver`, model, init, r_tol, a_tol, max_steps)
1422
}
@@ -37,10 +45,18 @@ rainfall <- function(t, g0, g, h, floor) {
3745
.Call(`_malariasimulation_rainfall`, t, g0, g, h, floor)
3846
}
3947

48+
exponential_process_cpp <- function(variable, rate) {
49+
.Call(`_malariasimulation_exponential_process_cpp`, variable, rate)
50+
}
51+
4052
solver_get_states <- function(solver) {
4153
.Call(`_malariasimulation_solver_get_states`, solver)
4254
}
4355

56+
solver_set_states <- function(solver, t, state) {
57+
invisible(.Call(`_malariasimulation_solver_set_states`, solver, t, state))
58+
}
59+
4460
solver_step <- function(solver) {
4561
invisible(.Call(`_malariasimulation_solver_step`, solver))
4662
}
@@ -57,10 +73,26 @@ timeseries_push <- function(timeseries, value, timestep) {
5773
invisible(.Call(`_malariasimulation_timeseries_push`, timeseries, value, timestep))
5874
}
5975

76+
timeseries_save_state <- function(timeseries) {
77+
.Call(`_malariasimulation_timeseries_save_state`, timeseries)
78+
}
79+
80+
timeseries_restore_state <- function(timeseries, state) {
81+
invisible(.Call(`_malariasimulation_timeseries_restore_state`, timeseries, state))
82+
}
83+
6084
random_seed <- function(seed) {
6185
invisible(.Call(`_malariasimulation_random_seed`, seed))
6286
}
6387

88+
random_save_state <- function() {
89+
.Call(`_malariasimulation_random_save_state`)
90+
}
91+
92+
random_restore_state <- function(state) {
93+
invisible(.Call(`_malariasimulation_random_restore_state`, state))
94+
}
95+
6496
bernoulli_multi_p_cpp <- function(p) {
6597
.Call(`_malariasimulation_bernoulli_multi_p_cpp`, p)
6698
}

R/antimalarial_resistance.R

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
#' @title Parameterise antimalarial resistance
2+
#' @description
3+
#' Parameterise antimalarial resistance
4+
#'
5+
#' @param parameters the model parameters
6+
#' @param drug the index of the drug which resistance is being set, as set by the set_drugs() function, in the parameter list
7+
#' @param timesteps vector of time steps for each update to resistance proportion and resistance outcome probability
8+
#' @param artemisinin_resistance_proportion vector of updates to the proportions of infections that are artemisinin resistant at time t
9+
#' @param partner_drug_resistance_proportion vector of updates to the proportions of infections that are partner-drug resistant at time t
10+
#' @param slow_parasite_clearance_probability vector of updates to the proportion of artemisinin-resistant infections that result in early treatment failure
11+
#' @param early_treatment_failure_probability vector of updates to the proportion of artemisinin-resistant infections that result in slow parasite clearance
12+
#' @param late_clinical_failure_probability vector of updates to the proportion of partner-drug-resistant infections that result in late clinical failure
13+
#' @param late_parasitological_failure_probability vector of updates to the proportion of partner-drug-resistant infections that result in late parasitological failure
14+
#' @param reinfection_during_prophylaxis_probability vector of updates to the proportion of partner-drug-resistant infections that result in reinfection during prophylaxis
15+
#' @param slow_parasite_clearance_time single value representing the mean time individual's experiencing slow parasite clearance reside in the treated state
16+
#' @export
17+
set_antimalarial_resistance <- function(parameters,
18+
drug,
19+
timesteps,
20+
artemisinin_resistance_proportion,
21+
partner_drug_resistance_proportion,
22+
slow_parasite_clearance_probability,
23+
early_treatment_failure_probability,
24+
late_clinical_failure_probability,
25+
late_parasitological_failure_probability,
26+
reinfection_during_prophylaxis_probability,
27+
slow_parasite_clearance_time) {
28+
29+
if(any(partner_drug_resistance_proportion > 0,
30+
late_clinical_failure_probability > 0,
31+
late_parasitological_failure_probability > 0,
32+
reinfection_during_prophylaxis_probability > 0)) {
33+
stop("Parameters set for unimplemented feature - late clinical failure, late parasitological failure, or reinfection during prophylaxis")
34+
}
35+
36+
if(any(c(length(artemisinin_resistance_proportion),
37+
length(partner_drug_resistance_proportion),
38+
length(slow_parasite_clearance_probability),
39+
length(early_treatment_failure_probability),
40+
length(late_clinical_failure_probability),
41+
length(late_parasitological_failure_probability),
42+
length(reinfection_during_prophylaxis_probability)) != length(timesteps))) {
43+
stop("Length of one or more resistance parameter vectors does not match time steps specified for update")
44+
}
45+
46+
if(any(artemisinin_resistance_proportion < 0 | artemisinin_resistance_proportion > 1 |
47+
partner_drug_resistance_proportion < 0 | partner_drug_resistance_proportion > 1)) {
48+
stop("Artemisinin and partner-drug resistance proportions must fall between 0 and 1")
49+
}
50+
51+
if(any(slow_parasite_clearance_probability < 0 | slow_parasite_clearance_probability > 1 |
52+
early_treatment_failure_probability < 0 | early_treatment_failure_probability > 1 |
53+
late_clinical_failure_probability < 0 | late_clinical_failure_probability > 1 |
54+
late_parasitological_failure_probability < 0 | late_parasitological_failure_probability > 1 |
55+
reinfection_during_prophylaxis_probability < 0 | reinfection_during_prophylaxis_probability > 1)) {
56+
stop("Resistance outcome probabilities must fall between 0 and 1")
57+
}
58+
59+
if(length(slow_parasite_clearance_time) != 1) {
60+
stop("Error: length of slow_parasite_clearance_time not equal to 1")
61+
}
62+
63+
if(slow_parasite_clearance_time <= 0) {
64+
stop("Error: slow_parasite_clearance_time is non-positive")
65+
}
66+
67+
parameters$antimalarial_resistance <- TRUE
68+
69+
n_drugs <- length(parameters$drug_efficacy)
70+
71+
if (drug < 1 | drug > n_drugs) {
72+
stop('Drug index is invalid, please set drugs using set_drugs')
73+
}
74+
75+
drug_index <- which(parameters$antimalarial_resistance_drug == drug)
76+
77+
if (length(drug_index) == 0) {
78+
drug_index <- length(parameters$antimalarial_resistance_drug) + 1
79+
}
80+
81+
parameters$antimalarial_resistance_drug[[drug_index]] <- drug
82+
parameters$antimalarial_resistance_timesteps[[drug_index]] <- timesteps
83+
parameters$artemisinin_resistance_proportion[[drug_index]] <- artemisinin_resistance_proportion
84+
parameters$partner_drug_resistance_proportion[[drug_index]] <- partner_drug_resistance_proportion
85+
parameters$slow_parasite_clearance_probability[[drug_index]] <- slow_parasite_clearance_probability
86+
parameters$early_treatment_failure_probability[[drug_index]] <- early_treatment_failure_probability
87+
parameters$late_clinical_failure_probability[[drug_index]] <- late_clinical_failure_probability
88+
parameters$late_parasitological_failure_probability[[drug_index]] <- late_parasitological_failure_probability
89+
parameters$reinfection_during_prophylaxis_probability[[drug_index]] <- reinfection_during_prophylaxis_probability
90+
parameters$dt_slow_parasite_clearance[[drug_index]] <- slow_parasite_clearance_time
91+
92+
return(parameters)
93+
94+
}
95+
96+
#' @title Retrieve resistance parameters
97+
#' @description
98+
#' Retrieve the resistance parameters associated with the drug each individual receiving clinical
99+
#' treatment has been administered in the current time step.
100+
#'
101+
#' @param parameters the model parameters
102+
#' @param drugs vector of integers representing the drugs administered to each individual receiving treatment
103+
#' @param timestep the current time step
104+
get_antimalarial_resistance_parameters <- function(parameters, drugs, timestep) {
105+
106+
if(!parameters$antimalarial_resistance) {
107+
stop("Error: Antimalarial resistance has not been parameterised; antimalarial_resistance = FALSE")
108+
}
109+
110+
blank_vector <- numeric(length = length(drugs))
111+
artemisinin_resistance_proportion <- blank_vector
112+
partner_drug_resistance_proportion <- blank_vector
113+
slow_parasite_clearance_probability <- blank_vector
114+
early_treatment_failure_probability <- blank_vector
115+
late_clinical_failure_probability <- blank_vector
116+
late_parasitological_failure_probability <- blank_vector
117+
reinfection_during_prophylaxis_probability <- blank_vector
118+
dt_slow_parasite_clearance <- rep(parameters$dt, length = length(drugs))
119+
120+
for(i in seq_along(parameters$antimalarial_resistance_drug)) {
121+
drug <- parameters$antimalarial_resistance_drug[[i]]
122+
treated_with_drug <- which(drugs == drug)
123+
resistance_timestep <- match_timestep(ts = parameters$antimalarial_resistance_timesteps[[i]], t = timestep)
124+
artemisinin_resistance_proportion[treated_with_drug] <- parameters$artemisinin_resistance_proportion[[i]][resistance_timestep]
125+
partner_drug_resistance_proportion[treated_with_drug] <- parameters$partner_drug_resistance_proportion[[i]][resistance_timestep]
126+
slow_parasite_clearance_probability[treated_with_drug] <- parameters$slow_parasite_clearance_probability[[i]][resistance_timestep]
127+
early_treatment_failure_probability[treated_with_drug] <- parameters$early_treatment_failure_probability[[i]][resistance_timestep]
128+
late_clinical_failure_probability[treated_with_drug] <- parameters$late_clinical_failure_probability[[i]][resistance_timestep]
129+
late_parasitological_failure_probability[treated_with_drug] <- parameters$late_parasitological_failure_probability[[i]][resistance_timestep]
130+
reinfection_during_prophylaxis_probability[treated_with_drug] <- parameters$reinfection_during_prophylaxis_probability[[i]][resistance_timestep]
131+
dt_slow_parasite_clearance[treated_with_drug] <- parameters$dt_slow_parasite_clearance[[i]]
132+
}
133+
134+
resistance_parameters <- list()
135+
resistance_parameters$artemisinin_resistance_proportion <- artemisinin_resistance_proportion
136+
resistance_parameters$partner_drug_resistance_proportion <- partner_drug_resistance_proportion
137+
resistance_parameters$slow_parasite_clearance_probability <- slow_parasite_clearance_probability
138+
resistance_parameters$early_treatment_failure_probability <- early_treatment_failure_probability
139+
resistance_parameters$late_clinical_failure_probability <- late_clinical_failure_probability
140+
resistance_parameters$late_parasitological_failure_probability <- late_parasitological_failure_probability
141+
resistance_parameters$reinfection_during_prophylaxis_probability <- reinfection_during_prophylaxis_probability
142+
resistance_parameters$dt_slow_parasite_clearance <- dt_slow_parasite_clearance
143+
144+
return(resistance_parameters)
145+
146+
}

0 commit comments

Comments
 (0)