updated schema to reflect v2.0.0
This commit is contained in:
parent
74849cdee0
commit
c02737cf92
6 changed files with 236 additions and 262 deletions
|
|
@ -159,7 +159,7 @@ class CO2FormData(FormData):
|
|||
return tuple((self.CO2_data['times'][0], self.CO2_data['times'][-1]))
|
||||
|
||||
def build_model(self, size=None) -> models.CO2DataModel: # type: ignore
|
||||
size = size or self.data_registry.monte_carlo_sample_size
|
||||
size = size or self.data_registry.monte_carlo['sample_size']
|
||||
# Build a simple infected and exposed population for the case when presence
|
||||
# intervals and number of people are dynamic. Activity type is not needed.
|
||||
infected_presence = self.infected_present_interval()
|
||||
|
|
|
|||
|
|
@ -200,10 +200,10 @@ class VirusFormData(FormData):
|
|||
|
||||
if self.arve_sensors_option == False:
|
||||
if self.room_heating_option:
|
||||
humidity = self.data_registry.room['defaults']['humidity_with_heating']
|
||||
humidity = self.data_registry.room['humidity_with_heating']
|
||||
else:
|
||||
humidity = self.data_registry.room['defaults']['humidity_without_heating']
|
||||
inside_temp = self.data_registry.room['defaults']['inside_temp']
|
||||
humidity = self.data_registry.room['humidity_without_heating']
|
||||
inside_temp = self.data_registry.room['inside_temp']
|
||||
else:
|
||||
humidity = float(self.humidity)
|
||||
inside_temp = self.inside_temp
|
||||
|
|
@ -245,11 +245,11 @@ class VirusFormData(FormData):
|
|||
)
|
||||
|
||||
def build_model(self, sample_size=None) -> models.ExposureModel:
|
||||
sample_size = sample_size or self.data_registry.monte_carlo_sample_size
|
||||
sample_size = sample_size or self.data_registry.monte_carlo['sample_size']
|
||||
return self.build_mc_model().build_model(size=sample_size)
|
||||
|
||||
def build_CO2_model(self, sample_size=None) -> models.CO2ConcentrationModel:
|
||||
sample_size = sample_size or self.data_registry.monte_carlo_sample_size
|
||||
sample_size = sample_size or self.data_registry.monte_carlo['sample_size']
|
||||
infected_population: models.InfectedPopulation = self.infected_population().build_model(sample_size)
|
||||
exposed_population: models.Population = self.exposed_population().build_model(sample_size)
|
||||
|
||||
|
|
|
|||
|
|
@ -233,8 +233,8 @@ def conditional_prob_inf_given_vl_dist(
|
|||
for vl_log in viral_loads:
|
||||
specific_prob = infection_probability[np.where((vl_log-step/2-specific_vl)*(vl_log+step/2-specific_vl)<0)[0]] #type: ignore
|
||||
pi_means.append(specific_prob.mean())
|
||||
lower_percentiles.append(np.quantile(specific_prob, data_registry.conditional_prob_inf_given_viral_load['lower_percentile']))
|
||||
upper_percentiles.append(np.quantile(specific_prob, data_registry.conditional_prob_inf_given_viral_load['upper_percentile']))
|
||||
lower_percentiles.append(np.quantile(specific_prob, 0.05))
|
||||
upper_percentiles.append(np.quantile(specific_prob, 0.95))
|
||||
|
||||
return pi_means, lower_percentiles, upper_percentiles
|
||||
|
||||
|
|
@ -245,8 +245,8 @@ def manufacture_conditional_probability_data(
|
|||
):
|
||||
data_registry: DataRegistry = exposure_model.data_registry
|
||||
|
||||
min_vl = data_registry.conditional_prob_inf_given_viral_load['min_vl']
|
||||
max_vl = data_registry.conditional_prob_inf_given_viral_load['max_vl']
|
||||
min_vl = 2
|
||||
max_vl = 10
|
||||
step = (max_vl - min_vl)/100
|
||||
viral_loads = np.arange(min_vl, max_vl, step)
|
||||
specific_vl = np.log10(exposure_model.concentration_model.virus.viral_load_in_sputum)
|
||||
|
|
@ -442,7 +442,7 @@ def scenario_statistics(
|
|||
sample_times: typing.List[float],
|
||||
compute_prob_exposure: bool
|
||||
):
|
||||
model = mc_model.build_model(size=mc_model.data_registry.monte_carlo_sample_size)
|
||||
model = mc_model.build_model(size=mc_model.data_registry.monte_carlo['sample_size'])
|
||||
if (compute_prob_exposure):
|
||||
# It means we have data to calculate the total_probability_rule
|
||||
prob_probabilistic_exposure = model.total_probability_rule()
|
||||
|
|
|
|||
|
|
@ -879,7 +879,7 @@ class _PopulationWithVirus(Population):
|
|||
The fraction of infectious virus.
|
||||
|
||||
"""
|
||||
return self.data_registry.population_with_virus['fraction_of_infectious_virus'] # type: ignore
|
||||
return 1
|
||||
|
||||
def aerosols(self):
|
||||
"""
|
||||
|
|
@ -1052,7 +1052,7 @@ class _ConcentrationModelBase:
|
|||
(in the same unit as the concentration). Its the value towards which
|
||||
the concentration will decay to.
|
||||
"""
|
||||
return self.data_registry.concentration_model['min_background_concentration'] # type: ignore
|
||||
return self.data_registry.concentration_model['virus_concentration_model']['min_background_concentration'] # type: ignore
|
||||
|
||||
def normalization_factor(self) -> _VectorisedFloat:
|
||||
"""
|
||||
|
|
@ -1242,7 +1242,7 @@ class ConcentrationModel(_ConcentrationModelBase):
|
|||
|
||||
def __post_init__(self):
|
||||
if self.evaporation_factor is None:
|
||||
self.evaporation_factor = self.data_registry.particle['evaporation_factor']
|
||||
self.evaporation_factor = self.data_registry.expiration_particle['particle']['evaporation_factor']
|
||||
|
||||
@property
|
||||
def population(self) -> InfectedPopulation:
|
||||
|
|
@ -1335,7 +1335,7 @@ class ShortRangeModel:
|
|||
'''
|
||||
The dilution factor for the respective expiratory activity type.
|
||||
'''
|
||||
_dilution_factor = self.data_registry.short_range_model['dilution_factor']
|
||||
_dilution_factor = self.data_registry.short_range_model['dilution_factor']
|
||||
# Average mouth opening diameter (m)
|
||||
mouth_diameter: float = _dilution_factor['mouth_diameter'] # type: ignore
|
||||
|
||||
|
|
@ -1359,7 +1359,7 @@ class ShortRangeModel:
|
|||
tstar: float = _dilution_factor['tstar'] # type: ignore
|
||||
|
||||
# Streamwise and radial penetration coefficients
|
||||
_df_pc = _dilution_factor['penetration_coefficients']
|
||||
_df_pc = _dilution_factor['penetration_coefficients'] # type: ignore
|
||||
𝛽r1: float = _df_pc['𝛽r1'] # type: ignore
|
||||
𝛽r2: float = _df_pc['𝛽r2'] # type: ignore
|
||||
𝛽x1: float = _df_pc['𝛽x1'] # type: ignore
|
||||
|
|
@ -1585,7 +1585,7 @@ class ExposureModel:
|
|||
#: The number of times the exposure event is repeated (default 1).
|
||||
@property
|
||||
def repeats(self) -> int:
|
||||
return self.data_registry.exposure_model['repeats'] # type: ignore
|
||||
return 1
|
||||
|
||||
def __post_init__(self):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -148,21 +148,21 @@ class BLOmodel:
|
|||
# total concentration of aerosols for each mode.
|
||||
@property
|
||||
def cn(self) -> typing.Tuple[float, float, float]:
|
||||
_cn = self.data_registry.BLOmodel['cn']
|
||||
_cn = self.data_registry.expiration_particle['BLOmodel']['cn'] # type: ignore
|
||||
return (_cn['B'],_cn['L'],_cn['O'])
|
||||
|
||||
# Mean of the underlying normal distributions (represents the log of a
|
||||
# diameter in microns), for resp. the B, L and O modes.
|
||||
@property
|
||||
def mu(self) -> typing.Tuple[float, float, float]:
|
||||
_mu = self.data_registry.BLOmodel['mu']
|
||||
_mu = self.data_registry.expiration_particle['BLOmodel']['mu'] # type: ignore
|
||||
return (_mu['B'], _mu['L'], _mu['O'])
|
||||
|
||||
# Std deviation of the underlying normal distribution, for resp.
|
||||
# the B, L and O modes.
|
||||
@property
|
||||
def sigma(self) -> typing.Tuple[float, float, float]:
|
||||
_sigma = self.data_registry.BLOmodel['sigma']
|
||||
_sigma = self.data_registry.expiration_particle['BLOmodel']['sigma'] # type: ignore
|
||||
return (_sigma['B'],_sigma['L'],_sigma['O'])
|
||||
|
||||
def distribution(self, d):
|
||||
|
|
@ -250,51 +250,51 @@ symptomatic_vl_frequencies = LogCustomKernel(
|
|||
def viral_load(data_registry):
|
||||
return np.linspace(
|
||||
weibull_min.ppf(
|
||||
data_registry.covid_overal_vl_data['start'],
|
||||
c=data_registry.covid_overal_vl_data['shape_factor'],
|
||||
scale=data_registry.covid_overal_vl_data['scale_factor']
|
||||
data_registry.virological_data['covid_overal_vl_data']['start'],
|
||||
c=data_registry.virological_data['covid_overal_vl_data']['shape_factor'],
|
||||
scale=data_registry.virological_data['covid_overal_vl_data']['scale_factor']
|
||||
),
|
||||
weibull_min.ppf(
|
||||
data_registry.covid_overal_vl_data['stop'],
|
||||
c=data_registry.covid_overal_vl_data['shape_factor'],
|
||||
scale=data_registry.covid_overal_vl_data['scale_factor']
|
||||
data_registry.virological_data['covid_overal_vl_data']['stop'],
|
||||
c=data_registry.virological_data['covid_overal_vl_data']['shape_factor'],
|
||||
scale=data_registry.virological_data['covid_overal_vl_data']['scale_factor']
|
||||
),
|
||||
int(data_registry.covid_overal_vl_data['num'])
|
||||
int(data_registry.virological_data['covid_overal_vl_data']['num'])
|
||||
)
|
||||
def frequencies_pdf(data_registry):
|
||||
return weibull_min.pdf(
|
||||
viral_load(data_registry),
|
||||
c=data_registry.covid_overal_vl_data['shape_factor'],
|
||||
scale=data_registry.covid_overal_vl_data['scale_factor']
|
||||
c=data_registry.virological_data['covid_overal_vl_data']['shape_factor'],
|
||||
scale=data_registry.virological_data['covid_overal_vl_data']['scale_factor']
|
||||
)
|
||||
def covid_overal_vl_data(data_registry):
|
||||
return LogCustom(
|
||||
bounds=(data_registry.covid_overal_vl_data['min_bound'], data_registry.covid_overal_vl_data['max_bound']),
|
||||
bounds=(data_registry.virological_data['covid_overal_vl_data']['min_bound'], data_registry.virological_data['covid_overal_vl_data']['max_bound']),
|
||||
function=lambda d: np.interp(
|
||||
d,
|
||||
viral_load(data_registry),
|
||||
frequencies_pdf(data_registry),
|
||||
data_registry.covid_overal_vl_data['interpolation_fp_left'],
|
||||
data_registry.covid_overal_vl_data['interpolation_fp_right']
|
||||
data_registry.virological_data['covid_overal_vl_data']['interpolation_fp_left'],
|
||||
data_registry.virological_data['covid_overal_vl_data']['interpolation_fp_right']
|
||||
),
|
||||
max_function=data_registry.covid_overal_vl_data['max_function']
|
||||
max_function=data_registry.virological_data['covid_overal_vl_data']['max_function']
|
||||
)
|
||||
|
||||
|
||||
# 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.viable_to_RNA_ratio_distribution['low'], data_registry.viable_to_RNA_ratio_distribution['high'])
|
||||
return Uniform(data_registry.virological_data['viable_to_RNA_ratio_distribution']['low'], data_registry.virological_data['viable_to_RNA_ratio_distribution']['high'])
|
||||
|
||||
|
||||
# From discussion with virologists
|
||||
def infectious_dose_distribution(data_registry):
|
||||
return Uniform(data_registry.infectious_dose_distribution['low'], data_registry.infectious_dose_distribution['high'])
|
||||
return Uniform(data_registry.virological_data['infectious_dose_distribution']['low'], data_registry.virological_data['infectious_dose_distribution']['high'])
|
||||
|
||||
|
||||
# From https://doi.org/10.1101/2021.10.14.21264988 and references therein
|
||||
def virus_distributions(data_registry):
|
||||
vd = data_registry.virus_distributions
|
||||
vd = data_registry.virological_data['virus_distributions']
|
||||
return {
|
||||
'SARS_CoV_2': mc.SARSCoV2(
|
||||
viral_load_in_sputum=evaluate_vl(vd['SARS_CoV_2']['viral_load_in_sputum'], data_registry),
|
||||
|
|
@ -392,10 +392,10 @@ def expiration_distribution(
|
|||
|
||||
|
||||
def expiration_BLO_factors(data_registry):
|
||||
breathing = data_registry.expiration_BLO_factors['Breathing']
|
||||
speaking = data_registry.expiration_BLO_factors['Speaking']
|
||||
singing = data_registry.expiration_BLO_factors['Singing']
|
||||
shouting = data_registry.expiration_BLO_factors['Shouting']
|
||||
breathing = data_registry.expiration_particle['expiration_BLO_factors']['Breathing']
|
||||
speaking = data_registry.expiration_particle['expiration_BLO_factors']['Speaking']
|
||||
singing = data_registry.expiration_particle['expiration_BLO_factors']['Singing']
|
||||
shouting = data_registry.expiration_particle['expiration_BLO_factors']['Shouting']
|
||||
return {
|
||||
'Breathing': (
|
||||
param_evaluation(breathing, 'B'),
|
||||
|
|
@ -425,8 +425,8 @@ def expiration_distributions(data_registry):
|
|||
exp_type: expiration_distribution(
|
||||
data_registry=data_registry,
|
||||
BLO_factors=BLO_factors,
|
||||
d_min=param_evaluation(data_registry.long_range_expiration_distributions, 'minimum_diameter'),
|
||||
d_max=param_evaluation(data_registry.long_range_expiration_distributions, 'maximum_diameter')
|
||||
d_min=param_evaluation(data_registry.expiration_particle['long_range_expiration_distributions'], 'minimum_diameter'),
|
||||
d_max=param_evaluation(data_registry.expiration_particle['long_range_expiration_distributions'], 'maximum_diameter')
|
||||
)
|
||||
for exp_type, BLO_factors in expiration_BLO_factors(data_registry).items()
|
||||
}
|
||||
|
|
@ -437,8 +437,8 @@ def short_range_expiration_distributions(data_registry):
|
|||
exp_type: expiration_distribution(
|
||||
data_registry=data_registry,
|
||||
BLO_factors=BLO_factors,
|
||||
d_min=param_evaluation(data_registry.short_range_expiration_distributions, 'minimum_diameter'),
|
||||
d_max=param_evaluation(data_registry.short_range_expiration_distributions, 'maximum_diameter')
|
||||
d_min=param_evaluation(data_registry.expiration_particle['short_range_expiration_distributions'], 'minimum_diameter'),
|
||||
d_max=param_evaluation(data_registry.expiration_particle['short_range_expiration_distributions'], 'maximum_diameter')
|
||||
)
|
||||
for exp_type, BLO_factors in expiration_BLO_factors(data_registry).items()
|
||||
}
|
||||
|
|
@ -452,8 +452,8 @@ frequencies = np.array((0.0598036, 0.0946154, 0.1299152, 0.1064905, 0.1099066, 0
|
|||
def short_range_distances(data_registry):
|
||||
return Custom(
|
||||
bounds=(
|
||||
param_evaluation(data_registry.short_range_distances, 'minimum_distance'),
|
||||
param_evaluation(data_registry.short_range_distances, 'maximum_distance')
|
||||
param_evaluation(data_registry.short_range_model['conversational_distance'], 'minimum_distance'),
|
||||
param_evaluation(data_registry.short_range_model['conversational_distance'], 'maximum_distance')
|
||||
),
|
||||
function=lambda x: np.interp(x, distances, frequencies, left=0., right=0.),
|
||||
max_function=0.13
|
||||
|
|
|
|||
|
|
@ -6,23 +6,31 @@ class DataRegistry:
|
|||
|
||||
version = None
|
||||
|
||||
BLOmodel = {
|
||||
"cn": {
|
||||
"B": 0.06,
|
||||
"L": 0.2,
|
||||
"O": 0.0010008,
|
||||
expiration_particle = {
|
||||
"long_range_expiration_distributions": {
|
||||
"minimum_diameter": 0.1,
|
||||
"maximum_diameter": 30,
|
||||
},
|
||||
"mu": {
|
||||
"B": 0.989541,
|
||||
"L": 1.38629,
|
||||
"O": 4.97673,
|
||||
"short_range_expiration_distributions": {
|
||||
"minimum_diameter": 0.1,
|
||||
"maximum_diameter": 100,
|
||||
},
|
||||
"sigma": {
|
||||
"B": 0.262364,
|
||||
"L": 0.506818,
|
||||
"O": 0.585005,
|
||||
"BLOmodel": {
|
||||
"cn": {"B": 0.06, "L": 0.2, "O": 0.0010008},
|
||||
"mu": {"B": 0.989541, "L": 1.38629, "O": 4.97673},
|
||||
"sigma": {"B": 0.262364, "L": 0.506818, "O": 0.585005},
|
||||
},
|
||||
"expiration_BLO_factors": {
|
||||
"Breathing": {"B": 1., "L": 0., "O": 0., },
|
||||
"Speaking": {"B": 1., "L": 1., "O": 1., },
|
||||
"Singing": {"B": 1., "L": 5., "O": 5., },
|
||||
"Shouting": {"B": 1., "L": 5., "O": 5., },
|
||||
},
|
||||
"particle": {
|
||||
"evaporation_factor": 0.3,
|
||||
}
|
||||
}
|
||||
|
||||
activity_distributions = {
|
||||
"Seated": {
|
||||
"inhalation_rate": {
|
||||
|
|
@ -105,160 +113,164 @@ class DataRegistry:
|
|||
},
|
||||
},
|
||||
}
|
||||
symptomatic_vl_frequencies = {
|
||||
"log_variable": [
|
||||
2.46032,
|
||||
2.67431,
|
||||
2.85434,
|
||||
3.06155,
|
||||
3.25856,
|
||||
3.47256,
|
||||
3.66957,
|
||||
3.85979,
|
||||
4.09927,
|
||||
4.27081,
|
||||
4.47631,
|
||||
4.66653,
|
||||
4.87204,
|
||||
5.10302,
|
||||
5.27456,
|
||||
5.46478,
|
||||
5.6533,
|
||||
5.88428,
|
||||
6.07281,
|
||||
6.30549,
|
||||
6.48552,
|
||||
6.64856,
|
||||
6.85407,
|
||||
7.10373,
|
||||
7.30075,
|
||||
7.47229,
|
||||
7.66081,
|
||||
7.85782,
|
||||
8.05653,
|
||||
8.27053,
|
||||
8.48453,
|
||||
8.65607,
|
||||
8.90573,
|
||||
9.06878,
|
||||
9.27429,
|
||||
9.473,
|
||||
9.66152,
|
||||
9.87552,
|
||||
],
|
||||
"frequencies": [
|
||||
0.001206885,
|
||||
0.007851618,
|
||||
0.008078144,
|
||||
0.01502491,
|
||||
0.013258014,
|
||||
0.018528495,
|
||||
0.020053765,
|
||||
0.021896167,
|
||||
0.022047184,
|
||||
0.018604005,
|
||||
0.01547796,
|
||||
0.018075445,
|
||||
0.021503523,
|
||||
0.022349217,
|
||||
0.025097721,
|
||||
0.032875078,
|
||||
0.030594727,
|
||||
0.032573045,
|
||||
0.034717482,
|
||||
0.034792991,
|
||||
0.033267721,
|
||||
0.042887485,
|
||||
0.036846816,
|
||||
0.03876473,
|
||||
0.045016819,
|
||||
0.040063473,
|
||||
0.04883754,
|
||||
0.043944602,
|
||||
0.048142864,
|
||||
0.041588741,
|
||||
0.048762031,
|
||||
0.027921732,
|
||||
0.033871788,
|
||||
0.022122693,
|
||||
0.016927718,
|
||||
0.008833228,
|
||||
0.00478598,
|
||||
0.002807662,
|
||||
],
|
||||
"kernel_bandwidth": 0.1,
|
||||
}
|
||||
covid_overal_vl_data = {
|
||||
"shape_factor": 3.47,
|
||||
"scale_factor": 7.01,
|
||||
"start": 0.01,
|
||||
"stop": 0.99,
|
||||
"num": 30.0,
|
||||
"min_bound": 2,
|
||||
"max_bound": 10,
|
||||
"interpolation_fp_left": 0,
|
||||
"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,
|
||||
"transmissibility_factor": 1,
|
||||
"infectiousness_days": 14,
|
||||
|
||||
virological_data = {
|
||||
"symptomatic_vl_frequencies": {
|
||||
"log_variable": [
|
||||
2.46032,
|
||||
2.67431,
|
||||
2.85434,
|
||||
3.06155,
|
||||
3.25856,
|
||||
3.47256,
|
||||
3.66957,
|
||||
3.85979,
|
||||
4.09927,
|
||||
4.27081,
|
||||
4.47631,
|
||||
4.66653,
|
||||
4.87204,
|
||||
5.10302,
|
||||
5.27456,
|
||||
5.46478,
|
||||
5.6533,
|
||||
5.88428,
|
||||
6.07281,
|
||||
6.30549,
|
||||
6.48552,
|
||||
6.64856,
|
||||
6.85407,
|
||||
7.10373,
|
||||
7.30075,
|
||||
7.47229,
|
||||
7.66081,
|
||||
7.85782,
|
||||
8.05653,
|
||||
8.27053,
|
||||
8.48453,
|
||||
8.65607,
|
||||
8.90573,
|
||||
9.06878,
|
||||
9.27429,
|
||||
9.473,
|
||||
9.66152,
|
||||
9.87552,
|
||||
],
|
||||
"frequencies": [
|
||||
0.001206885,
|
||||
0.007851618,
|
||||
0.008078144,
|
||||
0.01502491,
|
||||
0.013258014,
|
||||
0.018528495,
|
||||
0.020053765,
|
||||
0.021896167,
|
||||
0.022047184,
|
||||
0.018604005,
|
||||
0.01547796,
|
||||
0.018075445,
|
||||
0.021503523,
|
||||
0.022349217,
|
||||
0.025097721,
|
||||
0.032875078,
|
||||
0.030594727,
|
||||
0.032573045,
|
||||
0.034717482,
|
||||
0.034792991,
|
||||
0.033267721,
|
||||
0.042887485,
|
||||
0.036846816,
|
||||
0.03876473,
|
||||
0.045016819,
|
||||
0.040063473,
|
||||
0.04883754,
|
||||
0.043944602,
|
||||
0.048142864,
|
||||
0.041588741,
|
||||
0.048762031,
|
||||
0.027921732,
|
||||
0.033871788,
|
||||
0.022122693,
|
||||
0.016927718,
|
||||
0.008833228,
|
||||
0.00478598,
|
||||
0.002807662,
|
||||
],
|
||||
"kernel_bandwidth": 0.1,
|
||||
},
|
||||
"SARS_CoV_2_ALPHA": {
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL.value,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION.value,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value,
|
||||
"transmissibility_factor": 0.78,
|
||||
"infectiousness_days": 14,
|
||||
'covid_overal_vl_data': {
|
||||
"shape_factor": 3.47,
|
||||
"scale_factor": 7.01,
|
||||
"start": 0.01,
|
||||
"stop": 0.99,
|
||||
"num": 30.0,
|
||||
"min_bound": 2,
|
||||
"max_bound": 10,
|
||||
"interpolation_fp_left": 0,
|
||||
"interpolation_fp_right": 0,
|
||||
"max_function": 0.2,
|
||||
},
|
||||
"SARS_CoV_2_BETA": {
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL.value,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION.value,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value,
|
||||
"transmissibility_factor": 0.8,
|
||||
"infectiousness_days": 14,
|
||||
"viable_to_RNA_ratio_distribution": {
|
||||
"low": 0.01,
|
||||
"high": 0.6,
|
||||
},
|
||||
"SARS_CoV_2_GAMMA": {
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL.value,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION.value,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value,
|
||||
"transmissibility_factor": 0.72,
|
||||
"infectiousness_days": 14,
|
||||
"infectious_dose_distribution": {
|
||||
"low": 10,
|
||||
"high": 100,
|
||||
},
|
||||
"SARS_CoV_2_DELTA": {
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL.value,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION.value,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value,
|
||||
"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,
|
||||
"transmissibility_factor": 0.2,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_Other": {
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL.value,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION.value,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value,
|
||||
"transmissibility_factor": 0.1,
|
||||
"infectiousness_days": 14,
|
||||
"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,
|
||||
"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,
|
||||
"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,
|
||||
"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,
|
||||
"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,
|
||||
"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,
|
||||
"transmissibility_factor": 0.2,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
"SARS_CoV_2_Other": {
|
||||
"viral_load_in_sputum": ViralLoads.COVID_OVERALL.value,
|
||||
"infectious_dose": InfectiousDoses.DISTRIBUTION.value,
|
||||
"viable_to_RNA_ratio": ViableToRNARatios.DISTRIBUTION.value,
|
||||
"transmissibility_factor": 0.1,
|
||||
"infectiousness_days": 14,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
mask_distributions = {
|
||||
"Type I": {
|
||||
"η_inhale": {
|
||||
|
|
@ -301,50 +313,15 @@ class DataRegistry:
|
|||
"factor_exhale": 1,
|
||||
},
|
||||
}
|
||||
expiration_BLO_factors = {
|
||||
"Breathing": {
|
||||
"B": 1.0,
|
||||
"L": 0.0,
|
||||
"O": 0.0,
|
||||
},
|
||||
"Speaking": {
|
||||
"B": 1.0,
|
||||
"L": 1.0,
|
||||
"O": 1.0,
|
||||
},
|
||||
"Singing": {
|
||||
"B": 1.0,
|
||||
"L": 5.0,
|
||||
"O": 5.0,
|
||||
},
|
||||
"Shouting": {
|
||||
"B": 1.0,
|
||||
"L": 5.0,
|
||||
"O": 5.0,
|
||||
},
|
||||
}
|
||||
long_range_expiration_distributions = {
|
||||
"minimum_diameter": 0.1,
|
||||
"maximum_diameter": 30,
|
||||
}
|
||||
short_range_expiration_distributions = {
|
||||
"minimum_diameter": 0.1,
|
||||
"maximum_diameter": 100,
|
||||
}
|
||||
short_range_distances = {
|
||||
"minimum_distance": 0.5,
|
||||
"maximum_distance": 2.0,
|
||||
}
|
||||
|
||||
####################################
|
||||
|
||||
room = {
|
||||
"defaults": {
|
||||
"inside_temp": 293,
|
||||
"humidity_with_heating": 0.3,
|
||||
"humidity_without_heating": 0.5,
|
||||
},
|
||||
"inside_temp": 293,
|
||||
"humidity_with_heating": 0.3,
|
||||
"humidity_without_heating": 0.5,
|
||||
}
|
||||
|
||||
ventilation = {
|
||||
"natural": {
|
||||
"discharge_factor": {
|
||||
|
|
@ -353,19 +330,17 @@ class DataRegistry:
|
|||
},
|
||||
"infiltration_ventilation": 0.25,
|
||||
}
|
||||
particle = {
|
||||
"evaporation_factor": 0.3,
|
||||
}
|
||||
population_with_virus = {
|
||||
"fraction_of_infectious_virus": 1,
|
||||
}
|
||||
|
||||
concentration_model = {
|
||||
"min_background_concentration": 0.0,
|
||||
"virus_concentration_model": {
|
||||
"min_background_concentration": 0.0,
|
||||
},
|
||||
"CO2_concentration_model": {
|
||||
"CO2_atmosphere_concentration": 440.44,
|
||||
"CO2_fraction_exhaled": 0.042,
|
||||
},
|
||||
}
|
||||
|
||||
short_range_model = {
|
||||
"dilution_factor": {
|
||||
"mouth_diameter": 0.02,
|
||||
|
|
@ -377,17 +352,16 @@ class DataRegistry:
|
|||
"𝛽x1": 2.4,
|
||||
},
|
||||
},
|
||||
"conversational_distance": {
|
||||
"minimum_distance": 0.5,
|
||||
"maximum_distance": 2.0,
|
||||
},
|
||||
}
|
||||
exposure_model = {
|
||||
"repeats": 1,
|
||||
|
||||
monte_carlo = {
|
||||
"sample_size": 250000,
|
||||
}
|
||||
conditional_prob_inf_given_viral_load = {
|
||||
"lower_percentile": 0.05,
|
||||
"upper_percentile": 0.95,
|
||||
"min_vl": 2,
|
||||
"max_vl": 10,
|
||||
}
|
||||
monte_carlo_sample_size = 250000
|
||||
|
||||
population_scenario_activity = {
|
||||
"office": {"placeholder": "Office", "activity": "Seated", "expiration": {"Speaking": 1, "Breathing": 2}},
|
||||
"smallmeeting": {
|
||||
|
|
|
|||
Loading…
Reference in a new issue