From 9ed65a2b044448483dfc6b3de34047705cb0e3b2 Mon Sep 17 00:00:00 2001
From: Nicolas Mounet
Date: Mon, 13 Sep 2021 12:00:06 +0200
Subject: [PATCH 1/5] Model optimisation: avoid computing before first presence
time
---
cara/models.py | 14 +++++++++++++-
cara/tests/models/test_concentration_model.py | 4 ++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/cara/models.py b/cara/models.py
index 53cf52bc..86d2acb9 100644
--- a/cara/models.py
+++ b/cara/models.py
@@ -776,6 +776,14 @@ class ConcentrationModel:
state_change_times.update(self.ventilation.transition_times())
return sorted(state_change_times)
+ @method_cache
+ def _first_presence_time(self) -> float:
+ """
+ First presence time. Before that, the concentration is zero.
+
+ """
+ return self.infected.presence.boundaries()[0][0]
+
def last_state_change(self, time: float) -> float:
"""
Find the most recent/previous state change.
@@ -823,7 +831,9 @@ class ConcentrationModel:
Note that time is not vectorised. You can only pass a single float
to this method.
"""
- if time == 0:
+ # The model always starts at t=0, but we avoid running concentration calculations
+ # before the first presence as an optimisation.
+ if time <= self._first_presence_time():
return 0.0
next_state_change_time = self._next_state_change(time)
IVRR = self.infectious_virus_removal_rate(next_state_change_time)
@@ -841,6 +851,8 @@ class ConcentrationModel:
"""
Get the integrated concentration dose between the times start and stop.
"""
+ if stop <= self._first_presence_time():
+ return 0.0
state_change_times = self.state_change_times()
req_start, req_stop = start, stop
total_concentration = 0.
diff --git a/cara/tests/models/test_concentration_model.py b/cara/tests/models/test_concentration_model.py
index 46e7e88e..9373d4a9 100644
--- a/cara/tests/models/test_concentration_model.py
+++ b/cara/tests/models/test_concentration_model.py
@@ -121,6 +121,10 @@ def test_next_state_change_time_out_of_range(simple_conc_model: models.Concentra
simple_conc_model._next_state_change(3.1)
+def test_first_presence_time(simple_conc_model):
+ assert simple_conc_model._first_presence_time() == 0.5
+
+
def test_integrated_concentration(simple_conc_model):
c1 = simple_conc_model.integrated_concentration(0, 2)
c2 = simple_conc_model.integrated_concentration(0, 1)
From fdca7da53a0b8cd5866d688307681e8a11007356 Mon Sep 17 00:00:00 2001
From: jdevine
Date: Mon, 13 Sep 2021 13:50:12 +0200
Subject: [PATCH 2/5] Changed default strain in calculator to Delta. Also
applies retroactively to QR codes missing delta. The rational for the
retrospective change is that old simulations (wild type) re-run need to be
re-run with the current dominant strain.
---
cara/apps/calculator/model_generator.py | 2 +-
cara/apps/calculator/templates/calculator.form.html.j2 | 6 +++---
cara/apps/calculator/templates/userguide.html.j2 | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py
index 06c29229..61f4e9fd 100644
--- a/cara/apps/calculator/model_generator.py
+++ b/cara/apps/calculator/model_generator.py
@@ -117,7 +117,7 @@ class FormData:
'simulation_name': _NO_DEFAULT,
'total_people': _NO_DEFAULT,
'ventilation_type': 'no_ventilation',
- 'virus_type': 'SARS_CoV_2',
+ 'virus_type': 'SARS_CoV_2_B16172',
'volume_type': _NO_DEFAULT,
'window_type': 'window_sliding',
'window_height': 0.,
diff --git a/cara/apps/calculator/templates/calculator.form.html.j2 b/cara/apps/calculator/templates/calculator.form.html.j2
index c119d4e5..97209c98 100644
--- a/cara/apps/calculator/templates/calculator.form.html.j2
+++ b/cara/apps/calculator/templates/calculator.form.html.j2
@@ -62,10 +62,10 @@ v{{ calculator_version }} Please sen
@@ -344,13 +344,13 @@ v{{ calculator_version }} Please sen
Quick Guide:
This tool simulates the long range airborne spread SARS-CoV-2 virus in a finite volume and estimates the risk of COVID-19 infection. It is based on current scientific data and can be used to compare the effectiveness of different mitigation measures. Virus data:
- SARS-CoV-2 covers typical strains of the virus and three variants of concern (VOC):
+ SARS-CoV-2 covers the original wild strain of the virus and three variants of concern (VOC):
Alpha (also known as B.1.1.7, first identified in UK, Dec 2020),
Gamma (also known as P.1, first identified in Brazil/Japan, Jan 2021).
Delta (also known as B.1.617.2, first identified in India, Oct 2020).
- Choose variant according to local area prevalence, e.g. for Geneva
+ Modify the default (Delta) as necessary, according to local area prevalence e.g. for Geneva
or Ain (France). Ventilation data:
diff --git a/cara/apps/calculator/templates/userguide.html.j2 b/cara/apps/calculator/templates/userguide.html.j2
index ede8c8e3..ac0e69ca 100644
--- a/cara/apps/calculator/templates/userguide.html.j2
+++ b/cara/apps/calculator/templates/userguide.html.j2
@@ -56,12 +56,12 @@ Changing this setting alters the properties of the virus which are used for the
This has a significant effect on the probability of infection.
The choices are:
-
SARS-CoV-2 (nominal strain), covering typical strains and varaints which are not of concern from an epidemiologic point of view of the virus;
+
SARS-CoV-2 (nominal strain), covering typical strains and variants which are not of concern from an epidemiologic point of view of the virus;
SARS-CoV-2 (Alpha VOC), first identified in the UK at the end of 2020 which is found to be approximately 1.5x more transmissible compared to the non-VOCs;
SARS-CoV-2 (Gamma VOC), first identified in Brazil in January 2021 which is found to be approximately 2.2x more transmissible compared to the non-VOCs.
SARS-CoV-2 (Delta VOC), first identified in India towards the end of 2020 which is found to be approximately 60% more transmissible compared to the ALPHA VOC.
-
The user can base their choice according to the prevalence of the different variants in the local area. Access to this information can be found here:
+
The user can modify the selected variant from the default (Delta VOC), according to the prevalence of the different variants in the local area. Access to this information can be found here:
From 8fbe7856b98cd908934ee9798b1ac06039fb40ae Mon Sep 17 00:00:00 2001
From: jdevine
Date: Tue, 14 Sep 2021 14:57:48 +0200
Subject: [PATCH 3/5] Addressed comments from Andre.
---
cara/apps/calculator/__init__.py | 2 +-
cara/apps/calculator/templates/calculator.form.html.j2 | 6 +++---
cara/apps/calculator/templates/userguide.html.j2 | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/cara/apps/calculator/__init__.py b/cara/apps/calculator/__init__.py
index 1688d494..a60d5f74 100644
--- a/cara/apps/calculator/__init__.py
+++ b/cara/apps/calculator/__init__.py
@@ -33,7 +33,7 @@ from .user import AuthenticatedUser, AnonymousUser
# calculator version. If the calculator needs to make breaking changes (e.g. change
# form attributes) then it can also increase its MAJOR version without needing to
# increase the overall CARA version (found at ``cara.__version__``).
-__version__ = "3.0.0"
+__version__ = "3.0.1"
class BaseRequestHandler(RequestHandler):
diff --git a/cara/apps/calculator/templates/calculator.form.html.j2 b/cara/apps/calculator/templates/calculator.form.html.j2
index 97209c98..65391454 100644
--- a/cara/apps/calculator/templates/calculator.form.html.j2
+++ b/cara/apps/calculator/templates/calculator.form.html.j2
@@ -62,10 +62,10 @@ v{{ calculator_version }} Please sen
@@ -344,13 +344,13 @@ v{{ calculator_version }} Please sen
Quick Guide:
This tool simulates the long range airborne spread SARS-CoV-2 virus in a finite volume and estimates the risk of COVID-19 infection. It is based on current scientific data and can be used to compare the effectiveness of different mitigation measures. Virus data:
- SARS-CoV-2 covers the original wild strain of the virus and three variants of concern (VOC):
+ SARS-CoV-2 covers the original "wild type" strain of the virus and three variants of concern (VOC):
Alpha (also known as B.1.1.7, first identified in UK, Dec 2020),
Gamma (also known as P.1, first identified in Brazil/Japan, Jan 2021).
Delta (also known as B.1.617.2, first identified in India, Oct 2020).
- Modify the default (Delta) as necessary, according to local area prevalence e.g. for Geneva
+ Modify the default as necessary, according to local area prevalence e.g. for Geneva
or Ain (France). Ventilation data:
diff --git a/cara/apps/calculator/templates/userguide.html.j2 b/cara/apps/calculator/templates/userguide.html.j2
index ac0e69ca..f51cba61 100644
--- a/cara/apps/calculator/templates/userguide.html.j2
+++ b/cara/apps/calculator/templates/userguide.html.j2
@@ -61,7 +61,7 @@ The choices are:
SARS-CoV-2 (Gamma VOC), first identified in Brazil in January 2021 which is found to be approximately 2.2x more transmissible compared to the non-VOCs.
SARS-CoV-2 (Delta VOC), first identified in India towards the end of 2020 which is found to be approximately 60% more transmissible compared to the ALPHA VOC.
-
The user can modify the selected variant from the default (Delta VOC), according to the prevalence of the different variants in the local area. Access to this information can be found here:
+
The user can modify the selected variant from the default, according to the prevalence of the different variants in the local area. Access to this information can be found here: