From 0352675878844df97211f11faa14b8f84045aaf2 Mon Sep 17 00:00:00 2001 From: Luis Aleixo Date: Tue, 7 May 2024 15:16:55 +0200 Subject: [PATCH] added input to model generator from form --- caimira/apps/calculator/defaults.py | 1 + caimira/apps/calculator/model_generator.py | 10 +++++++++- caimira/apps/templates/base/calculator.form.html.j2 | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/caimira/apps/calculator/defaults.py b/caimira/apps/calculator/defaults.py index 4976d266..70f61a68 100644 --- a/caimira/apps/calculator/defaults.py +++ b/caimira/apps/calculator/defaults.py @@ -73,6 +73,7 @@ DEFAULTS = { 'sensor_in_use': '', 'short_range_option': 'short_range_no', 'short_range_interactions': '[]', + 'short_range_total_people': 1, } # ------------------ Activities ---------------------- diff --git a/caimira/apps/calculator/model_generator.py b/caimira/apps/calculator/model_generator.py index 4a305418..1baf0538 100644 --- a/caimira/apps/calculator/model_generator.py +++ b/caimira/apps/calculator/model_generator.py @@ -72,6 +72,7 @@ class VirusFormData(FormData): sensor_in_use: str short_range_option: str short_range_interactions: list + short_range_total_people: int _DEFAULTS: typing.ClassVar[typing.Dict[str, typing.Any]] = DEFAULTS @@ -182,6 +183,13 @@ class VirusFormData(FormData): if total_percentage != 100: raise ValueError(f'The sum of all respiratory activities should be 100. Got {total_percentage}.') + + # Validate number of people with short-range interactions + max_people_for_sr = self.total_people - self.infected_people + if self.short_range_total_people > max_people_for_sr: + raise ValueError( + f'The total number of people having short-range interactions ({self.short_range_total_people}) should be lower than the exposed population ({max_people_for_sr}).' + ) def initialize_room(self) -> models.Room: # Initializes room with volume either given directly or as product of area and height @@ -206,7 +214,6 @@ class VirusFormData(FormData): room = self.initialize_room() ventilation: models._VentilationBase = self.ventilation() infected_population = self.infected_population() - short_range = [] if self.short_range_option == "short_range_yes": for interaction in self.short_range_interactions: @@ -216,6 +223,7 @@ class VirusFormData(FormData): activity=infected_population.activity, presence=self.short_range_interval(interaction), distance=short_range_distances(self.data_registry), + total_people=self.short_range_total_people, )) return mc.ExposureModel( diff --git a/caimira/apps/templates/base/calculator.form.html.j2 b/caimira/apps/templates/base/calculator.form.html.j2 index 6842ea63..3aacea77 100644 --- a/caimira/apps/templates/base/calculator.form.html.j2 +++ b/caimira/apps/templates/base/calculator.form.html.j2 @@ -584,6 +584,16 @@
+
+
+
+ +
+
+ +
+
+