Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
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
15 changes: 14 additions & 1 deletion Eradication/MicrosporidiaParameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,20 @@ namespace Kernel
, m_StrainNames()
, m_MortalityModifierMale()
, m_MortalityModifierFemale()
, m_TemperatureDependentModifierModel()
{
m_Collection.push_back( MicrosporidiaParameters::CreateNoMicrosporidiaVersion() );

// makes pairs "time, value" for this it's "temperature C, modifier"
m_TemperatureDependentModifierModel.add(10.0f, 0.1f);
m_TemperatureDependentModifierModel.add(24.0f, 1.0f);
m_TemperatureDependentModifierModel.add(30.0f, 2.0f);
m_TemperatureDependentModifierModel.add(47.0f, 0.1f);
}

MicrosporidiaCollection::~MicrosporidiaCollection()
{
}
}

void MicrosporidiaCollection::CheckConfiguration()
{
Expand Down Expand Up @@ -166,6 +173,12 @@ namespace Kernel
return m_MortalityModifierFemale;
}

float MicrosporidiaCollection::GetTemperatureDependentModifier( float temperature ) const
{
// using minimum value as default value, so if temperature below defined, we use the lowest-temp modifier
return m_TemperatureDependentModifierModel.getValueLinearInterpolation( temperature, 0.1f);
}

MicrosporidiaParameters* MicrosporidiaCollection::CreateObject()
{
// this object should get added to the end of the collection
Expand Down
3 changes: 2 additions & 1 deletion Eradication/MicrosporidiaParameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,14 @@ namespace Kernel
const MicrosporidiaParameters& GetStrain( const std::string& rStrainName ) const;
const std::vector<float>& GetMortalityModifierListMale() const;
const std::vector<float>& GetMortalityModifierListFemale() const;
float GetTemperatureDependentModifier(float temperature) const;

protected:
virtual MicrosporidiaParameters* CreateObject() override;

jsonConfigurable::tDynamicStringSet m_StrainNames;
std::vector<float> m_MortalityModifierMale;
std::vector<float> m_MortalityModifierFemale;

InterpolatedValueMap m_TemperatureDependentModifierModel;
};
}
5 changes: 5 additions & 0 deletions Eradication/SimulationConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,11 @@ void SimulationConfig::VectorInitConfig( const Configuration* inputJson )
initConfigTypeMap( "Enable_Temperature_Dependent_Egg_Hatching", &(vector_params->temperature_dependent_egg_hatching), Enable_Temperature_Dependent_Egg_Hatching_DESC_TEXT, false );
initConfigTypeMap( "Egg_Arrhenius1", &(vector_params->eggarrhenius1), Egg_Arrhenius1_DESC_TEXT, 0.0f, 10000000000.0f, 61599956.864f, "Enable_Temperature_Dependent_Egg_Hatching" );
initConfigTypeMap( "Egg_Arrhenius2", &(vector_params->eggarrhenius2), Egg_Arrhenius2_DESC_TEXT, 0.0f, 10000000000.0f, 5754.033f, "Enable_Temperature_Dependent_Egg_Hatching" );
if( JsonConfigurable::_dryrun || inputJson->Exist( "Enable_Temperature_Dependent_Microsporidia" ) )
{
// make this optional for backwards compatibility
initConfigTypeMap( "Enable_Temperature_Dependent_Microsporidia", &(vector_params->temperature_dependent_microsporidia), Enable_Temperature_Dependent_Microsporidia_DESC_TEXT, false );
}
initConfigTypeMap( "Enable_Egg_Mortality", &(vector_params->egg_mortality), Enable_Egg_Mortality_DESC_TEXT, false ); // not hooked up yet
initConfigTypeMap( "Enable_Drought_Egg_Hatch_Delay", &(vector_params->delayed_hatching_when_habitat_dries_up), Enable_Drought_Egg_Hatch_Delay_DESC_TEXT, false );
initConfigTypeMap( "Drought_Egg_Hatch_Delay", &(vector_params->droughtEggHatchDelay), Drought_Egg_Hatch_Delay_DESC_TEXT, 0.0f, 1.0f, 0.33f, "Enable_Drought_Egg_Hatch_Delay" );
Expand Down
1 change: 1 addition & 0 deletions Eradication/VectorContexts.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ namespace Kernel
virtual float getSumAgeAtDeath( VectorStateEnum::Enum state ) const = 0;
virtual float getSumAgeAtDeath( VectorStateEnum::Enum state, const VectorGenome& rGenome ) const = 0;
virtual std::vector<std::string> GetMicrosporidiaStrainNames() const = 0;
virtual float getMicrosporidiaModifier() const = 0;
virtual uint32_t getProgressFromLarvaeToImmatureNum() const = 0;
virtual float getProgressFromLarvaeToImmatureSumDuration() const = 0;
virtual void visitVectors(vector_cohort_visit_function_t func, VectorGender::Enum gender) = 0;
Expand Down
6 changes: 4 additions & 2 deletions Eradication/VectorParameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ namespace Kernel
float human_feeding_mortality;
float eggarrhenius1;
float eggarrhenius2;
bool temperature_dependent_microsporidia;

// allows configuration of larval habitat decay time constants
float tempHabitatDecayScalar;
Expand Down Expand Up @@ -72,8 +73,9 @@ namespace Kernel
, HEGhomingRate(0.0f)
, HEGfecundityLimiting(0.0f)
, human_feeding_mortality(DEFAULT_HUMAN_FEEDING_MORTALITY)
, eggarrhenius1( 0.0f)
, eggarrhenius2( 0.0f)
, eggarrhenius1( 0.0f)
, eggarrhenius2( 0.0f)
, temperature_dependent_microsporidia(false)
, tempHabitatDecayScalar(0.0f)
, semipermanentHabitatDecayRate(0.0f)
, mmRainfallToFillSwamp(1.0f)
Expand Down
21 changes: 19 additions & 2 deletions Eradication/VectorPopulation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ namespace Kernel
, dryheatmortality(0.0f)
, infectiouscorrection(0.0f)
, infected_progress_this_timestep(0.0f)
, microsporidia_modifier_this_timestep(1.0f)
, indoorinfectiousbites(0.0f)
, outdoorinfectiousbites(0.0f)
, indoorbites(0.0f)
Expand Down Expand Up @@ -653,6 +654,11 @@ namespace Kernel
float temperature = m_context->GetLocalWeather()->airtemperature();
infected_progress_this_timestep = (species()->infectedarrhenius1 * exp( -species()->infectedarrhenius2 / (temperature + float( CELSIUS_TO_KELVIN )) )) * dt;

if( params()->temperature_dependent_microsporidia )
{
microsporidia_modifier_this_timestep = species()->microsporidia_strains.GetTemperatureDependentModifier(temperature);
}

// Over-ride some lifecycle probabilities with species-specific values
Update_Lifecycle_Probabilities(dt);

Expand Down Expand Up @@ -1834,7 +1840,7 @@ namespace Kernel
if( male_has_microsporidia && !female_has_microsporidia )
{
// Male infecting Female
float prob_transmission = m_species_params->microsporidia_strains[ male_ms_strain_index ]->male_to_female_transmission_probability;
float prob_transmission = (std::min)( 1.0f, m_species_params->microsporidia_strains[ male_ms_strain_index ]->male_to_female_transmission_probability * microsporidia_modifier_this_timestep);
if( m_context->GetRng()->SmartDraw( prob_transmission ) )
{
female_has_microsporidia = true;
Expand All @@ -1845,7 +1851,7 @@ namespace Kernel
else if( !male_has_microsporidia && female_has_microsporidia )
{
// Female infecting Male
float prob_transmission = m_species_params->microsporidia_strains[ female_ms_strain_index ]->female_to_male_transmission_probability;
float prob_transmission = (std::min)( 1.0f, m_species_params->microsporidia_strains[ female_ms_strain_index ]->female_to_male_transmission_probability * microsporidia_modifier_this_timestep);
if( m_context->GetRng()->SmartDraw( prob_transmission ) )
{
if( microsporidia_infected_males[ female_ms_strain_index ].count( p_male_cohort->GetID() ) == 0 )
Expand Down Expand Up @@ -2396,6 +2402,12 @@ namespace Kernel
int male_strain_index = rMaleGenome.GetMicrosporidiaStrainIndex();
float male_to_egg_tran = m_species_params->microsporidia_strains[ male_strain_index ]->male_to_egg_transmission_probability;

if( params()->temperature_dependent_microsporidia )
{
female_to_egg_tran = (std::min)( 1.0f, female_to_egg_tran * microsporidia_modifier_this_timestep );
male_to_egg_tran = (std::min)( 1.0f, male_to_egg_tran * microsporidia_modifier_this_timestep );
}

float prob_transmission = 1.0 - (1.0 - female_to_egg_tran) * (1.0 - male_to_egg_tran);
float fraction_female_strain = 1.0;
if( (female_to_egg_tran + male_to_egg_tran) > 0.0 )
Expand Down Expand Up @@ -3294,6 +3306,11 @@ namespace Kernel
return strain_name_list;
}

float VectorPopulation::getMicrosporidiaModifier() const
{
return microsporidia_modifier_this_timestep;
}

uint32_t VectorPopulation::getProgressFromLarvaeToImmatureNum() const
{
return m_ProgressedLarvaeToImmatureCount;
Expand Down
2 changes: 2 additions & 0 deletions Eradication/VectorPopulation.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ namespace Kernel
virtual float getSumAgeAtDeath( VectorStateEnum::Enum state ) const override;
virtual float getSumAgeAtDeath( VectorStateEnum::Enum state, const VectorGenome& rGenome ) const override;
virtual std::vector<std::string> GetMicrosporidiaStrainNames() const override;
virtual float getMicrosporidiaModifier() const override;
virtual uint32_t getProgressFromLarvaeToImmatureNum() const override;
virtual float getProgressFromLarvaeToImmatureSumDuration() const override;
virtual void visitVectors(vector_cohort_visit_function_t func, VectorGender::Enum gender) override;
Expand Down Expand Up @@ -473,6 +474,7 @@ namespace Kernel
float dryheatmortality;
float infectiouscorrection;
float infected_progress_this_timestep;
float microsporidia_modifier_this_timestep;

// intermediate counters
float indoorinfectiousbites;
Expand Down
4 changes: 2 additions & 2 deletions Eradication/VectorPopulationIndividual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@ namespace Kernel
if( male_has_microsporidia && !female_has_microsporidia )
{
// Male infecting Female
float prob_transmission = m_species_params->microsporidia_strains[ male_ms_strain_index ]->male_to_female_transmission_probability;
float prob_transmission = (std::min)( 1.0f, m_species_params->microsporidia_strains[ male_ms_strain_index ]->male_to_female_transmission_probability * microsporidia_modifier_this_timestep );
if( m_context->GetRng()->SmartDraw( prob_transmission ) )
{
pFemaleCohort->InfectWithMicrosporidia( male_ms_strain_index );
Expand All @@ -625,7 +625,7 @@ namespace Kernel
else if( !male_has_microsporidia && female_has_microsporidia )
{
// Female infecting Male
float prob_transmission = m_species_params->microsporidia_strains[ female_ms_strain_index ]->female_to_male_transmission_probability;
float prob_transmission = (std::min)( 1.0f, m_species_params->microsporidia_strains[ female_ms_strain_index ]->female_to_male_transmission_probability * microsporidia_modifier_this_timestep );
if( m_context->GetRng()->SmartDraw( prob_transmission ) )
{
uint32_t orig_unmated = p_male_cohort->GetUnmatedCount();
Expand Down
30 changes: 30 additions & 0 deletions Regression/Malaria/119_Malaria_Microsporidia/campaign.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"Events": [
{
"class": "CampaignEvent",
"Comment": "Strain_A, 50% coverage, ALL_HABITATS, box infectivity 0.3 for 60 days",
"Start_Day": 20,
"Nodeset_Config": {
"class": "NodeSetAll"
},
"Event_Coordinator_Config": {
"class": "StandardInterventionDistributionEventCoordinator",
"Number_Repetitions": 1,
"Timesteps_Between_Repetitions": 1,
"Intervention_Config": {
"class": "LarvalMicrosporidiaIntervention",
"Cost_To_Consumer": 10,
"Habitat_Target": "ALL_HABITATS",
"Habitat_Coverage": 0.5,
"Strain_Name": "Strain_A",
"Infectivity_Config": {
"class": "WaningEffectBox",
"Initial_Effect": 0.3,
"Box_Duration": 60
}
}
}
}
],
"Use_Defaults": 1
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Reports": [
{
"class": "ReportMicrosporidia"
}
],
"Use_Defaults": 1
}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

109 changes: 109 additions & 0 deletions Regression/Malaria/119_Malaria_Microsporidia/param_overrides.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{
"Default_Config_Path": "../../defaults/malaria_default_config.json",
"parameters": {
"CLIMATE": {
"AIR": {
"Air_Temperature_Filename": "Namawala_single_node_air_temperature_daily.bin"
},
"HUMIDITY": {
"Relative_Humidity_Filename": "Namawala_single_node_relative_humidity_daily.bin"
},
"LAND_TEMP": {
"Land_Temperature_Filename": "Namawala_single_node_land_temperature_daily.bin"
},
"RAINFALL": {
"Rainfall_Filename": "Namawala_single_node_rainfall_daily.bin"
}
},
"DEMOGRAPHICS": {
"Demographics_Filenames": [
"Namawala_single_node_demographics.json"
],
"Enable_Initial_Prevalence": 1
},
"PRIMARY": {
"Config_Name": "119_Malaria_Microsporidia",
"Enable_Temperature_Dependent_Microsporidia": 1,
"x_Temporary_Larval_Habitat": 0.5,
"Custom_Reports_Filename": "custom_reports.json",
"Enable_Demographics_Reporting": 0,
"Geography": "Namawala",
"Run_Number": 1,
"Simulation_Duration": 180

},
"Vector_Species_Params": [
{
"Name": "arabiensis",
"Microsporidia": [
{
"Strain_Name": "Strain_A",
"Female_To_Egg_Transmission_Probability": 0.3,
"Male_To_Egg_Transmission_Probability": 0.3,
"Female_To_Male_Transmission_Probability": 0.4,
"Male_To_Female_Transmission_Probability": 0.4,
"Larval_Growth_Modifier": 1.0,
"Female_Mortality_Modifier": 1.0,
"Male_Mortality_Modifier": 1.0,
"Duration_To_Disease_Acquisition_Modification": {
"Times": [ 0, 3 ],
"Values": [ 1.0, 0.1 ]
},
"Duration_To_Disease_Transmission_Modification": {
"Times": [ 0, 3 ],
"Values": [ 1.0, 0.1 ]
}
}
],
"Acquire_Modifier": 1,
"Adult_Life_Expectancy": 10,
"Male_Life_Expectancy": 10,
"Anthropophily": 0.95,
"Aquatic_Arrhenius_1": 84200000000,
"Aquatic_Arrhenius_2": 8328,
"Aquatic_Mortality_Rate": 0.1,
"Days_Between_Feeds": 3,
"Egg_Batch_Size": 100,
"Immature_Duration": 4,
"Indoor_Feeding_Fraction": 0.5,
"Infected_Arrhenius_1": 117000000000,
"Infected_Arrhenius_2": 8336,
"Infected_Egg_Batch_Factor": 0.8,
"Infectious_Human_Feed_Mortality_Factor": 1.5,
"Habitats": [
{
"Habitat_Type": "TEMPORARY_RAINFALL",
"Max_Larval_Capacity": 11250000000.0
}
],
"Temperature_Dependent_Feeding_Cycle": "NO_TEMPERATURE_DEPENDENCE",
"Transmission_Rate": 0.5,
"Vector_Sugar_Feeding_Frequency": "VECTOR_SUGAR_FEEDING_NONE",
"Vector_Migration_Filename": "",
"x_Vector_Migration": 1,
"Vector_Migration_Food_Modifier": 0.0,
"Vector_Migration_Habitat_Modifier": 0.0,
"Vector_Migration_Modifier_Equation": "LINEAR",
"Vector_Migration_Stay_Put_Modifier": 0.0
},
{
"Habitats": [
{
"Habitat_Type": "TEMPORARY_RAINFALL",
"Max_Larval_Capacity": 0.0
}
],
"Name": "gambiae"
},
{
"Habitats": [
{
"Habitat_Type": "TEMPORARY_RAINFALL",
"Max_Larval_Capacity": 0.0
}
],
"Name": "funestus"
}
]
}
}
Loading
Loading