Source code for pyEpiabm.intervention.household_quarantine
#
# Household quarantine Class
#
import random
from pyEpiabm.intervention import AbstractIntervention
[docs]
class HouseholdQuarantine(AbstractIntervention):
"""Household/Home quarantine intervention.
People who share household with a symptomatic case (who case isolates)
stay home based on the household and individual compliance, if
intervention is active. Quarantine stops after the quarantine period
or after the end of the policy.
Detailed description of the implementation can be found in github wiki:
https://github.com/SABS-R3-Epidemiology/epiabm/wiki/Interventions.
"""
[docs]
def __init__(
self,
quarantine_duration,
quarantine_delay,
quarantine_house_compliant,
quarantine_individual_compliant,
population,
**kwargs
):
self.quarantine_duration = quarantine_duration
self.quarantine_delay = quarantine_delay
self.quarantine_house_compliant = quarantine_house_compliant
self.quarantine_individual_compliant = quarantine_individual_compliant
self.name = 'household_quarantine'
# start_time, policy_duration, threshold, population
super(HouseholdQuarantine, self).__init__(population=population,
**kwargs)
[docs]
def __call__(self, time):
"""Run household quarantine intervention.
Parameters
----------
time : float
Current simulation time
"""
for cell in self._population.cells:
for person in cell.persons:
if (hasattr(person, 'quarantine_start_time')) and (
person.quarantine_start_time is not None):
if time > person.quarantine_start_time + self.\
quarantine_duration:
# Stop quarantine after quarantine period
person.quarantine_start_time = None
if (hasattr(person, 'isolation_start_time')) and (
person.isolation_start_time == time):
# Require household of symptomatic/isolating individuals to
# quarantine with given household compliance and individual
# compliance. Only check when infector starts its isolation
# in order to prevent resetting. Start time is reset when
# new person in household becomes an infector.
r_house = random.random()
if r_house < self.quarantine_house_compliant:
for household_person in person.household.persons:
if household_person != person:
r_indiv = random.random()
if r_indiv < \
self.quarantine_individual_compliant:
household_person.\
quarantine_start_time = \
time + self.quarantine_delay
[docs]
def turn_off(self):
"""Turn off intervention after intervention stops being active.
"""
for cell in self._population.cells:
for person in cell.persons:
if (hasattr(person, 'quarantine_start_time')) and (
person.quarantine_start_time is not None):
person.quarantine_start_time = None