What’s New in the Pulse Physiology Engine 4.4.0
×
SEDataRequestTracker.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5
6class DataTrack;
7class SESystem;
8class SEPatient;
9class SEEnvironment;
11class SEBagValveMask;
14class SEInhaler;
16class SEActionManager;
19class SEDataRequest;
26#include "cdm/properties/SEScalar.h"
27
28enum class CompartmentUpdate {None,
29 Inflow, Outflow,
30 HeatTransferRateIn, HeatTransferRateOut,
31 Volume,Pressure,
32 Heat, Temperature,
33 VolumeFraction,
34 Mass, MassCleared, MassDeposited, MassExcreted,
35 Concentration,
36 pH, Molarity,
37 PartialPressure, Saturation};
38enum class TrackMode { CSV, Dynamic };
40{
41 friend class SEEngineTracker;
42public:
44 {
45 idx = 0;
46 Heading = "";
47 UpdateProperty = CompartmentUpdate::None;
48 GasCmpt = nullptr;
49 GasSubstance = nullptr;
50 LiquidCmpt = nullptr;
51 LiquidSubstance = nullptr;
52 ThermalCmpt = nullptr;
53 }
54
55protected:
56 void UpdateScalar();
57 void SetScalarRequest(const SEScalar& s, SEDataRequest& dr);
58
59 size_t idx;
60 std::string Heading;
61
62 // Compartment related variables
63 CompartmentUpdate UpdateProperty;
69 // Tissue cmpts don't have children and they don't have computed data that changes on call (like flow)
70};
71
72// This class connects the data requests to the CDM objects to the data tracker to an optional file
73
74class CDM_DECL SEDataRequestTracker : public Loggable
75{
76public:
77 SEDataRequestTracker(Logger* logger) : Loggable(logger) {}
79
80 virtual void Reset() = 0;
81
82 // Close the active stream file using this method
83 // Will no longer stream data to this file until SetupDataRequests is called
84 virtual void CloseResultsFile() = 0;
85
86 // Makes a copy of this data request
87 // Creates, connects, and manages SEDataRequestScalars for all data requests provided
88 // DataRequests and order of DataRequests from this manager can be used to easily get values of the connected engine scalars
89 virtual bool SetupDataRequests(const SEDataRequestManager& drMgr, double timeStep_s) = 0;
90
91 virtual size_t NumTracks() const = 0;
92 virtual double GetValue(size_t idx) const = 0;
93 virtual double GetValue(const SEDataRequest& dr) const = 0;
94 virtual std::string GetUnit(const SEDataRequest& dr) const = 0;
95
96 virtual void LogRequestedValues() const = 0;
97
98 virtual const SEDataRequestManager& GetDataRequestManager() const = 0;
99};
100
102{
104public:
105 SEEngineTracker(Logger* logger=nullptr);
106 virtual ~SEEngineTracker();
107
108 void Clear();// Reset + Sets CDM objects to nullptr
109 void Reset() override; // Removes all the current tracks
110
111 void OpenResultsFile(double currentTime_s);
112 void CloseResultsFile() override;
113
114 bool SetupDataRequests(const SEDataRequestManager& drMgr, double timeStep_s) override;
115
116 size_t NumTracks() const override;
117 double GetValue(size_t idx) const override;
118 // These methods will use the dr address, assumes they are a part of this tracker DataRequestManager
119 double GetValue(const SEDataRequest& dr) const override;
120 std::string GetUnit(const SEDataRequest& dr) const override;
121
122 void LogRequestedValues() const override;
123
124 const SEDataRequestManager& GetDataRequestManager() const override { return *m_DataRequestMgr; }
125
126 // Add a CDM objecst to look for data in
127 void SetPatient(SEPatient& p);
128 void SetEnvironment(SEEnvironment& e);
129 void AddPhysiologySystem(SESystem& s);
130 void SetAnesthesiaMachine(SEAnesthesiaMachine& am);
131 void SetBagValveMask(SEBagValveMask& bvm);
132 void SetElectroCardioGram(SEElectroCardioGram& ecg);
133 void SetExtracorporealMembraneOxygenationDevice(SEExtracorporealMembraneOxygenationDevice& ecmo);
134 void SetInhaler(SEInhaler& i);
135 void SetMechanicalVentilator(SEMechanicalVentilator& mv);
136 void SetActionManager(SEActionManager& am);
137 void SetCompartmentManager(SECompartmentManager& cMgr);
138 void SetSubstanceManager(SESubstanceManager& sMgr);
139
140 DataTrack& GetDataTrack() { return *m_DataTrack; }
141
142 // CDM Values to DataTrack, also write to file if a results file was specified
143 void TrackData(double currentTime_s);
144
146 // These 2 methods instantiates the scalar object in the engine associated with the data request
147 // That scalar will be set on a SEDataRequestScalar object
148 // Note, if you do not provide a unit in the dr, The unit the engine uses will set on the dr
149 //
150 // Connects all the managed SEDataRequestScalar's associated with the provided data request manager
151 bool ConnectRequest(SEDataRequest& dr);
152 // Connects the provided SEDataRequestScalar, which is NOT copied/captured by this class
153 // (No index associated for GetValue/GetUnit)
154 bool ConnectRequest(SEDataRequest& dr, SEDataRequestScalar& ds);
156
157 // Finds the scalar associated with this data request
158 virtual const SEDataRequestScalar* GetScalar(const SEDataRequest& dr) const;
159
160protected:
161
162 TrackMode m_Mode;
166
167 std::stringstream m_ss;
168 std::ofstream* m_ResultsStream;
169
172
177
179 std::vector<SESystem*> m_PhysiologySystems;
186 std::map<const SEDataRequest*, SEDataRequestScalar*> m_Request2Scalar;
187 std::map<std::string, std::ofstream> m_OutputFiles;
188};
Utility class to read a CSV file.
Definition: CSV.h:13
Definition: DataTrack.h:17
Definition: Logger.h:23
Definition: Logger.h:71
Definition: SEActionManager.h:12
Definition: SEAnesthesiaMachine.h:24
Definition: SEBagValveMask.h:14
Definition: SECompartmentManager.h:25
Definition: SEDataRequest.h:18
Definition: SEDataRequestManager.h:10
Definition: SEDataRequestTracker.h:40
SEThermalCompartment * ThermalCmpt
Definition: SEDataRequestTracker.h:68
void SetScalarRequest(const SEScalar &s, SEDataRequest &dr)
Definition: SEDataRequestTracker.cpp:663
std::string Heading
Definition: SEDataRequestTracker.h:60
size_t idx
Definition: SEDataRequestTracker.h:59
SEGasSubstanceQuantity * GasSubstance
Definition: SEDataRequestTracker.h:65
void UpdateScalar()
Definition: SEDataRequestTracker.cpp:695
SEGasCompartment * GasCmpt
Definition: SEDataRequestTracker.h:64
SELiquidCompartment * LiquidCmpt
Definition: SEDataRequestTracker.h:66
SELiquidSubstanceQuantity * LiquidSubstance
Definition: SEDataRequestTracker.h:67
CompartmentUpdate UpdateProperty
Definition: SEDataRequestTracker.h:63
SEDataRequestScalar(Logger *logger)
Definition: SEDataRequestTracker.h:43
Definition: SEDataRequestTracker.h:75
virtual bool SetupDataRequests(const SEDataRequestManager &drMgr, double timeStep_s)=0
SEDataRequestTracker(Logger *logger)
Definition: SEDataRequestTracker.h:77
virtual void Reset()=0
virtual double GetValue(const SEDataRequest &dr) const =0
virtual ~SEDataRequestTracker()
Definition: SEDataRequestTracker.h:78
virtual void CloseResultsFile()=0
virtual void LogRequestedValues() const =0
virtual const SEDataRequestManager & GetDataRequestManager() const =0
virtual std::string GetUnit(const SEDataRequest &dr) const =0
virtual size_t NumTracks() const =0
virtual double GetValue(size_t idx) const =0
Definition: SEDynamicStabilizationPropertyConvergence.h:9
Definition: SEElectroCardioGram.h:9
Definition: SEDataRequestTracker.h:102
SEExtracorporealMembraneOxygenationDevice * m_ECMO
Definition: SEDataRequestTracker.h:183
DataTrack & GetDataTrack()
Definition: SEDataRequestTracker.h:140
SECompartmentManager * m_CmptMgr
Definition: SEDataRequestTracker.h:175
DataTrack * m_DataTrack
Definition: SEDataRequestTracker.h:171
SEPatient * m_Patient
Definition: SEDataRequestTracker.h:173
size_t m_StepsPerSample
Definition: SEDataRequestTracker.h:165
SEAnesthesiaMachine * m_AnesthesiaMachine
Definition: SEDataRequestTracker.h:180
std::map< const SEDataRequest *, SEDataRequestScalar * > m_Request2Scalar
Definition: SEDataRequestTracker.h:186
std::stringstream m_ss
Definition: SEDataRequestTracker.h:167
SESubstanceManager * m_SubMgr
Definition: SEDataRequestTracker.h:176
TrackMode m_Mode
Definition: SEDataRequestTracker.h:162
SEEnvironment * m_Environment
Definition: SEDataRequestTracker.h:178
size_t m_CurrentSampleStep
Definition: SEDataRequestTracker.h:164
SEBagValveMask * m_BVM
Definition: SEDataRequestTracker.h:181
const SEDataRequestManager & GetDataRequestManager() const override
Definition: SEDataRequestTracker.h:124
SEElectroCardioGram * m_ECG
Definition: SEDataRequestTracker.h:182
double m_LastPullTime_s
Definition: SEDataRequestTracker.h:163
SEInhaler * m_Inhaler
Definition: SEDataRequestTracker.h:184
std::ofstream * m_ResultsStream
Definition: SEDataRequestTracker.h:168
std::vector< SESystem * > m_PhysiologySystems
Definition: SEDataRequestTracker.h:179
SEActionManager * m_ActionMgr
Definition: SEDataRequestTracker.h:174
SEMechanicalVentilator * m_MechanicalVentilator
Definition: SEDataRequestTracker.h:185
std::map< std::string, std::ofstream > m_OutputFiles
Definition: SEDataRequestTracker.h:187
SEDataRequestManager * m_DataRequestMgr
Definition: SEDataRequestTracker.h:170
Definition: SEEnvironment.h:13
Definition: SEExtracorporealMembraneOxygenationDevice.h:10
Definition: SEGasCompartment.h:14
Definition: SEGasSubstanceQuantity.h:10
If you want to querry what a scalar is and don't know what scalar type you have...
Definition: SEScalar.h:282
Definition: SEInhaler.h:12
Definition: SELiquidCompartment.h:11
Definition: SELiquidSubstanceQuantity.h:12
Definition: SEMechanicalVentilator.h:10
Definition: SEPatient.h:13
Definition: SEScalar.h:19
Definition: SESubstanceManager.h:10
Definition: SESystem.h:8
Definition: SEThermalCompartment.h:12

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.