6 #include "engine/CommonDefs.h"
7 #include "engine/PulseConfiguration.h"
8 #include "engine/common/controller/BlackBoxManager.h"
9 #include "engine/common/controller/CircuitManager.h"
10 #include "engine/common/controller/CompartmentManager.h"
11 #include "engine/common/controller/SubstanceManager.h"
14 #include "cdm/engine/SEActionManager.h"
15 #include "cdm/engine/SEConditionManager.h"
16 #include "cdm/engine/SEDataRequested.h"
17 #include "cdm/engine/SEDataRequestTracker.h"
18 #include "cdm/engine/SEEngineStabilization.h"
19 #include "cdm/engine/SEEventManager.h"
20 #include "cdm/engine/SEPatientConfiguration.h"
21 #include "cdm/patient/SEPatient.h"
22 #include "cdm/properties/SEScalarTime.h"
26 class StabilizationController;
29 class EnvironmentModel;
31 class BloodChemistryModel;
32 class CardiovascularModel;
35 class GastrointestinalModel;
39 class RespiratoryModel;
43 class AnesthesiaMachineModel;
44 class BagValveMaskModel;
46 class ElectroCardioGramModel;
48 class MechanicalVentilatorModel;
50 class SaturationCalculator;
52 enum class EngineState
58 SecondaryStabilization,
59 AtSecondaryStableState,
65 enum class eAirwayMode
71 MechanicalVentilation,
79 class PULSE_DECL Data :
public Loggable
83 Data(
Logger* logger =
nullptr);
87 virtual std::string GetDataRoot()
const {
return m_DataDir; }
88 virtual void SetDataRoot(
const std::string& dir) { m_DataDir = dir; }
90 virtual void AdvanceCallback(
double time_s);
92 virtual EngineState GetState()
const {
return m_State; }
97 virtual SaturationCalculator& GetSaturationCalculator()
const;
99 virtual SubstanceManager& GetSubstances()
const;
101 virtual const SEPatient& GetInitialPatient()
const;
102 virtual SEPatient& GetCurrentPatient()
const;
104 virtual bool HasBloodChemistry()
const;
106 virtual bool HasCardiovascular()
const;
108 virtual bool HasDrugs()
const;
110 virtual bool HasEndocrine()
const;
112 virtual bool HasEnergy()
const;
114 virtual bool HasGastrointestinal()
const;
116 virtual bool HasHepatic()
const;
118 virtual bool HasNervous()
const;
120 virtual bool HasRenal()
const;
122 virtual bool HasRespiratory()
const;
124 virtual bool HasTissue()
const;
127 virtual bool HasEnvironment()
const;
129 virtual bool HasAnesthesiaMachine()
const;
131 virtual bool HasBagValveMask()
const;
133 virtual bool HasECG()
const;
135 virtual bool HasECMO()
const;
136 virtual SEECMO& GetECMO()
const;
137 virtual bool HasInhaler()
const;
139 virtual bool HasMechanicalVentilator()
const;
148 virtual CircuitManager& GetCircuits()
const;
150 virtual CompartmentManager& GetCompartments()
const;
152 virtual BlackBoxManager& GetBlackBoxes()
const;
156 virtual double GetTimeStep_s()
const;
160 virtual double GetSimulationTime_s()
const;
161 virtual const SEScalarTime& GetStabilizationTime()
const;
163 virtual bool IsAirwayModeSupported(eAirwayMode ) {
return true; }
164 virtual eAirwayMode GetAirwayMode()
const {
return m_AirwayMode; }
165 virtual void SetAirwayMode(eAirwayMode mode);
167 virtual eSwitch GetIntubation()
const {
return m_Intubation; }
169 virtual void SetAdvanceHandler(
SEAdvanceHandler* handler) { m_AdvanceHandler = handler; }
171 virtual const SEScalarProperties& GetOverrides()
const;
173 std::stringstream m_ss;
175 virtual void SetupTracker();
178 eEngineInitializationState m_EngineInitializationState;
182 double m_SpareAdvanceTime_s;
183 eAirwayMode m_AirwayMode;
184 eSwitch m_Intubation;
191 SaturationCalculator* m_SaturationCalculator =
nullptr;
193 SubstanceManager* m_Substances =
nullptr;
197 CircuitManager* m_Circuits =
nullptr;
198 CompartmentManager* m_Compartments =
nullptr;
199 BlackBoxManager* m_BlackBoxes =
nullptr;
201 EnvironmentModel* m_EnvironmentModel =
nullptr;
203 BloodChemistryModel* m_BloodChemistryModel =
nullptr;
204 CardiovascularModel* m_CardiovascularModel =
nullptr;
205 EndocrineModel* m_EndocrineModel =
nullptr;
206 EnergyModel* m_EnergyModel =
nullptr;
207 GastrointestinalModel* m_GastrointestinalModel =
nullptr;
208 HepaticModel* m_HepaticModel =
nullptr;
209 NervousModel* m_NervousModel =
nullptr;
210 RenalModel* m_RenalModel =
nullptr;
211 RespiratoryModel* m_RespiratoryModel =
nullptr;
212 DrugModel* m_DrugModel =
nullptr;
213 TissueModel* m_TissueModel =
nullptr;
215 AnesthesiaMachineModel* m_AnesthesiaMachineModel =
nullptr;
216 BagValveMaskModel* m_BagValveMaskModel =
nullptr;
217 ECMOModel* m_ECMOModel =
nullptr;
218 ElectroCardioGramModel* m_ElectroCardioGramModel =
nullptr;
219 InhalerModel* m_InhalerModel =
nullptr;
220 MechanicalVentilatorModel* m_MechanicalVentilatorModel =
nullptr;
230 std::string m_DataDir;
232 SEScalarProperties m_ScalarOverrides;
234 std::vector<pulse::Model*> m_Models;
240 class PULSE_DECL Controller :
public Data
243 friend class EngineTest;
244 friend class PBState;
246 Controller(
Logger* logger =
nullptr);
248 virtual ~Controller();
250 virtual Data& GetData() {
return (*
this); }
251 virtual const Data& GetData()
const {
return (*
this); }
253 virtual bool SerializeFromFile(
const std::string& file,
const SEDataRequestManager* drMgr=
nullptr);
254 virtual bool SerializeToFile(
const std::string& file)
const;
256 virtual bool SerializeFromString(
const std::string& state, eSerializationFormat m,
const SEDataRequestManager* drMgr=
nullptr);
257 virtual bool SerializeToString(std::string& state, eSerializationFormat m)
const;
260 virtual bool IsReady()
const;
261 virtual eEngineInitializationState GetInitializationState()
const;
263 virtual void Clear();
267 virtual void SetSimulationTime(
const SEScalarTime& time);
269 virtual bool AdvanceModelTime();
270 virtual bool AdvanceModelTime(
double time,
const TimeUnit& unit);
271 virtual bool ProcessAction(
const SEAction& action);
275 virtual bool CreateCircuitsAndCompartments();
277 virtual void CheckIntubation();
279 virtual std::string GetTypeName()
const = 0;
280 virtual void LogBuildInfo()
const;
284 virtual void SetupCardiovascular();
285 virtual void SetupRenal();
286 virtual void SetupTissue();
287 virtual void SetupCerebrospinalFluid();
290 virtual void SetupComputationalLifeCardiovascular();
291 virtual void SetupComputationalLifeRenal();
292 virtual void SetupComputationalLifeTissue();
293 virtual void SetupComputationalLifeCerebrospinalFluid();
296 virtual void SetupGastrointestinal();
299 virtual void SetupRespiratory();
302 virtual void SetupExpandedLungsRespiratory();
303 virtual void SetupExpandedLungsCardiovascular();
306 virtual void SetupAnesthesiaMachine();
307 virtual void SetupBagValveMask();
308 virtual void SetupECMO();
309 virtual void SetupInhaler();
310 virtual void SetupMechanicalVentilation();
311 virtual void SetupMechanicalVentilator();
312 virtual void SetupNasalCannula();
313 virtual void SetupSimpleMask();
314 virtual void SetupNonRebreatherMask();
317 virtual void SetupExternalTemperature();
318 virtual void SetupInternalTemperature();
320 virtual bool OverrideCircuits();
321 virtual bool ModifyCircuits(
const SEScalarProperties& modifiers);
323 virtual bool Initialize(
const SEPatient& patient);
325 virtual void LogPatientStabilizationDiffs();
328 virtual void Allocate();
329 virtual bool SetupPatient(
const SEPatient& patient) = 0;
331 virtual void InitializeModels();
333 virtual void AtSteadyState(EngineState state);
334 virtual void PreProcess();
335 virtual void Process();
336 virtual void PostProcess();
339 StabilizationController *m_Stabilizer =
nullptr;
340 eSwitch m_Tracking = eSwitch::On;
346 StabilizationController(pulse::Controller& pc) : _pc(pc) {}
347 virtual ~StabilizationController() =
default;
349 bool AdvanceTime()
override {
return _pc.AdvanceModelTime(); }
352 return &_pc.GetData().GetEngineTracker();
354 double GetTimeStep(
const TimeUnit& unit)
override
356 return _pc.GetData().GetTimeStep().
GetValue(unit);
358 double GetSimulationTime(
const TimeUnit& unit)
override
360 return _pc.GetData().GetSimulationTime().GetValue(unit);
364 pulse::Controller& _pc;
371 ~FatalListner() =
default;
373 void ForwardDebug(
const std::string& )
override { }
374 void ForwardInfo(
const std::string& )
override { }
375 void ForwardWarning(
const std::string& )
override { }
376 void ForwardError(
const std::string& )
override { }
377 void ForwardFatal(
const std::string& )
override
379 m_Events.SetEvent(eEvent::IrreversibleState,
true, m_CurrentTime);
Definition: DataTrack.h:17
Pulse specific configuration parameters for all systems/equipment
Definition: PulseConfiguration.h:20
Definition: SEAction.h:14
Definition: SEActionManager.h:12
Definition: SEAdvanceHandler.h:8
Definition: SEAnesthesiaMachine.h:24
Definition: SEBagValveMask.h:14
Definition: SEBloodChemistrySystem.h:10
Definition: SECardiovascularSystem.h:25
Definition: SEConditionManager.h:26
Definition: SEDataRequestManager.h:10
Definition: SEDataRequested.h:11
Definition: SEDrugSystem.h:9
Definition: SEElectroCardioGram.h:9
Definition: SEEndocrineSystem.h:8
Definition: SEEnergySystem.h:8
Definition: SEEngineConfiguration.h:8
Definition: SEEngineStabilization.h:18
Definition: SEDataRequestTracker.h:101
double GetValue(size_t idx) const override
Definition: SEDataRequestTracker.cpp:207
Definition: SEEnvironment.h:13
Definition: SEEventManager.h:139
Definition: SEGastrointestinalSystem.h:9
Definition: SEHepaticSystem.h:8
Definition: SEInhaler.h:12
Definition: SEMechanicalVentilator.h:10
Definition: SENervousSystem.h:9
Data formed at a level of a clinicians report. This is high level data, such as a mean or generalized...
Definition: SEPatientAssessment.h:22
Definition: SEPatientConfiguration.h:11
Definition: SEPatient.h:13
Definition: SERenalSystem.h:8
Definition: SERespiratorySystem.h:44
Definition: SEScalarTime.h:28
Definition: SETissueSystem.h:8
Definition: SEScalarTime.h:8
const std::string & eAirwayMode_Name(eAirwayMode m)
Definition: PBEnums.cpp:12