Injection
Injection
name: str
Name of interaction in the params file.
get_num_acts(model, rel)
classmethod
Simulate random transmission of HIV between two PWID agents through injection.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model |
model.TITAN |
The currently running model |
required |
rel |
agent.Relationship |
The relationship in which the interaction is happening |
required |
Source code in titan/interactions/injection.py
@classmethod
def get_num_acts(cls, model: "model.TITAN", rel: "agent.Relationship") -> int:
"""
Simulate random transmission of HIV between two PWID agents through injection.
args:
model: The currently running model
rel: The relationship in which the interaction is happening
"""
# make sure both agents have Inj drug type, should only be possible for
# the relationship to have the injection interaction type if both agents PWID
assert rel.agent1.drug_type == "Inj"
assert rel.agent2.drug_type == "Inj"
agent_params = (
rel.agent1.location.params.demographics[rel.agent1.race]
.sex_type[rel.agent1.sex_type]
.injection
)
partner_params = (
rel.agent2.location.params.demographics[rel.agent2.race]
.sex_type[rel.agent2.sex_type]
.injection
)
mean_num_acts = (
min(agent_params.num_acts, partner_params.num_acts)
* model.calibration.injection.act
)
share_acts = poisson(model.np_random, mean_num_acts)
if share_acts < 1:
return 0
if (
rel.agent1.syringe_services.active or rel.agent2.syringe_services.active # type: ignore[attr-defined]
): # syringe services program risk
p_unsafe_injection = features.SyringeServices.enrolled_risk
else:
p_unsafe_injection = agent_params.unsafe_prob
# diagnosis risk reduction
if rel.agent1.hiv.dx or rel.agent1.hiv.dx: # type: ignore[attr-defined]
p_unsafe_injection *= 1 - model.params.hiv.dx.risk_reduction.injection
for n in range(share_acts):
if model.run_random.random() > p_unsafe_injection:
share_acts -= 1
return share_acts