diff --git a/caimira/apps/calculator/__init__.py b/caimira/apps/calculator/__init__.py index 4a410646..4c56cee1 100644 --- a/caimira/apps/calculator/__init__.py +++ b/caimira/apps/calculator/__init__.py @@ -126,6 +126,7 @@ class ConcentrationModel(BaseRequestHandler): if self.get_cookie('conditional_plot'): form.conditional_probability_plot = True if self.get_cookie('conditional_plot') == '1' else False self.clear_cookie('conditional_plot') # Clears cookie after changing the form value. + report_task = executor.submit( report_generator.build_report, base_url, form, executor_factory=functools.partial( diff --git a/caimira/apps/calculator/report_generator.py b/caimira/apps/calculator/report_generator.py index b20bd259..65cbade5 100644 --- a/caimira/apps/calculator/report_generator.py +++ b/caimira/apps/calculator/report_generator.py @@ -139,7 +139,6 @@ def calculate_report_data(form: FormData, model: models.ExposureModel) -> typing expected_new_cases = np.array(model.expected_new_cases()).mean() uncertainties_plot_src = img2base64(_figure2bytes(uncertainties_plot(model))) if form.conditional_probability_plot else None exposed_presence_intervals = [list(interval) for interval in model.exposed.presence_interval().boundaries()] - manufacture_viral_load_scenarios(model) return { "model_repr": repr(model), @@ -307,13 +306,13 @@ def non_zero_percentage(percentage: int) -> str: def manufacture_viral_load_scenarios(model: mc.ExposureModel) -> typing.Dict[str, mc.ExposureModel]: viral_load = model.concentration_model.infected.virus.viral_load_in_sputum - viral_load_values = [np.quantile(viral_load, percentil) for percentil in (0.01, 0.05, 0.5, 0.95, 0.99)] scenarios = {} - for vl in viral_load_values: + for percentil in (0.01, 0.05, 0.5, 0.95, 0.99): + vl = np.quantile(viral_load, percentil) specific_vl_scenario = dataclass_utils.nested_replace(model, {'concentration_model.infected.virus.viral_load_in_sputum': vl} ) - scenarios[round(np.log10(vl))] = specific_vl_scenario + scenarios[round(np.log10(vl))] = np.mean(specific_vl_scenario.infection_probability()) return scenarios @@ -387,23 +386,6 @@ def scenario_statistics(mc_model: mc.ExposureModel, sample_times: typing.List[fl } -def comparison_report_viral_load(scenarios: typing.Dict[str, mc.ExposureModel]): - results = [] - for mc_model in scenarios.values(): - results.append({ - 'probability_of_infection': np.mean(mc_model.infection_probability()), - 'expected_new_cases': np.mean(mc_model.expected_new_cases()), - }) - - statistics = {} - for (name, _), model_stats in zip(scenarios.items(), results): - statistics[name] = model_stats - - return { - 'stats': statistics, - } - - def comparison_report( form: FormData, report_data: typing.Dict[str, typing.Any], @@ -480,9 +462,8 @@ class ReportGenerator: report_data = calculate_report_data(form, model) context.update(report_data) - alternative_viral_loads = manufacture_viral_load_scenarios(model) alternative_scenarios = manufacture_alternative_scenarios(form) - context['alternative_viral_load'] = comparison_report_viral_load(alternative_viral_loads) + context['alternative_viral_load'] = manufacture_viral_load_scenarios(model) context['alternative_scenarios'] = comparison_report( form, report_data, alternative_scenarios, scenario_sample_times, executor_factory=executor_factory, ) diff --git a/caimira/apps/templates/base/calculator.report.html.j2 b/caimira/apps/templates/base/calculator.report.html.j2 index ffc7644f..6091e55a 100644 --- a/caimira/apps/templates/base/calculator.report.html.j2 +++ b/caimira/apps/templates/base/calculator.report.html.j2 @@ -167,15 +167,15 @@