Alternative Scenarios with cumulative dose fix #227

This commit is contained in:
Luis Aleixo 2021-07-21 11:01:41 +02:00
parent f7b2f3c567
commit 85045f02db
2 changed files with 24 additions and 21 deletions

View file

@ -249,37 +249,41 @@ def comparison_plot(scenarios: typing.Dict[str, dict], sample_times: np.ndarray)
datetimes = [datetime(1970, 1, 1) + timedelta(hours=time) for time in sample_times]
for name, statistics in scenarios.items():
model = statistics['model']
concentrations = statistics['concentrations']
factor = statistics['factor']
present_indexes = statistics['present_indexes']
#See CERN-OPEN-2021-004, p. 15, eq. 16. - Cumulative Dose
factor = 0.6 * np.mean(model.exposed.activity.inhalation_rate) * (1 - model.exposed.mask.η_inhale)
present_indexes = np.array([model.exposed.person_present(t) for t in sample_times])
modified_concentrations = np.array(concentrations)
modified_concentrations[~present_indexes] = 0
qds = [np.trapz(modified_concentrations[:i + 1], sample_times[:i + 1]) * factor for i in range(len(sample_times))]
# Plot concentrations and cumulative dose
if name in dash_styled_scenarios:
ax.plot(datetimes, concentrations, label=name, linestyle='--')
ax1.plot(datetimes, qds, label='Mean cumulative dose', linestyle='dotted')
ax1.plot(datetimes, qds, label=f'Mean cumulative dose:\n{name}', linestyle='dotted')
else:
ax.plot(datetimes, concentrations, label=name, linestyle='-', alpha=0.5)
ax1.plot(datetimes, qds, label='Mean cumulative dose', linestyle='dotted', alpha=0.5)
ax1.plot(datetimes, qds, label=f'Mean cumulative dose:\n{name}', linestyle='dotted', alpha=0.5)
# Place a legend outside of the axes itself.
fig.legend(bbox_to_anchor=(1.05, 0.95), loc='upper left')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.set_xlabel('Time of day', fontsize=14)
ax.set_ylabel('Mean viral concentration\n(virion m$^{-3}$)', fontsize=14)
ax.set_title('Concentration profile')
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%H:%M"))
ax1.spines['top'].set_visible(False)
ax1.spines["right"].set_linestyle("--")
ax1.spines["right"].set_linestyle((0,(1,5)))
ax1.set_ylabel('Mean cumulative dose\n(virion)', fontsize=14)
ax1.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%H:%M"))
# Place a legend outside of the axes itself.
ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%H:%M"))
ax.set_xlabel('Time of day')
ax.set_ylabel('Mean concentration ($q/m^3$)')
ax.set_title('Mean concentration of infectious quanta')
return fig
@ -287,14 +291,13 @@ def comparison_plot(scenarios: typing.Dict[str, dict], sample_times: np.ndarray)
def scenario_statistics(mc_model: mc.ExposureModel, sample_times: np.ndarray):
model = mc_model.build_model(size=_DEFAULT_MC_SAMPLE_SIZE)
return {
'model': model,
'probability_of_infection': np.mean(model.infection_probability()),
'expected_new_cases': np.mean(model.expected_new_cases()),
'concentrations': [
np.mean(model.concentration_model.concentration(time))
np.mean(model.concentration_model.concentration(time)) * model.concentration_model.virus.quantum_infectious_dose
for time in sample_times
],
'factor': 0.6 * np.mean(model.exposed.activity.inhalation_rate) * (1 - model.exposed.mask.η_inhale),
'present_indexes': np.array([model.exposed.person_present(t) for t in sample_times]),
}

View file

@ -219,7 +219,7 @@
<img id="scenario_concentration_plot" src="{{ scenario_plot_src }}">
<p class="data_title">Alternative scenarios:</p>
<p class="data_text">
<img id="scenario_concentration_plot" src="{{ alternative_scenarios.plot }}" align="left" />
{% block report_scenarios_summary_table %}
@ -242,7 +242,7 @@
</tbody>
</table>
{% endblock report_scenarios_summary_table %}
</p>
<div style="clear: both;">
<p class="data_text"> <strong> Notes for alternative scenarios: </strong><br>