Health-GPS  1.2.2.0
Global Health Policy Simulation model (Health-GPS)
interfaces.h
Go to the documentation of this file.
1 #pragma once
2 #include "HealthGPS.Core/api.h"
3 #include "randombit_generator.h"
4 
5 #include <map>
6 #include <memory>
7 
8 namespace hgps {
9 
11 enum class SimulationModuleType : uint8_t {
13  RiskFactor,
14 
16  SES,
17 
20 
22  Disease,
23 
25  Analysis,
26 };
27 
29 enum class HierarchicalModelType : uint8_t {
31  Static,
32 
34  Dynamic,
35 };
36 
39 template <typename T>
40 using case_insensitive_map = std::map<std::string, T, core::case_insensitive::comparator>;
41 
43 struct Person;
44 
46 struct PopulationRecord;
47 
49 class RuntimeContext;
50 
53  public:
55  virtual ~SimulationModule() = default;
56 
59  virtual SimulationModuleType type() const noexcept = 0;
60 
63  virtual const std::string &name() const noexcept = 0;
64 
67  virtual void initialise_population(RuntimeContext &context) = 0;
68 };
69 
72  public:
75  virtual void update_population(RuntimeContext &context) = 0;
76 };
77 
80  public:
83  virtual std::size_t size() const noexcept = 0;
84 
88  virtual bool contains(const core::Identifier &disease_id) const noexcept = 0;
89 
94  virtual double get_excess_mortality(const core::Identifier &disease_id,
95  const Person &entity) const noexcept = 0;
96 };
97 
100  public:
103  virtual std::size_t size() const noexcept = 0;
104 
108  virtual bool contains(const HierarchicalModelType &modelType) const noexcept = 0;
109 
112  virtual void apply_baseline_adjustments(RuntimeContext &context) = 0;
113 };
114 
117  public:
121  virtual std::size_t get_total_population_size(int time_year) const noexcept = 0;
122 
126  virtual const std::map<int, PopulationRecord> &
127  get_population_distribution(int time_year) const = 0;
128 
132  virtual void update_population(RuntimeContext &context,
133  const DiseaseHostModule &disease_host) = 0;
134 };
135 
138  public:
140  virtual ~HierarchicalLinearModel() = default;
141 
144  virtual HierarchicalModelType type() const noexcept = 0;
145 
148  virtual std::string name() const noexcept = 0;
149 
152  virtual void generate_risk_factors(RuntimeContext &context) = 0;
153 
156  virtual void update_risk_factors(RuntimeContext &context) = 0;
157 };
158 
161  public:
163  virtual ~RiskFactorModelDefinition() = default;
164 
166  virtual std::unique_ptr<HierarchicalLinearModel> create_model() const = 0;
167 };
168 
171  public:
173  virtual ~DiseaseModel() = default;
174 
177  virtual core::DiseaseGroup group() const noexcept = 0;
178 
181  virtual const core::Identifier &disease_type() const noexcept = 0;
182 
185  virtual void initialise_disease_status(RuntimeContext &context) = 0;
186 
189  virtual void initialise_average_relative_risk(RuntimeContext &context) = 0;
190 
193  virtual void update_disease_status(RuntimeContext &context) = 0;
194 
198  virtual double get_excess_mortality(const Person &entity) const noexcept = 0;
199 };
200 } // namespace hgps
Demographic prospects module interface.
Definition: interfaces.h:116
virtual const std::map< int, PopulationRecord > & get_population_distribution(int time_year) const =0
Gets the population age distribution at a specific point in time.
virtual void update_population(RuntimeContext &context, const DiseaseHostModule &disease_host)=0
Updates the virtual population status.
virtual std::size_t get_total_population_size(int time_year) const noexcept=0
Gets the total population at a specific point in time.
Generic disease module interface to host multiple disease models.
Definition: interfaces.h:79
virtual std::size_t size() const noexcept=0
Gets the number of diseases model hosted.
Diseases model interface.
Definition: interfaces.h:170
virtual core::DiseaseGroup group() const noexcept=0
Gets the disease group.
virtual ~DiseaseModel()=default
Destroys a DiseaseModel instance.
Hierarchical linear model interface.
Definition: interfaces.h:137
virtual ~HierarchicalLinearModel()=default
Destroys a HierarchicalLinearModel instance.
virtual HierarchicalModelType type() const noexcept=0
Gets the model type identifier.
Generic risk factors module interface to host hierarchical models.
Definition: interfaces.h:99
virtual std::size_t size() const noexcept=0
Gets the number of diseases model hosted.
Risk factor model definition interface.
Definition: interfaces.h:160
virtual std::unique_ptr< HierarchicalLinearModel > create_model() const =0
Creates a new risk factor model from this definition.
virtual ~RiskFactorModelDefinition()=default
Destroys a RiskFactorModelDefinition instance.
Defines the Simulation runtime context data type.
Definition: runtime_context.h:21
Simulation modules interface.
Definition: interfaces.h:52
virtual ~SimulationModule()=default
Destroys a SimulationModule instance.
virtual void initialise_population(RuntimeContext &context)=0
Initialises the virtual population.
virtual const std::string & name() const noexcept=0
Gets the module name.
virtual SimulationModuleType type() const noexcept=0
Gets the module type identifier.
Generic disease module interface to host multiple diseases model.
Definition: interfaces.h:71
virtual void update_population(RuntimeContext &context)=0
Updates the virtual population status.
DiseaseGroup
Enumerates supported diseases types.
Definition: forward_type.h:30
Top-level namespace for Health-GPS C++ API.
Definition: analysis_definition.h:8
HierarchicalModelType
Health GPS risk factor module types enumeration.
Definition: interfaces.h:29
@ Static
Static hierarchical model.
@ Dynamic
Dynamic hierarchical model.
SimulationModuleType
Health GPS simulation modules types enumeration.
Definition: interfaces.h:11
@ Demographic
Demographic module.
@ Analysis
Statistical analysis module, e.g. BoD module.
@ SES
Socio-economic status module.
@ RiskFactor
Risk factor module.
@ Disease
Disease module coordinator.
std::map< std::string, T, core::case_insensitive::comparator > case_insensitive_map
Defines a map template with case insensitive string keys and type.
Definition: interfaces.h:40
Global namespace.
Definition: jsonparser.h:88
Defines a virtual population person data type.
Definition: person.h:40
Define the population record data type for the demographic dataset.
Definition: demographic.h:14