From 3c3758dfcd0fe90005d2ddffa0515123257cd201 Mon Sep 17 00:00:00 2001 From: Luis Aleixo Date: Thu, 14 Mar 2024 16:19:38 +0100 Subject: [PATCH] removal of viable_to_RNA_ratio_distribution and infectious_dose_distribution from data registry --- caimira/enums.py | 8 --- caimira/monte_carlo/data.py | 52 +++++--------- caimira/store/data_registry.py | 70 +++++++++++++------ caimira/tests/test_monte_carlo_full_models.py | 8 +-- 4 files changed, 70 insertions(+), 68 deletions(-) diff --git a/caimira/enums.py b/caimira/enums.py index 6a776e2c..8b66443b 100644 --- a/caimira/enums.py +++ b/caimira/enums.py @@ -3,11 +3,3 @@ from enum import Enum class ViralLoads(Enum): COVID_OVERALL = "Ref: Viral load - covid_overal_vl_data" SYMPTOMATIC_FREQUENCIES = "Ref: Viral load - symptomatic_vl_frequencies" - - -class InfectiousDoses(Enum): - DISTRIBUTION = "Ref: Infectious dose - infectious_dose_distribution" - - -class ViableToRNARatios(Enum): - DISTRIBUTION = "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution" diff --git a/caimira/monte_carlo/data.py b/caimira/monte_carlo/data.py index d6e523b0..d35ab37d 100644 --- a/caimira/monte_carlo/data.py +++ b/caimira/monte_carlo/data.py @@ -7,7 +7,7 @@ import numpy as np from scipy import special as sp from scipy.stats import weibull_min -from caimira.enums import ViralLoads, InfectiousDoses, ViableToRNARatios +from caimira.enums import ViralLoads import caimira.monte_carlo.models as mc from caimira.monte_carlo.sampleable import LogCustom, LogNormal, Normal, LogCustomKernel, CustomKernel, Uniform, Custom @@ -25,24 +25,6 @@ def evaluate_vl(root: typing.Dict, value: str, data_registry: DataRegistry): raise ValueError(f"Invalid ViralLoads value {value}") -def evaluate_infectd(root: typing.Dict, value: str, data_registry: DataRegistry): - if root[value] == InfectiousDoses.DISTRIBUTION.value: - return infectious_dose_distribution(data_registry) - elif root[value] == "Custom": - return param_evaluation(root, 'Infectious dose custom') - else: - raise ValueError(f"Invalid InfectiousDoses value {value}") - - -def evaluate_vtrr(root: typing.Dict, value: str, data_registry: DataRegistry): - if root[value] == ViableToRNARatios.DISTRIBUTION.value: - return viable_to_RNA_ratio_distribution(data_registry) - elif root[value] == "Custom": - return param_evaluation(root, 'Viable to RNA ratio custom') - else: - raise ValueError(f"Invalid ViableToRNARatios value {value}") - - sqrt2pi = np.sqrt(2.*np.pi) sqrt2 = np.sqrt(2.) @@ -275,13 +257,13 @@ def covid_overal_vl_data(data_registry): # Derived from data in doi.org/10.1016/j.ijid.2020.09.025 and # https://iosh.com/media/8432/aerosol-infection-risk-hospital-patient-care-full-report.pdf (page 60) -def viable_to_RNA_ratio_distribution(data_registry): - return Uniform(data_registry.virological_data['viable_to_RNA_ratio_distribution']['low'], data_registry.virological_data['viable_to_RNA_ratio_distribution']['high']) +def viable_to_RNA_ratio_distribution(): + return Uniform(0.01, 0.6) # From discussion with virologists -def infectious_dose_distribution(data_registry): - return Uniform(data_registry.virological_data['infectious_dose_distribution']['low'], data_registry.virological_data['infectious_dose_distribution']['high']) +def infectious_dose_distribution(): + return Uniform(10., 100.) # From https://doi.org/10.1101/2021.10.14.21264988 and references therein @@ -290,38 +272,38 @@ def virus_distributions(data_registry): return { 'SARS_CoV_2': mc.SARSCoV2( viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2'], 'viral_load_in_sputum', data_registry), - infectious_dose=evaluate_infectd(vd['SARS_CoV_2'], 'infectious_dose', data_registry), - viable_to_RNA_ratio=evaluate_vtrr(vd['SARS_CoV_2'], 'viable_to_RNA_ratio', data_registry), + infectious_dose=param_evaluation(vd['SARS_CoV_2'], 'infectious_dose'), + viable_to_RNA_ratio=param_evaluation(vd['SARS_CoV_2'], 'viable_to_RNA_ratio'), transmissibility_factor=vd['SARS_CoV_2']['transmissibility_factor'], ), 'SARS_CoV_2_ALPHA': mc.SARSCoV2( viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2_ALPHA'], 'viral_load_in_sputum', data_registry), - infectious_dose=evaluate_infectd(vd['SARS_CoV_2_ALPHA'], 'infectious_dose', data_registry), - viable_to_RNA_ratio=evaluate_vtrr(vd['SARS_CoV_2_ALPHA'], 'viable_to_RNA_ratio', data_registry), + infectious_dose=param_evaluation(vd['SARS_CoV_2_ALPHA'], 'infectious_dose'), + viable_to_RNA_ratio=param_evaluation(vd['SARS_CoV_2_ALPHA'], 'viable_to_RNA_ratio'), transmissibility_factor=vd['SARS_CoV_2_ALPHA']['transmissibility_factor'], ), 'SARS_CoV_2_BETA': mc.SARSCoV2( viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2_BETA'], 'viral_load_in_sputum', data_registry), - infectious_dose=evaluate_infectd(vd['SARS_CoV_2_BETA'], 'infectious_dose', data_registry), - viable_to_RNA_ratio=evaluate_vtrr(vd['SARS_CoV_2_BETA'], 'viable_to_RNA_ratio', data_registry), + infectious_dose=param_evaluation(vd['SARS_CoV_2_BETA'], 'infectious_dose'), + viable_to_RNA_ratio=param_evaluation(vd['SARS_CoV_2_BETA'], 'viable_to_RNA_ratio'), transmissibility_factor=vd['SARS_CoV_2_BETA']['transmissibility_factor'], ), 'SARS_CoV_2_GAMMA': mc.SARSCoV2( viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2_GAMMA'], 'viral_load_in_sputum', data_registry), - infectious_dose=evaluate_infectd(vd['SARS_CoV_2_GAMMA'], 'infectious_dose', data_registry), - viable_to_RNA_ratio=evaluate_vtrr(vd['SARS_CoV_2_GAMMA'], 'viable_to_RNA_ratio', data_registry), + infectious_dose=param_evaluation(vd['SARS_CoV_2_GAMMA'], 'infectious_dose'), + viable_to_RNA_ratio=param_evaluation(vd['SARS_CoV_2_GAMMA'], 'viable_to_RNA_ratio'), transmissibility_factor=vd['SARS_CoV_2_GAMMA']['transmissibility_factor'], ), 'SARS_CoV_2_DELTA': mc.SARSCoV2( viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2_DELTA'], 'viral_load_in_sputum', data_registry), - infectious_dose=evaluate_infectd(vd['SARS_CoV_2_DELTA'], 'infectious_dose', data_registry), - viable_to_RNA_ratio=evaluate_vtrr(vd['SARS_CoV_2_DELTA'], 'viable_to_RNA_ratio', data_registry), + infectious_dose=param_evaluation(vd['SARS_CoV_2_DELTA'], 'infectious_dose'), + viable_to_RNA_ratio=param_evaluation(vd['SARS_CoV_2_DELTA'], 'viable_to_RNA_ratio'), transmissibility_factor=vd['SARS_CoV_2_DELTA']['transmissibility_factor'], ), 'SARS_CoV_2_OMICRON': mc.SARSCoV2( viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2_OMICRON'], 'viral_load_in_sputum', data_registry), - infectious_dose=evaluate_infectd(vd['SARS_CoV_2_OMICRON'], 'infectious_dose', data_registry), - viable_to_RNA_ratio=evaluate_vtrr(vd['SARS_CoV_2_OMICRON'], 'viable_to_RNA_ratio', data_registry), + infectious_dose=param_evaluation(vd['SARS_CoV_2_OMICRON'], 'infectious_dose'), + viable_to_RNA_ratio=param_evaluation(vd['SARS_CoV_2_OMICRON'], 'viable_to_RNA_ratio'), transmissibility_factor=vd['SARS_CoV_2_OMICRON']['transmissibility_factor'], ), } diff --git a/caimira/store/data_registry.py b/caimira/store/data_registry.py index 59e4026b..429644ae 100644 --- a/caimira/store/data_registry.py +++ b/caimira/store/data_registry.py @@ -1,4 +1,4 @@ -from caimira.enums import ViralLoads, InfectiousDoses, ViableToRNARatios +from caimira.enums import ViralLoads class DataRegistry: @@ -210,54 +210,82 @@ class DataRegistry: "interpolation_fp_right": 0, "max_function": 0.2, }, - "viable_to_RNA_ratio_distribution": { - "low": 0.01, - "high": 0.6, - }, - "infectious_dose_distribution": { - "low": 10, - "high": 100, - }, "virus_distributions": { "SARS_CoV_2": { "viral_load_in_sputum": ViralLoads.COVID_OVERALL.value, - "infectious_dose": InfectiousDoses.DISTRIBUTION.value, - "viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value, + "infectious_dose": { + "associated_value": "Uniform distribution", + "parameters": {"low": 10, "high": 100}, + }, + "viable_to_RNA_ratio": { + 'associated_value': 'Uniform distribution', + 'parameters': {'low': 0.01, 'high': 0.6}, + }, "transmissibility_factor": 1, "infectiousness_days": 14, }, "SARS_CoV_2_ALPHA": { "viral_load_in_sputum": ViralLoads.COVID_OVERALL.value, - "infectious_dose": InfectiousDoses.DISTRIBUTION.value, - "viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value, + "infectious_dose": { + "associated_value": "Uniform distribution", + "parameters": {"low": 10, "high": 100}, + }, + "viable_to_RNA_ratio": { + 'associated_value': 'Uniform distribution', + 'parameters': {'low': 0.01, 'high': 0.6}, + }, "transmissibility_factor": 0.78, "infectiousness_days": 14, }, "SARS_CoV_2_BETA": { "viral_load_in_sputum": ViralLoads.COVID_OVERALL.value, - "infectious_dose": InfectiousDoses.DISTRIBUTION.value, - "viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value, + "infectious_dose": { + "associated_value": "Uniform distribution", + "parameters": {"low": 10, "high": 100}, + }, + "viable_to_RNA_ratio": { + 'associated_value': 'Uniform distribution', + 'parameters': {'low': 0.01, 'high': 0.6}, + }, "transmissibility_factor": 0.8, "infectiousness_days": 14, }, "SARS_CoV_2_GAMMA": { "viral_load_in_sputum": ViralLoads.COVID_OVERALL.value, - "infectious_dose": InfectiousDoses.DISTRIBUTION.value, - "viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value, + "infectious_dose": { + "associated_value": "Uniform distribution", + "parameters": {"low": 10, "high": 100}, + }, + "viable_to_RNA_ratio": { + 'associated_value': 'Uniform distribution', + 'parameters': {'low': 0.01, 'high': 0.6}, + }, "transmissibility_factor": 0.72, "infectiousness_days": 14, }, "SARS_CoV_2_DELTA": { "viral_load_in_sputum": ViralLoads.COVID_OVERALL.value, - "infectious_dose": InfectiousDoses.DISTRIBUTION.value, - "viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value, + "infectious_dose": { + "associated_value": "Uniform distribution", + "parameters": {"low": 10, "high": 100}, + }, + "viable_to_RNA_ratio": { + 'associated_value': 'Uniform distribution', + 'parameters': {'low': 0.01, 'high': 0.6}, + }, "transmissibility_factor": 0.51, "infectiousness_days": 14, }, "SARS_CoV_2_OMICRON": { "viral_load_in_sputum": ViralLoads.COVID_OVERALL.value, - "infectious_dose": InfectiousDoses.DISTRIBUTION.value, - "viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value, + "infectious_dose": { + "associated_value": "Uniform distribution", + "parameters": {"low": 10, "high": 100}, + }, + "viable_to_RNA_ratio": { + 'associated_value': 'Uniform distribution', + 'parameters': {'low': 0.01, 'high': 0.6}, + }, "transmissibility_factor": 0.2, "infectiousness_days": 14, }, diff --git a/caimira/tests/test_monte_carlo_full_models.py b/caimira/tests/test_monte_carlo_full_models.py index f5b6bc74..ec4f6496 100644 --- a/caimira/tests/test_monte_carlo_full_models.py +++ b/caimira/tests/test_monte_carlo_full_models.py @@ -186,8 +186,8 @@ def skagit_chorale_mc(data_registry): presence=models.SpecificInterval(((0, 2.5), )), virus=mc.SARSCoV2( viral_load_in_sputum=10**9, - infectious_dose=infectious_dose_distribution(data_registry), - viable_to_RNA_ratio=viable_to_RNA_ratio_distribution(data_registry), + infectious_dose=infectious_dose_distribution(), + viable_to_RNA_ratio=viable_to_RNA_ratio_distribution(), transmissibility_factor=1., ), mask=models.Mask.types['No mask'], @@ -230,8 +230,8 @@ def bus_ride_mc(data_registry): presence=models.SpecificInterval(((0, 1.67), )), virus=mc.SARSCoV2( viral_load_in_sputum=5*10**8, - infectious_dose=infectious_dose_distribution(data_registry), - viable_to_RNA_ratio=viable_to_RNA_ratio_distribution(data_registry), + infectious_dose=infectious_dose_distribution(), + viable_to_RNA_ratio=viable_to_RNA_ratio_distribution(), transmissibility_factor=1., ), mask=models.Mask.types['No mask'],