BioGears.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 #include <biogears/cdm/CommonDataModel.h>
15 #include <biogears/exports.h>
16 
17 #include <biogears/cdm/engine/PhysiologyEngineTrack.h>
18 #include <biogears/cdm/properties/SEScalarTime.h>
19 #include <biogears/cdm/scenario/SEActionManager.h>
20 #include <biogears/cdm/scenario/SEConditionManager.h>
21 #include <biogears/cdm/utils/DataTrack.h>
22 #include <biogears/engine/Controller/BioGearsCircuits.h>
23 #include <biogears/engine/Controller/BioGearsCompartments.h>
24 #include <biogears/engine/Controller/BioGearsConfiguration.h>
25 #include <biogears/engine/Controller/BioGearsSubstances.h>
26 #include <biogears/engine/Equipment/AnesthesiaMachine.h>
27 #include <biogears/engine/Equipment/Inhaler.h>
28 #include <biogears/engine/Systems/BloodChemistry.h>
29 #include <biogears/engine/Systems/Cardiovascular.h>
30 #include <biogears/engine/Systems/Diffusion.h>
31 #include <biogears/engine/Systems/Drugs.h>
32 #include <biogears/engine/Systems/Endocrine.h>
33 #include <biogears/engine/Systems/Energy.h>
34 #include <biogears/engine/Systems/Environment.h>
35 #include <biogears/engine/Systems/Gastrointestinal.h>
36 #include <biogears/engine/Systems/Hepatic.h>
37 #include <biogears/engine/Systems/Nervous.h>
38 #include <biogears/engine/Systems/Renal.h>
39 #include <biogears/engine/Systems/Respiratory.h>
40 #include <biogears/engine/Systems/Saturation.h>
41 #include <biogears/engine/Systems/Tissue.h>
42 #include <biogears/schema/biogears/BioGears.hxx>
43 
44 namespace biogears {
45 class SEPatientAssessment;
46 class BioGearsScenarioExec;
47 
48 enum class EngineState { NotReady = 0,
54  Active };
55 
56 class ECG;
57 class DataTrack;
58 class SaturationCalculator;
59 class BioGearsSubstances;
60 class SEPatient;
61 class SEBloodChemistrySystem;
62 class SECardiovascularSystem;
63 class SEDrugSystem;
64 class SEEndocrineSystem;
65 class SEEnergySystem;
66 class SEGastrointestinalSystem;
67 class SEHepaticSystem;
68 class SENervousSystem;
69 class SERenalSystem;
70 class SERespiratorySystem;
71 class SETissueSystem;
72 class SEEnvironment;
73 class SEAnesthesiaMachine;
74 class SEElectroCardioGram;
75 class SEInhaler;
76 class SEActionManager;
77 class SEConditionManager;
78 class BioGearsCircuits;
79 class BioGearsCompartments;
80 class BioGearsConfiguration;
81 class SEScalarTime;
82 
86 class BIOGEARS_API BioGears {
87  friend class BioGearsEngineTest;
88  friend class BioGearsScenarioExec;
89 
90 protected:
92 
93 public:
94  BioGears(Logger* logger);
95  BioGears(const std::string& logfileName);
96  BioGears(Logger* logger, const std::string& working_dir);
97  BioGears(const std::string& logfileName, const std::string& working_dir);
98  virtual ~BioGears();
99 
100  EngineState GetState();
101  const EngineState GetState() const;
102 
103  DataTrack& GetDataTrack();
104  SaturationCalculator& GetSaturationCalculator();
105  const SaturationCalculator& GetSaturationCalculator() const;
106 
107  DiffusionCalculator& GetDiffusionCalculator();
108  const DiffusionCalculator& GetDiffusionCalculator() const;
109 
110  BioGearsSubstances& GetSubstances();
111  const BioGearsSubstances& GetSubstances() const;
112 
113  SEPatient& GetPatient();
114  const SEPatient& GetPatient() const;
115 
116  bool GetPatientAssessment(SEPatientAssessment& assessment);
117 
118  SEBloodChemistrySystem& GetBloodChemistry();
119  SECardiovascularSystem& GetCardiovascular();
120  SEDrugSystem& GetDrugs();
121  SEEndocrineSystem& GetEndocrine();
122  SEEnergySystem& GetEnergy();
123  SEGastrointestinalSystem& GetGastrointestinal();
124  SEHepaticSystem& GetHepatic();
125  SENervousSystem& GetNervous();
126  SERenalSystem& GetRenal();
127  SERespiratorySystem& GetRespiratory();
128  SETissueSystem& GetTissue();
129  SEEnvironment& GetEnvironment();
130  SEAnesthesiaMachine& GetAnesthesiaMachine();
131  SEElectroCardioGram& GetECG();
132  SEInhaler& GetInhaler();
133  SEActionManager& GetActions();
134  SEConditionManager& GetConditions();
135  BioGearsCircuits& GetCircuits();
136  BioGearsCompartments& GetCompartments();
137  const BioGearsConfiguration& GetConfiguration();
138  const SEScalarTime& GetEngineTime();
139  const SEScalarTime& GetSimulationTime();
140  const SEScalarTime& GetTimeStep();
141  CDM::enumBioGearsAirwayMode::value GetAirwayMode();
142  CDM::enumOnOff::value GetIntubation();
143 
144  const SEBloodChemistrySystem& GetBloodChemistry() const;
145  const SECardiovascularSystem& GetCardiovascular() const;
146  const SEDrugSystem& GetDrugs() const;
147  const SEEndocrineSystem& GetEndocrine() const;
148  const SEEnergySystem& GetEnergy() const;
149  const SEGastrointestinalSystem& GetGastrointestinal() const;
150  const SEHepaticSystem& GetHepatic() const;
151  const SENervousSystem& GetNervous() const;
152  const SERenalSystem& GetRenal() const;
153  const SERespiratorySystem& GetRespiratory() const;
154  const SETissueSystem& GetTissue() const;
155  const SEEnvironment& GetEnvironment() const;
156  const SEAnesthesiaMachine& GetAnesthesiaMachine() const;
157  const SEElectroCardioGram& GetECG() const;
158  const SEInhaler& GetInhaler() const;
159  const SEActionManager& GetActions() const;
160  const SEConditionManager& GetConditions() const;
161  const BioGearsCircuits& GetCircuits() const;
162  const BioGearsCompartments& GetCompartments() const;
163  const BioGearsConfiguration& GetConfiguration() const;
164  const SEScalarTime& GetEngineTime() const;
165  const SEScalarTime& GetSimulationTime() const;
166  const SEScalarTime& GetTimeStep() const;
167  const CDM::enumBioGearsAirwayMode::value GetAirwayMode() const;
168  const CDM::enumOnOff::value GetIntubation() const;
169 
170  bool CreateCircuitsAndCompartments();
171  void SetIntubation(CDM::enumOnOff::value s);
172  void SetAirwayMode(CDM::enumBioGearsAirwayMode::value mode);
173 
174  Logger* GetLogger() const;
175 protected:
176  void SetupCardiovascular();
177  void SetupCerebral();
178  void SetupRenal();
179  void SetupTissue();
180  void SetupGastrointestinal();
181  void SetupRespiratory();
182  void SetupAnesthesiaMachine();
183  void SetupInhaler();
184  void SetupMechanicalVentilator();
185  void SetupExternalTemperature();
186  void SetupInternalTemperature();
187 
188 
189  bool Initialize(const PhysiologyEngineConfiguration* config);
190  bool SetupPatient();
191 
192  void SetUp();
193 
194  // Notify systems that steady state has been achieved
195  virtual void AtSteadyState(EngineState state);
196  void PreProcess();
197  void Process();
198  void PostProcess();
199 
200  void ForwardFatal(const std::string& msg, const std::string& origin);
201 
203 
204 
205  std::unique_ptr<SEScalarTime> m_CurrentTime;
206  std::unique_ptr<SEScalarTime> m_SimulationTime;
209 
210  std::unique_ptr<BioGearsConfiguration> m_Config;
211  std::unique_ptr<SaturationCalculator> m_SaturationCalculator;
212  std::unique_ptr<DiffusionCalculator> m_DiffusionCalculator;
213 
214  std::unique_ptr<BioGearsSubstances> m_Substances;
215 
216  std::unique_ptr<SEActionManager> m_Actions;
217  std::unique_ptr<SEConditionManager> m_Conditions;
218  std::unique_ptr<BioGearsCircuits> m_Circuits;
219  std::unique_ptr<BioGearsCompartments> m_Compartments;
220 
221  std::unique_ptr<Environment> m_Environment;
222 
223  std::unique_ptr<BloodChemistry> m_BloodChemistrySystem;
224  std::unique_ptr<Cardiovascular> m_CardiovascularSystem;
225  std::unique_ptr<Endocrine> m_EndocrineSystem;
226  std::unique_ptr<Energy> m_EnergySystem;
227  std::unique_ptr<Gastrointestinal> m_GastrointestinalSystem;
228  std::unique_ptr<Hepatic> m_HepaticSystem;
229  std::unique_ptr<Nervous> m_NervousSystem;
230  std::unique_ptr<Renal> m_RenalSystem;
231  std::unique_ptr<Respiratory> m_RespiratorySystem;
232  std::unique_ptr<Drugs> m_DrugSystem;
233  std::unique_ptr<Tissue> m_TissueSystem;
234 
235  std::unique_ptr<ECG> m_ECG;
236 
237  std::unique_ptr<AnesthesiaMachine> m_AnesthesiaMachine;
238 
239  std::unique_ptr<Inhaler> m_Inhaler;
240 
241  std::unique_ptr<SEPatient> m_Patient;
242 
243  // Flag to destroy the logger or not
246 
247 };
248 }
Overloaded scenario exector to run a BioGears specific scenario.
Definition: BioGearsScenarioExec.h:20
Manages all circuits associated with all BioGears systems/equipement.
Definition: BioGearsCircuits.h:25
CDM::enumBioGearsAirwayMode::value m_AirwayMode
Definition: BioGears.h:207
std::unique_ptr< Endocrine > m_EndocrineSystem
Definition: BioGears.h:225
Definition: SEActionManager.h:23
std::unique_ptr< Respiratory > m_RespiratorySystem
Definition: BioGears.h:231
Definition: SENervousSystem.h:25
Definition: SEEndocrineSystem.h:32
Definition: SEElectroCardioGram.h:21
Manages all compartments and graphs associated with all BioGears systems/equipement.
Definition: BioGearsCompartments.h:24
std::unique_ptr< SEPatient > m_Patient
Definition: BioGears.h:241
std::unique_ptr< BloodChemistry > m_BloodChemistrySystem
Definition: BioGears.h:223
std::unique_ptr< DiffusionCalculator > m_DiffusionCalculator
Definition: BioGears.h:212
CDM::enumOnOff::value m_Intubation
Definition: BioGears.h:208
Data formed at a level of a clinicians report. This is high level data, such as a mean or generalized...
Definition: SEPatientAssessment.h:25
std::unique_ptr< SaturationCalculator > m_SaturationCalculator
Definition: BioGears.h:211
Definition: SEPatient.h:48
std::unique_ptr< BioGearsCircuits > m_Circuits
Definition: BioGears.h:218
Definition: Diffusion.h:33
Definition: SEBloodChemistrySystem.h:41
std::unique_ptr< Inhaler > m_Inhaler
Definition: BioGears.h:239
Definition: SETissueSystem.h:30
std::unique_ptr< BioGearsConfiguration > m_Config
Definition: BioGears.h:210
Definition: Logger.h:75
std::unique_ptr< AnesthesiaMachine > m_AnesthesiaMachine
Definition: BioGears.h:237
Definition: SEConditionManager.h:37
Definition: SEScalarTime.h:37
std::unique_ptr< Environment > m_Environment
Definition: BioGears.h:221
value
Underlying enum type.
Definition: BioGears.hxx:697
Definition: SECardiovascularSystem.h:35
Definition: SEGastrointestinalSystem.h:26
Definition: BioGearsEngineTest.h:24
EngineState m_State
Definition: BioGears.h:91
Definition: DataTrack.h:37
BioGears specific configuration parameters for all systems/equipment
Definition: BioGearsConfiguration.h:66
Definition: SEHepaticSystem.h:23
std::unique_ptr< Energy > m_EnergySystem
Definition: BioGears.h:226
Definition: SERespiratorySystem.h:32
std::unique_ptr< BioGearsCompartments > m_Compartments
Definition: BioGears.h:219
Definition: SEEnergySystem.h:32
std::unique_ptr< ECG > m_ECG
Definition: BioGears.h:235
bool m_logger_self_managed
Definition: BioGears.h:244
std::unique_ptr< SEConditionManager > m_Conditions
Definition: BioGears.h:217
EngineState
Definition: BioGears.h:48
Definition: SEAnesthesiaMachine.h:36
std::unique_ptr< Renal > m_RenalSystem
Definition: BioGears.h:230
Logger * m_Logger
Definition: BioGears.h:245
std::unique_ptr< Drugs > m_DrugSystem
Definition: BioGears.h:232
std::unique_ptr< SEActionManager > m_Actions
Definition: BioGears.h:216
std::unique_ptr< SEScalarTime > m_CurrentTime
Definition: BioGears.h:205
The SaturationCalculator class holds the blood gas distribution model.
Definition: Saturation.h:35
Definition: SEDrugSystem.h:35
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
Definition: SEInhaler.h:29
value
Underlying enum type.
Definition: Properties.hxx:2070
std::unique_ptr< Hepatic > m_HepaticSystem
Definition: BioGears.h:228
std::unique_ptr< SEScalarTime > m_SimulationTime
Definition: BioGears.h:206
Definition: SEElectricalCircuit.h:18
std::unique_ptr< Cardiovascular > m_CardiovascularSystem
Definition: BioGears.h:224
std::unique_ptr< Tissue > m_TissueSystem
Definition: BioGears.h:233
std::unique_ptr< BioGearsSubstances > m_Substances
Definition: BioGears.h:214
Manages and initializes all systems with substances needed by BioGears.
Definition: BioGearsSubstances.h:52
std::unique_ptr< Nervous > m_NervousSystem
Definition: BioGears.h:229
Definition: SEEnvironment.h:33
Definition: SERenalSystem.h:42
std::unique_ptr< Gastrointestinal > m_GastrointestinalSystem
Definition: BioGears.h:227
Definition: PhysiologyEngineConfiguration.h:28
DataTrack * m_DataTrack
Definition: BioGears.h:202