Vaccine
name: str
Name of feature in the params file. Also used to name the attribute in Agent
stats: List[str]
Vaccine collects the following stats:
- vaccine - number of agents with active vaccine
get_acquisition_risk_multiplier(self, time, interaction_type)
Get a multiplier for how vaccine affects acquisition of HIV for the given interaction_type.
By default, returns 1.0
Parameters:
Name | Type | Description | Default |
---|---|---|---|
time |
int |
the current model time step |
required |
interaction_type |
str |
The type of interaction where the agent could acquire HIV (e.g. 'sex', 'injection' - from [params.classes.interaction_types]) |
required |
Source code in titan/features/vaccine.py
def get_acquisition_risk_multiplier(self, time: int, interaction_type: str):
"""
Get a multiplier for how vaccine affects acquisition of HIV for the given interaction_type.
By default, returns 1.0
args:
time: the current model time step
interaction_type: The type of interaction where the agent could acquire HIV (e.g. 'sex', 'injection' - from [params.classes.interaction_types])
"""
# not protected the time step the agent is vaccinaetd
if self.active and self.time is not None and self.time < time:
vaccine_time_months = (
(time - self.time)
/ self.agent.location.params.model.time.steps_per_year
) * 12
if self.type == "HVTN702":
return np.exp(
-2.88 + 0.76 * (np.log((vaccine_time_months + 0.001) * 30))
)
elif self.type == "RV144":
return np.exp(-2.40 + 0.76 * (np.log(vaccine_time_months)))
else:
return 1 - self.agent.location.params.vaccine.efficacy
return 1.0
init_agent(self, pop, time)
Initialize the agent for this feature during population initialization (Population.create_agent
). Called on only features that are enabled per the params.
If the agent is HIV-, randomly vaccinate per the params.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pop |
population.Population |
the population this agent is a part of |
required |
time |
int |
the current time step |
required |
Source code in titan/features/vaccine.py
def init_agent(self, pop: "population.Population", time: int):
"""
Initialize the agent for this feature during population initialization (`Population.create_agent`). Called on only features that are enabled per the params.
If the agent is HIV-, randomly vaccinate per the params.
args:
pop: the population this agent is a part of
time: the current time step
"""
if (
not self.agent.hiv.active # type: ignore[attr-defined]
and self.agent.location.params.vaccine.on_init
and pop.pop_random.random()
< self.agent.location.params.demographics[self.agent.race]
.sex_type[self.agent.sex_type]
.vaccine.init
):
self.vaccinate(time)
set_stats(self, stats, time)
Update the stats
dictionary passed for this agent. Called from output.get_stats
for each enabled feature in the model.
The stats to be updated must be declared in the class attribute stats
to make sure the dictionary has the expected keys/counter value initialized.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
stats |
Dict[str, int] |
the dictionary to update with this agent's feature statistics |
required |
time |
int |
the time step of the model when the stats are set |
required |
Source code in titan/features/vaccine.py
def set_stats(self, stats: Dict[str, int], time: int):
if self.active:
stats["vaccine"] += 1
update_agent(self, model)
Update the agent for this feature for a time step. Called once per time step in TITAN.update_all_agents
. Agent level updates are done after population level updates. Called on only features that are enabled per the params.
If PrEP feature is enable and the agent is not active PrEP and not HIV, either update or stochastically vaccinate the agent.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model |
model.TITAN |
the instance of TITAN currently being run |
required |
Source code in titan/features/vaccine.py
def update_agent(self, model: "model.TITAN"):
"""
Update the agent for this feature for a time step. Called once per time step in `TITAN.update_all_agents`. Agent level updates are done after population level updates. Called on only features that are enabled per the params.
If PrEP feature is enable and the agent is not active PrEP and not HIV, either update or stochastically vaccinate the agent.
args:
model: the instance of TITAN currently being run
"""
if (
not self.agent.prep.active # type: ignore[attr-defined]
and not self.agent.hiv.active # type: ignore[attr-defined]
):
vaccine_params = self.agent.location.params.vaccine
agent_params = (
self.agent.location.params.demographics[self.agent.race]
.sex_type[self.agent.sex_type]
.vaccine
)
if self.active:
if (
vaccine_params.booster
and (model.time - self.time) == agent_params.booster.interval
and model.run_random.random() < agent_params.booster.prob
):
self.vaccinate(model.time)
elif model.time == vaccine_params.start_time:
if model.run_random.random() < agent_params.prob:
self.vaccinate(model.time)
vaccinate(self, time)
Vaccinate an agent and update relevant fields.
Source code in titan/features/vaccine.py
def vaccinate(self, time):
"""
Vaccinate an agent and update relevant fields.
"""
self.active = True
self.type = self.agent.location.params.vaccine.type
self.time = time