From 153896ec7e837f357dee8f15f2f44da4fd7aead4 Mon Sep 17 00:00:00 2001 From: Luis Aleixo Date: Fri, 17 Sep 2021 17:27:52 +0200 Subject: [PATCH] Updated host immunity declaration to model generator --- cara/apps/calculator/model_generator.py | 3 ++- cara/apps/expert.py | 1 + cara/models.py | 16 ++++++++-------- cara/monte_carlo/data.py | 10 +++++----- cara/tests/models/test_concentration_model.py | 2 +- cara/tests/models/test_exposure_model.py | 5 +++-- cara/tests/test_infected_population.py | 2 +- 7 files changed, 21 insertions(+), 18 deletions(-) diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index 0d1ea2b2..1a7712d9 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -417,7 +417,8 @@ class FormData: presence=self.infected_present_interval(), mask=self.mask(), activity=activity, - expiration=expiration + expiration=expiration, + host_immunity=0., ) return infected diff --git a/cara/apps/expert.py b/cara/apps/expert.py index 664f97b3..10a38501 100644 --- a/cara/apps/expert.py +++ b/cara/apps/expert.py @@ -499,6 +499,7 @@ baseline_model = models.ExposureModel( mask=models.Mask.types['No mask'], activity=models.Activity.types['Seated'], expiration=models.Expiration.types['Talking'], + host_immunity=0., ), ), exposed=models.Population( diff --git a/cara/models.py b/cara/models.py index 410c48e3..a62e73d5 100644 --- a/cara/models.py +++ b/cara/models.py @@ -430,7 +430,7 @@ class Virus: infectious_dose: _VectorisedFloat #: viable-to-RNA virus ratio as a function of the viral load - viable_to_RNA: _VectorisedFloat + viable_to_RNA_ratio: _VectorisedFloat #: Pre-populated examples of Viruses. types: typing.ClassVar[typing.Dict[str, "Virus"]] @@ -468,23 +468,23 @@ Virus.types = { # as per https://www.dhs.gov/publication/st-master-question-list-covid-19 # 50 comes from Buonanno et al. infectious_dose=50., - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), 'SARS_CoV_2_B117': SARSCoV2( # also called VOC-202012/01 viral_load_in_sputum=1e9, infectious_dose=30., - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), 'SARS_CoV_2_P1': SARSCoV2( viral_load_in_sputum=1e9, infectious_dose=1/0.045, - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), 'SARS_CoV_2_B16172': SARSCoV2( viral_load_in_sputum=1e9, infectious_dose=30/1.6, - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), } @@ -713,8 +713,8 @@ class InfectedPopulation(_PopulationWithVirus): #: The type of expiration that is being emitted whilst doing the activity. expiration: _ExpirationBase - #: The percentage of host immunity - host_immunity: float = 0. + #: The ratio of virions that are inactivated by the infected person's immunity. + host_immunity: _VectorisedFloat @method_cache def emission_rate_when_present(self) -> _VectorisedFloat: @@ -973,7 +973,7 @@ class ExposureModel: self.exposed.activity.inhalation_rate * (1 - self.exposed.mask.inhale_efficiency()) * exposure * self.fraction_deposited * - (self.concentration_model.infected.virus.viable_to_RNA * (1 - self.concentration_model.infected.host_immunity)) + (self.concentration_model.infected.virus.viable_to_RNA_ratio * (1 - self.concentration_model.infected.host_immunity)) ) # Probability of infection. diff --git a/cara/monte_carlo/data.py b/cara/monte_carlo/data.py index 1ecb25a1..02c9f805 100644 --- a/cara/monte_carlo/data.py +++ b/cara/monte_carlo/data.py @@ -100,29 +100,29 @@ symptomatic_vl_frequencies = LogCustomKernel( ) # From https://doi.org/10.1093/cid/ciaa1579 -infectious_virus_distribution = Uniform(0.15, 0.45) +viable_to_RNA_ratio_distribution = Uniform(0.15, 0.45) # From CERN-OPEN-2021-04 and refererences therein virus_distributions = { 'SARS_CoV_2': mc.SARSCoV2( viral_load_in_sputum=symptomatic_vl_frequencies, infectious_dose=100, - viable_to_RNA=infectious_virus_distribution, + viable_to_RNA_ratio=viable_to_RNA_ratio_distribution, ), 'SARS_CoV_2_B117': mc.SARSCoV2( viral_load_in_sputum=symptomatic_vl_frequencies, infectious_dose=60, - viable_to_RNA=infectious_virus_distribution, + viable_to_RNA_ratio=viable_to_RNA_ratio_distribution, ), 'SARS_CoV_2_P1': mc.SARSCoV2( viral_load_in_sputum=symptomatic_vl_frequencies, infectious_dose=100/2.25, - viable_to_RNA=infectious_virus_distribution, + viable_to_RNA_ratio=viable_to_RNA_ratio_distribution, ), 'SARS_CoV_2_B16172': mc.SARSCoV2( viral_load_in_sputum=symptomatic_vl_frequencies, infectious_dose=60/1.6, - viable_to_RNA=infectious_virus_distribution, + viable_to_RNA_ratio=viable_to_RNA_ratio_distribution, ), } diff --git a/cara/tests/models/test_concentration_model.py b/cara/tests/models/test_concentration_model.py index 117f00d5..7d7a6755 100644 --- a/cara/tests/models/test_concentration_model.py +++ b/cara/tests/models/test_concentration_model.py @@ -42,7 +42,7 @@ def test_concentration_model_vectorisation(override_params): virus=models.SARSCoV2( viral_load_in_sputum=defaults['viral_load_in_sputum'], infectious_dose=50., - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), expiration=models._ExpirationBase.types['Breathing'], ) diff --git a/cara/tests/models/test_exposure_model.py b/cara/tests/models/test_exposure_model.py index 98d4e361..9d3ef966 100644 --- a/cara/tests/models/test_exposure_model.py +++ b/cara/tests/models/test_exposure_model.py @@ -65,7 +65,8 @@ def known_concentrations(func): mask=models.Mask.types['Type I'], activity=models.Activity.types['Standing'], virus=models.Virus.types['SARS_CoV_2_B117'], - expiration=models.Expiration.types['Talking'] + expiration=models.Expiration.types['Talking'], + host_immunity=0., ) normed_func = lambda x: func(x) / dummy_infected_population.emission_rate_when_present() return KnownNormedconcentration(dummy_room, dummy_ventilation, @@ -190,7 +191,7 @@ def test_infectious_dose_vectorisation(): virus=models.SARSCoV2( viral_load_in_sputum=1e9, infectious_dose=np.array([50, 20, 30]), - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), expiration=models.Expiration.types['Talking'] ) diff --git a/cara/tests/test_infected_population.py b/cara/tests/test_infected_population.py index 9f7b06ab..df087aac 100644 --- a/cara/tests/test_infected_population.py +++ b/cara/tests/test_infected_population.py @@ -32,7 +32,7 @@ def test_infected_population_vectorisation(override_params): virus=cara.models.Virus( viral_load_in_sputum=defaults['viral_load_in_sputum'], infectious_dose=50., - viable_to_RNA = 0.5, + viable_to_RNA_ratio = 0.5, ), expiration=cara.models._ExpirationBase.types['Breathing'], )