From e733b2859cf4a13623838677ee44eb4d7686d850 Mon Sep 17 00:00:00 2001 From: RJSheppard Date: Fri, 28 Jun 2024 12:34:56 +0100 Subject: [PATCH] P.f models blood immunity impact on new infections, while P.v does not. An if statement is added to the human_infection.R code to reflect this. IB immunity is therefore also redundant in the Pv model. These variable assignments, immunity decay, boosts, rendering, and resetting during mortality are removed when parasite == "vivax". The blood immunity parameters have now been removed from the vivax parameter list, and documentation has been adjusted to reflect this. --- R/human_infection.R | 25 ++++++++++++++------- R/mortality_processes.R | 7 ++++-- R/processes.R | 17 ++++++++++---- R/variables.R | 37 ++++++++++++++++++------------- data-raw/parasite_parameters.csv | 7 ------ data/parasite_parameters.rda | Bin 1207 -> 1188 bytes tests/testthat/test-vivax.R | 3 ++- vignettes/Plasmodium_vivax.Rmd | 8 ++++++- 8 files changed, 66 insertions(+), 38 deletions(-) diff --git a/R/human_infection.R b/R/human_infection.R index fdd8019c..09597149 100644 --- a/R/human_infection.R +++ b/R/human_infection.R @@ -22,13 +22,15 @@ simulate_infection <- function( infection_outcome ) { if (bitten_humans$size() > 0) { - boost_immunity( - variables$ib, - bitten_humans, - variables$last_boosted_ib, - timestep, - parameters$ub - ) + if(parameters$parasite == "falciparum"){ + boost_immunity( + variables$ib, + bitten_humans, + variables$last_boosted_ib, + timestep, + parameters$ub + ) + } } # Calculate Infected @@ -61,7 +63,14 @@ calculate_infections <- function( source_humans <- variables$state$get_index_of( c('S', 'A', 'U'))$and(bitten_humans) - b <- blood_immunity(variables$ib$get_values(source_humans), parameters) + if(parameters$parasite == "falciparum"){ + ## p.f models blood immunity + b <- blood_immunity(variables$ib$get_values(source_humans), parameters) + + } else if (parameters$parasite == "vivax"){ + ## p.v does not model blood immunity + b <- parameters$b + } source_vector <- source_humans$to_vector() diff --git a/R/mortality_processes.R b/R/mortality_processes.R index b68f5ee7..9e527e2a 100644 --- a/R/mortality_processes.R +++ b/R/mortality_processes.R @@ -91,15 +91,18 @@ reset_target <- function(variables, events, target, state, parameters, timestep) variables$birth$queue_update(timestep, target) # non-maternal immunity - variables$last_boosted_ib$queue_update(-1, target) variables$last_boosted_ica$queue_update(-1, target) variables$last_boosted_iva$queue_update(-1, target) variables$last_boosted_id$queue_update(-1, target) - variables$ib$queue_update(0, target) variables$ica$queue_update(0, target) variables$iva$queue_update(0, target) variables$id$queue_update(0, target) variables$state$queue_update(state, target) + + if(parameters$parasite == "falciparum"){ + variables$last_boosted_ib$queue_update(-1, target) + variables$ib$queue_update(0, target) + } # treatment variables$drug$queue_update(0, target) diff --git a/R/processes.R b/R/processes.R index 12ee3528..39385ac3 100644 --- a/R/processes.R +++ b/R/processes.R @@ -45,9 +45,6 @@ create_processes <- function( parameters$rm), immunity_process = create_exponential_decay_process(variables$ivm, parameters$rvm), - # Blood immunity - immunity_process = create_exponential_decay_process(variables$ib, - parameters$rb), # Acquired immunity immunity_process = create_exponential_decay_process(variables$ica, parameters$rc), @@ -56,6 +53,15 @@ create_processes <- function( immunity_process = create_exponential_decay_process(variables$id, parameters$rid) ) + + if(parameters$parasite == "falciparum"){ + processes <- c( + processes, + # Blood immunity + immunity_process = create_exponential_decay_process(variables$ib, + parameters$rb) + ) + } if (parameters$individual_mosquitoes) { processes <- c( @@ -179,7 +185,10 @@ create_processes <- function( # Rendering # ========= - imm_var_names <- c('ica', 'icm', 'id', 'ib', 'iva', 'ivm') + imm_var_names <- c('ica', 'icm', 'id', 'iva', 'ivm') + if(parameters$parasite == "falciparum"){ + imm_var_names <- c(imm_var_names, 'ib') + } processes <- c( processes, diff --git a/R/variables.R b/R/variables.R index cb3b1a17..db635ba8 100644 --- a/R/variables.R +++ b/R/variables.R @@ -12,7 +12,7 @@ #' boosted for tracking grace periods in the boost of immunity #' * ICM - Maternal immunity to clinical disease #' * IVM - Maternal immunity to severe disease -#' * IB - Pre-erythoctic immunity +#' * IB - Pre-erythrocytic immunity (p.f only) #' * ICA - Acquired immunity to clinical disease #' * IVA - Acquired immunity to severe disease #' * ID - Acquired immunity to detectability @@ -96,7 +96,6 @@ create_variables <- function(parameters) { initial_states <- initial_state(parameters, initial_age, groups, eq, states) state <- individual::CategoricalVariable$new(states, initial_states) birth <- individual::IntegerVariable$new(-initial_age) - last_boosted_ib <- individual::DoubleVariable$new(rep(-1, size)) last_boosted_ica <- individual::DoubleVariable$new(rep(-1, size)) last_boosted_iva <- individual::DoubleVariable$new(rep(-1, size)) last_boosted_id <- individual::DoubleVariable$new(rep(-1, size)) @@ -124,17 +123,21 @@ create_variables <- function(parameters) { ) ) - # Pre-erythoctic immunity - ib <- individual::DoubleVariable$new( - initial_immunity( - parameters$init_ib, - initial_age, - groups, - eq, - parameters, - 'IB' + if(parameters$parasite == "falciparum"){ + # Pre-erythrocytic immunity + last_boosted_ib <- individual::DoubleVariable$new(rep(-1, size)) + ib <- individual::DoubleVariable$new( + initial_immunity( + parameters$init_ib, + initial_age, + groups, + eq, + parameters, + 'IB' + ) ) - ) + } + # Acquired immunity to clinical disease ica <- individual::DoubleVariable$new( initial_immunity( @@ -224,13 +227,11 @@ create_variables <- function(parameters) { variables <- list( state = state, birth = birth, - last_boosted_ib = last_boosted_ib, last_boosted_ica = last_boosted_ica, last_boosted_iva = last_boosted_iva, last_boosted_id = last_boosted_id, icm = icm, ivm = ivm, - ib = ib, ica = ica, iva = iva, id = id, @@ -248,7 +249,13 @@ create_variables <- function(parameters) { spray_time = spray_time ) - + if(parameters$parasite == "falciparum"){ + variables <- c(variables, + last_boosted_ib = last_boosted_ib, + ib = ib + ) + } + # Add variables for individual mosquitoes if (parameters$individual_mosquitoes) { species_values <- NULL diff --git a/data-raw/parasite_parameters.csv b/data-raw/parasite_parameters.csv index d7198b98..255254c0 100644 --- a/data-raw/parasite_parameters.csv +++ b/data-raw/parasite_parameters.csv @@ -89,20 +89,13 @@ vivax,kmax,10, White (2018); doi: 10.1038/s41467-018-05860-8 vivax,du,110,to_be_removed vivax,init_iva,0,to_be_removed vivax,init_ivm,0,to_be_removed -vivax,init_ib,0,to_be_removed vivax,init_id,0,to_be_removed -vivax,ub,7.2,to_be_removed vivax,uv,11.4321,to_be_removed vivax,ud,9.44512,to_be_removed vivax,pvm,0.195768,to_be_removed vivax,rvm,76.8365,to_be_removed -vivax,rb,3650,to_be_removed vivax,rva,10950,to_be_removed vivax,rid,3650,to_be_removed -vivax,b0,0.59,to_be_removed -vivax,b1,0.5,to_be_removed -vivax,ib0,43.9,to_be_removed -vivax,kb,2.16,to_be_removed vivax,theta0,0.0749886,to_be_removed vivax,theta1,0.0001191,to_be_removed vivax,iv0,1.09629,to_be_removed diff --git a/data/parasite_parameters.rda b/data/parasite_parameters.rda index 4b6ec71ddf390e3829d2a1e76c3f0adcd4d34e26..13717f517256335c0f6e3fd03bcc9c5dd6e4c7ce 100644 GIT binary patch delta 1170 zcmV;D1a14b38V=ULRx4!F+o`-Q(2OFu{;0-cz=-+BY&P~2BZb1gs7?Ml4%B>gfz&= zX^0v$+L$4ysiv9$01SZB&?7@YX`>)$Y3gXiFpU5YP;Ez&G}F^+k5QV3lhp>Qnlu13 z8UO*H8UP-lpaVgnpaGx&000Jn02*ij0iXaHXaE2ZWYZ>t5NHEH0BC3oh9Rba112V# z0MVhK27iMSO$`8O0000C6F_Lt(8-WNlT4ZnL7)u)0imEW7>1ev449f|14f2`8VpS| zGy$Lh001ye0i#1hCO}A{YG@N8Jc6DmHZ)VzG#;U#4F-TT(@g+q03N55dVtXM$^Zap zXaE7~8UxflCXE_sXn9V|zGgnT>tI2-zH6vF9Dg0we5F+-bdszzl0}mC^6nx?(+mZt zfG7#1F(#5|MrHS^Zus2|XX*7;+f$p(M?5Bh<76;-X@p2ph(3U#Ab=h!8DKVr0Z6ka zR2CgV%Hnae4)cYMe%s&p=G?EPmiRneX6bCQs^cLEQq@KxNPyB5FyJJRY({}4sAxzi zn|}aqmnEB;bbZW>(+boGlWD1?Qfa%ov6zh2NlHXy%85~-LW7))R%Xtf22F1BW?lVK zlxHp{DpkysX0HW8Fz^b}yRT(Ih(UxPNrDlc(2lk+Knn4jQ2fdSiI~9)c2I#uh*+#Z zl!hdBBNE>HvH}$68=%>qibXOe8b^5=YHiS;L#MQ0e$$a$%^LC-UP242*m6z8oV8Ao7k2!%5G^M;5*=KLMj zALCFk%rg96Nr_M|1-YSY8N?Md(SF8} z0F8HT3lNbQMcTCjQkhv5D}qB9shF%wYFd`AZ8=7bqQGJjJTkak&NVR05r2qZ#?0N( zP@-E2PzLaWIGB-8RGCWbcH=k_p+IWq1|x{#@t99E9*Pq&&yNVA9Jnt_W9#Q!axM^p zG7-Bkb);YH5<1v2YstO`5L`ukB-a@i1*l5>3eaQalY|F8FwN|7>|%EdFvXD>{S@f#1G2xm`ao60{xlLbbz0VUmw{{ z++Cy`QG{<9K;%2y5C>R9{R#GEpE-m{R?=|M`VZ`}x;o8yKD2dTPHoP6MVhS|B zjZBYILq>A%Pf%z8V2q5^(@h&t4^2-|=z}JiG#GC-?7$!{s z0p&eLn3@JpDYY>Tifc^Ln(Zp+*f3Rg9jg|-e1DE0_s#&d0H7)e2~fDVnvjqxfY2(8 zAwZZWB)}Mvw5;+d0!e_8=VCt`eK1Fbw7^zU4&La0^py zfNzM7Qtx&Q_b)%57Yl8SUl*m2y&5#M-W7&r(QISL4INlpy?ND$azP8B$!Vslm4Bl{ zf`{9o&&;AB#+FoRe~64CeF%w2u}Bbv7Yon-f-s^WP~yOQ5;mUYs-rrNbYP&Toho>4 zH$bIYO5HDW;jbbv4LimzRR*ex3dG>{{Ib-2>XIk1;ZrY&638TAy5gx`Ra0 z>(Q~26PTCdsTNqX8R>}zicr*X!haFSDQA3!lh?^)8mDK!9 zD}f(=FykCfa=^9Lu-YpYC z0I+AyIr~7_;eu!7$0~YicV;}Csg6P4J0r{BcSb>n$RXYw9ijJ@2ZaMHQHEA2{uKYS zSKN@%i#dDqifJ;G>GGo>WTfcp89yb1w#pIFW>SN=mLhK3CJo-krVD_(k}1N3g5g(W EaM*hc;{X5v diff --git a/tests/testthat/test-vivax.R b/tests/testthat/test-vivax.R index 0cf0bdf2..acd5f089 100644 --- a/tests/testthat/test-vivax.R +++ b/tests/testthat/test-vivax.R @@ -24,7 +24,8 @@ test_that('Test difference between falciparum and vivax parameter lists', { expect_identical( in_falciparum_not_vivax, - c("gamma1") # asymptomatic infected infectivity towards mosquitos parameter + c("init_ib", "rb", "ub", "b0", "b1", "ib0", "kb", # blood immunity parameters + "gamma1") # asymptomatic infected infectivity towards mosquitos parameter ) expect_identical( diff --git a/vignettes/Plasmodium_vivax.Rmd b/vignettes/Plasmodium_vivax.Rmd index 2cfeef45..5ed608d4 100644 --- a/vignettes/Plasmodium_vivax.Rmd +++ b/vignettes/Plasmodium_vivax.Rmd @@ -53,9 +53,15 @@ The *P. falciparum* model has five human disease compartments: susceptible (S), The *P. vivax* model follows a similar structure to the *P. falciparum* model, and also has five human disease compartments. However, the human disease states modeled explicitly focus on parasite density and detectability, such that we have: susceptible (S), clinical disease (D), **light-microscopy detectable infection (A)**, **PCR detectable infection (U)**, and treated (Tr). +### Immunity + +The *P. falciparum* model tracks four kinds of immunity: immunity to blood stage infection (IB), clinical disease (acquired and maternal, ICA and ICM), to severe disease (acquired and maternal, IVA and IVM), and to detectability (ID). + +The *P. vivax* model tracks two kinds of immunity: immunity to clinical infection (acquired and maternal, ICA and ICM) and anti-parasite immunity (acquired and maternal, IAA and IAM). We do not track immunity to blood stage infections, severe immunity or immunity to detectability. + ### Infectivity of LM-detectable infections -While the *P. falciparum* model calculates the onward infectivity of asymptomatic infections (`ca`) using the age and detectability immunity of each individual, the *P. vivax* model uses a constant infectivity for LM-detectable infections (`ca = 0.1`). +While the *P. falciparum* model calculates the onward infectivity of asymptomatic infections (`ca`) using the age and detectability immunity of each individual, the *P. vivax* model uses a constant onwards infectivity for LM-detectable infections (`ca = 0.1`). ### Key Model References