updated expiration definition

This commit is contained in:
lrdossan 2025-04-09 12:52:05 +02:00
parent a61d065b83
commit 2658e36add
5 changed files with 12 additions and 11 deletions

View file

@ -711,6 +711,9 @@ class Expiration(_ExpirationBase):
# to c_n,i in Eq. (4) of https://doi.org/10.1101/2021.10.14.21264988)
cn: float = 1.
#: Expiration name
name: typing.Optional[str] = None
@property
def particle(self) -> Particle:
"""
@ -1313,7 +1316,7 @@ class ShortRangeModel:
data_registry: DataRegistry
#: Expiration type
expiration: _ExpirationBase
expiration: Expiration
#: Activity type
activity: Activity
@ -1324,9 +1327,6 @@ class ShortRangeModel:
#: Interpersonal distances
distance: _VectorisedFloat
#: Expiration definition
expiration_def: typing.Optional[str] = None
def dilution_factor(self) -> _VectorisedFloat:
'''
The dilution factor for the respective expiratory activity type.

View file

@ -365,6 +365,7 @@ def expiration_distribution(
BLO_factors,
d_min=0.1,
d_max=30.,
exp_type=None,
):
"""
Returns an Expiration with an aerosol diameter distribution, defined
@ -382,6 +383,7 @@ def expiration_distribution(
kernel_bandwidth=0.1,
),
cn=BLOmodel(data_registry, BLO_factors).integrate(d_min, d_max),
name=exp_type,
)
@ -432,7 +434,8 @@ def short_range_expiration_distributions(data_registry):
data_registry=data_registry,
BLO_factors=BLO_factors,
d_min=param_evaluation(data_registry.expiration_particle['particle_size_range']['short_range'], 'minimum_diameter'),
d_max=param_evaluation(data_registry.expiration_particle['particle_size_range']['short_range'], 'maximum_diameter')
d_max=param_evaluation(data_registry.expiration_particle['particle_size_range']['short_range'], 'maximum_diameter'),
exp_type=exp_type,
)
for exp_type, BLO_factors in expiration_BLO_factors(data_registry).items()
}

View file

@ -5,8 +5,6 @@ import io
import typing
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
from collections import defaultdict
from caimira.calculator.models import models, dataclass_utils, profiler, monte_carlo as mc
@ -226,7 +224,7 @@ def group_results(form: VirusFormData, model_group: models.ExposureModelGroup) -
# Short range outputs
short_range_interactions: dict = defaultdict(list)
for short_range_model in single_group.short_range:
short_range_interactions[short_range_model.expiration_def].extend(
short_range_interactions[short_range_model.expiration.name].extend(
short_range_model.presence.boundaries()
)

View file

@ -258,9 +258,10 @@ class VirusFormData(FormData):
short_range = defaultdict(list)
if self.short_range_option == "short_range_yes":
sr_expiration_distributions = short_range_expiration_distributions(self.data_registry)
for key, group in self.short_range_interactions.items():
for interaction in group:
expiration = short_range_expiration_distributions(self.data_registry)[interaction['expiration']]
expiration = sr_expiration_distributions[interaction['expiration']]
presence = self.short_range_interval(interaction)
distances = short_range_distances(self.data_registry)
short_range[key].append(mc.ShortRangeModel(
@ -269,7 +270,6 @@ class VirusFormData(FormData):
activity=infected_population.activity,
presence=presence,
distance=distances,
expiration_def=interaction['expiration']
))
concentration_model: models.ConcentrationModel = mc.ConcentrationModel(

View file

@ -290,7 +290,7 @@ function draw_plot(svg_id, group_id, times, concentrations_zoomed,
});
// Short-Range Area.
short_range_intervals.forEach((b, index) => {
short_range_intervals.flat().forEach((b, index) => {
shortRangeArea[index].x(d => xTimeRange(d.time))
.y0(graph_height - 50)
.y1(d => yRange(d.concentration));