From 85564c282995590a78283bda20cdddce3f019d3f Mon Sep 17 00:00:00 2001 From: Andrejh Date: Mon, 1 Mar 2021 15:25:52 +0100 Subject: [PATCH] add ski expsoure models --- cara/mc-output.py | 32 +++++---- cara/model_scenarios.py | 151 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 163 insertions(+), 20 deletions(-) diff --git a/cara/mc-output.py b/cara/mc-output.py index e31b7d19..2689bc72 100644 --- a/cara/mc-output.py +++ b/cara/mc-output.py @@ -17,26 +17,32 @@ from cara.model_scenarios import * #composite_plot_pi_vs_viral_load([shared_office_worst_model[1], shared_office_model[1], shared_office_better_model[1]], # labels=['No mask &\nwindows closed', 'Baseline', 'Baseline +\nHEPA filter'], # colors=['tomato', '#1f77b4', 'limegreen'], -# title='$P(I|qID)$ vs $vl$ - Shared office scenario', +# title='Shared office scenario', # vl_points=200) -#composite_plot_pi_vs_viral_load([classroom_model_no_vent[1], classroom_model[1], classroom_model_with_hepa[1], classroom_model_full_open_hepa[1]], -# labels=['Windows closed', 'Baseline:\n(windows 10min/2h)', 'Baseline:\n(windows 10min/2h)+\nHEPA', 'Multiple windows open +\nHEPA filter'], -# colors=['tomato','#1f77b4', 'seagreen', 'limegreen'], -# title='', +#composite_plot_pi_vs_viral_load([classroom_model_no_vent[1], classroom_model[1], classroom_model_with_hepa[1], classroom_model_full_open_multi[1], classroom_model_full_open_multi_masks[1]], +# labels=['Windows closed', 'Baseline:(windows 10min/2h)', 'Baseline:(windows 10min/2h)\n+ HEPA', 'Multiple windows open', 'Multiple windows open\n+masks'], +# colors=['tomato','#1f77b4', 'dodgerblue', 'seagreen', 'limegreen'], +# title='Classroom scenario', # vl_points=200) -#compare_concentration_curves([classroom_model_no_vent[1], classroom_model[1], classroom_model_with_hepa[1], classroom_model_full_open_hepa[1]], -# labels=['Windows closed', 'Baseline:(windows 10min/2h)', 'Baseline:(windows 10min/2h) + HEPA', 'Multiple windows open + HEPA filter'], +composite_plot_pi_vs_viral_load([ski_cabin_model_60[1], ski_cabin_model_30[1], ski_cabin_model_20[1], ski_cabin_model_10[1]], + labels=['60 min', '30 min', 'Baseline: 20 min', '10 min'], + colors=['tomato', 'lightsalmon', '#1f77b4', 'limegreen'], + title='Ski cabin scenario', + vl_points=200) + +#compare_concentration_curves([classroom_model_no_vent[1], classroom_model[1], classroom_model_with_hepa[1], classroom_model_full_open_multi[1]], +# labels=['Windows closed', 'Baseline:(windows 10min/2h)', 'Baseline:(windows 10min/2h) + HEPA', 'Multiple windows open'], # colors=['tomato','#1f77b4', 'seagreen', 'limegreen'], # title='Classroom scenario' # ) -compare_concentration_curves([waiting_room_model[1], waiting_room_model_full_summer[1], - waiting_room_model_full_winter[1], waiting_room_model_periodic_winter[1]], - labels=['Baseline:(windows closed)', 'Windows open (summer)', 'Windows open (winter)', 'Windows open 5min/20min (winter)'], - colors=['#1f77b4', 'darkorange', 'deepskyblue', 'lightskyblue'], - title='Waiting room scenario' - ) +#compare_concentration_curves([waiting_room_model[1], waiting_room_model_full_summer[1], +# waiting_room_model_full_winter[1], waiting_room_model_periodic_winter[1]], +# labels=['Baseline:(windows closed)', 'Windows open (summer)', 'Windows open (winter)', 'Windows open 5min/20min (winter)'], +# colors=['#1f77b4', 'darkorange', 'deepskyblue', 'lightskyblue'], +# title='Waiting room scenario' +# ) #plot_pi_vs_viral_load([shared_office_model[1]], labels=['Baseline'],title='') diff --git a/cara/model_scenarios.py b/cara/model_scenarios.py index 0c39393d..fcc624da 100644 --- a/cara/model_scenarios.py +++ b/cara/model_scenarios.py @@ -311,7 +311,7 @@ classroom_model_with_hepa = [MCExposureModel( ) )for qid in (100, 60)] -classroom_model_full_open_hepa = [MCExposureModel( +classroom_model_full_open_multi = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=160), ventilation=models.MultipleVentilation( @@ -323,7 +323,7 @@ classroom_model_full_open_hepa = [MCExposureModel( window_height=1.6, opening_length=4*0.6, ), models.HEPAFilter(active=models.PeriodicInterval(period=120, duration=120), - q_air_mech=800) + q_air_mech=0) ) ), infected=MCInfectedPopulation( @@ -344,6 +344,39 @@ classroom_model_full_open_hepa = [MCExposureModel( ) )for qid in (100, 60)] +classroom_model_full_open_multi_masks = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=160), + ventilation=models.MultipleVentilation( + ventilations=( + models.SlidingWindow( + active=models.PeriodicInterval(period=120, duration=120), + inside_temp=models.PiecewiseConstant((0, 24), (293,)), + outside_temp=models.PiecewiseConstant((0, 24), (283,)), + window_height=1.6, opening_length=4*0.6, + ), + models.HEPAFilter(active=models.PeriodicInterval(period=120, duration=120), + q_air_mech=0) + ) + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), + masked=True, + virus=MCVirus(halflife=1.1, qID=qid), + expiratory_activity=2, + samples=200000, + breathing_category=3, + ) + ), + exposed=models.Population( + number=19, + presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), + activity=models.Activity.types['Seated'], + mask=models.Mask.types['Type I'] + ) +)for qid in (100, 60)] + ######### Shared office exposure models ########### shared_office_model = [MCExposureModel( concentration_model=MCConcentrationModel( @@ -434,7 +467,7 @@ shared_office_better_model = [MCExposureModel( ) for qid in (100, 60)] ######### Ski cabine exposure models ########### -ski_cabin_model = [MCExposureModel( +ski_cabin_model_20 = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=10), ventilation=models.HVACMechanical( @@ -443,7 +476,7 @@ ski_cabin_model = [MCExposureModel( ), infected=MCInfectedPopulation( number=1, - presence=models.SpecificInterval(((0, 0.33),)), + presence=models.SpecificInterval(((0, 20/60),)), masked=True, virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=2, @@ -454,7 +487,111 @@ ski_cabin_model = [MCExposureModel( ), exposed=models.Population( number=3, - presence=models.SpecificInterval(((0, 0.33),)), + presence=models.SpecificInterval(((0, 20/60),)), + activity=models.Activity.types['Moderate activity'], + mask=models.Mask.types['Type I'] + ) +)for qid in (100, 60)] + +ski_cabin_model_10 = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=10), + ventilation=models.HVACMechanical( + active=models.PeriodicInterval(period=120, duration=120), + q_air_mech=0., + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 10/60),)), + masked=True, + virus=MCVirus(halflife=1.1, qID=qid), + expiratory_activity=2, + samples=200000, + breathing_category=4, + expiratory_activity_weights=(0.7, 0.3, 0) + ) + ), + exposed=models.Population( + number=3, + presence=models.SpecificInterval(((0, 10/60),)), + activity=models.Activity.types['Moderate activity'], + mask=models.Mask.types['Type I'] + ) +)for qid in (100, 60)] + +ski_cabin_model_25 = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=10), + ventilation=models.HVACMechanical( + active=models.PeriodicInterval(period=120, duration=120), + q_air_mech=0., + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 25/60),)), + masked=True, + virus=MCVirus(halflife=1.1, qID=qid), + expiratory_activity=2, + samples=200000, + breathing_category=4, + expiratory_activity_weights=(0.7, 0.3, 0) + ) + ), + exposed=models.Population( + number=3, + presence=models.SpecificInterval(((0, 25/60),)), + activity=models.Activity.types['Moderate activity'], + mask=models.Mask.types['Type I'] + ) +)for qid in (100, 60)] + +ski_cabin_model_30 = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=10), + ventilation=models.HVACMechanical( + active=models.PeriodicInterval(period=120, duration=120), + q_air_mech=0., + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 30/60),)), + masked=True, + virus=MCVirus(halflife=1.1, qID=qid), + expiratory_activity=2, + samples=200000, + breathing_category=4, + expiratory_activity_weights=(0.7, 0.3, 0) + ) + ), + exposed=models.Population( + number=3, + presence=models.SpecificInterval(((0, 30/60),)), + activity=models.Activity.types['Moderate activity'], + mask=models.Mask.types['Type I'] + ) +)for qid in (100, 60)] + +ski_cabin_model_60 = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=10), + ventilation=models.HVACMechanical( + active=models.PeriodicInterval(period=120, duration=120), + q_air_mech=0., + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 1),)), + masked=True, + virus=MCVirus(halflife=1.1, qID=qid), + expiratory_activity=2, + samples=200000, + breathing_category=4, + expiratory_activity_weights=(0.7, 0.3, 0) + ) + ), + exposed=models.Population( + number=3, + presence=models.SpecificInterval(((0, 1),)), activity=models.Activity.types['Moderate activity'], mask=models.Mask.types['Type I'] ) @@ -555,7 +692,7 @@ waiting_room_model_full_summer = [MCExposureModel( number=1, presence=models.SpecificInterval(((0, 2),)), masked=False, - virus=MCVirus(halflife=3.8, qID=qid), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=4, samples=200000, breathing_category=1, @@ -611,7 +748,7 @@ waiting_room_model_periodic_summer = [MCExposureModel( number=1, presence=models.SpecificInterval(((0, 2),)), masked=False, - virus=MCVirus(halflife=3.8, qID=qid), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=4, samples=200000, breathing_category=1,