Skip to content

Commit

Permalink
Immune fraction read from a file
Browse files Browse the repository at this point in the history
  • Loading branch information
arindamsaha1507 committed Dec 1, 2023
1 parent 45b8ec0 commit 1596014
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 4 deletions.
1 change: 1 addition & 0 deletions covid_data/disease_covid19.yml
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions covid_data/disease_measles.yml
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions facs/base/disease.py
Expand Up @@ -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)
Expand Down Expand Up @@ -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."""

Expand Down
1 change: 1 addition & 0 deletions facs/base/person.py
Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions facs/readers/read_disease_yml.py
Expand Up @@ -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"])
Expand All @@ -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

0 comments on commit 1596014

Please sign in to comment.