What’s new

This topic describes new functionality and breaking changes for recently released versions of Epidemiological MODeling software (EMOD).

EMOD v2.20

The EMOD v2.20 release includes support for typhoid disease modeling, including new campaign classes: EnvironmentalDiagnostic, TyphoidCarrierDiagnostic, TyphoidVaccine, and TyphoidWASH.

ImmunityBloodTest was added for identifying whether an individual’s immunity meets a specified threshold and then broadcasts an event based on the results. This new campaign class can be used with all supported disease modeling sim types.

InterventionForCurrentPartners can be used with STI and HIV sim types and provides a mechanism for the partners of individuals in the care system to also seek care.

OutbreakIndividualTBorHIV extends OutbreakIndividual and allows for specifying HIV or a specific strain of infection for TB.

In addition, configuration and campaign parameters that set the type of distribution (uniform, Gaussian, etc.) of infectiousness, incubation period, and delivery of interventions have been refactored. The number of distributions available and naming conventions used are now consistent across the configuration and campaign files. This change does not affect the distributions used in the demographics files.

A beta release of new campaign classes (not yet fully tested) are included to support surveillance of events, where events are listened to, detected, and broadcast when a threshold has been met. These classes include: BroadcastCoordinatorEvent, BroadcastNodeEvent, DelayEventCoordinator, SurveillanceEventCoordinator, and TriggeredEventCoordinator.

New configuration parameters

For the generic simulation type, the following new configuration parameters are available:

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Enable_Infectivity_Reservoir

boolean

0

1

0

Controls whether or not an exogeneous reservoir of infectivity will be included in the simulation and allows for the infectivity in a node to be increased additively. When set to 1 (true), the demographics parameter InfectivityReservoirSize is expected in NodeAtttributes for each node.

{
    "Enable_Infectivity_Reservoir": 1
}

Enable_Abort_Zero_Infectivity

boolean

0

Controls whether or not the simulation should be ended when total infectivity falls to zero. Supported only in single-node simulations.

{
    "Enable_Abort_Zero_Infectivity": 1,
    "Minimum_End_Time": 3650
}

Enable_Random_Generator_From_Serialized_Population

boolean

0

Determines if the random number generator(s) should be extracted from a serialized population file. Enabling this will start a simulation from this file with the exact same random number stream and location in that stream as when the file was serialized.

{
    "Run_Number": 12,
    "Random_Number_Generator_Type": "USE_AES_COUNTER",
    "Random_Number_Generator_Policy": "ONE_PER_NODE",
    "Enable_Random_Generator_From_Serialized_Population": 1
}

Minimum_End_Time

float

0

1000000

0

The minimum time step the simulation must reach before checking for early termination conditions. Enable_Abort_Zero_Infectivity must be set to 1 (true).

{
    "Enable_Abort_Zero_Infectivity": 1,
    "Minimum_End_Time": 3650
}

Random_Number_Generator_Policy

enum

ONE_PER_CORE

The policy that determines if random numbers are generated for objects in a simulation on a per-core or per-node basis. The following values are available:

ONE_PER_CORE

A random number generator (RNG) is created for each computing core running a simulation. When running a simulation on a single core, there will be only one RNG. If running the single simulation on multiple cores, each core will have its own RNG. The RNGs on the different cores start out such that they will not generate the same stream of random numbers. Prior to EMOD 2.19, all simulations used this policy.

ONE_PER_NODE

An RNG is created for each geographic node in the simulation. The advantages of this policy are that 1) an event that causes a random number to be drawn in one node does not cause things to change in another node and 2) changing a simulation from single core to multi-core will not change the results. The RNGs on the different nodesstart out such that they will not generate the same stream of random numbers.

{
    "Run_Number": 15,
    "Random_Number_Generator_Type": "USE_AES_COUNTER",
    "Random_Number_Generator_Policy": "ONE_PER_NODE"
}

Random_Number_Generator_Type

enum

USE_PSEUDO_DES

The type of random number generator to use for objects in a simulation. Must set the RNG seed in Run_Number. The following values are available:

USE_PSEUDO_DES

Based on Numerical Recipes in C. The Art of Scientific Computing, 2nd ed. Press, William H. et. al, 1992. Prior to EMOD 2.19, this was the only generator available.

USE_LINEAR_CONGRUENTIAL

Based on The Structure of Linear Congruential Sequences, Marsaglia, George, 1972.

USE_AES_COUNTER

Based on AES in CTR Mode encryption as implemented in Intel (R) Advanced Encryption Standard (AES) New Instruction Set.

{
    "Run_Number": 15,
    "Random_Number_Generator_Type": "USE_LINEAR_CONGRUENTIAL",
    "Random_Number_Generator_Policy": "ONE_PER_NODE",
    "Enable_Random_Generator_From_Serialized_Population": 1
}

New configuration parameters (Distribution)

Note: These configuration parameters are part of the refactoring of distribution parameters.

For the generic simulation type, the following new configuration parameters are available:

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Incubation_Period_Constant

float

0

3.40E+38

6

The incubation period to use for all individuals.

{
    "Incubation_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Incubation_Period_Constant": 8
}

Incubation_Period_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the incubation period to each individual in the population. Each individual’s value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Incubation_Period_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Incubation_Period_Max and Incubation_Period_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Set Incubation_Period_Gaussian_Mean and Incubation_Period_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Incubation_Period_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Incubation_Period_Kappa and Incubation_Period_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and standard deviation of the natural log. Set Incubation_Period_Log_Normal_Mu and Incubation_Period_Log_Normal_Sigma.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Incubation_Period_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Incubation_Period_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Incubation_Period_Mean_1, Incubation_Period_Mean_2, and Incubation_Period_Proportion_1. This distribution does not use the parameters set for DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Incubation_Period_Gaussian_Mean": 8,
    "Incubation_Period_Gaussian_Std_Dev": 1.5
}

Incubation_Period_Exponential

float

0

3.40E+38

6

The mean incubation period when Incubation_Period_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Incubation_Period_Exponential": 4.25
}

Incubation_Period_Gaussian_Mean

float

0

3.40E+38

6

The mean of the incubation period when Incubation_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Incubation_Period_Gaussian_Mean": 8,
    "Incubation_Period_Gaussian_Std_Dev": 1.5
}

Incubation_Period_Gaussian_Std_Dev

float

1.18E-38

3.40E+38

1

The standard deviation of the incubation period when Incubation_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Incubation_Period_Gaussian_Mean": 8,
    "Incubation_Period_Gaussian_Std_Dev": 1.5
}

Incubation_Period_Kappa

float

1.18E-38

3.40E+38

1

The shape value for the incubation period when Incubation_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Incubation_Period_Kappa": 0.9,
    "Incubation_Period_Lambda": 1.5
}

Incubation_Period_Lambda

float

1.18E-38

3.40E+38

1

The scale value for the incubation period when Incubation_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Incubation_Period_Kappa": 0.9,
    "Incubation_Period_Lambda": 1.5
}

Incubation_Period_Log_Normal_Mu

float

1.18E-38

3.40E+38

6

The mean of the natural log of the incubation period when Incubation_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Incubation_Period_Log_Normal_Mu": 4,
    "Incubation_Period_Log_Normal_Sigma": 1
}

Incubation_Period_Log_Normal_Sigma

float

1.18E-38

3.40E+38

1

The standard deviation of the natural log of the incubation period when Incubation_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Incubation_Period_Log_Normal_Mu": 4,
    "Incubation_Period_Log_Normal_Sigma": 1
}

Incubation_Period_Max

float

0

3.40E+38

1

The maximum incubation period when Incubation_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Incubation_Period_Min": 2,
    "Incubation_Period_Max": 7
}

Incubation_Period_Mean_1

float

1.18E-38

3.40E+38

1

The mean of the first exponential distribution when Incubation_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Incubation_Period_Mean_1": 4,
    "Incubation_Period_Mean_2": 12,
    "Incubation_Period_Proportion_1": 0.2
}

Incubation_Period_Mean_2

float

1.18E-38

3.40E+38

1

The mean of the second exponential distribution when Incubation_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Incubation_Period_Mean_1": 4,
    "Incubation_Period_Mean_2": 12,
    "Incubation_Period_Proportion_1": 0.2
}

Incubation_Period_Min

float

0

3.40E+38

0

The minimum incubation period when Incubation_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Incubation_Period_Min": 2,
    "Incubation_Period_Max": 7
}

Incubation_Period_Peak_2_Value

float

0

3.40E+38

1

The incubation period value to assign to the remaining individuals when Incubation_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Incubation_Period_Proportion_0": 0.25,
    "Incubation_Period_Peak_2_Value": 5
}

Incubation_Period_Poisson_Mean

float

0

3.40E+38

6

The mean of the incubation period when Incubation_Period_Distribution is set to POISSON_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "POISSON_DISTRIBUTION",
    "Incubation_Period_Poisson_Mean": 5
}

Incubation_Period_Proportion_0

float

0

1

1

The proportion of individuals to assign a value of zero days incubation when Incubation_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Incubation_Period_Proportion_0": 0.25,
    "Incubation_Period_Peak_2_Value": 5
}

Incubation_Period_Proportion_1

float

0

1

1

The proportion of individuals in the first exponential distribution when Incubation_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Incubation_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Incubation_Period_Mean_1": 4,
    "Incubation_Period_Mean_2": 12,
    "Incubation_Period_Proportion_1": 0.2
}

Infectious_Period_Constant

float

0

3.40E+38

6

The infectious period to use for all individuals.

{
    "Infectious_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Infectious_Period_Constant": 8
}

Infectious_Period_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the infectious period to each individual in the population. Each individual’s value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Infectious_Period_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Infectious_Period_Max and Infectious_Period_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Set Infectious_Period_Gaussian_Mean and Infectious_Period_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Infectious_Period_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Infectious_Period_Kappa and Infectious_Period_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and standard deviation of the natural log. Set Infectious_Period_Log_Normal_Mu and Infectious_Period_Log_Normal_Sigma.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Infectious_Period_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Infectious_Period_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Infectious_Period_Mean_1, Infectious_Period_Mean_2, and Infectious_Period_Proportion_1. This distribution does not use the parameters set for EXPONENTIAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Infectious_Period_Gaussian_Mean": 4,
    "Infectious_Period_Gaussian_Std_Dev": 1
}

Infectious_Period_Exponential

float

0

3.40E+38

6

The mean infectious period when Infectious_Period_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Infectious_Period_Exponential": 4.25
}

Infectious_Period_Gaussian_Mean

float

0

3.40E+38

6

The mean of the infectious period when Infectious_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Infectious_Period_Gaussian_Mean": 4,
    "Infectious_Period_Gaussian_Std_Dev": 1
}

Infectious_Period_Gaussian_Std_Dev

float

1.18E-38

3.40E+38

1

The standard deviation of the infectious period when Infectious_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Infectious_Period_Gaussian_Mean": 4,
    "Infectious_Period_Gaussian_Std_Dev": 1
}

Infectious_Period_Kappa

float

1.18E-38

3.40E+38

1

The shape value for the infectious period when Infectious_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Infectious_Period_Kappa": 0.9,
    "Infectious_Period_Lambda": 1.5
}

Infectious_Period_Lambda

float

1.18E-38

3.40E+38

1

The scale value for the infectious period when Infectious_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Infectious_Period_Kappa": 0.9,
    "Infectious_Period_Lambda": 1.5
}

Infectious_Period_Log_Normal_Mu

float

1.18E-38

3.40E+38

6

The mean of the natural log of the infectious period when Infectious_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Infectious_Period_Log_Normal_Mu": 9,
    "Infectious_Period_Log_Normal_Sigma": 2
}

Infectious_Period_Log_Normal_Sigma

float

1.18E-38

3.40E+38

1

The standard deviation of the natural log of the infectious period when Infectious_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Infectious_Period_Log_Normal_Mu": 9,
    "Infectious_Period_Log_Normal_Sigma": 2
}

Infectious_Period_Max

float

0

3.40E+38

1

The maximum infectious period when Infectious_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Infectious_Period_Min": 2,
    "Infectious_Period_Max": 7
}

Infectious_Period_Mean_1

float

1.18E-38

3.40E+38

1

The mean of the first exponential distribution when Infectious_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Infectious_Period_Mean_1": 4,
    "Infectious_Period_Mean_2": 12,
    "Infectious_Period_Proportion_1": 0.2
}

Infectious_Period_Mean_2

float

1.18E-38

3.40E+38

1

The mean of the second exponential distribution when Infectious_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Infectious_Period_Mean_1": 4,
    "Infectious_Period_Mean_2": 12,
    "Infectious_Period_Proportion_1": 0.2
}

Infectious_Period_Min

float

0

3.40E+38

0

The minimum infectious period when Infectious_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Infectious_Period_Min": 2,
    "Infectious_Period_Max": 7
}

Infectious_Period_Peak_2_Value

float

0

3.40E+38

1

The infectious period value to assign to the remaining individuals when Infectious_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Infectious_Period_Proportion_0": 0.25,
    "Infectious_Period_Peak_2_Value": 5
}

Infectious_Period_Poisson_Mean

float

0

3.40E+38

6

The mean of the infectious period with Infectious_Period_Distribution is set to POISSON_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "POISSON_DISTRIBUTION",
    "Infectious_Period_Poisson_Mean": 5
}

Infectious_Period_Proportion_0

float

0

1

1

The proportion of individuals to assign a value of zero days infectiousness when Infectious_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Infectious_Period_Proportion_0": 0.25,
    "Infectious_Period_Peak_2_Value": 5
}

Infectious_Period_Proportion_1

float

0

1

1

The proportion of individuals in the first exponential distribution when Infectious_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Infectious_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Infectious_Period_Mean_1": 4,
    "Infectious_Period_Mean_2": 12,
    "Infectious_Period_Proportion_1": 0.2
}

Symptomatic_Infectious_Offset

float

-3.40E+38

3.40E+38

3.40E+38

Amount of time, in days, after the infectious period starts that symptoms appear. Negative values imply an individual is symptomatic before infectious. If this offset is greater than the infectious duration, the infection will not be symptomatic. For example, if Incubation_Period_Constant is set to 10 and Symptomatic_Infectious_Offset is set to 4, then an infected person would become symptomatic 14 days after transmission.

{
    "Infectious_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Symptomatic_Infectious_Offset": 4,
    "Incubation_Period_Constant": 10
}

Symptomatic_Infectious_Offset

float

-3.40E+38

3.40E+38

3.40E+38

Amount of time, in days, after the infectious period starts that symptoms appear. Negative values imply an individual is symptomatic before infectious. If this offset is greater than the infectious duration, the infection will not be symptomatic. For example, if Incubation_Period_Constant is set to 10 and Symptomatic_Infectious_Offset is set to 4, then an infected person would become symptomatic 14 days after transmission.

{
    "Infectious_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Symptomatic_Infectious_Offset": 4,
    "Incubation_Period_Constant": 10
}

New configuration parameters (Beta)

Note: These configuration parameters are currently in beta release and have not yet been fully tested.

For the generic simulation type, the following new configuration parameters are available:

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Report_Coordinator_Event_Recorder

boolean

0

Enables or disables the ReportCoordinatorEventRecorder.csv output report for coordinator events. When enabled (set to 1) reports will be generated for the broadcasted valid coordinator events, as specified in Report_Coordinator_Event_Recorder_Events.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Coordinator_Events": [
        "Coordinator_Event_1",
        "Coordinator_Event_2",
        "Coordinator_Event_3"
    ],
    "Report_Coordinator_Event_Recorder": 1,
    "Report_Coordinator_Event_Recorder_Events": [
        "Coordinator_Event_1",
        "Coordinator_Event_2",
        "Coordinator_Event_3"
    ]
}

Report_Coordinator_Event_Recorder_Events

array of strings

NA

The list of events to include or exclude in the ReportCoordinatorEventRecorder.csv output report, based on how Report_Coordinator_Event_Recorder_Ignore_Events_In_List is set. This list must not be empty and is dependent upon Report_Coordinator_Event_Recorder being enabled. In addition, the events must be defined in Customer_Coordinator_Events.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Coordinator_Events": [
        "Coordinator_Event_1",
        "Coordinator_Event_2",
        "Coordinator_Event_3"
    ],
    "Report_Coordinator_Event_Recorder": 1,
    "Report_Coordinator_Event_Recorder_Events": [
        "Coordinator_Event_1",
        "Coordinator_Event_2",
        "Coordinator_Event_3"
    ]
}

Report_Coordinator_Event_Recorder_Ignore_Events_In_List

boolean

0

If set to false (0), only the events listed in the Report_Coordinator_Event_Recorder_Events array will be included in the ReportCoordinatorEventRecorder.csv output report. If set to true (1), only the events listed in the array will be excluded, and all other events will be included. If you want to return all events from the simulation, leave the events array empty.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Coordinator_Events": [
        "Coordinator_Event_1",
        "Coordinator_Event_2",
        "Coordinator_Event_3"
    ],
    "Report_Coordinator_Event_Recorder": 1,
    "Report_Coordinator_Event_Recorder_Events": [
        "Coordinator_Event_1",
        "Coordinator_Event_2",
        "Coordinator_Event_3"
    ],
    "Report_Coordinator_Event_Recorder_Ignore_Events_In_List": 0
}

Report_Node_Event_Recorder

boolean

0

Enables or disables the ReportNodeEventRecorder.csv output report. When enabled (set to 1) reports will be generated for the broadcasted valid node events, as specified in Report_Node_Event_Recorder_Events.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Node_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder": 1,
    "Report_Node_Event_Recorder_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ]
}

Report_Node_Event_Recorder_Events

array of strings

NA

The list of node events to include or exclude in the ReportNodeEventRecorder.csv output report, based on how Report_Node_Event_Recorder_Ignore_Events_In_List is set.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Node_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder": 1,
    "Report_Node_Event_Recorder_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder_Ignore_Events_In_List": 0
}

Report_Node_Event_Recorder_Ignore_Events_In_List

boolean

0

If set to false (0), only the node events listed in the Report_Node_Event_Recorder_Events array will be included in the ReportNodeEventRecorder.csv output report. If set to true (1), only the node events listed in the array will be excluded, and all other node events will be included. If you want to return all node events from the simulation, leave the node events array empty.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

Value

Events array

Output file

0

No events

No events

0

One or more events

Only the listed events.

1

No events

All events occurring in the simulation.

1

One or more events

All simulation events occurring in the simulation, except for those listed.

{
    "Custom_Node_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder": 1,
    "Report_Node_Event_Recorder_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder_Ignore_Events_In_List": 0
}

Report_Node_Event_Recorder_Node_Properties

array of strings

[]

Specifies an array of (optional) node property keys, as defined in NodeProperties in the demographics file, to be added as additional columns to the ReportNodeEventRecorder.csv output report.

{
    "Custom_Node_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder": 1,
    "Report_Node_Event_Recorder_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder_Ignore_Events_In_List": 0,
    "Report_Node_Event_Recorder_Node_Properties": [
        "Geographic"
    ]
}

Report_Node_Event_Recorder_Stats_By_IPs

array of strings

[]

Specifies an array of (optional) individual property keys, as defined in IndividualProperties in the demographics file, to be added to the ReportNodeEventRecorder.csv output report. For each key:value pair there will be two additional columns (Key:Value:NumIndividuals, Key:Value:NumInfected) added to the report. For example, with a Risk property key assigned the values of LOW and HIGH there would then be four additional columns (Risk:LOW:NumIndividuals, Risk:LOW:NumInfected, Risk:HIGH:NumIndividuals, Risk:HIGH:NumInfected). An empty array equals no additional columns added.

{
    "Custom_Node_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder": 1,
    "Report_Node_Event_Recorder_Events": [
        "Node_Event_1",
        "Node_Event_2"
    ],
    "Report_Node_Event_Recorder_Ignore_Events_In_List": 0,
    "Report_Node_Event_Recorder_Node_Properties": [
        "Geographic"
    ],
    "Report_Node_Event_Recorder_Stats_By_IPs": [
        "Risk"
    ]
}

Report_Surveillance_Event_Recorder

boolean

0

Enables or disables the ReportSurveillanceEventRecorder.csv output report. When enabled (set to 1) reports will be generated for the broadcasted valid coordinator events, as specified in Report_Surveillance_Event_Recorder_Events.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Coordinator_Events": [
        "Start_ACF",
        "Start_SIA_2",
        "Start_SIA_4",
        "Ind_Start_SIA_2",
        "Ind_Start_SIA_4",
        "Respond_To_Surveillance"
    ],
    "Report_Surveillance_Event_Recorder": 1,
    "Report_Surveillance_Event_Recorder_Events": [
        "Respond_To_Surveillance"
    ]
}

Report_Surveillance_Event_Recorder_Events

array of strings

NA

The list of events to include or exclude in the ReportSurveillanceEventRecorder.csv output report, based on how Report_Surveillance_Event_Recorder_Ignore_Events_In_List is set. This list must not be empty and is dependent upon Report_Surveillance_Event_Recorder being enabled.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

{
    "Custom_Coordinator_Events": [
        "Start_ACF",
        "Start_SIA_2",
        "Start_SIA_4",
        "Ind_Start_SIA_2",
        "Ind_Start_SIA_4",
        "Respond_To_Surveillance"
    ],
    "Report_Surveillance_Event_Recorder": 1,
    "Report_Surveillance_Event_Recorder_Events": [
        "Respond_To_Surveillance"
    ]
}

Report_Surveillance_Event_Recorder_Ignore_Events_In_List

boolean

0

If set to false (0), only the events listed in the Report_Surveillance_Event_Recorder_Events array will be included in the ReportSurveillanceEventRecorder.csv output report. If set to true (1), only the events listed in the array will be excluded, and all other events will be included. If you want to return all events from the simulation, leave the events array empty.

Note: This configuration parameter is currently in beta release and has not yet been fully tested.

Value

Events array

Output file

0

No events

No events

0

One or more events

Only the listed events.

1

No events

All events occurring in the simulation.

1

One or more events

All simulation events occurring in the simulation, except for those listed.

{
    "Custom_Coordinator_Events": [
        "Start_ACF",
        "Start_SIA_2",
        "Start_SIA_4",
        "Ind_Start_SIA_2",
        "Ind_Start_SIA_4",
        "Respond_To_Surveillance"
    ],
    "Report_Surveillance_Event_Recorder": 1,
    "Report_Surveillance_Event_Recorder_Events": [
        "Respond_To_Surveillance"
    ],
    "Report_Surveillance_Event_Recorder_Ignore_Events_In_List": 0
}

Report_Surveillance_Event_Recorder_Stats_By_IPs

array of strings

[]

Specifies an array of (optional) individual property keys, as defined in IndividualProperties in the demographics file, to be added to the ReportSurveillanceEventRecorder.csv output report. For each key:value pair there will be two additional columns (Key:Value:NumIndividuals, Key:Value:NumInfected) added to the report. For example, with a Risk property key assigned the values of LOW and HIGH there would then be four additional columns (Risk:LOW:NumIndividuals, Risk:LOW:NumInfected, Risk:HIGH:NumIndividuals, Risk:HIGH:NumInfected). An empty array equals no additional columns added.

{
    "Custom_Coordinator_Events": [
        "Start_ACF",
        "Start_SIA_2",
        "Start_SIA_4",
        "Ind_Start_SIA_2",
        "Ind_Start_SIA_4",
        "Respond_To_Surveillance"
    ],
    "Report_Surveillance_Event_Recorder": 1,
    "Report_Surveillance_Event_Recorder_Events": [
        "Respond_To_Surveillance"
    ],
    "Report_Surveillance_Event_Recorder_Stats_By_IPs": []
}

New demographics parameters

In all simulation types, you can now specify the quantity-per-timestep added to the total infectivity present in a node; it is equivalent to the expected number of additional infections in a node, per timestep. For example, if timestep is equal to a day, then setting InfectivityReservoirSize to a value of 0.1 would introduce an infection every 10 days from the exogenous reservoir.

For more information, see the table below.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

InfectivityReservoirEndTime

float

InfectivityReservoirStartTime

3.40E+38

3.40E+38

The ending of the exogeneous reservoir of infectivity. This parameter is conditional upon the configuration parameter, Enable_Infectivity_Reservoir, being enabled (set to 1).

{
    "NodeAttributes": {
        "InfectivityReservoirSize": 0.1,
        "InfectivityReservoirStartTime": 90,
        "InfectivityReservoirEndTime": 365
    }
}

InfectivityReservoirSize

float

0

3.40E+38

0

The quantity-per-timestep added to the total infectivity present in a node; it is equivalent to the expected number of additional infections in a node, per timestep. For example, if timestep is equal to a day, then setting InfectivityReservoirSize to a value of 0.1 would introduce an infection every 10 days from the exogenous reservoir. This parameter is conditional upon the configuration parameter, Enable_Infectivity_Reservoir, being enabled (set to 1).

{
    "NodeAttributes": {
        "InfectivityReservoirSize": 0.1,
        "InfectivityReservoirStartTime": 90,
        "InfectivityReservoirEndTime": 365
    }
}

InfectivityReservoirStartTime

float

0

3.40E+38

0

The beginning of the exogeneous reservoir of infectivity. This parameter is conditional upon the configuration parameter, Enable_Infectivity_Reservoir, being enabled (set to 1).

{
    "NodeAttributes": {
        "InfectivityReservoirSize": 0.1,
        "InfectivityReservoirStartTime": 90,
        "InfectivityReservoirEndTime": 365
    }
}

New campaign parameters

The following campaign classes are new and can be used in the (specified) models:

ImmunityBloodTest (generic)

The ImmunityBloodTest intervention class identifies whether an individual’s immunity meets a specified threshold (as set with the Positive_Threshold_AcquisitionImmunity campaign parameter) and then broadcasts an event based on the results; positive has immunity while negative does not.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Base_Sensitivity

float

0

1

1

The sensitivity of the diagnostic. This sets the proportion of the time that individuals with the condition being tested receive a positive diagnostic test. When set to zero, then individuals who have the condition always receive a false-negative diagnostic test.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Treatment_Fraction": 1,
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "class": "ImmunityBloodTest"
        }
    }
}

Base_Specificity

float

0

1

1

The specificity of the diagnostic. This sets the proportion of the time that individuals without the condition being tested receive a negative diagnostic test. When set to 1, the diagnostic always accurately reflects the lack of having the condition. When set to zero, then individuals who do not have the condition always receive a false-positive diagnostic test.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Cost_To_Consumer

float

0

3.40282e+38

1

The unit ‘cost’ assigned to the diagnostic. Setting Cost_To_Consumer to zero for all other interventions, and to a non-zero amount for one intervention, provides a convenient way to track the number of times the intervention has been applied in a simulation.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Days_To_Diagnosis

float

0

3.40282e+38

0

The number of days from test until diagnosis.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Disqualifying_Properties": [
                "InterventionStatus:LostForever"
            ],
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Dont_Allow_Duplicates": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Enable_IsSymptomatic

boolean

0

1

0

If true (1), requires an infection to be symptomatic to return a positive test.

{
    "Enable_IsSymptomatic": 1,
    "Base_Specificity": 0.85,
    "Base_Sensitivity": 0.92
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Intervention_Name": "Immunity Blood Test - Series 1",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Negative_Diagnosis_Event

enum

NA

NA

“”

If an individual tests negative (does not have immunity), then an individual type event is broadcast. This may trigger another intervention when the event occurs. Only used when Event_Or_Config is set to Event.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways.

{
    "New_Property_Value": "InterventionStatus:None"
}

Positive_Diagnosis_Config

JSON object

NA

NA

NA

The intervention distributed to individuals if they test positive. Only used when Event_Or_Config is set to Config.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Positive_Diagnosis_Event

enum

NA

NA

“”

If the test is positive (has immunity), then an individual type event is broadcast. This may trigger another intervention when the event occurs. Only used if Event_Or_Config is set to Event.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Positive_Threshold_AcquisitionImmunity

float

0

1

1

Specifies the threshold for acquired immunity, where 1 equals 100% immunity and 0 equals 100% susceptible.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

Treatment_Fraction

float

0

1

1

The fraction of positive diagnoses that are treated.

{
    "Event_Coordinator_Config": {
        "Demographic_Coverage": 1,
        "Intervention_Config": {
            "Base_Sensitivity": 1,
            "Base_Specificity": 1,
            "Cost_To_Consumer": 0,
            "Days_To_Diagnosis": 0,
            "Event_Or_Config": "Event",
            "Negative_Diagnosis_Event": "TestedNegative_IamSusceptible",
            "Positive_Diagnosis_Event": "TestedPositive_IamImmune",
            "Positive_Threshold_AcquisitionImmunity": 0.99,
            "Treatment_Fraction": 1,
            "class": "ImmunityBloodTest"
        }
    }
}

InterventionForCurrentPartners (HIV, STI)

The InterventionForCurrentPartners intervention class provides a mechanism for the partners of individuals in the care system to also seek care. Partners do not need to seek testing at the same time; a delay may occur between the initial test and the partner’s test. If a relationship has been paused, such as when a partner migrates to a different node, the partner will not be contacted.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Broadcast_Event

string

NA

NA

“”

The event that is immediately broadcast to the partner. Required if Event_or_Config is set to Event. See Event list for possible built-in values, or create custom values using Custom_Individual_Events.

{
    "Broadcast_Event": "HIVNewlyDiagnosed"
}

Disqualifying_Properties

array of strings

NA

NA

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Event_Or_Config

enum

NA

NA

Config

Specifies whether the current intervention (or a positive diagnosis, depending on the intervention class) distributes a nested intervention (the Config option) or an event will be broadcast which may trigger other interventions in the campaign file (the Event option). Possible values are:

  • Event

  • Config

{
    "Event_Or_Config": "Event"
}

Intervention_Config

JSON object

The intervention definition that is immediately distributed to the partner. Required if Event_Or_Config is set to Config.

{
    "class": "StandardInterventionDistributionEventCoordinator",
    "Intervention_Config": {
        "class": "NodeLevelHealthTriggeredIV",
        "Trigger_Condition_List": [
            "Some_Other_Event"
        ],
        "Actual_IndividualIntervention_Config": {
            "class": "InterventionForCurrentPartners",
            "Disqualifying_Properties": [],
            "New_Property_Value": "CascadeState:TestingCurrentPartner",
            "Relationship_Types": [
                "MARITAL",
                "INFORMAL",
                "TRANSITORY",
                "COMMERCIAL"
            ],
            "Minimum_Duration_Years": 0.5,
            "Prioritize_Partners_By": "LONGER_TIME_IN_RELATIONSHIP",
            "Maximum_Partners": 2,
            "Event_Or_Config": "Event",
            "Broadcast_Event": "HIVNewlyDiagnosed"
        }
    }
}

Intervention_Name

string

NA

NA

InterventionForCurrentPartners

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "Intervention_Name": "Intervention_For_Spouse",
        "class": "InterventionForCurrentPartnersr"
    }
}

Maximum_Partners

integer

0

1000

100

The maximum number of partners that will receive the intervention. Required when Prioritize_Partners_By is not set to NO_PRIORITIZATION.

{
    "Prioritize_Partners_By": "NO_PRIORITIZATION",
    "Maximum_Partners": 2
}

Minimum_Duration_Years

float

0

200

0

The minimum amount of time, in years, between relationship formation and the current time for the partner to qualify for the intervention.

{
    "Minimum_Duration_Years": 0.5
}

New_Property_Value

string

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Prioritize_Partners_By

enum

NA

NA

NO_PRIORITIZATION

How to prioritize partners for the intervention, as long as they have been in a relationship longer than Minimum_Duration_Years. Possible values are:

NO_PRIORTIZATION

All partners are contacted.

CHOSEN_AT_RANDOM

Partners are randomly selected until Maximum_Partners have received the intervention.

LONGER_TIME_IN_RELATIONSHIP

Partners are sorted in descending order of the duration of the relationship. Partners are contacted from the beginning of this list until Maximum_Partners have received the intervention.

SHORTER_TIME_IN RELATIONSHIP

Partners are sorted in ascending order of the duration of the relationship. Partners are contacted from the beginning of the list until Maximum_Partners have received the intervention.

OLDER_AGE

Partners are sorted in descending order of their age. Partners are contacted from the beginning of this list until Maximum_Partners have received the intervention.

YOUNGER_AGE

Partners are sorted in ascending order of the duration of the relationship. Partners are contacted from the beginning of this list until Maximum_Partners have received the intervention.

RELATIONSHIP_TYPE

Partners are sorted based on the order of relationship types defined in the Relationship_Types array. For example, “Relationship_Types” : [“MARITAL”, “INFORMAL”, “TRANSITORY”, “COMMERCIAL”], will prioritize marital first, then informal, then transitory, then commercial, with random selection between mulitple partners of the same type.

{
    "Prioritize_Partners_By": "LONGER_TIME_IN_RELATIONSHIP"
}

Relationship_Types

array of strings

NA

NA

NA

An array listing all possible relationship types for which partners can qualify for the intervention. Supported partnerships include TRANSITORY, INFORMAL, MARITAL, and COMMERCIAL. If Prioritize_Partners_By is set to RELATIONSHIP_TYPE, then the order of these types is used. The array may not contain duplicates, and cannot be empty.

{
    "Relationship_Types": [
        "MARITAL",
        "INFORMAL",
        "TRANSITORY",
        "COMMERCIAL"
    ]
}

OutbreakIndividualTBorHIV (tuberculosis)

The OutbreakIndividualTBorHIV class extends OutbreakIndividual class and allows for specifying HIV or a specific strain of infection for TB.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Genome

integer

-1

16777215

0

The genome ID (Genome) of the outbreak infection. Together with the clade ID (Clade) they represent an infection as a unitary object. Values for Genome may range from -1 to 2Log2_Number_of_Genomes_per_Clade-1

Intervention distribution example:

{
    "Enable_Strain_Tracking": 1,
    "Events": [
        {
            "Event_Coordinator_Config": {
                "Demographic_Coverage": 0.001,
                "Intervention_Config": {
                    "Clade": 1,
                    "Genome": 3,
                    "IgnoreImmunity": 1,
                    "class": "OutbreakIndividualTBorHIV"
                },
                "Target_Demographic": "Everyone",
                "class": "StandardInterventionDistributionEventCoordinator"
            },
            "Event_Name": "OutbreakIndividualTBorHIV",
            "Nodeset_Config": {
                "class": "NodeSetAll"
            },
            "Start_Day": 30,
            "class": "CampaignEvent"
        }
    ]
}

Ignore_Immunity

boolean

0

1

1

Individuals will be force-infected (with a specific strain) regardless of actual immunity level when set to true (1).

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "Infection_Type": "TB",
        "Outbreak_Source": "PrevalenceIncrease",
        "Ignore_Immunity": 0,
        "class": "OutbreakIndividualTBorHIV"
    }
}

Incubation_Period_Override

integer

-1

2147480000

-1

The incubation period, in days, that infected individuals will go through before becoming infectious. This value overrides the incubation period set in the configuration file. Set to -1 to honor the configuration parameter settings.

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "Ignore_Immunity": 0,
        "Incubation_Period_Override": -1,
        "Infection_Type": "TB",
        "Outbreak_Source": "PrevalenceIncrease",
        "class": "OutbreakIndividualTBorHIV"
    }
}

Infection_Type

enum

NA

NA

HIV

Infection type. Possible values are:

HIV

HIV infection.

TB

TB infection.

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "Ignore_Immunity": 0,
        "Incubation_Period_Override": -1,
        "Infection_Type": "TB",
        "Outbreak_Source": "PrevalenceIncrease",
        "class": "OutbreakIndividualTBorHIV"
    }
}

EnvironmentalDiagnostic (typhoid)

The EnvironmentalDiagnostic intervention class identifies contaminated locations by sampling the environment, comparing the value to a threshold, and broadcasting either a positive or negative node event.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Base_Sensitivity

float

0

1

1

The likelihood that a positive measurement was made. If the contagion measurement is greater than the Sample_Threshold, a random number is drawn to determine if the detection was actually made.

{
    "Base_Sensitivity": 0.7,
    "Sample_Threshold": 0.85
}

Base_Specificity

float

0

1

1

The proportion of time that the environment being tested and without the condition receives a negative diagnostic test. When set to 1, the diagnostic always accurately reflects the lack of having the condition. When set to zero, then environments that do not have the condition always receive a false-positive diagnostic test.

{
    "Base_Specificity": 0.9
}

Disqualifying_Properties

array of strings

NA

NA

NA

A list of NodeProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to nodes with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": []
}

Environment_IP_Key_Value

string

NA

NA

NA

An IndividualProperty key:value pair that indicates a specific transmission pool, typically used to identify a location. If none is provided, the sample will be taken on the entire node.

{
    "Environment_IP_Key_Value": "Location:UP_RIVER"
}

Intervention_Name

string

NA

NA

EnvironmentalDiagnostic

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "Intervention_Name": "Downriver sample testing",
        "class": "EnvironmentalDiagnostic"
    }
}

Negative_Diagnostic_Event

string

NA

NA

“”

The event that will be broadcast to the node when the sample value is less than the threshold (e.g. the test is negative). If this is an empty string or set to NoTrigger, no event will be broadcast. See Event list for possible values, or create custom events using Custom_Node_Events.

{
    "Event_Or_Config": "Event",
    "Negative_Diagnostic_Event": "Up_River_Clean"
}

New_Property_Value

string

NA

NA

NA

An optional NodeProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Positive_Diagnostic_Event

string

NA

NA

“”

The event that will be broadcast to the node when the sample value is greater than the threshold (e.g. the test is positive). This cannot be an empty string or set to NoTrigger. See Event list for possible values, or create custom events using Custom_Node_Events.

{
    "Positive_Diagnostic_Event": "Up_River_Contagion_Found"
}

Sample_Threshold

float

0

3.40282e+38

0

The threshold that delineates a positive versus negative sampling result. If the sample is greater than the threshold, a positive finding will result; if the value is less than the threshold, it will be negative. This does not include values equal to the threshold so that the threshold can be set to zero; if the threshold is zero, the test is simply looking for any deposit in the transmission pool.

{
    "Sample_Threshold": 0.2
}

TyphoidCarrierDiagnostic (typhoid)

The TyphoidCarrierDiagnostic class extends SimpleDiagnostic class and allows for positive test diagnostic when an individual is a chronic typhoid carrier.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Base_Sensitivity

float

0

1

1

The sensitivity of the diagnostic. This sets the proportion of the time that individuals with the condition being tested receive a positive diagnostic test. When set to zero, then individuals who have the condition always receive a false-negative diagnostic test.

{
    "Base_Sensitivity": 1
}

Base_Specificity

float

0

1

1

The specificity of the diagnostic. This sets the proportion of the time that individuals without the condition being tested receive a negative diagnostic test. When set to 1, the diagnostic always accurately reflects the lack of having the condition. When set to zero, then individuals who do not have the condition always receive a false-positive diagnostic test.

{
    "Base_Specificity": 1
}

Cost_To_Consumer

float

0

3.40282e+38

1

The unit ‘cost’ assigned to the diagnostic. Setting Cost_To_Consumer to zero for all other interventions, and to a non-zero amount for one intervention, provides a convenient way to track the number of times the intervention has been applied in a simulation.

{
    "Cost_To_Consumer": 10
}

Days_To_Diagnosis

float

0

3.40282e+38

0

The number of days from test until diagnosis.

{
    "Days_To_Diagnosis": 2
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Enable_IsSymptomatic

boolean

0

1

0

If true (1), requires an infection to be symptomatic to return a positive test.

{
    "Base_Sensitivity": 0.92,
    "Base_Specificity": 0.85,
    "Enable_IsSymptomatic": 1
}

Event_Or_Config

enum

NA

NA

Config

Specifies whether the current intervention (or a positive diagnosis, depending on the intervention class) distributes a nested intervention (the Config option) or an event will be broadcast which may trigger other interventions in the campaign file (the Event option). Possible values are:

  • Event

  • Config

{
    "Event_Or_Config": "Config"
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "Intervention_Name": "Typhoid diagnostic test",
        "class": "TyphoidCarrierDiagnostic"
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Positive_Diagnosis_Config

JSON object

NA

NA

NA

The intervention distributed to individuals if they test positive. Only used when Event_Or_Config is set to Config.

{
    "Event_Coordinator_Config": {
        "Intervention_Config": {
            "class": "TyphoidCarrierDiagnostic",
            "Event_Or_Config": "Event",
            "Positive_Diagnosis_Event": "Chronic_Carrier"
        },
        "Number_Repetitions": 10,
        "Timesteps_Between_Repetitions": 180,
        "class": "StandardInterventionDistributionEventCoordinator"
    },
    "Event_Name": "Diagnostic",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 2,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent"
}

Positive_Diagnosis_Event

enum

NA

NA

“”

If the test is positive, this specifies an event that can trigger another intervention when the event occurs. Only used if Event_Or_Config is set to Event. See Event list for possible values, or create custom events using Custom_Individual_Events.

{
    "Event_Coordinator_Config": {
        "Intervention_Config": {
            "class": "TyphoidCarrierDiagnostic",
            "Event_Or_Config": "Event",
            "Positive_Diagnosis_Event": "Chronic_Carrier"
        },
        "Number_Repetitions": 10,
        "Timesteps_Between_Repetitions": 180,
        "class": "StandardInterventionDistributionEventCoordinator"
    },
    "Event_Name": "Diagnostic",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 2,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent"
}

Treatment_Fraction

float

0

1

1

The fraction of positive diagnoses that are treated.

{
    "Treatment_Fraction": 1
}

TyphoidVaccine (typhoid)

The TyphoidVaccine intervention class identifies contaminated locations by sampling the environment, comparing the value to a threshold, and broadcasting either a positive or negative node event.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Changing_Effect

JSON object

NA

NA

NA

A highly configurable effect that changes over time. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Intervention_Config": {
        "Changing_Effect": {
            "Durability_Map": {
                "Times": [
                    0,
                    10,
                    11,
                    20,
                    21,
                    26,
                    27,
                    33,
                    34,
                    40
                ],
                "Values": [
                    0,
                    0,
                    1,
                    1,
                    0,
                    0,
                    1,
                    1,
                    0,
                    0
                ]
            },
            "Expire_At_Durability_Map_End": 1,
            "Initial_Effect": 1,
            "class": "WaningEffectMapLinear"
        },
        "Effect": 1,
        "Mode": "Dose",
        "Target_Demographic": "Everyone",
        "class": "TyphoidVaccine"
    }
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Effect

float

0

1

1

The efficacy of the Typhoid vaccine intervention. For example, a value of 1 would be 100 percent efficacy for all targeted nodes within the intervention.

{
    "Intervention_Config": {
        "Changing_Effect": {
            "Durability_Map": {
                "Times": [
                    0,
                    10,
                    11,
                    20,
                    21,
                    26,
                    27,
                    33,
                    34,
                    40
                ],
                "Values": [
                    0,
                    0,
                    1,
                    1,
                    0,
                    0,
                    1,
                    1,
                    0,
                    0
                ]
            },
            "Expire_At_Durability_Map_End": 1,
            "Initial_Effect": 1,
            "class": "WaningEffectMapLinear"
        },
        "Effect": 1,
        "Mode": "Dose",
        "Target_Demographic": "Everyone",
        "class": "TyphoidVaccine"
    }
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "TyphoidVaccine",
        "Intervention_Name": "Country-wide vaccination campaign"
    }
}

Mode

enum

NA

NA

Shedding

The mode of contact transmission of typhoid targeted by the intervention. Possible values are:

  • Dose (disease acquisition)

    Reduces the amount of contagion an individual is exposed to per exposure event, by a proportion. This is similar to setting Vaccine_Type to AcquisitionBlocking when using SimpleVaccine.

  • Exposures (disease acquisition)

    Reduces the number of exposures to pathogen by a proportion. This is similar to setting Vaccine_Type to AcquisitionBlocking when using SimpleVaccine.

  • Shedding (disease transmission)

    Reduces the amount of contagion shed if a vaccinated individual is infected. This is similar to setting Vaccine_Type to TransmissionBlocking when using SimpleVaccine.

{
    "Intervention_Config": {
        "Changing_Effect": {
            "Durability_Map": {
                "Times": [
                    0,
                    10,
                    11,
                    20,
                    21,
                    26,
                    27,
                    33,
                    34,
                    40
                ],
                "Values": [
                    0,
                    0,
                    1,
                    1,
                    0,
                    0,
                    1,
                    1,
                    0,
                    0
                ]
            },
            "Expire_At_Durability_Map_End": 1,
            "Initial_Effect": 1,
            "class": "WaningEffectMapLinear"
        },
        "Effect": 1,
        "Mode": "Dose",
        "Target_Demographic": "Everyone",
        "class": "TyphoidVaccine"
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

TyphoidWASH (typhoid)

The TyphoidWASH intervention class acts on exposure through either the contact contagion population or the environmental contagion population in the simulation. The intervention can be configured to reduce either exposure dose or exposure frequency for each route, simulating effects of water, sanitation, and hygiene (WASH) interventions.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Changing_Effect

JSON object

NA

NA

NA

A highly configurable effect that changes over time. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Intervention_Config": {
        "Changing_Effect": {
            "Expire_At_Durability_Map_End": 1,
            "Initial_Effect": 1,
            "class": "WaningEffectConstant"
        },
        "Effect": 1,
        "Mode": "Exposures",
        "Use_Property_Targeting": 0,
        "class": "TyphoidWASH"
    }
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Effect

float

0

1

1

The efficacy of the TyphoidWASH intervention. For example, a value of 1 would be 100 percent efficacy for all targeted nodes within the intervention.

{
    "Intervention_Config": {
        "Changing_Effect": {
            "Expire_At_Durability_Map_End": 1,
            "Initial_Effect": 1,
            "class": "WaningEffectConstant"
        },
        "Effect": 1,
        "Mode": "Exposures",
        "Use_Property_Targeting": 0,
        "class": "TyphoidWASH"
    }
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "Intervention_Name": "TyphoidWASH intervention campaign",
        "class": "TyphoidWASH"
    }
}

Mode

enum

NA

NA

Shedding

The mode of environmental or contact transmission of typhoid targeted by the intervention. Possible values are:

  • Dose (disease acquisition)

    Reduces the amount of contagion an individual is exposed to per exposure event, by a proportion.

  • Exposures (disease acquisition)

    Reduces the number of exposures to pathogen by a proportion.

  • Shedding (disease transmission)

    Reduces the amount of contagion shed if a vaccinated individual is infected.

{
    "Intervention_Config": {
        "Mode": "Exposures",
        "Effect": 1,
        "Use_Property_Targeting": 0,
        "Changing_Effect": {
            "class": "WaningEffectConstant",
            "Initial_Effect": 1,
            "Expire_At_Durability_Map_End": 1
        },
        "class": "TyphoidWASH"
    }
}

New_Property_Value

string

NA

NA

NA

An optional NodeProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Targeted_Individual_Properties

string

NA

NA

NA

Individual Property key-value pairs to be targeted (optional).

{
    "Intervention_Config": {
        "Mode": "Exposures",
        "Effect": 1,
        "Use_Property_Targeting": 1,
        "Changing_Effect": {
            "class": "WaningEffectMapLinear",
            "Initial_Effect": 1,
            "Expire_At_Durability_Map_End": 1,
            "Durability_Map": {
                "Times": [
                    0,
                    100,
                    200,
                    300,
                    400,
                    500
                ],
                "Values": [
                    0,
                    1,
                    1,
                    1,
                    0,
                    1
                ]
            }
        },
        "class": "TyphoidWASH",
        "Targeted_Individual_Properties": "Risk:Target_Demographic"
    }
}

Use_Property_Targeting

boolean

0

1

1

Set to 1 (true) – or omit – if you want to use the Targeted_Individual_Property parameter to limit the effect of this intervention to just certain individuals. Set to 0 to apply effect to everyone.

{
    "Event_Coordinator_Config": {
        "Intervention_Config": {
            "Mode": "Shedding",
            "Use_Property_Targeting": 0,
            "Effect": 1.0,
            "Changing_Effect": {
                "class": "WaningEffectConstant",
                "Initial_Effect": 1.0,
                "Expire_At_Durability_Map_End": 1
            },
            "class": "TyphoidWASH"
        },
        "class": "StandardInterventionDistributionEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 10,
    "class": "CampaignEvent"
}

New campaign parameters (Beta)

Note

These campaign classes and associated parameters are currently in beta release and have not yet been fully tested.

BroadcastCoordinatorEvent (generic)

The BroadcastCoordinatorEvent coordinator class broadcasts the event you specify. This can be used with the campaign class, SurveillanceEventCoordinator, that can monitor and listen for events received from BroadcastCoordinatorEvent and then perform an action based on the broadcasted event. You can also use this for the reporting of the broadcasted events by setting the configuraton parameters, Report_Node_Event_Recorder and Report_Surveillance_Event_Recorder, which listen to events to be recorded.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Broadcast_Event

string

NA

NA

“”

The name of the event to be broadcast. This event must be set in the Custom_Coordinator_Events configuration parameter. This cannot be assigned an empty string for the event.

{
    "class": "CampaignEvent",
    "Start_Day": 5,
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Event_Coordinator_Config": {
        "class": "BroadcastCoordinatorEvent",
        "Coordinator_Name": "Coordnator_1",
        "Cost_To_Consumer": 10,
        "Broadcast_Event": "Coordinator_Event_1"
    }
}

Coordinator_Name

string

NA

NA

NA

The unique identifying coordinator name, which is useful with the output report, ReportCoordinatorEventRecorder.csv.

{
    "class": "CampaignEvent",
    "Start_Day": 25,
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Event_Coordinator_Config": {
        "class": "BroadcastCoordinatorEvent",
        "Coordinator_Name": "Coordinator_3",
        "Cost_To_Consumer": 30,
        "Broadcast_Event": "Coordinator_Event_3"
    }
}

Cost_To_Consumer

float

0

3.40282e+38

0

The unit cost of broadcasting the event.

{
    "class": "CampaignEvent",
    "Start_Day": 15,
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Event_Coordinator_Config": {
        "class": "BroadcastCoordinatorEvent",
        "Coordinator_Name": "Coordnator_2",
        "Cost_To_Consumer": 20,
        "Broadcast_Event": "Coordinator_Event_2"
    }
}

BroadcastNodeEvent (generic)

The BroadcastNodeEvent coordinator class broadcasts node events. This can be used with the campaign class, SurveillanceEventCoordinator, that can monitor and listen for events received from BroadcastNodeEvent and then perform an action based on the broadcasted event. You can also use this for the reporting of the broadcasted events by setting the configuraton parameters, Report_Node_Event_Recorder and Report_Surveillance_Event_Recorder, which listen to events to be recorded.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Broadcast_Event

string

NA

NA

“”

The name of the node event to broadcast. This event must be set in the Custom_Node_Events configuration parameter.

{
    "class": "CampaignEvent",
    "Start_Day": 5,
    "Nodeset_Config": {
        "class": "NodeSetNodeList",
        "Node_List": [
            1
        ]
    },
    "Event_Coordinator_Config": {
        "class": "StandardInterventionDistributionEventCoordinator",
        "Intervention_Config": {
            "class": "BroadcastNodeEvent",
            "Cost_To_Consumer": 10,
            "Broadcast_Event": "Node_Event_1"
        }
    }
}

Cost_To_Consumer

float

0

999999

0

The unit cost of the intervention campaign that will be assigned to the specified nodes, as configured under Nodeset_Config.

{
    "class": "CampaignEvent",
    "Start_Day": 5,
    "Nodeset_Config": {
        "class": "NodeSetNodeList",
        "Node_List": [
            1
        ]
    },
    "Event_Coordinator_Config": {
        "class": "StandardInterventionDistributionEventCoordinator",
        "Intervention_Config": {
            "class": "BroadcastNodeEvent",
            "Cost_To_Consumer": 10,
            "Broadcast_Event": "Node_Event_1"
        }
    }
}

DelayEventCoordinator (generic)

The DelayEventCoordinator coordinator class insert delays into coordinator event chains. This campaign event is typically used with BroadcastCoordinatorEvent to broadcast events after the delays.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Coordinator_Name

string

NA

NA

DelayEventCoordinator

The unique identifying coordinator name, which is useful with the output report, ReportCoordinatorEventRecorder.csv.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "DelayEventCoordinator_10",
        "Delay_Complete_Event": "Completion_Delayed_Coordinator_Event_1",
        "Delay_Period_Distribution": "FIXED_DURATION",
        "Delay_Period_Fixed": 25,
        "Duration": 100,
        "Start_Trigger_Condition_List": [
            "Coordinator_Event_1"
        ],
        "Stop_Trigger_Condition_List": [],
        "class": "DelayEventCoordinator"
    },
    "Event_Name": "Delay",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent",
    "comment": "Delay"
}

Delay_Complete_Event

string

NA

NA

NA

The delay completion event to be included in the ReportCoordinatorEventRecorder.csv output report, upon completion of the delay period.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "DelayEventCoordinator_10",
        "Delay_Complete_Event": "Completion_Delayed_Coordinator_Event_1",
        "Delay_Distribution": "GAUSSIAN_DURATION",
        "Delay_Period_Mean": 25,
        "Delay_Period_Std_Dev": 5,
        "Duration": 100,
        "Start_Trigger_Condition_List": [
            "Coordinator_Event_1"
        ],
        "Stop_Trigger_Condition_List": [],
        "class": "DelayEventCoordinator"
    },
    "Event_Name": "Delay",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent",
    "comment": "Delay"
}

Delay_Period_Constant

float

0

3.40282E+38

6

The delay period to use for all interventions, in days, when Delay_Period_Distribution is set to CONSTANT_DISTRIBUTION.

{
    "Delay_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Delay_Period_Constant": 8
}

Delay_Period_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the delay period for distributing interventions. Each assigned value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Delay_Period_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Delay_Period_Max and Delay_Period_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Values are resampled to ensure >= 0. Set Delay_Period_Gaussian_Mean and Delay_Period_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Delay_Period_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Delay_Period_Kappa and Delay_Period_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and standard deviation of the natural log. Set Delay_Period_Log_Normal_Mu and Delay_Period_Log_Normal_Sigma.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Delay_Period_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Delay_Period_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Delay_Period_Mean_1, Delay_Period_Mean_2, and Delay_Period_Proportion_1. This distribution does not use the parameters set for EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Delay_Period_Gaussian_Mean": 8,
    "Delay_Period_Gaussian_Std_Dev": 1.5
}

Delay_Period_Exponential

float

0

3.40282E+38

6

The mean of the delay period, in days, when Delay_Period_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Exponential": 4.25
}

Delay_Period_Gaussian_Mean

float

0

3.40282E+38

6

The mean of the delay period, in days, when Delay_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Delay_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Delay_Period_Gaussian_Mean": 8,
    "Delay_Period_Gaussian_Std_Dev": 1.5
}

Delay_Period_Gaussian_Std_Dev

float

1.17549E-38

3.40282E+38

1

The standard deviation of the delay period, in days, when Delay_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Delay_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Delay_Period_Gaussian_Mean": 8,
    "Delay_Period_Gaussian_Std_Dev": 1.5
}

Delay_Period_Kappa

float

1.17549E-38

3.40282E+38

1

The shape value for the delay period, in days, when Delay_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Delay_Period_Kappa": 0.9,
    "Delay_Period_Lambda": 1.5
}

Delay_Period_Lambda

float

1.17549E-38

3.40282E+38

1

The scale value for the delay period, in days, when Delay_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Delay_Period_Kappa": 0.9,
    "Delay_Period_Lambda": 1.5
}

Delay_Period_Log_Normal_Mu

float

-3.40282e+38

3.40282E+38

6

The mean of the natural log of the delay period, in days, when Delay_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Delay_Period_Log_Normal_Mu": 9,
    "Delay_Period_Log_Normal_Sigma": 2
}

Delay_Period_Log_Normal_Sigma

float

-3.40282e+38

3.40282E+38

1

The standard deviation of the natural log of the delay period, in days, when Delay_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Delay_Period_Log_Normal_Mu": 9,
    "Delay_Period_Log_Normal_Sigma": 2
}

Delay_Period_Max

float

0

3.40282E+38

1

The maximum delay period, in days, when Delay_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Delay_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Delay_Period_Min": 2,
    "Delay_Period_Max": 7
}

Delay_Period_Mean_1

float

1.17549E-38

3.40282E+38

1

The mean of the first exponential distribution, in days, when Delay_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Mean_1": 4,
    "Delay_Period_Mean_2": 12,
    "Delay_Period_Proportion_1": 0.2
}

Delay_Period_Mean_2

float

1.17549E-38

3.40282E+38

1

The mean of the second exponential distribution, in days, when Delay_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Mean_1": 4,
    "Delay_Period_Mean_2": 12,
    "Delay_Period_Proportion_1": 0.2
}

Delay_Period_Min

float

0

3.40282E+38

0

The minimum delay period, in days, when Delay_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Delay_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Delay_Period_Min": 2,
    "Delay_Period_Max": 7
}

Delay_Period_Peak_2_Value

float

0

3.40282E+38

1

The delay period value, in days, to assign to the remaining interventions when Delay_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Delay_Period_Proportion_0": 0.25,
    "Delay_Period_Peak_2_Value": 5
}

Delay_Period_Poisson_Mean

float

0

3.40282E+38

6

The mean of the delay period, in days, when Delay_Period_Distribution is set to POISSON_DISTRIBUTION.

{
    "Delay_Period_Distribution": "POISSON_DISTRIBUTION",
    "Delay_Period_Poisson_Mean": 5
}

Delay_Period_Proportion_0

float

0

1

1

The proportion of interventions to assign a value of zero delay when Delay_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Delay_Period_Proportion_0": 0.25,
    "Delay_Period_Peak_2_Value": 5
}

Delay_Period_Proportion_1

float

0

1

1

The proportion of interventions in the first exponential distribution when Delay_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Delay_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Delay_Period_Mean_1": 4,
    "Delay_Period_Mean_2": 12,
    "Delay_Period_Proportion_1": 0.2
}

Duration

float

-1

3.40282e+38

-1

The number of days from when the delay event coordinator was created by the campaign event. Once the number of days has passed, the delay event coordinator will unregister for events and expire. The default value of ‘-1’ = never expire.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "DelayEventCoordinator_10",
        "Delay_Complete_Event": "Completion_Delayed_Coordinator_Event_1",
        "Delay_Period_Distribution": "FIXED_DURATION",
        "Delay_Period_Fixed": 25,
        "Duration": 100,
        "Start_Trigger_Condition_List": [
            "Coordinator_Event_1"
        ],
        "Stop_Trigger_Condition_List": [],
        "class": "DelayEventCoordinator"
    },
    "Event_Name": "Delay",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent"
}

Start_Trigger_Condition_List

array of strings

NA

NA

NA

The start trigger event condition list contains events defined in the Custom_Coordinator_Events config parameter that will trigger to start a new delay. If the delay event coordinator has already been triggered and is currently waiting for the duration of a delay, it will then ignore a new delay event. The list cannot be empty.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "DelayEventCoordinator_10",
        "Delay_Complete_Event": "Completion_Delayed_Coordinator_Event_1",
        "Delay_Period_Distribution": "FIXED_DURATION",
        "Delay_Period_Fixed": 25,
        "Duration": 100,
        "Start_Trigger_Condition_List": [
            "Coordinator_Event_1"
        ],
        "Stop_Trigger_Condition_List": [],
        "class": "DelayEventCoordinator"
    },
    "Event_Name": "Delay",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent",
    "comment": "Delay"
}

Stop_Trigger_Condition_List

array of strings

NA

NA

NA

The stop trigger event condition list contains events defined in the Custom_Coordinator_Events config parameter that will trigger to stop a delay period, but does not stop the delay event coordinator. The event is not broadcast.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "DelayEventCoordinator_10",
        "Delay_Complete_Event": "Completion_Delayed_Coordinator_Event_1",
        "Delay_Period_Distribution": "FIXED_DURATION",
        "Delay_Period_Fixed": 25,
        "Duration": 100,
        "Start_Trigger_Condition_List": [
            "Coordinator_Event_1"
        ],
        "Stop_Trigger_Condition_List": [],
        "class": "DelayEventCoordinator"
    },
    "Event_Name": "Delay",
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "Target_Demographic": "Everyone",
    "class": "CampaignEvent",
    "comment": "Delay"
}

SurveillanceEventCoordinator (generic)

The SurveillanceEventCoordinator coordinator class listens for and detects events happening and then responds with broadcasted events when a threshold has been met. This campaign event is typically used with other classes, such as BroadcastCoordinatorEvent, TriggeredEventCoordinator, and DelayEventCoordinator.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Action_List

array of JSON objects

NA

NA

NA

A list of possible actions to take if a particular threshold is met. An action is taken when the specified threshold value is less than the number of incidence counted. If there are multiple actions listed then the action with the highest threshold value, that is also less than the number of incidence counted, is selected. The list cannot be empty.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Coordinator_Name

string

NA

NA

TriggeredEventCoordinator

The unique identifying coordinator name, which is useful with the output report, ReportSurveillanceEventRecorder.csv.

{
    "class": "CampaignEvent",
    "Start_Day": 1,
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Event_Coordinator_Config": {
        "class": "SurveillanceEventCoordinator",
        "Coordinator_Name": "ACF_Counter",
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Type": "PERIODIC",
            "Counter_Period": 14,
            "Counter_Event_Type": "NODE",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ],
            "Target_Demographic": "Everyone",
            "Demographic_Coverage": 1
        },
        "Responder": {
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT",
            "Action_List": [
                {
                    "Threshold": 5,
                    "Event_Type": "COORDINATOR",
                    "Event_To_Broadcast": "Ind_Start_SIA_2"
                },
                {
                    "Threshold": 2,
                    "Event_Type": "COORDINATOR",
                    "Event_To_Broadcast": "Ind_Start_SIA_4"
                }
            ]
        }
    }
}

Counter_Event_Type

enum

NA

NA

INDIVIDUAL

Type of events that can be included in Trigger_Condition_List. Possible values are:

  • COORDINATOR

  • INDIVIDUAL

  • NODE

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Counter_Period

float

1

10000

1

When Counter_Type is set to PERIODIC, this is the counter period (in days).

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Counter_Type

enum

NA

NA

PERIODIC

Counter type used for surveillance of events. The counter is triggered by events in Start_Trigger_Condition_List and the counter stops when it receives an event in Stop_Trigger_Condition_List or the listening duration expires. Possible values are:

PERIODIC

Once triggered, events are counted during the period (in days) as set in Counter_Period. At the end of the period, the counter will notify Responder with the data accumulated and then start listening again, continuing forever until it is stopped or the duration expires. For example, if the listening duration is 45 days, Counter_Period is 30, and the counter is triggered on day 20, it will never complete the counter period and trigger the responder.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Demographic_Coverage

float

0

1

1

The fraction of individuals in the target demographic that are counted.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Duration

float

-1

3.40282e+38

-1

The number of days from when the surveillance event coordinator was created by the campaign event. Once the number of days has passed, the delay event coordinator will unregister for events and expire. The default value of ‘-1’ = never expire.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Event_Type

enum

NA

NA

INDIVIDUAL

The type of event to be broadcast. Possible values are:

  • COORDINATOR

  • INDIVIDUAL

  • NODE

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Incidence_Counter

array of JSON objects

NA

NA

NA

List of JSON objects for specifying the conditions and parameters that must be met for an incidence to be counted. Some of the values are specified in the following parameters: Counter_Type, Counter_Period, Counter_Event_Type, Trigger_Condition_List, Node_Property_Restrictions, Property_Restrictions_Within_Node.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Node_Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the NodeProperty key:value pairs, as defined in the demographics file, that nodes must have to be targeted by the intervention. See NodeProperties and IndividualProperties parameters for more information.

You can specify AND and OR combinations of key:value pairs with this parameter.

The following example restricts the intervention to nodes that are urban and medium risk or rural and low risk.

{
    "Node_Property_Restrictions": [
        {
            "Place": "URBAN",
            "Risk": "MED"
        },
        {
            "Place": "RURAL",
            "Risk": "LOW"
        }
    ]
}

Percentage_Events_To_Count

array of strings

NA

NA

NA

When Threshold_Type equals PERCENTAGE_EVENTS then Percentage_Events_To_Count lists the events that will be counted for the denominator which will then be used with the specified event for Trigger_Condition_List counted for the numerator.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": -1,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 30,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Node_Property_Restrictions": [],
            "Property_Restrictions_Within_Node": [],
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Positive_Event_Node"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 0.5
                }
            ],
            "Percentage_Events_To_Count": [
                "Negative_Event_Node",
                "Positive_Event_Node"
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "PERCENTAGE_EVENTS"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the IndividualProperty key:value pairs, as defined in the demographics file, that individuals must have to be targeted by this intervention. See NodeProperties and IndividualProperties parameters for more information.

To specify AND and OR combinations of key:value pairs, use Property_Restrictions_Within_Node. You cannot use both of these parameters in the same event coordinator.

{
    "Property_Restrictions": [
        "Risk:HIGH"
    ]
}

Property_Restrictions_Within_Node

array of JSON objects

NA

NA

NA

A list of the IndividualProperty key:value pairs, as defined in the demographics file, that individuals must have to be targeted by this intervention. See NodeProperties and IndividualProperties parameters for more information.

This parameter allows you to specify AND and OR combinations of key:value pairs. You may specify individual property restrictions using either this parameter or Property_Restrictions, but not both.

The following example restricts the intervention to individuals who are urban and high risk or urban and medium risk.

{
    "Property_Restrictions_Within_Node": [
        {
            "Geographic": "URBAN",
            "Risk": "HIGH"
        },
        {
            "Geographic": "URBAN",
            "Risk": "MEDIUM"
        }
    ]
}

Responded_Event

string

NA

NA

“”

A coordinator event, defined in Custom_Coordinator_Events, that is broadcast if Responder responded. More specifically, at the completion of a counting period, if an action is selected, the action events are broadcast and then the Responded_Event is also broadcast. This allows other event coordinators to react to the action events being broadcast.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Responder

array of JSON objects

NA

NA

NA

List of JSON objects for specifying the threshold type, values, and the actions to take when the specified conditions and parameters have been met, as configured in Incidence_Counter. Some of the values are specified in the following parameters:

  • Action_List

  • Event_To_Broadcast

  • Threshold_Type

  • Threshold

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Start_Trigger_Condition_List

array of strings

NA

NA

NA

The trigger event list, as specified in the Custom_Coordinator_Events config parameter, that will start Incidence_Counter counting events. The surveillance event coordinator will keep counting and responding until it gets a stop event, as defined in Stop_Trigger_Condition_List, or the duration of the surveillance event coordinator has expired, as defined in Duration. The list cannot be empty.

{
    "class": "CampaignEvent",
    "Start_Day": 1,
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Event_Coordinator_Config": {
        "class": "SurveillanceEventCoordinator",
        "Coordinator_Name": "ACF_Counter",
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Type": "PERIODIC",
            "Counter_Period": 14,
            "Counter_Event_Type": "NODE",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ],
            "Target_Demographic": "Everyone",
            "Demographic_Coverage": 1
        },
        "Responder": {
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT",
            "Action_List": [
                {
                    "Threshold": 5,
                    "Event_Type": "COORDINATOR",
                    "Event_To_Broadcast": "Ind_Start_SIA_2"
                },
                {
                    "Threshold": 2,
                    "Event_Type": "COORDINATOR",
                    "Event_To_Broadcast": "Ind_Start_SIA_4"
                }
            ]
        }
    }
}

Stop_Trigger_Condition_List

array of strings

NA

NA

NA

The broadcast event list, as specified in the Custom_Coordinator_Events config parameter, that will stop Incidence_Counter counting events. The coordinator can start counting again if it receives a start trigger event. The list can be empty.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Target_Age_Max

float

0

9.3228e+35

9.3228e+35

The upper end of ages targeted for an intervention, in years. Used when Target_Demographic is set to ExplicitAgeRanges or ExplicitAgeRangesAndGender.

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Age_Min

float

0

3.40282e+38

0

The lower end of ages targeted for an intervention, in years. Used when Target_Demographic is set to ExplicitAgeRanges or ExplicitAgeRangesAndGender.

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Demographic

enum

NA

NA

Everyone

The target demographic group. Possible values are:

  • Everyone

  • ExplicitAgeRanges

  • ExplicitAgeRangesAndGender

  • ExplicitGender

  • ExplicitDiseaseState

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Gender

enum

NA

NA

All

Specifies the gender restriction for the intervention. Possible values are:

  • Male

  • Female

  • All

{
    "Target_Gender": "Female"
}

Target_Residents_Only

boolean

0

1

0

When set to true (1), only individuals that currently reside in their ‘home’ node will be counted.

{
    "Target_Residents_Only": 1
}

Threshold

float

0

3.40E+3

0

The COUNT or PERCENTAGE, as configured with Threshold_Type, threshold value that must be met before and action from Action_List will be considered.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Threshold_Type

enum

NA

NA

COUNT

Threshold type to indicate how Responder handles the count of events from Incidence_Counter and the thresholds in Action_List. Possible values are:

COUNT

A raw count of events. Also, with COUNT, setting the x_Base_Population configuration parameter can affect the number count by changing the population but it could be very indirect.

PERCENTAGE

Counts the number of individuals that meet the restrictions and then to divide the total number of events by this number. Note that it is possible for an individual to emit an event that might not be counted in the denominator if their demographic restriction attributes changed between the time of the emitted event and the time the denominator was counted.

PERCENTAGE_EVENTS

Percentage_Events_To_Count lists the events that will be counted for the denominator, which will then be used with the specified event for Trigger_Condition_List to be counted for the numerator.

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

Trigger_Condition_List

array of strings

NA

NA

NA

The list of events to count.The list cannot be empty. The type of events contained in the list is determined by Counter_Event_Type. Depending upon the type, the events must be defined in one of the following configuration parameters:

  • Custom_Coordinator_Events

  • Custom_Individual_Events

  • Custom_Node_Events

{
    "Event_Coordinator_Config": {
        "Coordinator_Name": "ACF_Counter",
        "Duration": 30,
        "Incidence_Counter": {
            "Counter_Event_Type": "NODE",
            "Counter_Period": 14,
            "Counter_Type": "PERIODIC",
            "Demographic_Coverage": 1,
            "Target_Demographic": "Everyone",
            "Trigger_Condition_List": [
                "Node_Event_1",
                "Node_Event_2"
            ]
        },
        "Responder": {
            "Action_List": [
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_2",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 5
                },
                {
                    "Event_To_Broadcast": "Ind_Start_SIA_4",
                    "Event_Type": "COORDINATOR",
                    "Threshold": 2
                }
            ],
            "Responded_Event": "Respond_To_Surveillance",
            "Threshold_Type": "COUNT"
        },
        "Start_Trigger_Condition_List": [
            "Start_ACF"
        ],
        "Stop_Trigger_Condition_List": [
            "Start_SIA_2",
            "Start_SIA_4"
        ],
        "class": "SurveillanceEventCoordinator"
    },
    "Nodeset_Config": {
        "class": "NodeSetAll"
    },
    "Start_Day": 1,
    "class": "CampaignEvent"
}

TriggeredEventCoordinator (generic)

The TriggeredEventCoordinator coordinator class listens for trigger events, begins a series of repetitions of intervention distributions, and then broadcasts an event upon completion. This campaign event is typically used with other classes that broadcast and distribute events, such as BroadcastCoordinatorEvent, DelayEventCoordinator, and SurveillanceEventCoordinator.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Completion_Event

array of strings

NA

NA

NA

The completion event list that will be broadcast every time the triggered event coordinator completes a set of repetitions. The events contained in the list are defined in Custom_Coordinator_Events in the simulation configuration file.

{
    "Event_Coordinator_Config": {
        "class": "TriggeredEventCoordinator",
        "Coordinator_Name": "1n2_Vaccinator",
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Number_Repetitions": 1,
        "Timesteps_Between_Repetitions": 1,
        "Duration": -1,
        "Target_Demographic": "Everyone",
        "Demographic_Coverage": 0.05,
        "Intervention_Config": {
            "class": "SimpleVaccine",
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "class": "WaningEffectBox",
                "Initial_Effect": 0.59,
                "Box_Duration": 730
            }
        },
        "Completion_Event": "Done_Vaccinating_1n2"
    }
}

Coordinator_Name

string

NA

NA

TriggeredEventCoordinator

The unique identifying coordinator name used to identify the different coordinators in reports.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_1n2",
        "Coordinator_Name": "1n2_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 1,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 1,
        "class": "TriggeredEventCoordinator"
    }
}

Duration

float

-1

3.40282e+38

-1

The time period (in days) that the triggered event coordinator is active before it expires. Once the specified duration has been reached the coordinator will expire whether or not it is in the middle of a set of repetitions. The value of -1 (default) equals to never expire.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_1n2",
        "Coordinator_Name": "1n2_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 1,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 1,
        "class": "TriggeredEventCoordinator"
    }
}

Intervention_Config

JSON object

NA

NA

NA

The nested JSON of the intervention to be distributed by this event coordinator.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_1n2",
        "Coordinator_Name": "1n2_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 1,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 1,
        "class": "TriggeredEventCoordinator"
    }
}

Node_Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the NodeProperty key:value pairs, as defined in the demographics file, that nodes must have to be targeted by the intervention. See NodeProperties and IndividualProperties parameters for more information. You can specify AND and OR combinations of key:value pairs with this parameter.

The following configuration restrictions the intervention to nodes that are urban and high risk or have had the first round treatment and are low risk.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_3n4",
        "Coordinator_Name": "3n4_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 2,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Node_Property_Restrictions": [
            {
                "Place": "Urban",
                "Risk": "High"
            },
            {
                "InterventionStatus": "FirstRound",
                "Risk": "Low"
            }
        ],
        "Number_Repetitions": 3,
        "Property_Restrictions_Within_Node": [],
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_3n4"
        ],
        "Stop_Trigger_Condition_List": [
            "Stop_Vaccinating_3n4"
        ],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 10,
        "class": "TriggeredEventCoordinator"
    }
}

Number_Repetitions

integer

-1

1000

1

The number of times an intervention is given, used with Timesteps_Between_Repetitions.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_3n4",
        "Coordinator_Name": "3n4_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 2,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 3,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_3n4"
        ],
        "Stop_Trigger_Condition_List": [
            "Stop_Vaccinating_3n4"
        ],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 10,
        "class": "TriggeredEventCoordinator"
    }
}

Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the IndividualProperty key:value pairs, as defined in the demographics file, that individuals must have to be targeted by this intervention. See NodeProperties and IndividualProperties parameters for more information.

To specify AND and OR combinations of key:value pairs, use Property_Restrictions_Within_Node. You cannot use both of these parameters in the same event coordinator.

{
    "Property_Restrictions": [
        "Risk:HIGH"
    ]
}

Property_Restrictions_Within_Node

array of JSON objects

NA

NA

NA

A list of the IndividualProperty key:value pairs, as defined in the demographics file, that individuals must have to be targeted by this intervention. See NodeProperties and IndividualProperties parameters for more information.

This parameter allows you to specify AND and OR combinations of key:value pairs. You may specify individual property restrictions using either this parameter or Property_Restrictions, but not both.

The following example restricts the intervention to individuals who are urban and high risk or urban and medium risk.

{
    "Property_Restrictions_Within_Node": [
        {
            "Geographic": "URBAN",
            "Risk": "HIGH"
        },
        {
            "Geographic": "URBAN",
            "Risk": "MEDIUM"
        }
    ]
}

Start_Trigger_Condition_List

array of strings

NA

NA

NA

The trigger condition event list that when heard will start a new set of repetitions for the triggered event coordinator. The list cannot be empty. The events contained in the list are defined in Custom_Coordinator_Events in the simulation configuration file.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_1n2",
        "Coordinator_Name": "1n2_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 1,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 1,
        "class": "TriggeredEventCoordinator"
    }
}

Stop_Trigger_Condition_List

array of strings

NA

NA

NA

The trigger condition event list that when heard will stop any repetitions for the triggered event coordinator until a start trigger condition event list is received. The list can be empty. The events contained in the list are defined in Custom_Coordinator_Events in the simulation configuration file.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_1n2",
        "Coordinator_Name": "1n2_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 1,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 1,
        "class": "TriggeredEventCoordinator"
    }
}

Target_Age_Max

float

0

9.3228e+35

9.3228e+35

The upper end of ages targeted for an intervention, in years. Used when Target_Demographic is set to ExplicitAgeRanges or ExplicitAgeRangesAndGender.

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Age_Min

float

0

3.40E+38

0

The lower end of ages targeted for an intervention, in years. Used when Target_Demographic is set to ExplicitAgeRanges or ExplicitAgeRangesAndGender.

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Demographic

enum

NA

NA

Everyone

The target demographic group. Possible values are:

  • Everyone

  • ExplicitAgeRanges

  • ExplicitAgeRangesAndGender

  • ExplicitGender

  • ExplicitDiseaseState

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Gender

enum

NA

NA

All

Specifies the gender restriction for the intervention. Possible values are:

  • Male

  • Female

  • All

{
    "Target_Gender": "Female"
}

Target_Residents_Only

boolean

0

1

0

When set to true (1), the intervention is only distributed to individuals that began the simulation in the node (i.e. those that claim the node as their residence).

{
    "Target_Residents_Only": 1
}

Timesteps_Between_Repetitions

integer

-1

10000

-1

The repetition interval.

{
    "Event_Coordinator_Config": {
        "Completion_Event": "Done_Vaccinating_1n2",
        "Coordinator_Name": "1n2_Vaccinator",
        "Demographic_Coverage": 0.05,
        "Duration": -1,
        "Intervention_Config": {
            "Cost_To_Consumer": 1,
            "Vaccine_Take": 1,
            "Vaccine_Type": "AcquisitionBlocking",
            "Waning_Config": {
                "Box_Duration": 730,
                "Initial_Effect": 0.59,
                "class": "WaningEffectBox"
            },
            "class": "SimpleVaccine"
        },
        "Number_Repetitions": 1,
        "Start_Trigger_Condition_List": [
            "Start_Vaccinating_1n2"
        ],
        "Stop_Trigger_Condition_List": [],
        "Target_Demographic": "Everyone",
        "Timesteps_Between_Repetitions": 1,
        "class": "TriggeredEventCoordinator"
    }
}

Deprecated configuration parameters

Base_Population_Scale_Factor has been renamed to x_Base_Population, which is grouped together with the other scale factor parameters beginning with x_. The functional remains the same. Enable_Demographics_Gender has been deprecated. Animal_Reservoir_Type has been replaced with Enable_Infectivity_Reservoir.

The following configuration parameters have been deprecated as a result of the refactoring of distribution parameters for better consistency across the configuration and campaign files.

Parameter

Incubation_Period_Log_Mean

Incubation_Period_Log_Width

Infectious_Period_Mean

Infectious_Period_Std_Dev

Deprecated campaign parameters

The following campaign parameters have been deprecated as a result of the refactoring of distribution parameters for better consistency across the configuration and campaign files.

Parameter

BitingRisk Constant

BitingRisk Risk_Distribution_Type

BitingRisk Exponential_Mean

BitingRisk Gaussian_Mean

BitingRisk Gaussian_Std_Dev

BitingRisk Uniform_Max

BitingRisk Uniform_Min

CommunityHealthWorkerEventCoordinator Initial_Amount

CommunityHealthWorkerEventCoordinator Initial_Amount_Distribution_Type

CommunityHealthWorkerEventCoordinator Initial_Amount_Mean

CommunityHealthWorkerEventCoordinator Initial_Amount_Std_Dev

DelayedIntervention Delay_Distribution

DelayedIntervention Delay_Period

DelayedIntervention Delay_Period_Mean

DelayedIntervention Delay_Period_Scale

DelayedIntervention Delay_Period_Shape

DelayedIntervention Delay_Period_Std_Dev

DelayEventCoordinator Delay_Distribution

DelayEventCoordinator Delay_Period

DelayEventCoordinator Delay_Period_Mean

DelayEventCoordinator Delay_Period_StdDev

HIVDelayedIntervention Delay_Distribution

HIVDelayedIntervention Delay_Period

HIVDelayedIntervention Delay_Period_Mean

HIVDelayedIntervention Delay_Period_Scale

HIVDelayedIntervention Delay_Period_Shape

HIVDelayedIntervention Delay_Period_Std_Dev

HIVMuxer Delay_Distribution

HIVMuxer Delay_Period

HIVMuxer Delay_Period_Mean

HIVMuxer Delay_Period_Scale

HIVMuxer Delay_Period_Shape

HIVMuxer Delay_Period_Std_Dev

MigrateFamily Duration_At_Node_Distribution_Type

MigrateFamily Duration_At_Node_Exponential_Period

MigrateFamily Duration_At_Node_Fixed

MigrateFamily Duration_At_Node_Gausian_Mean

MigrateFamily Duration_At_Node_Gausian_StdDev

MigrateFamily Duration_At_Node_Uniform_Max

MigrateFamily Duration_At_Node_Uniform_Min

MigrateFamily Duration_Before_Leaving_Distribution_Type

MigrateFamily Duration_Before_Leaving_Exponential_Period

MigrateFamily Duration_Before_Leaving_Fixed

MigrateFamily Duration_Before_Leaving_Gausian_Mean

MigrateFamily Duration_Before_Leaving_Gausian_StdDev

MigrateFamily Duration_Before_Leaving_Uniform_Max

MigrateFamily Duration_Before_Leaving_Uniform_Min

MigrateIndividuals Duration_At_Node_Distribution_Type

MigrateIndividuals Duration_At_Node_Exponential_Period

MigrateIndividuals Duration_At_Node_Fixed

MigrateIndividuals Duration_At_Node_Gausian_Mean

MigrateIndividuals Duration_At_Node_Gausian_StdDev

MigrateIndividuals Duration_Before_Leaving_Distribution_Type

MigrateIndividuals Duration_Before_Leaving_Exponential_Period

MigrateIndividuals Duration_Before_Leaving_Fixed

MigrateIndividuals Duration_Before_Leaving_Gausian_Mean

MigrateIndividuals Duration_Before_Leaving_Gausian_StdDev

MigrateIndividuals Duration_Before_Leaving_Uniform_Max

MigrateIndividuals Duration_Before_Leaving_Uniform_Min

MigrateIndividuals Duration_At_Node_Uniform_Max

MigrateIndividuals Duration_At_Node_Uniform_Min

UsageDependentBednet Expiration_Distribution_Type

UsageDependentBednet Expiration_Percentage_Period_1

UsageDependentBednet Expiration_Period

UsageDependentBednet Expiration_Period_1

UsageDependentBednet Expiration_Period_2

UsageDependentBednet Expiration_Period_Mean

UsageDependentBednet Expiration_Period_Std_Dev

EMOD v2.18

The EMOD v2.18 release includes many new features for all supported simulation types. In particular, the TB_SIM simulation type has been deprecated and replaced with TBHIV_SIM, which does not include HIV transmission but adds the ability to model the effect of HIV coinfection on the spread of TB.

New configuration parameters

For the malaria simulation type, the following new configuration parameters are available:

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Genome_Markers

array of strings

NA

NA

NA

A list of the names (strings) of genome marker(s) that represent the genetic components in a strain of an infection.

{
    "Genome_Markers": [
        "D6",
        "W2"
    ]
}

Resistance

JSON object

NA

NA

NA

Specifies the drug resistance multiplier.

{
    "parameters": {
        "Genome_Markers": [
            "A",
            "B"
        ],
        "Malaria_Drug_Params": {
            "Artemether_Lumefantrine": {
                "Bodyweight_Exponent": 0,
                "Drug_Cmax": 1000,
                "Drug_Decay_T1": 1,
                "Drug_Decay_T2": 1,
                "Drug_Dose_Interval": 1,
                "Drug_Fulltreatment_Doses": 3,
                "Drug_Gametocyte02_Killrate": 2.3,
                "Drug_Gametocyte34_Killrate": 2.3,
                "Drug_GametocyteM_Killrate": 0,
                "Drug_Hepatocyte_Killrate": 0,
                "Drug_PKPD_C50": 100,
                "Drug_Vd": 10,
                "Max_Drug_IRBC_Kill": 3.45
                "Resistance": {
                    "A": {
                        "Max_IRBC_Kill_Modifier": 0.05,
                        "PKPD_C50_Modifier": 1.0
                    },
                    "B": {
                        "Max_IRBC_Kill_Modifier": 0.25,
                        "PKPD_C50_Modifier": 1.0
                    }
                }
            }
        }
    }
}

To view all available configuration parameters, see Configuration parameters.

New campaign parameters

The following campaign classes are new for the Generic model and can be used in all other models:

IncidenceEventCoordinator (generic)

The IncidenceEventCoordinator coordinator class distributes interventions based on the number of events counted over a period of time.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Action_List

array of JSON objects

NA

NA

NA

List (array) of JSON objects, including the values specified in the following parameters: Threshold, Event_To_Broadcast.

{
    "Threshold_Type": "COUNT",
    "Action_List": [
        {
            "Threshold": 20,
            "Event_To_Broadcast": "Action_Event_1"
        },
        {
            "Threshold": 30,
            "Event_To_Broadcast": "Action_Event_2"
        }
    ]
}

Count_Events_For_Num_Timesteps

integer

1

2.15E+00

1

If set to true (1), then the waning effect values, as specified in the Effect_List list of objects for the WaningEffectCombo classes, are added together. If set to false (0), the waning effect values are multiplied. The resulting waning effect value cannot be greater than 1.

{
    "Incidence_Counter": {
        "Count_Events_For_Num_Timesteps": 5,
        "Trigger_Condition_List": [
            "PropertyChange"
        ],
        "Node_Property_Restrictions": [
            {
                "Risk": "HIGH"
            }
        ],
        "Target_Demographic": "Everyone",
        "Demographic_Coverage": 0.6,
        "Property_Restrictions_Within_Node": [
            {
                "Accessibility": "YES"
            }
        ]
    }
}

Event_To_Broadcast

string

NA

NA

NA

The action event to occur when the specified trigger value in the Threshold parameter is met. At least one action must be defined for Event_To_Broadcast. The events contained in the list can be built-in events (see Event list for possible events).

{
    "Threshold_Type": "COUNT",
    "Action_List": [
        {
            "Threshold": 20,
            "Event_To_Broadcast": "Action_Event_1"
        },
        {
            "Threshold": 30,
            "Event_To_Broadcast": "Action_Event_2"
        }
    ]
}

Incidence_Counter

array of JSON objects

NA

NA

NA

List of JSON objects for specifying the conditions and parameters that must be met for an incidence to be counted. Some of the values are specified in the following parameters: Count_Events_For_Num_Timesteps, Trigger_Condition_List, Node_Property_Restrictions.

{
    "Incidence_Counter": {
        "Count_Events_For_Num_Timesteps": 5,
        "Trigger_Condition_List": [
            "PropertyChange"
        ],
        "Node_Property_Restrictions": [
            {
                "Risk": "HIGH"
            }
        ],
        "Target_Demographic": "Everyone",
        "Demographic_Coverage": 0.6,
        "Property_Restrictions_Within_Node": [
            {
                "Accessibility": "YES"
            }
        ]
    }
}

Node_Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the NodeProperty key:value pairs, as defined in the demographics file, that nodes must have to be targeted by the intervention. See NodeProperties and IndividualProperties parameters for more information. You can specify AND and OR combinations of key:value pairs with this parameter.

The following example restricts the intervention to nodes that are urban and medium risk or rural and low risk.

{
    "Node_Property_Restrictions": [
        {
            "Place": "URBAN",
            "Risk": "MED"
        },
        {
            "Place": "RURAL",
            "Risk": "LOW"
        }
    ]
}

Number_Repetitions

integer

-1

1000

1

The number of times an intervention is given, used with Timesteps_Between_Repetitions.

{
    "class": "IncidenceEventCoordinator",
    "Number_Repetitions": 3
}

Responder

array of JSON objects

NA

NA

NA

List of JSON objects for specifying the threshold type, values, and the actions to take when the specified conditions and parameters have been met, as configured in the Incidence_Counter parameter. Some of the values are specified in the following parameters:

  • Threshold_Type

  • Action_List

  • Threshold

  • Event_To_Broadcast

{
    "Responder": {
        "Threshold_Type": "COUNT",
        "Action_List": [
            {
                "Threshold": 5,
                "Event_To_Broadcast": "Action_Event_1"
            },
            {
                "Threshold": 10,
                "Event_To_Broadcast": "Action_Event_2"
            }
        ]
    }
}

Threshold

float

0

3.40E+03

0

The threshold value that triggers the specified action for the Event_To_Broadcast parameter. When you use the Threshold parameter you must also use the Event_To_Broadcast parameter.

{
    "Threshold_Type": "COUNT",
    "Action_List": [
        {
            "Threshold": 20,
            "Event_To_Broadcast": "Action_Event_1"
        },
        {
            "Threshold": 30,
            "Event_To_Broadcast": "Action_Event_2"
        }
    ]
}

Threshold_Type

enum

NA

NA

COUNT

Threshold type. Possible values are:

  • COUNT

  • PERCENTAGE.

{
    "Threshold_Type": "COUNT",
    "Action_List": [
        {
            "Threshold": 20,
            "Event_To_Broadcast": "Action_Event_1"
        },
        {
            "Threshold": 30,
            "Event_To_Broadcast": "Action_Event_2"
        }
    ]
}

Timesteps_Between_Repetitions

integer

-1

1000

-1

The repetition interval.

{
    "class": "IncidenceEventCoordinator",
    "Number_Repetitions": 3,
    "Timesteps_Between_Repetitions": 6
}

Trigger_Condition_List

array of strings

NA

NA

NA

A list of events that will trigger an intervention.

{
    "Trigger_Condition_List": [
        "NewClinicalCase",
        "NewSevereCase"
    ]
}

MultiNodeInterventionDistributor (generic)

The MultiNodeInterventionDistributor intervention class distributes multiple node-level interventions when the distributor only allows specifying one intervention.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Disqualifying_Properties

array of strings

NA

NA

[]

A list of NodeProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "MultiNodeInterventionDistributor",
        "Intervention_Name": "Country-wide vaccination"
    }
}

New_Property_Value

string

NA

NA

NA

An optional NodeProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Node_Intervention_List

array of JSON objects

NA

NA

NA

A list of nested JSON objects for the multi-node-level interventions to be distributed by this intervention.

{
    "Intervention_Config": {
        "class": "MultiNodeInterventionDistributor",
        "Node_Intervention_List": [
            {
                "class": "SpaceSpraying",
                "Cost_To_Consumer": 1.0,
                "Habitat_Target": "ALL_HABITATS",
                "Spray_Kill_Target": "SpaceSpray_Indoor",
                "Killing_Config": {
                    "class": "WaningEffectExponential",
                    "Initial_Effect": 1.0,
                    "Decay_Time_Constant": 90
                },
                "Reduction_Config": {
                    "class": "WaningEffectExponential",
                    "Initial_Effect": 1.0,
                    "Decay_Time_Constant": 90
                }
            },
            {
                "class": "NodePropertyValueChanger",
                "Target_NP_Key_Value": "InterventionStatus:RECENT_SPRAY",
                "Daily_Probability": 1.0,
                "Maximum_Duration": 0,
                "Revert": 90
            }
        ]
    }
}

WaningEffectCombo (generic)

The WaningEffectCombo class is used within individual-level interventions and allows for specifiying a list of effects when the intervention only has one WaningEffect defined. These effects can be added or multiplied.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Add_Effects

boolean

0

1

0

The Add_Effects parameter allows you to combine multiple effects from the waning effect classes. If set to true (1), then the waning effect values from the different waning effect objects are added together. If set to false (0), the waning effect values are multiplied. The resulting waning effect value must be greater than 1.

{
    "class": "WaningEffectCombo",
    "Add_Effects": 1,
    "Expires_When_All_Expire": 0,
    "Effect_List": [
        {
            "class": "WaningEffectMapLinear",
            "Initial_Effect": 1.0,
            "Expire_At_Durability_Map_End": 1,
            "Durability_Map": {
                "Times": [
                    0.0,
                    1.0,
                    2.0
                ],
                "Values": [
                    0.2,
                    0.4,
                    0.6
                ]
            }
        },
        {
            "class": "WaningEffectBox",
            "Initial_Effect": 0.5,
            "Box_Duration": 5.0
        }
    ]
}

Effect_List

array of JSON objects

NA

NA

NA

A list of nested JSON parameters to indicate how the intervention efficacy wanes over time.

{
    "class": "WaningEffectCombo",
    "Add_Effects": 1,
    "Expires_When_All_Expire": 0,
    "Effect_List": [
        {
            "class": "WaningEffectMapLinear",
            "Initial_Effect": 1.0,
            "Expire_At_Durability_Map_End": 1,
            "Durability_Map": {
                "Times": [
                    0.0,
                    1.0,
                    2.0
                ],
                "Values": [
                    0.2,
                    0.4,
                    0.6
                ]
            }
        },
        {
            "class": "WaningEffectBox",
            "Initial_Effect": 0.5,
            "Box_Duration": 5.0
        }
    ]
}

Expires_When_All_Expire

boolean

0

1

0

If set to true (1), then all of the effects, as specified in the Effect_List parameter, must expire for the efficacy of the intervention to expire. If set to false (0), then the efficacy of the intervention will expire as soon as one of the parameters expires.

{
    "class": "WaningEffectCombo",
    "Add_Effects": 1,
    "Expires_When_All_Expire": 0,
    "Effect_List": [
        {
            "class": "WaningEffectMapLinear",
            "Initial_Effect": 1.0,
            "Expire_At_Durability_Map_End": 1,
            "Durability_Map": {
                "Times": [
                    0.0,
                    1.0,
                    2.0
                ],
                "Values": [
                    0.2,
                    0.4,
                    0.6
                ]
            }
        },
        {
            "class": "WaningEffectBox",
            "Initial_Effect": 0.5,
            "Box_Duration": 5.0
        }
    ]
}

The following campaign classes are new for the Malaria model:

AdherentDrug (malaria)

The AdherentDrug class extends AntiMalarialDrug class and allows for incorporating different patterns of adherence to taking the drug.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Adherence_Config

array of JSON objects

NA

NA

NA

A list of nested JSON objects for the interventions to be distributed by this event coordinator.

{
    "Adherence_Config": {
        "class": "WaningEffectMapCount",
        "Initial_Effect": 1.0,
        "Durability_Map": {
            "Times": [
                1.0,
                2.0,
                3.0,
                4.0
            ],
            "Values": [
                0.1,
                0.1,
                0.1,
                0.1
            ]
        }
    }
}

Cost_To_Consumer

float

0

99999

1

The unit cost per drug (unamortized).

{
    "Cost_To_Consumer": 10
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to nodes with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Dosing_Type

enum

NA

NA

SingleDose

The type of anti-malarial dosing to distribute in a drug intervention. Possible values are:

  • FullTreatmentCourse

  • FullTreatmentParasiteDetect

  • FullTreatmentNewDetectionTech

  • FullTreatmentWhenSymptom

  • Prophylaxis

  • SingleDose

  • SingleDoseNewDetectionTech

  • SingleDoseParasiteDetect

  • SingleDoseWhenSymptom

{
    "Intervention_Config": {
        "Cost_To_Consumer": 3.75,
        "Dosing_Type": "FullTreatmentWhenSymptom",
        "Drug_Type": "Chloroquine",
        "class": "AntimalarialDrug"
    }
}

Intervention_Name

string

NA

NA

AdherentDrug

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "AdherentDrug",
        "Intervention_Name": "Isoniazid with mediocre adherence"
    }
}

Max_Dose_Consideration_Duration

float

1.0/24.0 (1hr)

3.40E+03

3.40E+03

The maximum number of days that an individual will consider taking the doses of the drug.

{
    "class": "AdherentDrug",
    "Cost_To_Consumer": 1,
    "Drug_Type": "TestDrug",
    "Dosing_Type": "FullTreatmentCourse",
    "Adherence_Config": {
        "class": "WaningEffectMapCount",
        "Initial_Effect": 1.0,
        "Durability_Map": {
            "Times": [
                1.0,
                2.0,
                3.0
            ],
            "Values": [
                1.0,
                0.0,
                1.0
            ]
        }
    },
    "Non_Adherence_Options": [
        "NEXT_DOSAGE_TIME"
    ],
    "Non_Adherence_Distribution": [
        1.0
    ],
    "Max_Dose_Consideration_Duration": 4,
    "Took_Dose_Event": "NewClinicalCase"
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Non_Adherence_Distribution

array of floats

0

1

0

The non adherence probability value(s) assigned to the corresponding options in Non_Adherence_Options. The sum of non adherence distribution values must equal a total of 1.

{
    "Non_Adherence_Distribution": [
        0.7,
        0.3
    ]
}

Non_Adherence_Options

array of strings

NA

NA

NEXT_UPDATE

Defines the action the person takes if they do not take a particular dose, are not adherent.

{
    "AD_Non_Adherence_Options": [
        "NEXT_DOSAGE_TIME",
        "NEXT_UPDATE"
    ]
}

Took_Dose_Event

string

NA

NA

“”

The event that triggers the drug intervention campaign. The events contained in the list can be built-in events (see Event list for possible events).

{
    "class": "AdherentDrug",
    "Cost_To_Consumer": 1,
    "Drug_Type": "TestDrug",
    "Dosing_Type": "FullTreatmentCourse",
    "Adherence_Config": {
        "class": "WaningEffectMapCount",
        "Initial_Effect": 1.0,
        "Durability_Map": {
            "Times": [
                1.0,
                2.0,
                3.0
            ],
            "Values": [
                1.0,
                0.0,
                1.0
            ]
        }
    },
    "Non_Adherence_Options": [
        "NEXT_DOSAGE_TIME"
    ],
    "Non_Adherence_Distribution": [
        1.0
    ],
    "Max_Dose_Consideration_Duration": 4,
    "Took_Dose_Event": "NewClinicalCase"
}

BitingRisk (malaria, vector)

The BitingRisk class is used with individual-level interventions and allows for adjusting the relative risk of being bitten by a vector.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Intervention_Name

string

NA

NA

BitingRisk

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "BitingRisk",
        "Intervention_Name": "Relative biting risk with bednet usage"
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Risk_Constant

float

0

3.40282E+38

6

The risk to use for all individuals when Risk_Distribution is set to CONSTANT_DISTRIBUTION.

{
    "Risk_Distribution": "CONSTANT_DISTRIBUTION",
    "Risk_Constant": 8
}

Risk_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the relative risk of being bitten by a mosquito to each individual. Each assigned value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Risk_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Risk_Max and Risk_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Values are resampled to ensure >= 0. Set Risk_Gaussian_Mean and Risk_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Risk_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Risk_Kappa and Risk_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and width. Set Risk_Log_Normal_Mean and Risk_Log_Normal_Width.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Risk_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Risk_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Risk_Mean_1, Risk_Mean_2, and Risk_Proportion_1. This distribution does not use the parameters set for EXPONENTIAL_DISTRIBUTION.

{
    "Risk_Distribution": "WEIBULL_DISTRIBUTION",
    "Risk_Kappa": 0.9,
    "Risk_Lambda": 1.5
}

Risk_Exponential

float

0

3.40282E+38

6

The mean of the biting risk when Risk_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Risk_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Risk_Exponential": 4.25
}

Risk_Gaussian_Mean

float

0

3.40282E+38

6

The mean of the biting risk when Risk_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Risk_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Risk_Gaussian_Mean": 8,
    "Risk_Gaussian_Std_Dev": 1.5
}

Risk_Gaussian_Std_Dev

float

1.17549E-38

3.40282E+38

1

The standard deviation of the biting risk when Risk_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Risk_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Risk_Gaussian_Mean": 8,
    "Risk_Gaussian_Std_Dev": 1.5
}

Risk_Kappa

float

1.17549E-38

3.40282E+38

1

The shape value for the biting risk when Risk_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Risk_Distribution": "WEIBULL_DISTRIBUTION",
    "Risk_Kappa": 0.9,
    "Risk_Lambda": 1.5
}

Risk_Lambda

float

1.17549E-38

3.40282E+38

1

The scale value for the biting risk when Risk_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Risk_Distribution": "WEIBULL_DISTRIBUTION",
    "Risk_Kappa": 0.9,
    "Risk_Lambda": 1.5
}

Risk_Log_Normal_Mu

float

-3.40282e+38

3.40282E+38

6

The mean of the biting risk when Risk_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Risk_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Risk_Log_Normal_Mu": 9,
    "Risk_Log_Normal_Sigma": 2
}

Risk_Log_Normal_Sigma

float

-3.40282e+38

3.40282E+38

1

The width of the biting risk when Risk_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Risk_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Risk_Log_Normal_Mu": 9,
    "Risk_Log_Normal_Sigma": 2
}

Risk_Max

float

0

3.40282E+38

1

The maximum biting risk when Risk_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Risk_Distribution": "UNIFORM_DISTRIBUTION",
    "Risk_Min": 2,
    "Risk_Max": 7
}

Risk_Mean_1

float

1.17549E-38

3.40282E+38

1

The mean of the first exponential distribution when Risk_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Risk_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Risk_Mean_1": 4,
    "Risk_Mean_2": 12,
    "Risk_Proportion_1": 0.2
}

Risk_Mean_2

float

1.17549E-38

3.40282E+38

1

The mean of the second exponential distribution when Risk_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Risk_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Risk_Mean_1": 4,
    "Risk_Mean_2": 12,
    "Risk_Proportion_1": 0.2
}

Risk_Min

float

0

3.40282E+38

0

The minimum biting risk when Risk_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Risk_Distribution": "UNIFORM_DISTRIBUTION",
    "Risk_Min": 2,
    "Risk_Max": 7
}

Risk_Peak_2_Value

float

0

3.40282E+38

1

The biting risk value to assign to the remaining individuals when Risk_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Risk_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Risk_Proportion_0": 0.25,
    "Risk_Peak_2_Value": 5
}

Risk_Poisson_Mean

float

0

3.40282E+38

6

The mean of the biting risk when Risk_Distribution is set to POISSON_DISTRIBUTION.

{
    "Risk_Distribution": "POISSON_DISTRIBUTION",
    "Risk_Poisson_Mean": 5
}

Risk_Proportion_0

float

0

1

1

The proportion of individuals to assign a value of zero biting risk when Risk_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Risk_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Risk_Proportion_0": 0.25,
    "Risk_Peak_2_Value": 5
}

Risk_Proportion_1

float

0

1

1

The proportion of individuals in the first exponential distribution when Risk_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Risk_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Risk_Mean_1": 4,
    "Risk_Mean_2": 12,
    "Risk_Proportion_1": 0.2
}

OutbreakIndividualMalaria (malaria)

The OutbreakIndividualMalaria class extends OutbreakIndividual class and allows for specifying a specific strain of infection.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Create_Random_Genome

boolean

0

1

0

If set to true (1), then a random genome is created for the infection and the Genome_Markers parameter is not used. If set to false (0), then you must define the Genome_Markers parameter which allows you to then specify genetic components in a strain of infection.

{
    "OIM_Create_Random_Genome": 1
}

Genome_Markers

array of strings

NA

NA

NA

A list of the names of genome marker(s) that represent the genetic components in a strain of an infection.

{
    "Intervention_Config": {
        "class": "OutbreakIndividualMalaria",
        "Antigen": 0,
        "Genome_Markers": [
            "D6",
            "W2"
        ]
    }
}

Ignore_Immunity

boolean

0

1

1

Individuals will be force-infected (with a specific strain) regardless of actual immunity level when set to true (1).

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "class": "OutbreakIndividual",
        "Ignore_Immunity": 0
    }
}

Incubation_Period_Override

integer

-1

2.15E+0

-1

The incubation period, in days, that infected individuals will go through before becoming infectious. This value overrides the incubation period set in the configuration file. Set to -1 to honor the configuration parameter settings.

{
    "Incubation_Period_Override": 0
}

The following campaign class is new for the TBHIV model:

TBHIVConfigurableTBdrug (tuberculosis)

The TBHIVConfigurableTBdrug class is an individual level intervention for TB treatment. The intervention applies TB drug effects to the progression, associated mortality, transmission and acquisition of TB infections in HIV positive and negative individuals.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Active_Multiplier

array of floats

0

1

1

Multiplier of clearance/inactivation if active TB on drug treatment. Relapse, mortality, and resistance apply only to active.

{
    "Active_Multiplier": 1
}

Cost_To_Consumer

float

0

99999

1

The unit cost per drug (unamortized).

{
    "Cost_To_Consumer": 10
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Dose_Interval

float

0

99999

1

The interval between doses, in days.

{
    "Dose_Interval": 1
}

Drug_Cmax

float

0

10000

1

The maximum drug concentration that can be used, and is in the same units as Drug_PKPD_C50. Since drug concentrations and C50 values are often specified with different unit systems, these two parameters have been designed to be flexible provided that the units are the same for each. This parameter is used when Durability_Profile is set to CONCENTRATION_VERSUS_TIME.

{
    "Durability_Profile": "CONCENTRATION_VERSUS_TIME",
    "Drug_Cmax": 200,
    "Drug_PKPD_C50": 6,
    "Drug_Vd": 1
}

Drug_PKPD_C50

float

0

10000

1

The concentration at which drug killing rates are half of the maximum. Must use the same units as Drug_Cmax. This parameter is used when Durability_Profile is set to CONCENTRATION_VERSUS_TIME.

{
    "Durability_Profile": "CONCENTRATION_VERSUS_TIME",
    "Drug_Cmax": 200,
    "Drug_PKPD_C50": 6,
    "Drug_Vd": 1
}

Drug_Vd

float

0

10000

1

The volume of drug distribution. This value is the ratio of the volume of the second compartment to the volume of the first compartment in a two-compartment model, and is dimensionless. This parameter is used when Durability_Profile is set to CONCENTRATION_VERSUS_TIME.

{
    "Durability_Profile": "CONCENTRATION_VERSUS_TIME",
    "Drug_Cmax": 200,
    "Drug_PKPD_C50": 6,
    "Drug_Vd": 1
}

Durability_Profile

enum

NA

NA

FIXED_DURATION_CONSTANT_EFFECT

The profile of durability decay. Possible values are:

FIXED_DURATION_CONSTANT_EFFECT

The durability does not decay.

CONCENTRATION_VERSUS_TIME

Conditionally loads the following parameters: Drug_Cmax, Drug_PKPD_C50, and Drug_Vd.

{
    "Durability_Profile": "CONCENTRATION_VERSUS_TIME",
    "Drug_Cmax": 200,
    "Drug_PKPD_C50": 6,
    "Drug_Vd": 1
}

Fraction_Defaulters

float

0

1

0

The fraction of individuals who will not finish their drug treatment.

{
    "Fraction_Defaulters": 0
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "TBHIVConfigurableTBdrug",
        "Intervention_Name": "Isoniazid distribution"
    }
}

Latency_Multiplier

array of floats

0

1

1

Multiplier of clearance/inactivation if latent TB on drug treatment for the TB drug cure rate parameters (TB_Drug_Cure_Rate, TB_Drug_Cure_Rate_MDR, TB_Drug_Cure_Rate_HIV ) and the TB drug inactivation rate parameters (TB_Drug_Inactivation_Rate, TB_Drug_Inactivation_Rate_MDR, TB_Drug_Inactivation_Rate_HIV).

{
    "Latency_Multiplier": 1
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Primary_Decay_Time_Constant

float

0

1.00E+00

0

The primary decay time constant (in days) of the decay profile.

{
    "Primary_Decay_Time_Constant": 180
}

Remaining_Doses

integer

0

999999

0

The remaining doses in an intervention; enter a negative number for unlimited doses.

{
    "Remaining_Doses": 1
}

Secondary_Decay_Time_Constant

float

0

999999

1

The secondary decay time constant of the durability profile. This parameter is used when Durability_Profile is set to CONCENTRATION_VERSUS_TIME.

{
    "Durability_Profile": "CONCENTRATION_VERSUS_TIME",
    "Secondary_Decay_Time_Constant": 730
}

TB_Drug_Name

string

NA

NA

NA

The name of TB drug used in the TBHIVConfigurationTBdrug intervention. This must be one of the listed drugs as specificed under TBHIV_Drug_Types in the configuration file.

{
    "Active_Multiplier": 1,
    "Durability_Profile": "FIXED_DURATION_CONSTANT_EFFECT",
    "Latency_Multiplier": 1,
    "Remaining_Doses": 1,
    "TB_Drug_Name": "PreDOTSLowNoMDR",
    "class": "TBHIVConfigurableTBdrug"
}

TB_Reduced_Acquire

array of floats

0

1

0

Proportion reduction in acquisition of new TB infection under drug treatment. Only relevant when TB_Enable_Exogenous is enabled to allow exogenous re-infection.

{
    "TBHIV_Drug_Params": {
        "ACFDOTS": {
            "TB_Drug_Cure_Rate": 0.25,
            "TB_Drug_Inactivation_Rate": 1e-09,
            "TB_Drug_Inactivation_Rate_HIV": 1e-09,
            "TB_Drug_Inactivation_Rate_MDR": 1e-09,
            "TB_Drug_Mortality_Rate": 1e-09,
            "TB_Drug_Mortality_Rate_HIV": 1e-09,
            "TB_Drug_Mortality_Rate_MDR": 1e-09,
            "TB_Drug_Primary_Decay_Time_Constant": 179,
            "TB_Drug_Relapse_Rate": 1e-09,
            "TB_Drug_Relapse_Rate_HIV": 1e-09,
            "TB_Drug_Relapse_Rate_MDR": 1e-09,
            "TB_Drug_Resistance_Rate": 1e-09,
            "TB_Drug_Resistance_Rate_HIV": 1e-09,
            "TB_Reduced_Acquire": 1,
            "TB_Reduced_Transmit": 1,
            "TB_Drug_Cure_Rate_HIV": 0,
            "TB_Drug_Cure_Rate_MDR": 0
        }
    }
}

TB_Reduced_Transmit

array of floats

0

1

0

Proportion reduction in TB transmission under drug treatment. The value scales the Base_Infectivity parameter.

{
    "TBHIV_Drug_Params": {
        "ACFDOTS": {
            "TB_Drug_Cure_Rate": 0.25,
            "TB_Drug_Inactivation_Rate": 1e-09,
            "TB_Drug_Inactivation_Rate_HIV": 1e-09,
            "TB_Drug_Inactivation_Rate_MDR": 1e-09,
            "TB_Drug_Mortality_Rate": 1e-09,
            "TB_Drug_Mortality_Rate_HIV": 1e-09,
            "TB_Drug_Mortality_Rate_MDR": 1e-09,
            "TB_Drug_Primary_Decay_Time_Constant": 179,
            "TB_Drug_Relapse_Rate": 1e-09,
            "TB_Drug_Relapse_Rate_HIV": 1e-09,
            "TB_Drug_Relapse_Rate_MDR": 1e-09,
            "TB_Drug_Resistance_Rate": 1e-09,
            "TB_Drug_Resistance_Rate_HIV": 1e-09,
            "TB_Reduced_Acquire": 1,
            "TB_Reduced_Transmit": 1,
            "TB_Drug_Cure_Rate_HIV": 0,
            "TB_Drug_Cure_Rate_MDR": 0
        }
    }
}

Deprecated demographics parameters

ImmunityDistributionFlag, ImmunityDistribution1, and ImmunityDistribution2 were renamed to SusceptibilityDistributionFlag, SusceptibilityDistribution1, and SusceptibilityDistribution2. In previous versions of EMOD, the naming was counterintuitive to the functionality. For example, setting a value of 1 for the immunity indicated zero immunity/complete susceptibility. Now the parameters more accurately reflect that you are setting a susceptibility value. The functionality is the same.

Deprecated config parameters

Immunity_Transmission_Factor, Immunity_Mortality_Factor, and Immunity_Acquisition_Factor were renamed to Post_Infection_Transmission_Multiplier, Post_Infection_Mortality_Multiplier, and Post_Infection_Acquistion_Multiplier. The functionality is the same.

Deprecated campaign parameters

The TB_SIM simulation type has been deprecated and replaced with TBHIV_SIM, which does not include HIV transmission but adds the ability to model the effect of HIV coinfection on the spread of TB.

The following campaign classes, which have not yet been fully tested with the TBHIV simulation type, have been disabled:

  • HealthSeekingBehaviorUpdate

  • HealthSeekingBehaviorUpdateable

  • AntiTBPropDepDrug

  • SmearDiagnostic

In previous versions of EMOD, you could set the tendency of individuals to seek out health care using HealthSeekingBehaviorUpdateable and then update the value of the Tendency parameter using HealthSeekingBehaviorUpdate. Now, you use individual properties to update individuals when they receive the SimpleHealthSeekingBehavior intervention, as you would to control the flow of individuals through other intervention classes. For example, you could create an individual property with HSBold and HSBnew values in the demographics file and assign all individuals to HSBold. Then you could distribute the first SimpleHealthSeekingBehavior (with one Tendency value) to all HSBold individuals and use New_Property_Value to assign them to HSBnew after receiving the intervention. The next SimpleHealthSeekingBehavior intervention (with a different Tendency value) could be distributed, setting Disqualifying_Properties to HSBold and, if desired, using New_Property_Value to reassign HSBold to those individuals.

Similarly, AntiTBPropDepDrug was disabled and superseded with TBHIVConfigurableTBDrug, which allows for drug effects based on HIV status and where dependence on IndividualProperties is configured through Property_Restrictions. In addition, AntiTBPropDepDrub can be replaced with AntiTBDrug, also using Property_Restrictions and new property values to target particular individuals with drug interventions for tuberculosis without HIV coinfections.

SmearDiagnostic was disabled and can be replaced with DiagnosticTreatNeg. While SmearDiagnostic would only broadcast when an individual had a positive smear diagnostic, DiagnosticTreatNeg has the added benefit of broadcasting negative and default diagnostic test events.

TB_Drug_Clearance_Rate_HIV and TB_Drug_Clearance_Rate_MDR parameters have been renamed to TB_Drug_Cure_Rate_HIV and TB_Drug_Cure_Rate_MDR.

Error messages

When attempting to run an intervention using one of the disabled tuberculosis classes, such as AntiTBPropDepDrug, HealthSeekingBehaviorUpdate, HealthSeekingBehaviorUpdateable, and SmearDiagnostic, you will receive an error similar to the following: “00:00:01 [0] [I] [JsonConfigurable] Using the default value ( “Intervention_Name” : “HealthSeekingBehaviorUpdateable” ) for unspecified parameter. 00:00:02 [0] [E] [Eradication] 00:00:02 [0] [E] [Eradication] GeneralConfigurationException: Exception in SimulationEventContext.cpp at 242 in Kernel::SimulationEventContextHost::LoadCampaignFromFile. Array out of bounds”

Note

These campaign classes have been disabled because they have not yet been fully tested with the TBHIV simulation type.

EMOD schema and simulation types

In the schema for the Simulation_Type parameter the enum values list additional simulation types that are not supported by EMOD.

EMOD supports the following simulation types for modeling a variety of diseases:

  • Generic disease (GENERIC_SIM), which can be used for modeling a variety of diseases such as influenza or measles

  • Vector-borne diseases (VECTOR_SIM), which can be used for modeling vector-borne diseases such as dengue

  • Malaria (MALARIA_SIM), which adds features specific to malaria biology and treatment

  • Tuberculosis with HIV coinfection (TBHIV_SIM), which can be used for modeling TB transmission, with the option to add HIV coinfection as a contributing factor

  • Sexually transmitted infections (STI_SIM), which adds features for sexual relationship networks

  • HIV (HIV_SIM), which adds features specific to HIV biology and treatment

  • Environmental transmission (ENVIRONMENTAL_SIM), which adds features for diseases transmitted through contaminated food or water

  • Typhoid (TYPHOID_SIM), which adds features specific to typhoid biology and treatment

For information about building the schema, see Generate a list of all available parameters (a schema).

EMOD v2.13

The EMOD v2.13 release includes many new features for all supported simulation types.

New configuration parameters

For the malaria simulation type, the following new configuration parameters are available:

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Custom_Reports_Filename

string

NA

NA

UNINITIALIZED STRING

The name of the file containing custom report configuration parameters. Omitting this parameter or setting it to RunAllCustomReports will load all reporters found that are valid for the given simulation type. The file must be in JSON format.

{  
    "Custom_Reports_Filename": "custom_reports.json"
}

Cycle_Arrhenius_1

float

0

1.00E+15

4.09E+10

The Arrhenius equation, a_1^{-a_2/T}, with T in degrees Kelvin, parameterizes the mosquito feeding cycle rate. This duration is a decreasing function of temperature. The variable a1 is a temperature-independent scale factor on feeding rate. Temperature_Dependent_Feeding_Cycle must be set to ARRHENIUS_DEPENDENCE.

{
    "Temperature_Dependent_Feeding_Cycle": "ARRHENIUS_DEPENDENCE",
    "Vector_Species_Params": {
        "arabiensis": {
            "Cycle_Arrhenius_1": 99,
            "Cycle_Arrhenius_2": 88
        }
    }
}

Cycle_Arrhenius_2

float

0

1.00E+15

7740

The Arrhenius equation, a_1^{-a_2/T}, with T in degrees Kelvin, parameterizes the mosquito feeding cycle rate. This duration is a decreasing function of temperature. The variable a2 is a temperature-independent scale factor on feeding rate. Temperature_Dependent_Feeding_Cycle must be set to ARRHENIUS_DEPENDENCE.

{
    "Temperature_Dependent_Feeding_Cycle": "ARRHENIUS_DEPENDENCE",
    "Vector_Species_Params": {
        "arabiensis": {
            "Cycle_Arrhenius_1": 99,
            "Cycle_Arrhenius_2": 88
        }
    }
}

Cycle_Arrhenius_Reduction_Factor

float

0

1

1

The scale factor applied to cycle duration (from oviposition to oviposition) to reduce the duration when primary follicles are at stage II rather than I in the case of newly emerged females. Temperature_Dependent_Feeding_Cycle must be set to ARRHENIUS_DEPENDENCE.

{
    "Temperature_Dependent_Feeding_Cycle": "ARRHENIUS_DEPENDENCE",
    "Vector_Species_Params": {
        "funestus": {
            "Cycle_Arrhenius_Reduction_Factor": 0.44
        }
    }
}

Drought_Egg_Hatch_Delay

float

0

1

0.33

Proportion of regular egg hatching that still occurs when habitat dries up. Enable_Drought_Egg_Hatch_Delay must be set to 1.

{ 
    "Enable_Drought_Egg_Hatch_Delay": 1,
    "Drought_Egg_Hatch_Delay": 0.33
}

Egg_Arrhenius1

float

0

1.00E+10

6.16E+07

The Arrhenius equation, math:a_1^{-a_2/T}, with T in degrees Kelvin, parameterizes the daily rate of mosquito egg hatching. This duration is a decreasing function of temperature. The variable a1 is a temperature-independent scale factor on hatching rate. Enable_Temperature_Dependent_Egg_Hatching must be set to 1.

{
    "Enable_Temperature_Dependent_Egg_Hatching": 1,     
    "Egg_Arrhenius1": 61599956,
    "Egg_Arrhenius2": 5754
}

Egg_Arrhenius2

float

0

1.00E+10

5754.03

The Arrhenius equation, a_1^{-a_2/T}, with T in degrees Kelvin, parameterizes the daily rate of mosquito egg hatching. This duration is a decreasing function of temperature. The variable a2 is a temperature-dependent scale factor on hatching rate. Enable_Temperature_Dependent_Egg_Hatching must be set to 1.

{
    "Enable_Temperature_Dependent_Egg_Hatching": 1,     
    "Egg_Arrhenius1": 61599956,
    "Egg_Arrhenius2": 5754
}

Egg_Hatch_Density_Dependence

enum

NA

NA

NO_DENSITY_DEPENDENCE

The effect of larval density on egg hatching rate. Possible values are:

DENSITY_DEPENDENCE

Egg hatching is reduced when the habitat is nearing its carrying capacity.

NO_DENSITY_DEPENDENCE

Egg hatching is not dependent upon larval density.

{
    "Egg_Hatch_Density_Dependence": "NO_DENSITY_DEPENDENCE"
}

Enable_Drought_Egg_Hatch_Delay

boolean

0

1

0

Controls whether or not eggs hatch at delayed rates, set by Drought_Egg_Hatch_Delay, when the habitat dries up completely.

{
    "Enable_Drought_Egg_Hatch_Delay": 1, 
    "Drought_Egg_Hatch_Delay": 0.33
}

Enable_Egg_Mortality

boolean

0

1

0

Controls whether or not to include a daily mortality rate on the egg population, which is independent of climatic factors.

{
    "Enable_Egg_Mortality": 1,
}

Enable_Temperature_Dependent_Egg_Hatching

boolean

0

1

0

Controls whether or not temperature has an effect on egg hatching, defined by Egg_Arrhenius_1 and Egg_Arrhenius_2.

{  
    "Enable_Temperature_Dependent_Egg_Hatching": 1,  
    "Egg_Arrhenius1": 61599956.864, 
    "Egg_Arrhenius2": 5754.033
}

Enable_Vector_Aging

boolean

0

1

0

Controls whether or not vectors undergo senescence as they age.

{
    "Enable_Vector_Aging": 1
}

Incubation_Period_Log_Mean

float

0

3.40E+38

6

The mean of log normal for the incubation period distribution. Incubation_Period_Distribution must be set to LOG_NORMAL_DURATION.

{
    "Incubation_Period_Distribution": "LOG_NORMAL_DURATION",
    "Incubation_Period_Log_Mean": 5.758,
    "Incubation_Period_Log_Width": 0.27
}

Incubation_Period_Log_Width

float

0

3.40E+38

1

The log width of log normal for the incubation period distribution. Incubation_Period_Distribution must be set to LOG_NORMAL_DURATION.

{
    "Incubation_Period_Distribution": "LOG_NORMAL_DURATION",
    "Incubation_Period_Log_Mean": 5.758,
    "Incubation_Period_Log_Width": 0.27
}

Infectivity_Exponential_Baseline

float

0

1

0

The scale factor applied to Base_Infectivity at the beginning of a simulation, before the infectivity begins to grow exponentially. Infectivity_Scale_Type must be set to EXPONENTIAL_FUNCTION_OF_TIME.

{
    "Infectivity_Exponential_Baseline": 0.1, 
    "Infectivity_Exponential_Delay": 90, 
    "Infectivity_Exponential_Rate": 45, 
    "Infectivity_Scale_Type": "EXPONENTIAL_FUNCTION_OF_TIME"
}

Infectivity_Exponential_Delay

float

0

3.40E+38

0

The number of days before infectivity begins to ramp up exponentially. Infectivity_Scale_Type must be set to EXPONENTIAL_FUNCTION_OF_TIME.

{
    "Infectivity_Exponential_Baseline": 0.1, 
    "Infectivity_Exponential_Delay": 90, 
    "Infectivity_Exponential_Rate": 45, 
    "Infectivity_Scale_Type": "EXPONENTIAL_FUNCTION_OF_TIME"
}

Infectivity_Exponential_Rate

float

0

3.40E+38

0

The daily rate of exponential growth to approach to full infectivity after the delay set by Infectivity_Exponential_Delay has passed. Infectivity_Scale_Type must be set to EXPONENTIAL_FUNCTION_OF_TIME.

{
    "Infectivity_Exponential_Rate": 45
}

Memory_Usage_Halting_Threshold_Working_Set_MB

integer

0

1.00E+06

8000

The maximum size (in MB) of working set memory before the system throws an exception and halts.

{
    "Memory_Usage_Halting_Threshold_Working_Set_MB": 4000
}

Memory_Usage_Warning_Threshold_Working_Set_MB

integer

0

1.00E+06

7000

The maximum size (in MB) of working set memory before memory usage statistics are written to the log regardless of log level.

{
    "Memory_Usage_Warning_Threshold_Working_Set_MB": 3500
}

Nighttime_Feeding_Fraction

float

0

1

1

The fraction of feeds on humans (for a specific mosquito species) that occur during the nighttime. Thus the fraction of feeds on humans that occur during the day equals 1 - (value of this parameter).

{
    "Vector_Species_Params": {
        "arabiensis": {
            "Acquire_Modifier": 0.2, 
            "Adult_Life_Expectancy": 10, 
            "Anthropophily": 0.95, 
            "Aquatic_Arrhenius_1": 84200000000, 
            "Aquatic_Arrhenius_2": 8328, 
            "Aquatic_Mortality_Rate": 0.1, 
            "Cycle_Arrhenius_1": 0, 
            "Cycle_Arrhenius_2": 0, 
            "Cycle_Arrhenius_Reduction_Factor": 0, 
            "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, 
            "Larval_Habitat_Types": {
                "TEMPORARY_RAINFALL": 11250000000
            }, 
            "Nighttime_Feeding_Fraction": 1, 
            "Transmission_Rate": 0.5
        }
    }
}   

Serialization_Time_Steps

array of integers

0

2.15E+09

The list of time steps after which to save the serialized state. 0 (zero) indicates the initial state before simulation, n indicates after the nth time step. By default, no serialized state is saved.

{
    "Serialization_Time_Steps": [
        0, 
        10
    ]
}

Serialized_Population_Filenames

array of strings

NA

NA

NA

Array of filenames with serialized population data. The number of filenames must match the number of cores used for the simulation. The file must be in .dtk format.

{
    "Serialized_Population_Filenames": [
        "state-00010.dtk"
    ]
}

Serialized_Population_Path

string

NA

NA

.

The root path for the serialized population files.

{
    "Serialized_Population_Path": "../00_Generic_Version_1_save/output"
}

Temperature_Dependent_Feeding_Cycle

enum

NA

NA

NO_TEMPERATURE_DEPENDENCE

The effect of temperature on the duration between blood feeds. Possible values are:

NO_TEMPERATURE_DEPENDENCE

No relation to temperature; days between feeds will be constant and specified by Days_Between_Feeds for each species.

ARRHENIUS_DEPENDENCE

Use the Arrhenius equation with parameters Cycle_Arrhenius_1 and Cycle_Arrhenius_2.

BOUNDED_DEPENDENCE

Use an equation bounded at 10 days at 15C and use Days_Between_Feeds to set the duration at 30C.

{
    "Temperature_Dependent_Feeding_Cycle": "BOUNDED_DEPENDENCE"
}

To view all available configuration parameters, see Configuration parameters.

New demographics parameters

In all simulation types, you can now assign properties like risk or quality of care to nodes using NodeProperties, which are configured much like IndividualProperties. In addition, a new property type is available for both nodes and individuals called InterventionStatus, which is used by the campaign file to distribute interventions based on the other interventions an individual or node has received. This property type was previously available only for individuals in the HIV simulation type and was known as the CascadeState. The relevant campaign parameters are described in the next section.

For more information, see the table below.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

NodeProperties

array of objects

NA

NA

NA

An array that contains parameters that add properties to nodes in a simulation. For example, you can define values for intervention status, risk, and other properties and assign values to different nodes.

{
    "NodeProperties": [{
        "Property": "Risk",
        "Values": ["HIGH", "MEDIUM", "LOW"],
        "Initial_Distribution": [0.1, 0.4, 0.5]
    }]
}

Property

enum

NA

NA

NA

The individual or node property type for which you will assign arbitrary values to create groups. You can then move individuals or nodes into or out of different groups or target interventions to particular groups. Possible values are:

Age_Bin

Assign individuals to age bins. Use with Age_Bin_Edges_In_Years. Cannot be used with NodeProperties.

Accessibility

Tag individuals or nodes based on their accessibility.

Geographic

Tag individuals or nodes based on geographic characteristics.

HasActiveTB

Tag individuals or nodes based on active TB status. Typically used only with HIV ART staging interventions.

InterventionStatus

Tag individuals or nodes based on intervention status, so that receiving an intervention can affect how other interventions are distributed. Use with Disqualifying_Properties and New_Property_Value in the campaign file.

Place

Tag individuals or nodes based on place.

Risk

Tag individuals or nodes based on disease risk.

QualityofCare

Tag individuals or nodes based on the quality of medical care.

{
    "Defaults": {
        "IndividualProperties": [{
            "Property": "Age_Bin",
            "Age_Bin_Edges_In_Years": [ 0, 6, 10, 20, -1 ]
        }]
    }
}
{
    "NodeProperties": [{
        "Property": "InterventionStatus",
        "Values": ["NONE", "RECENT_SPRAY"],
        "Initial_Distribution": [1.0, 0.0]
    }]
}

New campaign parameters

The addition of NodeProperties in the demographics file also necessitated the addition of Node_Property_Restrictions to control how interventions are distributed based on the property values assigned to each node.

The new campaign parameters Disqualifying_Properties and New_Property_Value were added to every intervention to control how interventions are distributed based on properties assigned to individuals or nodes. Disqualifying_Properties prevents an intervention from being distributed to individuals or nodes with certain property values. New_Property_Value updates the property value after they receive an intervention.

These are generally used with the the property type InterventionStatus to control how interventions are distributed based on the interventions already received. For example, a household may be ineligible for clinical treatment for a length of time if they already received treatment during a drug campaign. This functionality was previously only available for individuals in the HIV simulation type and used parameters previously called Abort_States and Valid_Cascade_States.

The following event coordinators and intervention classes are new for this simulation type.

CommunityHealthWorkerEventCoordinator

The CommunityHealthWorkerEventCoordinator coordinator class is used to model a health care worker’s ability to distribute interventions to the nodes and individual in their coverage area. This coordinator distributes a limited number of interventions per day, and can create a backlog of individuals or nodes requiring the intervention. For example, individual-level interventions could be distribution of drugs and node-level interventions could be spraying houses with insecticide.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Amount_In_Shipment

integer

1

2.15E+0

2.15E+09

The number of interventions (such as vaccine doses) that a health worker or clinic receives in a shipment. Interventions can only be distributed if they are in stock; stock is updated every Days_Between_Shipments with the Amount_In_Shipment.

{
    "Amount_In_Shipment": 10
}

Days_Between_Shipments

float

1

3.40E+3

3.40E+38

The number of days to wait before a clinic or health worker receives a new shipment of interventions (such as vaccine doses). Interventions can only be distributed if they are in stock; stock is updated every Days_Between_Shipments with the Amount_In_Shipment.

{
    "Days_Between_Shipments": 30
}

Demographic_Coverage

float

0

1

1

The fraction of individuals in the target demographic that will receive this intervention.

{
    "Demographic_Coverage": 1
}

Duration

float

0

3.40E+3

3.40E+38

The number of days for an event coordinator to be active before it expires.

{
    "Duration": 65
}

Initial_Amount_Constant

float

0

3.40282E+38

6

The initial amount to use for all health workers when Initial_Amount_Distribution is set to CONSTANT_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "CONSTANT_DISTRIBUTION",
    "Initial_Amount_Constant": 8
}

Initial_Amount_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the initial amount of interventions in stock. Each assigned value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Initial_Amount_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Initial_Amount_Max and Initial_Amount_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Values are resampled to ensure >= 0. Set Initial_Amount_Gaussian_Mean and Initial_Amount_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Initial_Amount_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Initial_Amount_Kappa and Initial_Amount_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and standard deviation of the natural log. Set Initial_Amount_Log_Normal_Mu and Initial_Amount_Log_Normal_Sigma.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Initial_Amount_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Initial_Amount_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Initial_Amount_Mean_1, Initial_Amount_Mean_2, and Initial_Amount_Proportion_1. This distribution does not use the parameters set for EXPONENTIAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Initial_Amount_Mean_1": 4,
    "Initial_Amount_Mean_2": 12,
    "Initial_Amount_Proportion_1": 0.2
}

Initial_Amount_Exponential

float

0

3.40282E+38

6

The mean of the initial amount of intervention in stock when Initial_Amount_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Initial_Amount_Exponential": 4.25
}

Initial_Amount_Gaussian_Mean

float

0

3.40282E+38

6

The mean of the initial amount of intervention in stock when Initial_Amount_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Initial_Amount_Gaussian_Mean": 8,
    "Initial_Amount_Gaussian_Std_Dev": 1.5
}

Initial_Amount_Gaussian_Std_Dev

float

1.17549E-38

3.40282E+38

1

The standard deviation of the initial amount of intervention in stock when Initial_Amount_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Initial_Amount_Gaussian_Mean": 8,
    "Initial_Amount_Gaussian_Std_Dev": 1.5
}

Initial_Amount_Kappa

float

1.17549E-38

3.40282E+38

1

The shape value for the initial amount of intervention in stock when Initial_Amount_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "WEIBULL_DISTRIBUTION",
    "Initial_Amount_Kappa": 0.9,
    "Initial_Amount_Lambda": 1.5
}

Initial_Amount_Lambda

float

1.17549E-38

3.40282E+38

1

The scale value for the initial amount of intervention in stock when Initial_Amount_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "WEIBULL_DISTRIBUTION",
    "Initial_Amount_Kappa": 0.9,
    "Initial_Amount_Lambda": 1.5
}

Initial_Amount_Log_Normal_Mu

float

-3.40282e+38

3.40282E+38

6

The mean of the natural log of the initial amount of intervention in stock when Initial_Amount_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Initial_Amount_Log_Normal_Mu": 9,
    "Initial_Amount_Log_Normal_Sigma": 2
}

Initial_Amount_Log_Normal_Sigma

float

-3.40282e+38

3.40282E+38

1

The standard deviation of the natural log of the initial amount of intervention in stock when Initial_Amount_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Initial_Amount_Log_Normal_Mu": 9,
    "Initial_Amount_Log_Normal_Sigma": 2
}

Initial_Amount_Max

float

0

3.40282E+38

1

The maximum initial amount of intervention in stock when Initial_Amount_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "UNIFORM_DISTRIBUTION",
    "Initial_Amount_Min": 2,
    "Initial_Amount_Max": 7
}

Initial_Amount_Mean_1

float

1.17549E-38

3.40282E+38

1

The mean of the first exponential distribution when Initial_Amount_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Initial_Amount_Mean_1": 4,
    "Initial_Amount_Mean_2": 12,
    "Initial_Amount_Proportion_1": 0.2
}

Initial_Amount_Mean_2

float

1.17549E-38

3.40282E+38

1

The mean of the second exponential distribution when Initial_Amount_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Initial_Amount_Mean_1": 4,
    "Initial_Amount_Mean_2": 12,
    "Initial_Amount_Proportion_1": 0.2
}

Initial_Amount_Min

float

0

3.40282E+38

0

The minimum of initial amount of intervention in stock when Initial_Amount_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "UNIFORM_DISTRIBUTION",
    "Initial_Amount_Min": 2,
    "Initial_Amount_Max": 7
}

Initial_Amount_Peak_2_Value

float

0

3.40282E+38

1

The initial amount in stock to assign to the remaining health workers when Initial_Amount_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Initial_Amount_Proportion_0": 0.25,
    "Initial_Amount_Peak_2_Value": 5
}

Initial_Amount_Poisson_Mean

float

0

3.40282E+38

6

The mean of the initial amount of intervention in stock when Initial_Amount_Distribution is set to the POISSON_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "POISSON_DISTRIBUTION",
    "Initial_Amount_Poisson_Mean": 5
}

Initial_Amount_Proportion_0

float

0

1

1

The proportion of health workers to assign a value of zero stock when Initial_Amount_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Initial_Amount_Proportion_0": 0.25,
    "Initial_Amount_Peak_2_Value": 5
}

Initial_Amount_Proportion_1

float

0

1

1

The proportion of health workers in the first exponential distribution when Initial_Amount_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Initial_Amount_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Initial_Amount_Mean_1": 4,
    "Initial_Amount_Mean_2": 12,
    "Initial_Amount_Proportion_1": 0.2
}

Intervention_Config

JSON object

NA

NA

NA

The nested JSON of the actual intervention to be distributed by this event coordinator.

{
    "Intervention_Config": {
        "class": "BroadcastEvent",
        "Broadcast_Event": "EventFromIntervention"
    }
}

Max_Distributed_Per_Day

integer

1

2.15E+0

2.15E+09

The maximum number of interventions (such as vaccine doses) that can be distributed by health workers or clinics in a given day.

{
    "Max_Distributed_Per_Day": 1
}

Max_Stock

integer

0

2.15E+0

2.15E+09

The maximum number of interventions (such as vaccine doses) that can be stored by a health worker or clinic. If the amount of interventions in a new shipment and current stock exceeds this value, only the number of interventions specified by this value will be stored.

{
    "Max_Stock": 12
}

Node_Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the NodeProperty key:value pairs, as defined in the demographics file, that nodes must have to be targeted by the intervention. See NodeProperties and IndividualProperties parameters for more information.

You can specify AND and OR combinations of key:value pairs with this parameter.

The following example restricts the intervention to nodes that are urban and medium risk or rural and low risk.

{
    "Node_Property_Restrictions": [
        {
            "Place": "URBAN",
            "Risk": "MED"
        },
        {
            "Place": "RURAL",
            "Risk": "LOW"
        }
    ]
}

Property_Restrictions

array of JSON objects

NA

NA

NA

A list of the IndividualProperty key:value pairs, as defined in the demographics file, that individuals must have to be targeted by this intervention. See NodeProperties and IndividualProperties parameters for more information.

To specify AND and OR combinations of key:value pairs, use Property_Restrictions_Within_Node. You cannot use both of these parameters in the same event coordinator.

{
    "Property_Restrictions": [
        "Risk:HIGH"
    ]
}

Property_Restrictions_Within_Node

array of JSON objects

NA

NA

NA

A list of the IndividualProperty key:value pairs, as defined in the demographics file, that individuals must have to be targeted by this intervention. See NodeProperties and IndividualProperties parameters for more information.

This parameter allows you to specify AND and OR combinations of key:value pairs. You may specify individual property restrictions using either this parameter or Property_Restrictions, but not both.

The following example restricts the intervention to individuals who are urban and high risk or urban and medium risk.

{
    "Property_Restrictions_Within_Node": [
        {
            "Risk": "HIGH",
            "Geographic": "URBAN"
        },
        {
            "Risk": "MEDIUM",
            "Geographic": "URBAN"
        }
    ]
}

Target_Age_Min

float

0

3.40E+3

0

The lower end of ages targeted for an intervention, in years. Used when Target_Demographic is set to ExplicitAgeRanges or ExplicitAgeRangesAndGender.

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Demographic

enum

NA

NA

Everyone

The target demographic group. Possible values are:

  • Everyone

  • ExplicitAgeRanges

  • ExplicitAgeRangesAndGender

  • ExplicitGender

  • ExplicitDiseaseState

{
    "Target_Age_Max": 20,
    "Target_Age_Min": 10,
    "Target_Demographic": "ExplicitAgeRanges"
}

Target_Gender

enum

NA

NA

All

Specifies the gender restriction for the intervention. Possible values are:

  • Male

  • Female

  • All

{
    "Target_Gender": "Male"
}

Target_Residents_Only

boolean

0

1

0

When set to true (1), the intervention is only distributed to individuals that began the simulation in the node (i.e. those that claim the node as their residence).

{
    "Target_Residents_Only": 1
}

Trigger_Condition_List

array of strings

NA

NA

NA

The list of events that are of interest to the community health worker (CHW). If one of these events occurs, the individual or node is put into a queue to receive the CHW’s intervention. The CHW processes the queue when the event coordinator is updated. See Event list for possible values.

{
    "Trigger_Condition_List": [
        "ListenForEvent"
    ]
}

Waiting_Period

float

0

3.40E+3

3.40E+38

The number of days a person or node can be in the queue waiting to get the intervention from the community health worker (CHW). If a person or node is in the queue, they will not be re-added to the queue if the event that would add them to the queue occurs. This allows them to maintain their priority, however they could be removed from the queue due to this waiting period.

{
    "Waiting_Period": 15
}

ImportPressure

The ImportPressure intervention class extends the ImportCases outbreak event. Rather than importing a deterministic number of cases on a scheduled day, ImportPressure applies a set of per-day rates of importation of infected individuals, over a corresponding set of durations. ImportPressure inherits from Outbreak; the Antigen and Genome parameters are defined as they are for all Outbreak events.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Daily_Import_Pressures

array of floats

0

3.40E+3

0

The rate of per-day importation for each node that the intervention is distributed to.

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "Durations": [
            100,
            100,
            100,
            100,
            100,
            100,
            100
        ],
        "Daily_Import_Pressures": [
            0.1,
            5.0,
            0.2,
            1.0,
            2.0,
            0.0,
            10.0
        ],
        "class": "ImportPressure"
    }
}

Durations

array of integers

0

2.15E+0

1

The durations over which to apply import pressure.

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "Durations": [
            100,
            100,
            100,
            100,
            100,
            100,
            100
        ],
        "Daily_Import_Pressures": [
            0.1,
            5.0,
            0.2,
            1.0,
            2.0,
            0.0,
            10.0
        ],
        "class": "ImportPressure"
    }
}

Genome

integer

-1

16777215

0

The genome ID (Genome) of the outbreak infection. Together with the clade ID (Clade) they are a unitary object representing a strain of infection, which allows for differentiation among infections. Values for Genome may range from -1 to 2Log2_Number_of_Genomes_per_Clade-1

Intervention distribution example:

{
    "Enable_Strain_Tracking": 1,
    "Events": [
        {
            "Event_Coordinator_Config": {
                "Demographic_Coverage": 0.001,
                "Intervention_Config": {
                    "Clade": 1,
                    "Genome": 3,
                    "IgnoreImmunity": 1,
                    "class": "OutbreakIndividual"
                },
                "Target_Demographic": "Everyone",
                "class": "StandardInterventionDistributionEventCoordinator"
            },
            "Event_Name": "OutbreakIndividual",
            "Nodeset_Config": {
                "class": "NodeSetAll"
            },
            "Start_Day": 30,
            "class": "CampaignEvent"
        }
    ]
}

Import_Age

float

0

43800

365

The age (in days) of infected import cases.

{
    "Import_Age": 10000
}

Incubation_Period_Override

integer

-1

2.15E+0

-1

The incubation period, in days, that infected individuals will go through before becoming infectious. This value overrides the incubation period set in the configuration file. Set to -1 to honor the configuration parameter settings.

{
    "Incubation_Period_Override": 0
}

Number_Cases_Per_Node

integer

0

2.15E+0

1

The number of new cases of Outbreak to import (per node).

Note

This will increase the population and there is no control over demographics of these individuals.

{
    "Intervention_Config": {
        "Antigen": 0,
        "Genome": 0,
        "Outbreak_Source": "ImportCases",
        "Number_Cases_Per_Node": 10,
        "class": "Outbreak"
    }
}

Probability_Of_Infection

float

0

1

1

The probability that each individual added by the intervention is infected. 0.0 adds only susceptible individuals to the population.

{
    "Probability_Of_Infection": 1
}

IndividualImmunityChanger

The IndividualImmunityChanger intervention class acts essentially as a MultiEffectVaccine, with the exception of how the behavior is implemented. Rather than attaching a persistent vaccine intervention object to an individual’s intervention list (as a campaign-individual-multieffectboostervaccine does), the IndividualImmunityChanger directly alters the immune modifiers of the individual’s susceptibility object and is then immediately disposed of. Any immune waning is not governed by Waning effect classes, as MultiEffectVaccine is, but rather by the immunity waning parameters in the configuration file.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Boost_Acquire

float

0

1

0

Specifies the boosting effect on acquisition immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine. This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Boost_Acquire": 0.7
}

Boost_Mortality

float

0

1

0

Specifies the boosting effect on mortality immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine. This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Boost_Mortality": 1.0
}

Boost_Threshold_Acquire

float

0

1

0

Specifies how much acquisition immunity is required before the vaccine changes from a prime to a boost.

{
    "Boost_Threshold_Acquire": 0.0
}

Boost_Threshold_Mortality

float

0

1

0

Specifies how much mortality immunity is required before the vaccine changes from a prime to a boost.

{
    "Boost_Threshold_Mortality": 0.0
}

Boost_Threshold_Transmit

float

0

1

0

Specifies how much transmission immunity is required before the vaccine changes from a prime to a boost.

{
    "Boost_Threshold_Transmit": 0.0
}

Boost_Transmit

float

0

1

0

Specifies the boosting effect on transmission immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine. This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Boost_Transmit": 0.5
}

Cost_To_Consumer

float

0

999999

10

The unit cost per vaccine (unamortized).

{
    "Cost_To_Consumer": 10.0
}

Prime_Acquire

float

0

1

0

Specifies the priming effect on acquisition immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine.

{
    "Prime_Acquire": 0.1
}

Prime_Mortality

float

0

1

0

Specifies the priming effect on mortality immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine.

{
    "Prime_Mortality": 0.3
}

Prime_Transmit

float

0

1

0

Specifies the priming effect on transmission immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine.

{
    "Prime_Transmit": 0.2
}

MultiEffectBoosterVaccine

The MultiEffectBoosterVaccine intervention class is derived from MultiEffectVaccine and preserves many of the same parameters. Upon distribution and successful take, the vaccine’s effect in each immunity compartment (acquisition, transmission, and mortality) is determined by the recipient’s immune state. If the recipient’s immunity modifier in the corresponding compartment is above a user-specified threshold, then the vaccine’s initial effect will be equal to the corresponding priming parameter. If the recipient’s immune modifier is below this threshold, then the vaccine’s initial effect will be equal to the corresponding boost parameter. After distribution, the effect wanes, just like a MultiEffectVaccine. The behavior is intended to mimic biological priming and boosting.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Acquire_Config

JSON object

NA

NA

NA

The configuration for multi-effect vaccine acquisition. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Acquire_Config": {
        "Initial_Effect": 0.9,
        "Decay_Time_Constant": 2525,
        "class": "WaningEffectExponential"
    }
}

Boost_Acquire

float

0

1

0

Specifies the boosting effect on acquisition immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine. This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Boost_Acquire": 0.7
}

Boost_Mortality

float

0

1

0

Specifies the boosting effect on mortality immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine. This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Boost_Mortality": 1.0
}

Boost_Threshold_Acquire

float

0

1

0

Specifies how much acquisition immunity is required before the vaccine changes from a prime to a boost.

{
    "Boost_Threshold_Acquire": 0.0
}

Boost_Threshold_Mortality

float

0

1

0

Specifies how much mortality immunity is required before the vaccine changes from a prime to a boost.

{
    "Boost_Threshold_Mortality": 0.0
}

Boost_Threshold_Transmit

float

0

1

0

Specifies how much transmission immunity is required before the vaccine changes from a prime to a boost.

{
    "Boost_Threshold_Transmit": 0.0
}

Boost_Transmit

float

0

1

0

Specifies the boosting effect on transmission immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine. This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Boost_Transmit": 0.5
}

Cost_To_Consumer

float

0

999999

10

The unit cost per vaccine (unamortized).

{
    "Cost_To_Consumer": 10.0
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "MultiEffectBoosterVaccine",
        "Intervention_Name": "Tetanus booster shot"
    }
}

Mortality_Config

JSON object

NA

NA

NA

The configuration for multi-effect vaccine mortality. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Mortality_Config": {
        "Initial_Effect": 1.0,
        "Decay_Time_Constant": 2525,
        "class": "WaningEffectExponential"
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Prime_Acquire

float

0

1

0

Specifies the priming effect on acquisition immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine.

{
    "Prime_Acquire": 0.1
}

Prime_Mortality

float

0

1

0

Specifies the priming effect on mortality immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine.

{
    "Prime_Mortality": 0.3
}

Prime_Transmit

float

0

1

0

Specifies the priming effect on transmission immunity for naive individuals (without natural or vaccine-derived immunity) for a multi-effect booster vaccine.

{
    "Prime_Transmit": 0.2
}

Transmit_Config

JSON object

NA

NA

NA

The configuration for multi-effect vaccine transmission. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Transmit_Config": {
        "Initial_Effect": 0.6,
        "Decay_Time_Constant": 2525,
        "class": "WaningEffectExponential"
    }
}

Vaccine_Take

float

0

1

1

The rate at which delivered vaccines will successfully stimulate an immune response and achieve the desired efficacy. For example, if it is set to 0.9, there will be a 90 percent chance that the vaccine will start with the specified efficacy, and a 10 percent chance that it will have no efficacy at all.

{
    "Intervention_Config": {
        "class": "SimpleVaccine",
        "Cost_To_Consumer": 10,
        "Vaccine_Type": "AcquisitionBlocking",
        "Vaccine_Take": 1,
        "Efficacy_Is_Multiplicative": 0,
        "Waning_Config": {
            "class": "WaningEffectConstant",
            "Initial_Effect": 0.3
        }
    }
}

NodePropertyValueChanger

The NodePropertyValueChanger intervention class sets a given node property to a new value. You can also define a duration in days before the node property reverts back to its original value, the probability that a node will change its node property to the target value, and the number of days over which nodes will attempt to change their individual properties to the target value. This node-level intervention functions in a similar manner as the individual-level intervention, PropertyValueChanger.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Daily_Probability

float

0

1

1

The daily probability that a node will move to the Target_Property_Value.

{
    "Intervention_Config": {
        "class": "PropertyValueChanger",
        "Disqualifying_Properties": [],
        "New_Property_Value": "",
        "Target_Property_Key": "Risk",
        "Target_Property_Value": "LOW",
        "Daily_Probability": 1.0,
        "Maximum_Duration": 0,
        "Revert": 0
    }
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of NodeProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to nodes with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Name": "Diagnostic_Sample"
}

Maximum_Duration

float

-1

3.40E+38

3.40E+38

The maximum amount of time nodes have to update the property value. This timing works in conjunction with Daily_Probability.

{
    "Intervention_Config": {
        "class": "PropertyValueChanger",
        "Disqualifying_Properties": [],
        "New_Property_Value": "",
        "Target_Property_Key": "Risk",
        "Target_Property_Value": "LOW",
        "Daily_Probability": 1.0,
        "Maximum_Duration": 0,
        "Revert": 0
    }
}

New_Property_Value

string

NA

NA

NA

An optional NodeProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Revert

float

0

10000

0

The number of days before an individual moves back to their original group.

{
    "Intervention_Config": {
        "class": "PropertyValueChanger",
        "Disqualifying_Properties": [],
        "New_Property_Value": "",
        "Target_Property_Key": "Risk",
        "Target_Property_Value": "LOW",
        "Daily_Probability": 1.0,
        "Maximum_Duration": 0,
        "Revert": 0
    }
}

Target_NP_Key_Value

string

NA

NA

NA

The NodeProperty key:value pair, as defined in the demographics file, to assign to the node.

{
    "Target_NP_Key_Value": "InterventionStatus:NONE"
}

SimpleBoosterVaccine

The SimpleBoosterVaccine intervention class is derived from SimpleVaccine and preserves many of the same parameters. The behavior is much like SimpleVaccine, except that upon distribution and successful take, the vaccine’s effect is determined by the recipient’s immune state. If the recipient’s immunity modifier in the corresponding channel (acquisition, transmission, or mortality) is above a user-specified threshold, then the vaccine’s initial effect will be equal to the corresponding priming parameter. If the recipient’s immune modifier is below this threshold, then the vaccine’s initial effect will be equal to the corresponding boosting parameter. After distribution, the effect wanes, just like SimpleVaccine. In essence, this intervention provides a SimpleVaccine intervention with one effect to all naive (below- threshold) individuals, and another effect to all primed (above-threshold) individuals; this behavior is intended to mimic biological priming and boosting.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Boost_Effect

float

0

1

1

Specifies the boosting effect on [acquisition/transmission/mortality] immunity for previously exposed individuals (either natural or vaccine-derived). This does not replace current immunity, it builds multiplicatively on top of it.

{
    "Intervention_Config": {
        "Cost_To_Consumer": 10.0,
        "Vaccine_Take": 1,
        "Vaccine_Type": "MortalityBlocking",
        "Prime_Effect": 0.25,
        "Boost_Effect": 0.45,
        "Boost_Threshold": 0.0,
        "Waning_Config": {
            "Box_Duration": 10,
            "Initial_Effect": 1,
            "class": "WaningEffectBox"
        },
        "class": "SimpleBoosterVaccine"
    }
}

Boost_Threshold

float

0

1

0

Specifies how much immunity is required before the vaccine changes from a priming effect to a boosting effect.

{
    "Intervention_Config": {
        "Cost_To_Consumer": 10.0,
        "Vaccine_Take": 1,
        "Vaccine_Type": "MortalityBlocking",
        "Prime_Effect": 0.25,
        "Boost_Effect": 0.45,
        "Boost_Threshold": 0.0,
        "Waning_Config": {
            "Box_Duration": 10,
            "Initial_Effect": 1,
            "class": "WaningEffectBox"
        },
        "class": "SimpleBoosterVaccine"
    }
}

Cost_To_Consumer

float

0

999999

10

The unit cost per vaccine (unamortized).

{
    "Cost_To_Consumer": 10.0
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Efficacy_Is_Multiplicative

boolean

0

1

1

The overall vaccine efficacy when individuals receive more than one vaccine. When set to true (1), the vaccine efficacies are multiplied together; when set to false (0), the efficacies are additive.

{
    "Intervention_Config": {
        "class": "SimpleVaccine",
        "Cost_To_Consumer": 10,
        "Vaccine_Type": "AcquisitionBlocking",
        "Vaccine_Take": 1,
        "Efficacy_Is_Multiplicative": 0,
        "Waning_Config": {
            "class": "WaningEffectConstant",
            "Initial_Effect": 0.3
        }
    }
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "SimpleBoosterVaccine",
        "Intervention_Name": "Tetanus booster shot"
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Prime_Effect

float

0

1

1

Specifies the priming effect on [acquisition/transmission/mortality] immunity for naive individuals (without natural or vaccine-derived immunity).

{
    "Intervention_Config": {
        "Cost_To_Consumer": 10.0,
        "Vaccine_Take": 1,
        "Vaccine_Type": "MortalityBlocking",
        "Prime_Effect": 0.25,
        "Boost_Effect": 0.45,
        "Boost_Threshold": 0.0,
        "Waning_Config": {
            "Box_Duration": 10,
            "Initial_Effect": 1,
            "class": "WaningEffectBox"
        },
        "class": "SimpleBoosterVaccine"
    }
}

Vaccine_Take

float

0

1

1

The rate at which delivered vaccines will successfully stimulate an immune response and achieve the desired efficacy. For example, if it is set to 0.9, there will be a 90 percent chance that the vaccine will start with the specified efficacy, and a 10 percent chance that it will have no efficacy at all.

{
    "Intervention_Config": {
        "class": "SimpleVaccine",
        "Cost_To_Consumer": 10,
        "Vaccine_Type": "AcquisitionBlocking",
        "Vaccine_Take": 1,
        "Efficacy_Is_Multiplicative": 0,
        "Waning_Config": {
            "class": "WaningEffectConstant",
            "Initial_Effect": 0.3
        }
    }
}

Vaccine_Type

enum

NA

NA

Generic

The type of vaccine to distribute in a vaccine intervention. Possible values are:

Generic

The vaccine can reduce transmission, acquisition, and mortality.

TransmissionBlocking

The vaccine will reduce pathogen transmission.

AcquisitionBlocking

The vaccine will reduce the acquisition of the pathogen by reducing the force of infection experienced by the vaccinated individual.

MortalityBlocking

The vaccine reduces the disease-mortality rate of a vaccinated individual.

{
    "Intervention_Config": {
        "class": "SimpleVaccine",
        "Cost_To_Consumer": 10,
        "Vaccine_Type": "AcquisitionBlocking",
        "Vaccine_Take": 1,
        "Efficacy_Is_Multiplicative": 0,
        "Waning_Config": {
            "class": "WaningEffectConstant",
            "Initial_Effect": 0.3
        }
    }
}

Waning_Config

JSON object

NA

NA

NA

The configuration of how the intervention efficacy wanes over time. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Waning_Config": {
        "Box_Duration": 3650,
        "Initial_Effect": 1,
        "class": "WaningEffectBox"
    }
}

UsageDependentBednet (malaria)

The UsageDependentBednet intervention class is similar to SimpleBednet, as it distributes insecticide-treated nets to individuals in the simulation. However, bednet ownership and bednet usage are distinct in this intervention. As in SimpleBednet, net ownership is configured through the demographic coverage, and the blocking and killing rates of mosquitoes are time-dependent. Use of bednets is age-dependent and can vary seasonally. Once a net has been distributed to someone, the net usage is determined by the product of the seasonal and age-dependent usage probabilities until the net-retention counter runs out, and the net is discarded.

Parameter

Data type

Minimum

Maximum

Default

Description

Example

Blocking_Config

JSON object

NA

NA

NA

Configures the rate of blocking for indoor mosquito feeds on individuals with an ITN. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Blocking_Config": {
        "Box_Duration": 3650,
        "Initial_Effect": 0,
        "class": "WaningEffectBox"
    }
}

Cost_To_Consumer

float

0

999999

3.75

The unit cost per bednet (unamortized)

{
    "Cost_To_Consumer": 4.5
}

Discard_Event

enum

NA

NA

“”

The event that is broadcast when an individual discards their bed net, either by replacing an existing net or due to the expiration timer. See Event list for possible values.

{
    "Received_Event": "Bednet_Got_New_One",
    "Using_Event": "Bednet_Using",
    "Discard_Event": "Bednet_Discarded",
    "Expiration_Distribution_Type": "FIXED_DURATION",
    "Expiration_Period": 50
}

Disqualifying_Properties

array of strings

NA

NA

[]

A list of IndividualProperty key:value pairs that cause an intervention to be aborted (persistent interventions will stop being distributed to individuals with these values). See NodeProperties and IndividualProperties parameters for more information. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.

{
    "Disqualifying_Properties": [
        "InterventionStatus:LostForever"
    ]
}

Dont_Allow_Duplicates

boolean

0

1

0

If an individual’s container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.

{
    "Dont_Allow_Duplicates": 0
}

Expiration_Period_Constant

float

0

3.40282E+38

6

The expiration period to use for all bednets, in days, when Expiration_Period_Distribution is set to CONSTANT_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "CONSTANT_DISTRIBUTION",
    "Expiration_Period_Constant": 8
}

Expiration_Period_Distribution

enum

NA

NA

NOT_INITIALIZED

The distribution type to use for assigning the expiration period to a usage-dependent bednet. Each assigned value is a random draw from the distribution.

Possible values are:

NOT_INITIALIZED

No distribution set.

CONSTANT_DISTRIBUTION

Use the same value for each individual. Set Expiration_Period_Constant.

UNIFORM_DISTRIBUTION

Use a uniform distribution with a given minimum and maximum. Set Expiration_Period_Max and Expiration_Period_Min.

GAUSSIAN_DISTRIBUTION

The distribution is Gaussian (or normal). Values are resampled to ensure >= 0. Set Expiration_Period_Gaussian_Mean and Expiration_Period_Gaussian_Std_Dev.

EXPONENTIAL_DISTRIBUTION

The distribution is exponential with a given mean. Set Expiration_Period_Exponential.

WEIBULL_DISTRIBUTION

Use a Weibull distribution with a given shape and scale. Set Expiration_Period_Kappa and Expiration_Period_Lambda.

LOG_NORMAL_DISTRIBUTION

Use a log-normal distribution with a given mean and width. Set Expiration_Period_Log_Normal_Mu and Expiration_Period_Log_Normal_Sigma.

POISSON_DISTRIBUTION

Use a Poisson distribution with a given mean. Set Expiration_Period_Poisson_Mean.

DUAL_CONSTANT_DISTRIBUTION

Use a distribution where some individuals are set to a value of zero and the rest to a given value. Set Expiration_Period_Proportion_0 and Peak_2_Value. This distribution does not use the parameters set for CONSTANT_DISTRIBUTION.

DUAL_EXPONENTIAL_DISTRIBUTION

Use two exponential distributions with given means. Set Expiration_Period_Mean_1, Expiration_Period_Mean_2, and Expiration_Period_Proportion_1. This distribution does not use the parameters set for EXPONENTIAL_DISTRIBUTION.

{
    "Duration_Before_Leaving_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Duration_Before_Leaving_Log_Normal_Mu": 9,
    "Duration_Before_Leaving_Log_Normal_Sigma": 2
}

Expiration_Period_Exponential

float

0

3.40282E+38

6

The mean of the expiration period, in days, when Expiration_Period_Distribution is set to EXPONENTIAL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "EXPONENTIAL_DISTRIBUTION",
    "Expiration_Period_Exponential": 4.25
}

Expiration_Period_Gaussian_Mean

float

0

3.40282E+38

6

The mean of the expiration period, in days, when Expiration_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Expiration_Period_Gaussian_Mean": 8,
    "Expiration_Period_Gaussian_Std_Dev": 1.5
}

Expiration_Period_Gaussian_Std_Dev

float

1.17549E-38

3.40282E+38

1

The standard deviation of the expiration period, in days, when Expiration_Period_Distribution is set to GAUSSIAN_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "GAUSSIAN_DISTRIBUTION",
    "Expiration_Period_Gaussian_Mean": 8,
    "Expiration_Period_Gaussian_Std_Dev": 1.5
}

Expiration_Period_Kappa

float

1.17549E-38

3.40282E+38

1

The shape value for the expiration period, in days, when Expiration_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Expiration_Period_Kappa": 0.9,
    "Expiration_Period_Lambda": 1.5
}

Expiration_Period_Lambda

float

1.17549E-38

3.40282E+38

1

The scale value for the expiration period, in days, when Expiration_Period_Distribution is set to WEIBULL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "WEIBULL_DISTRIBUTION",
    "Expiration_Period_Kappa": 0.9,
    "Expiration_Period_Lambda": 1.5
}

Expiration_Period_Log_Normal_Mu

float

-3.40282e+38

3.40282E+38

6

The mean of the expiration period, in days, when Expiration_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Expiration_Period_Log_Normal_Mu": 9,
    "Expiration_Period_Log_Normal_Sigma": 2
}

Expiration_Period_Log_Normal_Sigma

float

-3.40282e+38

3.40282E+38

1

The width of the expiration period, in days, when Expiration_Period_Distribution is set to LOG_NORMAL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "LOG_NORMAL_DISTRIBUTION",
    "Expiration_Period_Log_Normal_Mu": 9,
    "Expiration_Period_Log_Normal_Sigma": 2
}

Expiration_Period_Max

float

0

3.40282E+38

1

The maximum expiration period, in days, when Expiration_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Expiration_Period_Min": 2,
    "Expiration_Period_Max": 7
}

Expiration_Period_Mean_1

float

1.17549E-38

3.40282E+38

1

The mean of the first exponential distribution, in days, when Expiration_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Expiration_Period_Mean_1": 4,
    "Expiration_Period_Mean_2": 12,
    "Expiration_Period_Proportion_1": 0.2
}

Expiration_Period_Mean_2

float

1.17549E-38

3.40282E+38

1

The mean of the second exponential distribution, in days, when Expiration_Period_Distribution is set to DUAL_EXPONENTIAL_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Expiration_Period_Mean_1": 4,
    "Expiration_Period_Mean_2": 12,
    "Expiration_Period_Proportion_1": 0.2
}

Expiration_Period_Min

float

0

3.40282E+38

0

The minimum expiration period, in days, when Expiration_Period_Distribution is set to UNIFORM_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "UNIFORM_DISTRIBUTION",
    "Expiration_Period_Min": 2,
    "Expiration_Period_Max": 7
}

Expiration_Period_Peak_2_Value

float

0

3.40282E+38

1

The expiration period value to assign to the remaining bednets, in days, when Expiration_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Expiration_Period_Proportion_0": 0.25,
    "Expiration_Period_Peak_2_Value": 5
}

Expiration_Period_Poisson_Mean

float

0

3.40282E+38

6

The mean of the expiration period, in days, when Expiration_Period is set to POISSON_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "POISSON_DISTRIBUTION",
    "Expiration_Period_Poisson_Mean": 5
}

Expiration_Period_Proportion_0

float

0

1

1

The proportion of bednets to assign a value of zero days until expiration when Expiration_Period_Distribution is set to DUAL_CONSTANT_DISTRIBUTION.

{
    "Expiration_Period_Distribution": "DUAL_CONSTANT_DISTRIBUTION",
    "Expiration_Period_Proportion_0": 0.25,
    "Expiration_Period_Peak_2_Value": 5
}

Expiration_Period_Proportion_1

float

0

1

1

The proportion of bednets in the first exponential distribution.

{
    "Expiration_Period_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION",
    "Expiration_Period_Mean_1": 4,
    "Expiration_Period_Mean_2": 12,
    "Expiration_Period_Proportion_1": 0.2
}

Intervention_Name

string

NA

NA

NA

The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.

{
    "Intervention_Config": {
        "class": "UsageDependentBednet",
        "Intervention_Name": "IRS bednet that wears over time"
    }
}

Killing_Config

JSON object

NA

NA

NA

The configuration of the rate at which mosquitoes die, conditional on a successfully blocked feed. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Killing_Config": {
        "Box_Duration": 3650,
        "Initial_Effect": 0.53429,
        "class": "WaningEffectBox"
    }
}

New_Property_Value

string

NA

NA

NA

An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. See NodeProperties and IndividualProperties parameters for more information. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways. For example, if an individual must already be taking a particular medication to be prescribed a new one.

{
    "New_Property_Value": "InterventionStatus:None"
}

Received_Event

enum

NA

NA

“”

This parameter broadcasts when a new net is received, either the first net or a replacement net. See Event list for possible values.

{
    "Received_Event": "Bednet_Got_New_One",
    "Using_Event": "Bednet_Using",
    "Discard_Event": "Bednet_Discarded"
}

Usage_Config_List

array of JSON objects

NA

NA

NA

The list of WaningEffects whose effects are multiplied together to get the usage effect. Specify how this effect decays over time using one of the Waning effect classes.

{
    "Usage_Config_List": [
        {
            "class": "WaningEffectConstant",
            "Initial_Effect": 1.0
        }
    ]
}

Using_Event

enum

NA

NA

NA

This parameter broadcasts each time step in which a bed net is used. See Event list for possible values.

{
    "Received_Event": "Bednet_Got_New_One",
    "Using_Event": "Bednet_Using",
    "Discard_Event": "Bednet_Discarded"
}

Malaria model

Several habitat parameters in the malaria model have been upgraded, creating more flexibility in the model and enabling the user to have more control over habitat customization. These changes allow the model to more accurately capture real-world habitat availability and how it affects different mosquito species.

LINEAR_SPLINE habitat type

This new option under Larval_Habitat_Types increases model customization by allowing the user to specify an arbitrary functional form (derived from data) for larval habitat availability throughout the year, instead of relying on climatological parameters such as rainfall or temperature. For more information, see Larval habitat parameters.

LarvalHabitatMultiplier by species

This new feature in demographics allows larval habitat availability to be modified independently for each species sharing a particular habitat type. Prior versions of EMOD applied the same modifier to all species within a shared habitat; this upgrade enables you to apply modifiers to individual species within a habitat. For more information, see NodeAttributes parameters.

ScaleLarvalHabitat by species

This new intervention enables species-specific effects of habitat interventions within shared habitat types, such that habitat availability is modified on a per-species level.

Breaking changes

PIECEWISE_MONTHLY has been changed to LINEAR_SPLINE.