config: remove Ref: config parsing
This commit is contained in:
parent
bb51eaa360
commit
2abdd130cf
4 changed files with 96 additions and 77 deletions
13
caimira/enums.py
Normal file
13
caimira/enums.py
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
from enum import Enum
|
||||
|
||||
class ViralLoads(Enum):
|
||||
COVID_OVERALL = "COVID overall"
|
||||
SYMPTOMATIC_FREQUENCIES = "Symptomatic frequencies"
|
||||
|
||||
|
||||
class InfectiousDoses(Enum):
|
||||
DISTRIBUTION = "Distribution"
|
||||
|
||||
|
||||
class ViableToRNARatios(Enum):
|
||||
DISTRIBUTION = "Distribution"
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
import typing
|
||||
|
||||
|
|
@ -5,10 +7,37 @@ import numpy as np
|
|||
from scipy import special as sp
|
||||
from scipy.stats import weibull_min
|
||||
|
||||
import caimira.monte_carlo as mc
|
||||
from caimira.enums import ViralLoads, InfectiousDoses, ViableToRNARatios
|
||||
|
||||
import caimira.monte_carlo.models as mc
|
||||
from caimira.monte_carlo.sampleable import LogCustom, LogNormal, Normal, LogCustomKernel, CustomKernel, Uniform, Custom
|
||||
from caimira.store.data_registry import DataRegistry
|
||||
|
||||
|
||||
def evaluate_vl(value, data_registry: DataRegistry):
|
||||
if value == ViralLoads.COVID_OVERALL:
|
||||
return covid_overal_vl_data(data_registry)
|
||||
elif value == ViralLoads.COVID_OVERALL:
|
||||
return symptomatic_vl_frequencies
|
||||
else:
|
||||
raise ValueError(f"Invalid ViralLoads value {value}")
|
||||
|
||||
|
||||
def evaluate_infectd(value, data_registry: DataRegistry):
|
||||
if value == InfectiousDoses.DISTRIBUTION:
|
||||
return infectious_dose_distribution(data_registry)
|
||||
else:
|
||||
raise ValueError(f"Invalid InfectiousDoses value {value}")
|
||||
|
||||
|
||||
def evaluate_vtrr(value, data_registry: DataRegistry):
|
||||
"""."""
|
||||
if value == ViableToRNARatios.DISTRIBUTION:
|
||||
return viable_to_RNA_ratio_distribution(data_registry)
|
||||
else:
|
||||
raise ValueError(f"Invalid ViableToRNARatios value {value}")
|
||||
|
||||
|
||||
sqrt2pi = np.sqrt(2.*np.pi)
|
||||
sqrt2 = np.sqrt(2.)
|
||||
|
||||
|
|
@ -94,10 +123,7 @@ def param_evaluation(root: typing.Dict, param: typing.Union[str, typing.Any]) ->
|
|||
value = root.get(param)
|
||||
|
||||
if isinstance(value, str):
|
||||
if value.startswith('Ref:'):
|
||||
reference_variable = value.split(' - ')[1].strip()
|
||||
return evaluate_reference(reference_variable)
|
||||
elif value == 'Custom':
|
||||
if value == 'Custom':
|
||||
custom_distribution: typing.Dict = custom_distribution_lookup(
|
||||
root, 'custom distribution')
|
||||
for d, p in custom_distribution.items():
|
||||
|
|
@ -286,66 +312,43 @@ def infectious_dose_distribution(data_registry):
|
|||
|
||||
# From https://doi.org/10.1101/2021.10.14.21264988 and references therein
|
||||
def virus_distributions(data_registry):
|
||||
vd = data_registry.virus_distributions
|
||||
return {
|
||||
'SARS_CoV_2': mc.SARSCoV2(
|
||||
viral_load_in_sputum=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2'], 'viral_load_in_sputum'),
|
||||
infectious_dose=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2'], 'infectious_dose'),
|
||||
viable_to_RNA_ratio=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2'], 'viable_to_RNA_ratio'),
|
||||
transmissibility_factor=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2'], 'transmissibility_factor'),
|
||||
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),
|
||||
transmissibility_factor=vd['SARS_CoV_2']['transmissibility_factor'],
|
||||
),
|
||||
'SARS_CoV_2_ALPHA': mc.SARSCoV2(
|
||||
viral_load_in_sputum=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_ALPHA'], 'viral_load_in_sputum'),
|
||||
infectious_dose=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_ALPHA'], 'infectious_dose'),
|
||||
viable_to_RNA_ratio=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_ALPHA'], 'viable_to_RNA_ratio'),
|
||||
transmissibility_factor=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_ALPHA'], 'transmissibility_factor'),
|
||||
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),
|
||||
transmissibility_factor=vd['SARS_CoV_2_ALPHA']['transmissibility_factor'],
|
||||
),
|
||||
'SARS_CoV_2_BETA': mc.SARSCoV2(
|
||||
viral_load_in_sputum=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_BETA'], 'viral_load_in_sputum'),
|
||||
infectious_dose=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_BETA'], 'infectious_dose'),
|
||||
viable_to_RNA_ratio=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_BETA'], 'viable_to_RNA_ratio'),
|
||||
transmissibility_factor=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_BETA'], 'transmissibility_factor'),
|
||||
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),
|
||||
transmissibility_factor=vd['SARS_CoV_2_BETA']['transmissibility_factor'],
|
||||
),
|
||||
'SARS_CoV_2_GAMMA': mc.SARSCoV2(
|
||||
viral_load_in_sputum=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_GAMMA'], 'viral_load_in_sputum'),
|
||||
infectious_dose=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_GAMMA'], 'infectious_dose'),
|
||||
viable_to_RNA_ratio=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_GAMMA'], 'viable_to_RNA_ratio'),
|
||||
transmissibility_factor=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_GAMMA'], 'transmissibility_factor'),
|
||||
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),
|
||||
transmissibility_factor=vd['SARS_CoV_2_GAMMA']['transmissibility_factor'],
|
||||
),
|
||||
'SARS_CoV_2_DELTA': mc.SARSCoV2(
|
||||
viral_load_in_sputum=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_DELTA'], 'viral_load_in_sputum'),
|
||||
infectious_dose=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_DELTA'], 'infectious_dose'),
|
||||
viable_to_RNA_ratio=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_DELTA'], 'viable_to_RNA_ratio'),
|
||||
transmissibility_factor=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_DELTA'], 'transmissibility_factor'),
|
||||
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),
|
||||
transmissibility_factor=vd['SARS_CoV_2_DELTA']['transmissibility_factor'],
|
||||
),
|
||||
'SARS_CoV_2_OMICRON': mc.SARSCoV2(
|
||||
viral_load_in_sputum=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_OMICRON'], 'viral_load_in_sputum'),
|
||||
infectious_dose=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_OMICRON'], 'infectious_dose'),
|
||||
viable_to_RNA_ratio=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_OMICRON'], 'viable_to_RNA_ratio'),
|
||||
transmissibility_factor=param_evaluation(
|
||||
data_registry.virus_distributions['SARS_CoV_2_OMICRON'], 'transmissibility_factor'),
|
||||
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),
|
||||
transmissibility_factor=vd['SARS_CoV_2_OMICRON']['transmissibility_factor'],
|
||||
),
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ class Custom(SampleableDistribution):
|
|||
Defines a distribution which follows a custom curve vs. the random
|
||||
variable. Uses a simple algorithm. This is appropriate for a smooth
|
||||
distribution function.
|
||||
Note: in max_function, a value slightly above the maximum of the distribution
|
||||
Note: in max_function, a value slightly above the maximum of the distribution
|
||||
function should be provided.
|
||||
"""
|
||||
def __init__(self, bounds: typing.Tuple[float, float],
|
||||
|
|
@ -87,8 +87,8 @@ class LogCustom(SampleableDistribution):
|
|||
"""
|
||||
Defines a distribution which follows a custom curve vs. the log (in base 10)
|
||||
of the random variable. Uses a simple algorithm. This is appropriate for a smooth
|
||||
distribution function.
|
||||
Note: in max_function, a value slightly above the maximum of the distribution
|
||||
distribution function.
|
||||
Note: in max_function, a value slightly above the maximum of the distribution
|
||||
function should be provided.
|
||||
"""
|
||||
def __init__(self, bounds: typing.Tuple[float, float],
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
from caimira.enums import ViralLoads, InfectiousDoses, ViableToRNARatios
|
||||
|
||||
|
||||
class DataRegistry:
|
||||
"""Registry to hold data values."""
|
||||
|
||||
|
|
@ -207,51 +210,51 @@ class DataRegistry:
|
|||
}
|
||||
virus_distributions = {
|
||||
"SARS_CoV_2": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 1,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_ALPHA": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 0.78,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_BETA": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 0.8,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_GAMMA": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 0.72,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_DELTA": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 0.51,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_OMICRON": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 0.2,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_Other": {
|
||||
"viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
|
||||
"infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
|
||||
"viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION,
|
||||
"transmissibility_factor": 0.1,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue