Source code for pyEpiabm.property.household_foi

#
# Calculate household force of infection based on Covidsim code
#
import pyEpiabm.core
from pyEpiabm.core import Parameters

from .personal_foi import PersonalInfection


[docs] class HouseholdInfection: """Class to calculate the infectiousness and susceptibility parameters for the force of infection parameter, within households. """
[docs] @staticmethod def household_inf(infector, time: float): """Calculate the infectiousness of a person in a given household. Does not include interventions such as isolation, or whether individual is a carehome resident. Parameters ---------- infector : Person Infector time : float Current simulation time Returns ------- float Infectiousness parameter of household """ closure_inf = Parameters.instance().\ intervention_params['place_closure'][ 'closure_household_infectiousness'] \ if (hasattr(infector.microcell, 'closure_start_time')) and ( infector.is_place_closed( Parameters.instance().intervention_params[ 'place_closure']['closure_place_type'])) and ( infector.microcell.closure_start_time <= time ) else 1 household_infectiousness = infector.infectiousness * closure_inf return household_infectiousness
[docs] @staticmethod def household_susc(infector, infectee, time: float): """Calculate the susceptibility of one person to another in a given household. Intervention parameters are based on the microcell properties of the infectee. Does not include interventions such as isolation, or whether individual is a carehome resident. Parameters ---------- infector : Person Infector infectee : Person Infectee time : float Current simulation time Returns ------- float Susceptibility parameter of household """ household_susceptibility = PersonalInfection.person_susc(infectee, time) if (hasattr(infectee.microcell, 'distancing_start_time')) and ( infectee.microcell.distancing_start_time is not None) and ( infectee.microcell.distancing_start_time <= time): if (hasattr(infectee, 'distancing_enhanced')) and ( infectee.distancing_enhanced is True): household_susceptibility *= Parameters.instance().\ intervention_params['social_distancing'][ 'distancing_house_enhanced_susc'] else: household_susceptibility *= Parameters.instance().\ intervention_params['social_distancing'][ 'distancing_house_susc'] return household_susceptibility
[docs] @staticmethod def household_foi(infector, infectee, time: float): """Calculate the force of infection parameter of a household, for a particular infector and infectee. Parameters ---------- infector : Person Infector infectee : Person Infectee time : float Current simulation time Returns ------- float Force of infection parameter of household """ carehome_scale_inf = 1 if infector.care_home_resident: carehome_scale_inf = Parameters.instance()\ .carehome_params["carehome_resident_household_scaling"] carehome_scale_susc = 1 if infectee.care_home_resident: carehome_scale_susc = Parameters.instance()\ .carehome_params["carehome_resident_household_scaling"] seasonality = 1.0 # Not yet implemented travel_isolation_scale = Parameters.instance().\ intervention_params['travel_isolation']['isolation_house' '_effectiveness'] \ if (hasattr(infector, 'travel_isolation_start_time')) and ( infector.travel_isolation_start_time is not None) and ( infector.travel_isolation_start_time <= time) else 1 isolation_scale = Parameters.instance().\ intervention_params['case_isolation']['isolation_house' '_effectiveness'] \ if (hasattr(infector, 'isolation_start_time')) and ( infector.isolation_start_time is not None) and ( infector.isolation_start_time <= time) else 1 quarantine_scale = Parameters.instance().\ intervention_params['household_quarantine']['quarantine_house' '_effectiveness'] \ if (hasattr(infectee, 'quarantine_start_time')) and ( infectee.quarantine_start_time is not None) and ( infectee.quarantine_start_time <= time) else 1 vacc_inf_drop = 1 if infector.is_vaccinated: vacc_params = Parameters.instance()\ .intervention_params['vaccine_params'] if time > (infector.date_vaccinated + vacc_params['time_to_efficacy']): vacc_inf_drop *= (1 - vacc_params['vacc_inf_drop']) # Dominant interventions: 1) travel_isolate; 2) case_isolate isolation_scale_inf = 1 if travel_isolation_scale != 1: isolation_scale_inf = travel_isolation_scale elif isolation_scale != 1: isolation_scale_inf = isolation_scale infectiousness = (HouseholdInfection.household_inf(infector, time) * seasonality * vacc_inf_drop * pyEpiabm.core.Parameters.instance(). household_transmission * carehome_scale_inf * isolation_scale_inf * quarantine_scale) susceptibility = (HouseholdInfection.household_susc(infector, infectee, time) * carehome_scale_susc) return (infectiousness * susceptibility)