20 #ifndef MIO_ODE_SECIRVVS_ANALYZE_RESULT_H
21 #define MIO_ODE_SECIRVVS_ANALYZE_RESULT_H
36 template <
class Model>
39 assert(p > 0.0 && p < 1.0 &&
"Invalid percentile value.");
41 auto num_runs = ensemble_params.size();
42 auto num_nodes = ensemble_params[0].size();
43 auto num_groups = (size_t)ensemble_params[0][0].parameters.get_num_groups();
44 auto num_days = ensemble_params[0][0]
45 .parameters.template get<DailyPartialVaccinations<double>>()
46 .
template size<mio::SimulationDay>();
48 std::vector<double> single_element_ensemble(num_runs);
51 std::vector<Model> percentile(num_nodes,
Model((
int)num_groups));
52 auto param_percentil = [&ensemble_params, p, num_runs, &percentile](
auto n,
auto get_param)
mutable {
53 std::vector<double> single_element(num_runs);
54 for (
size_t run = 0; run < num_runs; run++) {
55 auto const& params = ensemble_params[run][n];
56 single_element[run] = get_param(params);
58 std::sort(single_element.begin(), single_element.end());
59 auto& new_params = get_param(percentile[n]);
60 new_params = single_element[
static_cast<size_t>(num_runs * p)];
63 for (
size_t node = 0; node < num_nodes; node++) {
64 percentile[node].parameters.template get<DailyPartialVaccinations<double>>().resize(num_days);
65 percentile[node].parameters.template get<DailyFullVaccinations<double>>().resize(num_days);
70 param_percentil(node, [compart,
i](
auto&& model) ->
auto& {
71 return model.populations[{
i, compart}];
75 param_percentil(node, [
i](
auto&& model) ->
auto& {
76 return model.parameters.template get<TimeExposed<double>>()[
i];
78 param_percentil(node, [
i](
auto&& model) ->
auto& {
79 return model.parameters.template get<TimeInfectedNoSymptoms<double>>()[
i];
81 param_percentil(node, [
i](
auto&& model) ->
auto& {
82 return model.parameters.template get<TimeInfectedSymptoms<double>>()[
i];
84 param_percentil(node, [
i](
auto&& model) ->
auto& {
85 return model.parameters.template get<TimeInfectedSevere<double>>()[
i];
87 param_percentil(node, [
i](
auto&& model) ->
auto& {
88 return model.parameters.template get<TimeInfectedCritical<double>>()[
i];
91 param_percentil(node, [
i](
auto&& model) ->
auto& {
92 return model.parameters.template get<TransmissionProbabilityOnContact<double>>()[
i];
94 param_percentil(node, [
i](
auto&& model) ->
auto& {
95 return model.parameters.template get<RelativeTransmissionNoSymptoms<double>>()[
i];
97 param_percentil(node, [
i](
auto&& model) ->
auto& {
98 return model.parameters.template get<RiskOfInfectionFromSymptomatic<double>>()[
i];
100 param_percentil(node, [
i](
auto&& model) ->
auto& {
101 return model.parameters.template get<MaxRiskOfInfectionFromSymptomatic<double>>()[
i];
103 param_percentil(node, [
i](
auto&& model) ->
auto& {
104 return model.parameters.template get<RecoveredPerInfectedNoSymptoms<double>>()[
i];
106 param_percentil(node, [
i](
auto&& model) ->
auto& {
107 return model.parameters.template get<SeverePerInfectedSymptoms<double>>()[
i];
109 param_percentil(node, [
i](
auto&& model) ->
auto& {
110 return model.parameters.template get<CriticalPerSevere<double>>()[
i];
112 param_percentil(node, [
i](
auto&& model) ->
auto& {
113 return model.parameters.template get<DeathsPerCritical<double>>()[
i];
116 param_percentil(node, [
i](
auto&& model) ->
auto& {
117 return model.parameters.template get<ReducExposedPartialImmunity<double>>()[
i];
119 param_percentil(node, [
i](
auto&& model) ->
auto& {
120 return model.parameters.template get<ReducExposedImprovedImmunity<double>>()[
i];
122 param_percentil(node, [
i](
auto&& model) ->
auto& {
123 return model.parameters.template get<ReducInfectedSymptomsPartialImmunity<double>>()[
i];
125 param_percentil(node, [
i](
auto&& model) ->
auto& {
126 return model.parameters.template get<ReducInfectedSymptomsImprovedImmunity<double>>()[
i];
128 param_percentil(node, [
i](
auto&& model) ->
auto& {
129 return model.parameters.template get<ReducInfectedSevereCriticalDeadPartialImmunity<double>>()[
i];
131 param_percentil(node, [
i](
auto&& model) ->
auto& {
132 return model.parameters.template get<ReducInfectedSevereCriticalDeadImprovedImmunity<double>>()[
i];
134 param_percentil(node, [
i](
auto&& model) ->
auto& {
135 return model.parameters.template get<ReducTimeInfectedMild<double>>()[
i];
137 param_percentil(node, [
i](
auto&& model) ->
auto& {
138 return model.parameters.template get<VaccinationGap<double>>()[
i];
140 param_percentil(node, [
i](
auto&& model) ->
auto& {
141 return model.parameters.template get<DaysUntilEffectivePartialImmunity<double>>()[
i];
143 param_percentil(node, [
i](
auto&& model) ->
auto& {
144 return model.parameters.template get<DaysUntilEffectiveImprovedImmunity<double>>()[
i];
148 param_percentil(node, [
i, day](
auto&& model) ->
auto& {
149 return model.parameters.template get<DailyPartialVaccinations<double>>()[{
i, day}];
151 param_percentil(node, [
i, day](
auto&& model) ->
auto& {
152 return model.parameters.template get<DailyFullVaccinations<double>>()[{
i, day}];
156 param_percentil(node, [
i](
auto&& model) ->
auto& {
157 return model.parameters.template get<InfectiousnessNewVariant<double>>()[
i];
161 param_percentil(node, [](
auto&& model) ->
auto& {
162 return model.parameters.template get<Seasonality<double>>();
164 param_percentil(node, [](
auto&& model) ->
auto& {
165 return model.parameters.template get<TestAndTraceCapacity<double>>();
167 param_percentil(node, [](
auto&& model) ->
auto& {
168 return model.parameters.template get<ICUCapacity<double>>();
170 param_percentil(node, [](
auto&& model) ->
auto& {
171 return model.parameters.template get<DynamicNPIsImplementationDelay<double>>();
174 for (
size_t run = 0; run < num_runs; run++) {
175 auto const& params = ensemble_params[run][node];
176 single_element_ensemble[run] =
177 params.parameters.template get<ICUCapacity<double>>() * params.populations.get_total();
179 std::sort(single_element_ensemble.begin(), single_element_ensemble.end());
180 percentile[node].parameters.template set<ICUCapacity<double>>(
181 single_element_ensemble[
static_cast<size_t>(num_runs * p)]);
An Index with more than one template parameter combines several Index objects.
Definition: index.h:181
Represents the simulation time as an integer index.
Definition: simulation_day.h:32
Definition: ode_secirvvs/model.h:94
std::vector< Model > ensemble_params_percentile(const std::vector< std::vector< Model >> &ensemble_params, double p)
computes the p percentile of the parameters for each node.
Definition: models/ode_secirvvs/analyze_result.h:37
A collection of classes to simplify handling of matrix shapes in meta programming.
Definition: models/abm/analyze_result.h:30
auto i
Definition: io.h:809
The AgeGroup struct is used as a dynamically sized tag for all age dependent categories.
Definition: age_group.h:32