From 5ab9e4f9127496d2217f3fc2a4b21bc15b92da3d Mon Sep 17 00:00:00 2001 From: Andrejh Date: Wed, 24 Feb 2021 17:20:12 +0100 Subject: [PATCH 1/5] test commit --- cara/montecarlo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cara/montecarlo.py b/cara/montecarlo.py index f7f18387..2dc90c4a 100644 --- a/cara/montecarlo.py +++ b/cara/montecarlo.py @@ -685,7 +685,7 @@ def composite_plot_pi_vs_viral_load(baselines: typing.List[MCExposureModel], lab axs[0, 0].text(11, -0.01, '$(i)$') axs[1, 0].text(11, axs[1, 0].get_ylim()[1] * 0.8, '$(ii)$') #axs[0, 2].text(axs[0, 2].get_xlim()[1] * 0.1, -0.05, '$(iii)$') - axs[0, 2].set_title('$(iii)$', fontsize=10) + axs[0, 2].set_title('$(iii)$ ', fontsize=10) crits = [] for line in lines: From e966320d2a7daca4719977d03e6ce70760ec993f Mon Sep 17 00:00:00 2001 From: Andrejh Date: Wed, 24 Feb 2021 17:26:11 +0100 Subject: [PATCH 2/5] test commit --- cara/montecarlo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cara/montecarlo.py b/cara/montecarlo.py index 2dc90c4a..f7f18387 100644 --- a/cara/montecarlo.py +++ b/cara/montecarlo.py @@ -685,7 +685,7 @@ def composite_plot_pi_vs_viral_load(baselines: typing.List[MCExposureModel], lab axs[0, 0].text(11, -0.01, '$(i)$') axs[1, 0].text(11, axs[1, 0].get_ylim()[1] * 0.8, '$(ii)$') #axs[0, 2].text(axs[0, 2].get_xlim()[1] * 0.1, -0.05, '$(iii)$') - axs[0, 2].set_title('$(iii)$ ', fontsize=10) + axs[0, 2].set_title('$(iii)$', fontsize=10) crits = [] for line in lines: From bb374ebaf786510ef55b5aed22bf09aae84a19f0 Mon Sep 17 00:00:00 2001 From: Andrejh Date: Thu, 25 Feb 2021 11:46:33 +0100 Subject: [PATCH 3/5] additional exposure models --- cara/mc-output.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/cara/mc-output.py b/cara/mc-output.py index 1a60e9bb..fc6117e4 100644 --- a/cara/mc-output.py +++ b/cara/mc-output.py @@ -2,7 +2,7 @@ from cara.montecarlo import * from cara.model_scenarios import * classroom_model.infection_probability() -compare_concentration_curves([classroom_model, classroom_model_with_hepa], ['Just window', 'Window and HEPA']) +#compare_concentration_curves([classroom_model, classroom_model_with_hepa], ['Just window', 'Window and HEPA']) #print(np.mean(chorale_model.infection_probability())) #print(np.mean(chorale_model.infection_probability())+np.std(chorale_model.infection_probability())) @@ -12,13 +12,18 @@ compare_concentration_curves([classroom_model, classroom_model_with_hepa], ['Jus -# #print(np.mean(classroom_model_with_hepa.infection_probability())) -# 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', -# vl_points=200) -#plot_pi_vs_viral_load([shared_office_model[1]], labels=['Baseline, qID=60', 'HEPA, qID=60', 'No mask + windows closed, qID=60'],title='$P(I|qID)$ - Shared office scenario') +print(np.mean(shared_office_model[1].infection_probability())) +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', + vl_points=200) +composite_plot_pi_vs_viral_load([classroom_model[1], classroom_model_with_hepa[1]], + labels=['No mask &\nwindows closed', 'Baseline', 'Baseline +\nHEPA filter'], + colors=['tomato', '#1f77b4', 'limegreen'], + title='$P(I|qID)$ vs $vl$ - Shared office scenario', + vl_points=200) +#plot_pi_vs_viral_load([shared_office_model[1]], labels=['Baseline'],title='') #generate_cdf_curves_vs_qr(masked=False,qid=1000) From 05e1b100d4d4e0cba8b12d60132e9d9a000b7ea5 Mon Sep 17 00:00:00 2001 From: Andrejh Date: Thu, 25 Feb 2021 11:57:51 +0100 Subject: [PATCH 4/5] additional exposure models --- cara/model_scenarios.py | 117 +++++++++++++++++++++++++++++++++------- 1 file changed, 99 insertions(+), 18 deletions(-) diff --git a/cara/model_scenarios.py b/cara/model_scenarios.py index adce3a78..e4f3bde6 100644 --- a/cara/model_scenarios.py +++ b/cara/model_scenarios.py @@ -115,7 +115,7 @@ exposure_models_2 = [MCExposureModel( ) ) for qid in (100, 60)] -classroom_model = MCExposureModel( +classroom_model = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=160), ventilation=models.SlidingWindow( @@ -128,7 +128,7 @@ classroom_model = MCExposureModel( number=1, presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), masked=False, - virus=MCVirus(halflife=1.1, qID=60), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=2, samples=200000, breathing_category=3, @@ -140,9 +140,90 @@ classroom_model = MCExposureModel( activity=models.Activity.types['Seated'], mask=models.Mask.types['No mask'] ) -) +)for qid in (100, 60)] -classroom_model_with_hepa = MCExposureModel( +classroom_model_full_open = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=160), + ventilation=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=0.6, + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), + masked=False, + 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['No mask'] + ) +)for qid in (100, 60)] + +classroom_model_summer = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=160), + ventilation=models.SlidingWindow( + active=models.PeriodicInterval(period=120, duration=10), + inside_temp=models.PiecewiseConstant((0, 24), (293,)), + outside_temp=models.PiecewiseConstant((0, 24), (291,)), + window_height=1.6, opening_length=0.6, + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), + masked=False, + 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['No mask'] + ) +)for qid in (100, 60)] + +classroom_model_full_open_summer = [MCExposureModel( + concentration_model=MCConcentrationModel( + room=models.Room(volume=160), + ventilation=models.SlidingWindow( + active=models.PeriodicInterval(period=120, duration=120), + inside_temp=models.PiecewiseConstant((0, 24), (293,)), + outside_temp=models.PiecewiseConstant((0, 24), (291,)), + window_height=1.6, opening_length=0.6, + ), + infected=MCInfectedPopulation( + number=1, + presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), + masked=False, + 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['No mask'] + ) +)for qid in (100, 60)] + +classroom_model_with_hepa = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=160), ventilation=models.MultipleVentilation( @@ -161,7 +242,7 @@ classroom_model_with_hepa = MCExposureModel( number=1, presence=models.SpecificInterval(((0, 2), (2.5, 4), (5, 7), (7.5, 9))), masked=False, - virus=MCVirus(halflife=1.1, qID=60), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=2, samples=200000, breathing_category=3, @@ -173,7 +254,7 @@ classroom_model_with_hepa = MCExposureModel( activity=models.Activity.types['Seated'], mask=models.Mask.types['No mask'] ) -) +)for qid in (100, 60)] shared_office_model = [MCExposureModel( concentration_model=MCConcentrationModel( @@ -263,7 +344,7 @@ shared_office_better_model = [MCExposureModel( ) ) for qid in (100, 60)] -ski_cabin_model = MCExposureModel( +ski_cabin_model = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=10), ventilation=models.HVACMechanical( @@ -274,7 +355,7 @@ ski_cabin_model = MCExposureModel( number=1, presence=models.SpecificInterval(((0, 0.33),)), masked=True, - virus=MCVirus(halflife=1.1, qID=60), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=2, samples=200000, breathing_category=4, @@ -287,9 +368,9 @@ ski_cabin_model = MCExposureModel( activity=models.Activity.types['Moderate activity'], mask=models.Mask.types['Type I'] ) -) +)for qid in (100, 60)] -gym_model = MCExposureModel( +gym_model = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=300), ventilation=models.AirChange( @@ -300,7 +381,7 @@ gym_model = MCExposureModel( number=2, presence=models.SpecificInterval(((0, 1),)), masked=False, - virus=MCVirus(halflife=1.1, qID=60), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=1, samples=200000, breathing_category=5, @@ -313,9 +394,9 @@ gym_model = MCExposureModel( activity=models.Activity.types['Heavy exercise'], mask=models.Mask.types['No mask'] ) -) +)for qid in (100, 60)] -waiting_room_model = MCExposureModel( +waiting_room_model = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=100), ventilation=models.AirChange( @@ -326,7 +407,7 @@ waiting_room_model = MCExposureModel( number=1, presence=models.SpecificInterval(((0, 2),)), masked=False, - virus=MCVirus(halflife=3.8, qID=60), + virus=MCVirus(halflife=3.8, qID=qid), expiratory_activity=4, samples=200000, breathing_category=1, @@ -339,9 +420,9 @@ waiting_room_model = MCExposureModel( activity=models.Activity.types['Seated'], mask=models.Mask.types['No mask'] ) -) +)for qid in (100, 60)] -chorale_model = MCExposureModel( +chorale_model = [MCExposureModel( concentration_model=MCConcentrationModel( room=models.Room(volume=810), ventilation=models.AirChange( @@ -352,7 +433,7 @@ chorale_model = MCExposureModel( number=1, presence=models.SpecificInterval(((0, 2.5),)), masked=False, - virus=MCVirus(halflife=1.1, qID=100), + virus=MCVirus(halflife=1.1, qID=qid), expiratory_activity=3, samples=200000, breathing_category=3, @@ -365,4 +446,4 @@ chorale_model = MCExposureModel( activity=models.Activity.types['Moderate activity'], mask=models.Mask.types['No mask'] ) -) +)for qid in (100, 60)] From 8331f592bb1c3c3a581a5c4cdcd60be5c483a77a Mon Sep 17 00:00:00 2001 From: Andrejh Date: Thu, 25 Feb 2021 11:58:04 +0100 Subject: [PATCH 5/5] change single pi vs vl plot settings --- cara/montecarlo.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/cara/montecarlo.py b/cara/montecarlo.py index f7f18387..3e6f5fba 100644 --- a/cara/montecarlo.py +++ b/cara/montecarlo.py @@ -579,8 +579,8 @@ def plot_pi_vs_viral_load(baselines: typing.Union[MCExposureModel, typing.List[M plt.vlines(x=(left, right), ymin=0, ymax=1, colors=('grey', 'grey'), linestyles='dotted') - plt.text(left - 1.1, 0.80, '$vl_{crit1}$', fontsize=12,color='black') - plt.text(right + 0.1, 0.80, '$vl_{crit2}$', fontsize=12,color='black') + plt.text(left - 1.1, 0.80, '$vl_{0.05}$', fontsize=12,color='black') + plt.text(right + 0.1, 0.80, '$vl_{0.95}$', fontsize=12,color='black') # add 3 shaded areas plt.axvspan(3, left, alpha=0.1, color='limegreen') plt.axvspan(left, right, alpha=0.1, color='orange') @@ -589,16 +589,16 @@ def plot_pi_vs_viral_load(baselines: typing.Union[MCExposureModel, typing.List[M if labels is not None: plt.legend(labels) # this is an inset plot inside the main plot - a = plt.axes([.2, .25, .3, .2], facecolor='lightgrey') - - plt.title('Histogram', fontsize=10) - # choose between hist or violin plot - - if len(baselines) == 1: - plt.hist(baselines[0].infection_probability()/100, bins=50) - plt.xticks([0, 0.5, 1]) - plt.yticks([]) - + #a = plt.axes([.2, .25, .3, .2], facecolor='lightgrey') + # + #plt.title('Histogram', fontsize=10) + ## choose between hist or violin plot + # + #if len(baselines) == 1: + # plt.hist(baselines[0].infection_probability()/100, bins=50) + # plt.xticks([0, 0.5, 1]) + # plt.yticks([]) + # # parts = plt.violinplot((shared_office_worst_model[1].infection_probability()/100, shared_office_model[1].infection_probability()/100, shared_office_better_model[1].infection_probability()/100), positions = (1, 2, 3), showmeans=True, showmedians=True) # for pc in parts['bodies']: # pc.set_facecolor('#D43F3A')