diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index d8a7ce9b..d72952e6 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -13,7 +13,7 @@ from cara import data import cara.data.weather import cara.monte_carlo as mc from .. import calculator -from cara.monte_carlo.data import activity_distributions, virus_distributions, mask_distributions, dilution_factor +from cara.monte_carlo.data import activity_distributions, virus_distributions, mask_distributions, short_range_distances from cara.monte_carlo.data import expiration_distribution, expiration_BLO_factors, expiration_distributions, short_range_expiration_distributions @@ -245,29 +245,31 @@ class FormData: else: humidity = 0.5 room = models.Room(volume=volume, humidity=humidity) + + infected_population = self.infected_population() if self.short_range_option == "short_range_yes": + short_range_expirations = tuple(short_range_expiration_distributions[interaction['expiration']] for interaction in self.short_range_interactions) + short_range_activities = tuple([infected_population.activity for _ in self.short_range_interactions]) sr_presence=self.short_range_intervals() - sr_activities=self.short_range_activities() - short_range_expirations = tuple(short_range_expiration_distributions[activity] for activity in sr_activities) - dilutions=dilution_factor(activities=sr_activities) else: - sr_presence=() short_range_expirations=() - dilutions=() - + short_range_activities=() + sr_presence=() + # Initializes and returns a model with the attributes defined above return mc.ExposureModel( concentration_model=mc.ConcentrationModel( room=room, ventilation=self.ventilation(), - infected=self.infected_population(), + infected=infected_population, evaporation_factor=0.3, ), short_range = mc.ShortRangeModel( - presence=sr_presence, expirations=short_range_expirations, - dilutions=dilutions, + activities=short_range_activities, + presence=sr_presence, + distances=short_range_distances, ), exposed=self.exposed_population(), ) @@ -655,7 +657,7 @@ class FormData: for interaction in self.short_range_interactions: start_time = time_string_to_minutes(interaction['start_time']) duration = float(interaction['duration']) - short_range_intervals.append((interaction['activity'], models.SpecificInterval((start_time/60, (start_time + duration)/60)))) + short_range_intervals.append((interaction['expiration'], models.SpecificInterval((start_time/60, (start_time + duration)/60)))) return tuple(short_range_intervals) @@ -665,10 +667,6 @@ class FormData: breaks=self.exposed_lunch_break_times() + self.exposed_coffee_break_times(), ) - def short_range_activities(self) -> typing.List[str]: - return ([interaction['activity'] for interaction in self.short_range_interactions] - if self.short_range_interactions else []) - def build_expiration(expiration_definition) -> mc._ExpirationBase: if isinstance(expiration_definition, str): diff --git a/cara/apps/calculator/static/js/form.js b/cara/apps/calculator/static/js/form.js index dcaf0662..545f6f99 100644 --- a/cara/apps/calculator/static/js/form.js +++ b/cara/apps/calculator/static/js/form.js @@ -408,7 +408,7 @@ function validate_form(form) { $(".form_field_outer_row").each(function (index, element){ let obj = {}; const $element = $(element); - obj.activity = $element.find("[name='short_range_activity']").val(); + obj.expiration = $element.find("[name='short_range_expiration']").val(); obj.start_time = $element.find("[name='short_range_start_time']").val(); obj.duration = $element.find("[name='short_range_duration']").val(); short_range_interactions.push(JSON.stringify(obj)); @@ -656,8 +656,8 @@ $(document).ready(function () { let index = 1; for (const interaction of JSON.parse(value)) { $("#dialog_sr").append(inject_sr_interaction(index, value = interaction, is_validated="row_validated")) - $('#sr_activity_no_' + String(index)).val(interaction.activity).change(); - document.getElementById('sr_activity_no_' + String(index)).disabled = true; + $('#sr_expiration_no_' + String(index)).val(interaction.expiration).change(); + document.getElementById('sr_expiration_no_' + String(index)).disabled = true; document.getElementById('sr_start_no_' + String(index)).disabled = true; document.getElementById('sr_duration_no_' + String(index)).disabled = true; document.getElementById('edit_row_no_' + String(index)).style.cssText = 'display:inline !important'; @@ -838,35 +838,35 @@ $(document).ready(function () { function inject_sr_interaction(index, value, is_validated) { return `
-
-
+
+
-

-
-
+
-
-
-

-
-
-
-
-
-

+ +
+
+

-
+ +
+
+

+
+ +
-
` } @@ -889,12 +889,12 @@ $(document).ready(function () { // Validate row button (Save button) $("body").on("click", ".validate_node_btn_frm_field", function() { var index = $(this).attr('id').split('_').slice(-1)[0]; - let activity = validate_sr_parameter('#sr_activity_no_' + String(index)[0], "Required input."); + let activity = validate_sr_parameter('#sr_expiration_no_' + String(index)[0], "Required input."); let start = validate_sr_parameter('#sr_start_no_' + String(index)[0], "Required input."); let duration = validate_sr_parameter('#sr_duration_no_' + String(index)[0], "Required input."); if (activity && start && duration) { if (validate_sr_time('#sr_start_no_' + String(index)) && validate_sr_time('#sr_start_no_' + String(index))) { - document.getElementById('sr_activity_no_' + String(index)).disabled = true; + document.getElementById('sr_expiration_no_' + String(index)).disabled = true; document.getElementById('sr_start_no_' + String(index)).disabled = true; document.getElementById('sr_duration_no_' + String(index)).disabled = true; document.getElementById('edit_row_no_' + String(index)).style.cssText = 'display:inline !important'; @@ -915,7 +915,7 @@ $(document).ready(function () { $("body").on("click", ".edit_node_btn_frm_field", function() { $(this).hide(); let id = $(this).attr('id').split('_').slice(-1)[0]; - document.getElementById('sr_activity_no_' + String(id)).disabled = false; + document.getElementById('sr_expiration_no_' + String(id)).disabled = false; document.getElementById('sr_start_no_' + String(id)).disabled = false; document.getElementById('sr_duration_no_' + String(id)).disabled = false; document.getElementById('validate_row_no_' + String(id)).style.cssText = 'display:inline !important'; diff --git a/cara/apps/expert.py b/cara/apps/expert.py index 208b3568..9fab2cd9 100644 --- a/cara/apps/expert.py +++ b/cara/apps/expert.py @@ -504,9 +504,10 @@ baseline_model = models.ExposureModel( evaporation_factor=0.3, ), short_range=models.ShortRangeModel( - presence=(), expirations=(), - dilutions=(), + activities=(), + presence=(), + distances=(), ), exposed=models.Population( number=10, diff --git a/cara/apps/templates/base/calculator.form.html.j2 b/cara/apps/templates/base/calculator.form.html.j2 index 92d0d42f..499fc761 100644 --- a/cara/apps/templates/base/calculator.form.html.j2 +++ b/cara/apps/templates/base/calculator.form.html.j2 @@ -391,11 +391,12 @@
+