Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Making 12 the new adult age #54

Merged
merged 21 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
bc43c4b
changed CSW label to adult in get_group_bins
ruthmccabe Dec 14, 2024
5be44b1
children defined as those aged under 12 (as per vaccination authorisa…
ruthmccabe Dec 16, 2024
51c2a1e
update version number
ruthmccabe Dec 17, 2024
16f028f
updated model doc
ruthmccabe Dec 17, 2024
6fbb6d8
Merge pull request #55 from mrc-ide/main
ruthmccabe Dec 17, 2024
d098fd8
reupdate version & docs post rebase
ruthmccabe Dec 17, 2024
9841359
added test for Sud Kivu for code coverage
ruthmccabe Dec 17, 2024
c4e8c1c
updated prioritisation strategies in helper function due to age change
ruthmccabe Dec 18, 2024
6e0bbaf
lowered number of vaccine doses for children as was throwing error ot…
ruthmccabe Dec 18, 2024
fc4f892
moved boundary check one age group down to reflect new child/adult st…
ruthmccabe Dec 20, 2024
b2e50f6
updated boundaries check for all comps
ruthmccabe Dec 20, 2024
677acd5
failing test expanded with more logic
ruthmccabe Dec 20, 2024
2c1620e
regenerate model
ruthmccabe Dec 20, 2024
85b1afb
added 15+ indicator to get_group_bins to align with model outputs
ruthmccabe Dec 20, 2024
7adfa77
CSWs vaccine split done by round rather than binomial
ruthmccabe Dec 20, 2024
f1db862
test updated to resolve 2nd dose issue
ruthmccabe Dec 20, 2024
15919dc
updated 1st dose test & commented out (but not deleted) due to roundi…
ruthmccabe Dec 20, 2024
5b34d4a
Merge branch 'main' into make_CSWs_adult
edknock Jan 6, 2025
9607e78
bump version number
edknock Jan 6, 2025
1755e59
fix tests
edknock Jan 6, 2025
3a6d9c3
correct news
edknock Jan 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: mpoxseir
Title: Stochastic compartmental model of mpox transmission
Version: 0.2.5
Version: 0.2.6
Authors@R: c(person("Lilith", "Whittles", role = c("aut", "cre"),
email = "l.whittles@imperial.ac.uk"),
person("Ruth", "McCabe", role = c("aut")),
Expand Down
12 changes: 12 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@

# mpoxseir 0.2.6

* Those aged 12 and above are considered adults (relevant to 12 - 17 & CSWs)

# mpoxseir 0.2.5

* Fixed lag issue affecting some states

# mpoxseir 0.2.4

* Increase population of SWs in Sud Kivu

# mpoxseir 0.2.3

* Export cases by transmission route
Expand Down
6 changes: 4 additions & 2 deletions R/parameters.R
Original file line number Diff line number Diff line change
Expand Up @@ -263,12 +263,14 @@ get_compartment_indices <- function() {
get_group_bins <- function() {

age_bins <- get_age_bins()
age_bins$children <- proportion_in_age_bins(0, 17)
age_bins$children <- proportion_in_age_bins(0, 11)
age_bins$fifteen_plus <- 1 - proportion_in_age_bins(0,14)

groups <- data.frame(label = c("CSW", "ASW", "PBS", "HCW"),
start = c(12, 18, 20, 20),
end = c(17, 49, 49, 69),
children = c(1, 0, 0, 0))
children = c(0, 0, 0, 0),
fifteen_plus = c(0.5,1,1,1))
ret <- rbind(age_bins, groups)
ret$adults <- 1 - ret$children

Expand Down
12 changes: 6 additions & 6 deletions inst/dust/model-targeted-vax.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1086,7 +1086,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_S.dim[0]; ++i) {
internal.n_vaccination_t_S[i - 1 + shared.dim.n_vaccination_t_S.mult[1]] = internal.n_vaccination_t_S_children[i - 1] + internal.n_vaccination_t_S_adults[i - 1];
}
internal.n_vaccination_t_S[3 + shared.dim.n_vaccination_t_S.mult[1]] = monty::math::min(internal.n_vaccination_t_S[3 + shared.dim.n_vaccination_t_S.mult[1]], S[3 + shared.dim.S.mult[1]]);
internal.n_vaccination_t_S[2 + shared.dim.n_vaccination_t_S.mult[1]] = monty::math::min(internal.n_vaccination_t_S[2 + shared.dim.n_vaccination_t_S.mult[1]], S[2 + shared.dim.S.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_S.dim[0]; ++i) {
internal.n_vaccination_t_S[i - 1 + 2 * shared.dim.n_vaccination_t_S.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * S[i - 1 + 2 * shared.dim.S.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), S[i - 1 + 2 * shared.dim.S.mult[1]]));
}
Expand All @@ -1098,7 +1098,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Ea.dim[0]; ++i) {
internal.n_vaccination_t_Ea[i - 1 + shared.dim.n_vaccination_t_Ea.mult[1]] = internal.n_vaccination_t_Ea_children[i - 1] + internal.n_vaccination_t_Ea_adults[i - 1];
}
internal.n_vaccination_t_Ea[3 + shared.dim.n_vaccination_t_Ea.mult[1]] = monty::math::min(internal.n_vaccination_t_Ea[3 + shared.dim.n_vaccination_t_Ea.mult[1]], Ea[3 + shared.dim.Ea.mult[1]]);
internal.n_vaccination_t_Ea[2 + shared.dim.n_vaccination_t_Ea.mult[1]] = monty::math::min(internal.n_vaccination_t_Ea[2 + shared.dim.n_vaccination_t_Ea.mult[1]], Ea[2 + shared.dim.Ea.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Ea.dim[0]; ++i) {
internal.n_vaccination_t_Ea[i - 1 + 2 * shared.dim.n_vaccination_t_Ea.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * Ea[i - 1 + 2 * shared.dim.Ea.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), Ea[i - 1 + 2 * shared.dim.Ea.mult[1]]));
}
Expand All @@ -1110,7 +1110,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Eb.dim[0]; ++i) {
internal.n_vaccination_t_Eb[i - 1 + shared.dim.n_vaccination_t_Eb.mult[1]] = internal.n_vaccination_t_Eb_children[i - 1] + internal.n_vaccination_t_Eb_adults[i - 1];
}
internal.n_vaccination_t_Eb[3 + shared.dim.n_vaccination_t_Eb.mult[1]] = monty::math::min(internal.n_vaccination_t_Eb[3 + shared.dim.n_vaccination_t_Eb.mult[1]], Eb[3 + shared.dim.Eb.mult[1]]);
internal.n_vaccination_t_Eb[2 + shared.dim.n_vaccination_t_Eb.mult[1]] = monty::math::min(internal.n_vaccination_t_Eb[2 + shared.dim.n_vaccination_t_Eb.mult[1]], Eb[2 + shared.dim.Eb.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Eb.dim[0]; ++i) {
internal.n_vaccination_t_Eb[i - 1 + 2 * shared.dim.n_vaccination_t_Eb.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * Eb[i - 1 + 2 * shared.dim.Eb.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), Eb[i - 1 + 2 * shared.dim.Eb.mult[1]]));
}
Expand All @@ -1122,7 +1122,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_R.dim[0]; ++i) {
internal.n_vaccination_t_R[i - 1 + shared.dim.n_vaccination_t_R.mult[1]] = internal.n_vaccination_t_R_children[i - 1] + internal.n_vaccination_t_R_adults[i - 1];
}
internal.n_vaccination_t_R[3 + shared.dim.n_vaccination_t_R.mult[1]] = monty::math::min(internal.n_vaccination_t_R[3 + shared.dim.n_vaccination_t_R.mult[1]], R[3 + shared.dim.R.mult[1]]);
internal.n_vaccination_t_R[2 + shared.dim.n_vaccination_t_R.mult[1]] = monty::math::min(internal.n_vaccination_t_R[2 + shared.dim.n_vaccination_t_R.mult[1]], R[2 + shared.dim.R.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_R.dim[0]; ++i) {
internal.n_vaccination_t_R[i - 1 + 2 * shared.dim.n_vaccination_t_R.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * R[i - 1 + 2 * shared.dim.R.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), R[i - 1 + 2 * shared.dim.R.mult[1]]));
}
Expand Down Expand Up @@ -1179,14 +1179,14 @@ class model_targeted_vax {
}
const real_type new_dose1 = dust2::array::sum<real_type>(internal.n_vaccination_t.data(), shared.dim.n_vaccination_t, {0, shared.dim.n_vaccination_t.dim[0] - 1}, {1, 1});
const real_type new_dose1_00_04 = internal.n_vaccination_t[shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_SW_12_14 = monty::random::binomial<real_type>(rng_state, internal.n_vaccination_t[16 + shared.dim.n_vaccination_t.mult[1]], static_cast<real_type>(0.5));
const real_type new_dose1_SW_12_14 = monty::math::round(internal.n_vaccination_t[16 + shared.dim.n_vaccination_t.mult[1]] * static_cast<real_type>(0.5));
const real_type new_dose1_CSW = internal.n_vaccination_t[16 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_ASW = internal.n_vaccination_t[17 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_PBS = internal.n_vaccination_t[18 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_HCW = internal.n_vaccination_t[19 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2 = dust2::array::sum<real_type>(internal.n_vaccination_t.data(), shared.dim.n_vaccination_t, {0, shared.dim.n_vaccination_t.dim[0] - 1}, {2, 2});
const real_type new_dose2_00_04 = internal.n_vaccination_t[2 * shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2_SW_12_14 = monty::random::binomial<real_type>(rng_state, internal.n_vaccination_t[16 + 2 * shared.dim.n_vaccination_t.mult[1]], static_cast<real_type>(0.5));
const real_type new_dose2_SW_12_14 = monty::math::round(internal.n_vaccination_t[16 + 2 * shared.dim.n_vaccination_t.mult[1]] * static_cast<real_type>(0.5));
const real_type new_dose2_CSW = internal.n_vaccination_t[16 + 2 * shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2_ASW = internal.n_vaccination_t[17 + 2 * shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2_PBS = internal.n_vaccination_t[18 + 2 * shared.dim.n_vaccination_t.mult[1]];
Expand Down
12 changes: 6 additions & 6 deletions inst/odin/model-targeted-vax.R
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ n_vaccination_t_S[, 2] <-

## for the boundary case do an extra check that we haven't gone over the number
## of people in each compartment
n_vaccination_t_S[4, 2] <- min(n_vaccination_t_S[4, 2], S[4, 2])
n_vaccination_t_S[3, 2] <- min(n_vaccination_t_S[3, 2], S[3, 2])

## allocate 2nd doses (adults only for now)
n_vaccination_t_S[, 3] <- if (sum(n_eligible_for_dose2_adults[]) == 0) 0 else
Expand Down Expand Up @@ -262,7 +262,7 @@ n_vaccination_t_Ea[, 2] <-

## for the boundary case do an extra check that we haven't gone over the number
## of people in each compartment
n_vaccination_t_Ea[4, 2] <- min(n_vaccination_t_Ea[4, 2], Ea[4, 2])
n_vaccination_t_Ea[3, 2] <- min(n_vaccination_t_Ea[3, 2], Ea[3, 2])

## adults 2nd doses
n_vaccination_t_Ea[, 3] <- if (sum(n_eligible_for_dose2_adults[]) == 0) 0 else
Expand Down Expand Up @@ -302,7 +302,7 @@ n_vaccination_t_Eb[, 2] <-

## for the boundary case do an extra check that we haven't gone over the number
## of people in each compartment
n_vaccination_t_Eb[4, 2] <- min(n_vaccination_t_Eb[4, 2], Eb[4, 2])
n_vaccination_t_Eb[3, 2] <- min(n_vaccination_t_Eb[3, 2], Eb[3, 2])

## adults 2nd doses
n_vaccination_t_Eb[, 3] <- if (sum(n_eligible_for_dose2_adults[]) == 0) 0 else
Expand Down Expand Up @@ -342,7 +342,7 @@ n_vaccination_t_R[, 2] <-

## for the boundary case do an extra check that we haven't gone over the number
## of people in each compartment
n_vaccination_t_R[4, 2] <- min(n_vaccination_t_R[4, 2], R[4, 2])
n_vaccination_t_R[3, 2] <- min(n_vaccination_t_R[3, 2], R[3, 2])

## adults 2nd doses
n_vaccination_t_R[, 3] <- if (sum(n_eligible_for_dose2_adults[]) == 0) 0 else
Expand Down Expand Up @@ -549,7 +549,7 @@ n_vaccination_t[, ] <- n_vaccination_t_S[i, j] + n_vaccination_t_Ea[i, j] +

new_dose1 <- sum(n_vaccination_t[, 2])
new_dose1_00_04 <- n_vaccination_t[1, 2]
new_dose1_SW_12_14 <- Binomial(n_vaccination_t[17, 2], 0.5)
new_dose1_SW_12_14 <- round(n_vaccination_t[17, 2] * 0.5)
new_dose1_SW_15_17 <- n_vaccination_t[17, 2] - new_dose1_SW_12_14
new_dose1_05_14 <- sum(n_vaccination_t[2:3, 2]) + new_dose1_SW_12_14
new_dose1_15_plus <-
Expand All @@ -572,7 +572,7 @@ update(dose1_inc_HCW) <- dose1_inc_HCW + new_dose1_HCW

new_dose2 <- sum(n_vaccination_t[, 3])
new_dose2_00_04 <- n_vaccination_t[1, 3]
new_dose2_SW_12_14 <- Binomial(n_vaccination_t[17, 3], 0.5)
new_dose2_SW_12_14 <- round(n_vaccination_t[17, 3] * 0.5)
new_dose2_SW_15_17 <- n_vaccination_t[17, 3] - new_dose2_SW_12_14
new_dose2_05_14 <- sum(n_vaccination_t[2:3, 3]) + new_dose2_SW_12_14
new_dose2_15_plus <-
Expand Down
12 changes: 6 additions & 6 deletions src/model-targeted-vax.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1088,7 +1088,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_S.dim[0]; ++i) {
internal.n_vaccination_t_S[i - 1 + shared.dim.n_vaccination_t_S.mult[1]] = internal.n_vaccination_t_S_children[i - 1] + internal.n_vaccination_t_S_adults[i - 1];
}
internal.n_vaccination_t_S[3 + shared.dim.n_vaccination_t_S.mult[1]] = monty::math::min(internal.n_vaccination_t_S[3 + shared.dim.n_vaccination_t_S.mult[1]], S[3 + shared.dim.S.mult[1]]);
internal.n_vaccination_t_S[2 + shared.dim.n_vaccination_t_S.mult[1]] = monty::math::min(internal.n_vaccination_t_S[2 + shared.dim.n_vaccination_t_S.mult[1]], S[2 + shared.dim.S.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_S.dim[0]; ++i) {
internal.n_vaccination_t_S[i - 1 + 2 * shared.dim.n_vaccination_t_S.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * S[i - 1 + 2 * shared.dim.S.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), S[i - 1 + 2 * shared.dim.S.mult[1]]));
}
Expand All @@ -1100,7 +1100,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Ea.dim[0]; ++i) {
internal.n_vaccination_t_Ea[i - 1 + shared.dim.n_vaccination_t_Ea.mult[1]] = internal.n_vaccination_t_Ea_children[i - 1] + internal.n_vaccination_t_Ea_adults[i - 1];
}
internal.n_vaccination_t_Ea[3 + shared.dim.n_vaccination_t_Ea.mult[1]] = monty::math::min(internal.n_vaccination_t_Ea[3 + shared.dim.n_vaccination_t_Ea.mult[1]], Ea[3 + shared.dim.Ea.mult[1]]);
internal.n_vaccination_t_Ea[2 + shared.dim.n_vaccination_t_Ea.mult[1]] = monty::math::min(internal.n_vaccination_t_Ea[2 + shared.dim.n_vaccination_t_Ea.mult[1]], Ea[2 + shared.dim.Ea.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Ea.dim[0]; ++i) {
internal.n_vaccination_t_Ea[i - 1 + 2 * shared.dim.n_vaccination_t_Ea.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * Ea[i - 1 + 2 * shared.dim.Ea.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), Ea[i - 1 + 2 * shared.dim.Ea.mult[1]]));
}
Expand All @@ -1112,7 +1112,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Eb.dim[0]; ++i) {
internal.n_vaccination_t_Eb[i - 1 + shared.dim.n_vaccination_t_Eb.mult[1]] = internal.n_vaccination_t_Eb_children[i - 1] + internal.n_vaccination_t_Eb_adults[i - 1];
}
internal.n_vaccination_t_Eb[3 + shared.dim.n_vaccination_t_Eb.mult[1]] = monty::math::min(internal.n_vaccination_t_Eb[3 + shared.dim.n_vaccination_t_Eb.mult[1]], Eb[3 + shared.dim.Eb.mult[1]]);
internal.n_vaccination_t_Eb[2 + shared.dim.n_vaccination_t_Eb.mult[1]] = monty::math::min(internal.n_vaccination_t_Eb[2 + shared.dim.n_vaccination_t_Eb.mult[1]], Eb[2 + shared.dim.Eb.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_Eb.dim[0]; ++i) {
internal.n_vaccination_t_Eb[i - 1 + 2 * shared.dim.n_vaccination_t_Eb.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * Eb[i - 1 + 2 * shared.dim.Eb.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), Eb[i - 1 + 2 * shared.dim.Eb.mult[1]]));
}
Expand All @@ -1124,7 +1124,7 @@ class model_targeted_vax {
for (size_t i = 1; i <= shared.dim.n_vaccination_t_R.dim[0]; ++i) {
internal.n_vaccination_t_R[i - 1 + shared.dim.n_vaccination_t_R.mult[1]] = internal.n_vaccination_t_R_children[i - 1] + internal.n_vaccination_t_R_adults[i - 1];
}
internal.n_vaccination_t_R[3 + shared.dim.n_vaccination_t_R.mult[1]] = monty::math::min(internal.n_vaccination_t_R[3 + shared.dim.n_vaccination_t_R.mult[1]], R[3 + shared.dim.R.mult[1]]);
internal.n_vaccination_t_R[2 + shared.dim.n_vaccination_t_R.mult[1]] = monty::math::min(internal.n_vaccination_t_R[2 + shared.dim.n_vaccination_t_R.mult[1]], R[2 + shared.dim.R.mult[1]]);
for (size_t i = 1; i <= shared.dim.n_vaccination_t_R.dim[0]; ++i) {
internal.n_vaccination_t_R[i - 1 + 2 * shared.dim.n_vaccination_t_R.mult[1]] = (dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults) == 0 ? 0 : monty::math::min(monty::math::floor((internal.daily_doses_adults_t[2] * R[i - 1 + 2 * shared.dim.R.mult[1]] * shared.prioritisation_strategy_adults[i - 1 + (prioritisation_step_2nd_dose_adults - 1) * shared.dim.prioritisation_strategy_adults.mult[1]]) / dust2::array::sum<real_type>(internal.n_eligible_for_dose2_adults.data(), shared.dim.n_eligible_for_dose2_adults)), R[i - 1 + 2 * shared.dim.R.mult[1]]));
}
Expand Down Expand Up @@ -1181,14 +1181,14 @@ class model_targeted_vax {
}
const real_type new_dose1 = dust2::array::sum<real_type>(internal.n_vaccination_t.data(), shared.dim.n_vaccination_t, {0, shared.dim.n_vaccination_t.dim[0] - 1}, {1, 1});
const real_type new_dose1_00_04 = internal.n_vaccination_t[shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_SW_12_14 = monty::random::binomial<real_type>(rng_state, internal.n_vaccination_t[16 + shared.dim.n_vaccination_t.mult[1]], static_cast<real_type>(0.5));
const real_type new_dose1_SW_12_14 = monty::math::round(internal.n_vaccination_t[16 + shared.dim.n_vaccination_t.mult[1]] * static_cast<real_type>(0.5));
const real_type new_dose1_CSW = internal.n_vaccination_t[16 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_ASW = internal.n_vaccination_t[17 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_PBS = internal.n_vaccination_t[18 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose1_HCW = internal.n_vaccination_t[19 + shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2 = dust2::array::sum<real_type>(internal.n_vaccination_t.data(), shared.dim.n_vaccination_t, {0, shared.dim.n_vaccination_t.dim[0] - 1}, {2, 2});
const real_type new_dose2_00_04 = internal.n_vaccination_t[2 * shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2_SW_12_14 = monty::random::binomial<real_type>(rng_state, internal.n_vaccination_t[16 + 2 * shared.dim.n_vaccination_t.mult[1]], static_cast<real_type>(0.5));
const real_type new_dose2_SW_12_14 = monty::math::round(internal.n_vaccination_t[16 + 2 * shared.dim.n_vaccination_t.mult[1]] * static_cast<real_type>(0.5));
const real_type new_dose2_CSW = internal.n_vaccination_t[16 + 2 * shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2_ASW = internal.n_vaccination_t[17 + 2 * shared.dim.n_vaccination_t.mult[1]];
const real_type new_dose2_PBS = internal.n_vaccination_t[18 + 2 * shared.dim.n_vaccination_t.mult[1]];
Expand Down
6 changes: 3 additions & 3 deletions tests/testthat/helper-mpoxseir.R
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ reference_pars_targeted_vax <- function(region = "equateur") {
times=pars$N_prioritisation_steps_children),
ncol=pars$N_prioritisation_steps_children,
byrow=FALSE)
priority_children[c(3,4,17),1] <- 0
priority_children[c(4,17),2] <- 0
priority_children[c(2,3),1] <- 0
priority_children[3,2] <- 0

pars$prioritisation_strategy_children <- priority_children * 0.5

priority_adults <- matrix(rep(pars$prioritisation_strategy_adults,
times=pars$N_prioritisation_steps_adults),
ncol=pars$N_prioritisation_steps_adults,
byrow=FALSE)
priority_adults[c(4:16,20),1] <- 0
priority_adults[c(3:16),1] <- 0

pars$prioritisation_strategy_adults <- priority_adults * 0.5

Expand Down
Loading
Loading