From 159601442a416a7f2812bb3ea53ca25391bc2c14 Mon Sep 17 00:00:00 2001 From: Arindam Saha Date: Fri, 1 Dec 2023 12:10:59 -0500 Subject: [PATCH] Immune fraction read from a file --- covid_data/disease_covid19.yml | 1 + covid_data/disease_measles.yml | 1 + facs/base/disease.py | 4 ++++ facs/base/person.py | 1 + facs/readers/read_disease_yml.py | 9 +++++---- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/covid_data/disease_covid19.yml b/covid_data/disease_covid19.yml index 81fea6c..a9c14fd 100644 --- a/covid_data/disease_covid19.yml +++ b/covid_data/disease_covid19.yml @@ -43,6 +43,7 @@ incubation_period: 4 # https://www.ams.edu.sg/view-pdf.aspx?file=media%5c5558_fi # Fei Zhou et al. The Lancet vol. 395. period_to_hospitalisation: 14.0 #this is period to ICU. immunity_duration: 273.0 +immunity_fraction: 0.0 mutations: alpha: infection_rate: 0.112 diff --git a/covid_data/disease_measles.yml b/covid_data/disease_measles.yml index 8c1ce61..469aa2e 100644 --- a/covid_data/disease_measles.yml +++ b/covid_data/disease_measles.yml @@ -30,6 +30,7 @@ mild_recovery_period: 14.0 # Mild measles cases may have a shorter recovery incubation_period: 10.0 # Measles' incubation period, from virus exposure to symptom onset, is around 10 to 14 days (range: 7 to 21 days). period_to_hospitalisation: 7.0 # The time to hospitalisation varies; severe cases may require it within days, while mild cases may not need hospitalisation. immunity_duration: 9125.0 # Natural immunity after measles recovery is usually lifelong, but waning immunity can occur over decades. MMR vaccination provides long-lasting immunity, often for life. +immunity_fraction: 0.8 # The initial fraction of the population that is immune to measles due to vaccination or prior infection. genotypes: D4: infection_rate: 0.12 diff --git a/facs/base/disease.py b/facs/base/disease.py index 3c7ea4c..623fdf8 100644 --- a/facs/base/disease.py +++ b/facs/base/disease.py @@ -23,6 +23,7 @@ class Disease: mortality_period: float period_to_hospitalisation: float immunity_duration: float + immunity_fraction: float hospital: list[float] = field(default_factory=list, init=False, repr=False) mortality: list[float] = field(default_factory=list, init=False, repr=False) @@ -54,6 +55,9 @@ def __post_init__(self): if getattr(self, attr) == 0: warnings.warn(f"{attr} is zero", RuntimeWarning) + if self.immunity_fraction < 0 or self.immunity_fraction > 1: + raise ValueError("Immunity fraction must be between 0 and 1") + def array_sanity_check(self, array: list[list[float]], name: str): """Sanity check for Hospitalisation and Mortality parameters.""" diff --git a/facs/base/person.py b/facs/base/person.py index ad759b1..c834d41 100644 --- a/facs/base/person.py +++ b/facs/base/person.py @@ -37,6 +37,7 @@ antivax_chance = vac_data["antivax_fraction"] immune_duration = read_disease_yml("covid_data/disease_covid19.yml").immunity_duration +immunity_fraction = read_disease_yml("covid_data/disease_covid19.yml").immunity_fraction @dataclass diff --git a/facs/readers/read_disease_yml.py b/facs/readers/read_disease_yml.py index b4809a5..718690c 100644 --- a/facs/readers/read_disease_yml.py +++ b/facs/readers/read_disease_yml.py @@ -19,11 +19,12 @@ def read_disease_yml(ymlfile: str) -> Disease: data["mortality_period"], data["period_to_hospitalisation"], data["immunity_duration"], + data["immunity_fraction"], ) - + disease.add_mortality_chances(data["mortality"]) disease.add_hospitalisation_chances(data["hospitalised"]) - + if "mutations" in data: # Handle mutations disease.add_mutations(data["mutations"]) @@ -32,7 +33,7 @@ def read_disease_yml(ymlfile: str) -> Disease: disease.add_genotypes(data["genotypes"]) else: print("No mutations or genotypes provided") - + print(disease) - + return disease