added multiple scenarios to calculator and simple rules violation warning

This commit is contained in:
jdevine 2020-11-23 15:43:55 +01:00
parent dd60c0ef23
commit 3b8c10c8c3
2 changed files with 61 additions and 5 deletions

View file

@ -103,12 +103,62 @@ def minutes_to_time(minutes: int) -> str:
def manufacture_alternative_scenarios(form: FormData) -> typing.Dict[str, models.ExposureModel]:
scenarios = {}
with_mask = dataclasses.replace(form, mask_wearing='continuous')
without_mask = dataclasses.replace(form, mask_wearing='removed')
if (form.mask_wearing == 'continuous') and (form.mask_type == 'FFP2') and (form.hepa_option == 1) :
hepa_with_mask_ffp2 = dataclasses.replace(form, mask_type = 'FFP2', mask_wearing='continuous')
scenarios['Scenario with HEPA and FFP2 masks'] = hepa_with_mask_ffp2.build_model()
form =dataclasses.replace(form, mask_type = 'Type I')
form =dataclasses.replace(form, hepa_option =0)
scenarios['With mask'] = with_mask.build_model()
scenarios['Without mask'] = without_mask.build_model()
if (form.mask_wearing == 'continuous') and (form.mask_type == 'FFP2'):
with_mask_ffp2 = dataclasses.replace(form, mask_type = 'FFP2', mask_wearing='continuous')
scenarios['Scenario with FFP2 masks'] = with_mask_ffp2.build_model()
form =dataclasses.replace(form, mask_type = 'Type I')
if form.hepa_option == 1:
with_hepa = dataclasses.replace(form, hepa_option = 1)
scenarios['Scenario with HEPA filter'] = with_hepa.build_model()
form =dataclasses.replace(form, hepa_option =0)
if form.ventilation_type == 'no-ventilation':
with_mask_type1 = dataclasses.replace(form, mask_type = 'Type I', mask_wearing='continuous')
without_mask = dataclasses.replace(form, mask_wearing='removed')
scenarios['No ventilation with Type I masks'] = with_mask_type1.build_model()
scenarios['No venilation without masks'] = without_mask.build_model()
elif form.ventilation_type == 'mechanical':
with_mask_type1 = dataclasses.replace(form, mask_type = 'Type I', mask_wearing='continuous')
without_mask = dataclasses.replace(form, mask_wearing='removed')
with_mask_no_vent = dataclasses.replace(form, mask_type = 'Type I', mask_wearing='continuous', ventilation_type='no-ventilation')
without_mask_or_vent = dataclasses.replace(form, mask_wearing='removed', ventilation_type='no-ventilation')
scenarios['Mechanical ventilation with Type I masks'] = with_mask_type1.build_model()
scenarios['Mechanical ventilation without masks'] = without_mask.build_model()
scenarios['No ventilation with Type I masks'] = with_mask_no_vent.build_model()
scenarios['No ventilation or masks'] = without_mask_or_vent.build_model()
elif form.ventilation_type == 'natural':
with_mask_type1 = dataclasses.replace(form, mask_type = 'Type I', mask_wearing='continuous')
without_mask = dataclasses.replace(form, mask_wearing='removed')
with_mask_no_vent = dataclasses.replace(form, mask_wearing='continuous', ventilation_type='no-ventilation')
without_mask_or_vent = dataclasses.replace(form, mask_wearing='removed', ventilation_type='no-ventilation')
scenarios['Windows open with Type I masks'] = with_mask_type1.build_model()
scenarios['Windows open without masks'] = without_mask.build_model()
scenarios['Windows closed with Type I mask'] = with_mask_no_vent.build_model()
scenarios['Windows closed without masks'] = without_mask_or_vent.build_model()
else :
with_mask_type1 = dataclasses.replace(form, mask_type = 'Type I', mask_wearing='continuous')
without_mask = dataclasses.replace(form, mask_wearing='removed')
scenarios['With Type I mask'] = with_mask_type1.build_model()
scenarios['Without mask'] = without_mask.build_model()
return scenarios

View file

@ -22,6 +22,10 @@
<p>Simulation Name: {{ form.simulation_name }}</p>
<p>Room Number: {{ form.room_number }}</p>
{% if (form.total_people > 5) or (form.ventilation_type == "no-ventilation") or (form.mask_wearing == "removed")%}
<p><strong>Rules violation: This simulation doesn't conform to current CERN HSE rules. Please check your input assumptions and try again. </strong></p>
{% endif %}
<p class="data_title">Input data:</p>
<ul>
<li><p class="data_text">Room Volume: {{ model.concentration_model.room.volume }} m³</p></li>
@ -170,8 +174,10 @@
<p class="data_title">Alternative scenarios:</p>
<p class="data_text">
<strong> Note: </strong>this graph shows the concentration of viral quanta in the air.<br>
The filtration of Type I and FFP2 masks, if worn, applies to indiviudal exposure (inhalation only).<br>
For this reason, scenarios with different types of mask will show the same concentration on the graph.<br>
<img id="scenario_concentration_plot" src="{{ alternative_scenarios.plot }}" align="left" />
<table class="table table-striped w-auto">
<thead class="thead-light">
<tr>