Respiratory.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/circuit/fluid/SEFluidCircuitCalculator.h>
18 #include <biogears/cdm/patient/SEPatient.h>
19 #include <biogears/cdm/substance/SESubstanceTransport.h>
20 #include <biogears/cdm/system/physiology/SERespiratorySystem.h>
21 #include <biogears/cdm/utils/RunningAverage.h>
22 #include <biogears/engine/Controller/BioGearsSystem.h>
23 #include <biogears/schema/biogears/BioGears.hxx>
24 
25 namespace biogears {
26 class SEPulmonaryFunctionTest;
27 class SEPatient;
28 class SEPatientActionCollection;
29 class SEGasCompartment;
30 class SELiquidCompartment;
31 class SEGasSubstanceQuantity;
32 class SELiquidSubstanceQuantity;
33 class SEGasSubstanceQuantity;
34 class SESubstance;
35 class SELiquidCompartment;
36 class SEGasCompartment;
37 class SEFluidCircuit;
38 class SEFluidCircuitNode;
39 class SEConsciousRespirationCommand;
40 class BioGears;
41 
53 class BIOGEARS_API Respiratory : public SERespiratorySystem, public BioGearsSystem {
54  friend class BioGears;
55  friend class BioGearsEngineTest;
56 
57 protected:
58  static auto make_unique(BioGears& bg) -> std::unique_ptr<Respiratory>;
59  Respiratory(BioGears& bg);
61 
62 public:
63  virtual ~Respiratory() override;
64 
65  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
66  static constexpr char const * const TypeTag() { return "Respiratory"; }
67  const char* classname() const override { return TypeTag(); }
68  size_t hash_code() const override { return TypeHash(); }
69 
70  void Clear() override;
71 
72  // Set members to a stable homeostatic state
73  void Initialize() override;
74 
75  // Load a state
76  virtual bool Load(const CDM::BioGearsRespiratorySystemData& in);
77  virtual CDM::BioGearsRespiratorySystemData* Unload() const override;
78 
79 protected:
80  virtual void Unload(CDM::BioGearsRespiratorySystemData& data) const;
81 
82  // Set pointers and other member varialbes common to both homeostatic initialization and loading a state
83  void SetUp() override;
84 
85 public:
86  void AtSteadyState() override;
87  void PreProcess() override;
88  void Process() override;
89  void PostProcess() override;
90 
91  bool CalculatePulmonaryFunctionTest(SEPulmonaryFunctionTest& pft);
92  SEScalar& CalculateRespirationSOFA();
93 
94 private:
95  //Tuning
96  void TuneCircuit();
97 
98  //Conditions
99  void COPD();
100  void ImpairedAlveolarExchange();
101  void LobarPneumonia();
102 
103  //PreProcess
104  void UpdatePleuralCompliance();
105  //Actions
106  void AcuteRespiratoryDistress();
107  void AirwayObstruction();
108  void BronchoConstriction();
109  void BronchoDilation();
110  void Intubation();
111  void Pneumothorax();
112  void ConsciousRespiration();
113  void ProcessConsciousRespiration(SEConsciousRespirationCommand& cmd);
114  void MechanicalVentilation();
115  void Apnea();
116  // Driver
117  void RespiratoryDriver();
118  void ProcessDriverActions();
119 
120  // Shared Utility Methods for Actions/Driver
121  // Asthma/COPD
122  void UpdateObstructiveResistance();
123  void UpdateIERatio();
124  // LobarPneumonia/COPD
125  void UpdateAlveoliCompliance(double dCompilanceScalingFactor, double dLeftLungFraction, double dRightLungFraction);
126  void UpdateGasDiffusionSurfaceArea(double dFractionalArea, double dLeftLungFraction, double dRightLungFraction);
127  // COPD
128  void UpdatePulmonaryCapillaryResistance(double dResistanceScalingFactor, double dLeftLungFraction, double dRightLungFraction);
129  // Pneumothorax
130  void DoLeftNeedleDecompression(double dFlowResistance);
131  void DoRightNeedleDecompression(double dFlowResistance);
132  // Aerosol Deposition and various Effects
133  void ProcessAerosolSubstances();
134 
135  //Process
136  void CalculateVitalSigns();
137 
138 protected:
139  // Override
140  void ProcessOverride();
141  void OverrideControlLoop();
142 
143 private:
144  std::string m_TuningFile;
145  // Serializable member variables (Set in Initialize and in schema)
146  // Initial patient values
152  // CalculateVitalSigns()
161  // Respiratory Driver
179 
180  // Conscious Breathing
188 
189  //Action Removal
192 
193  // Stateless member variable (Set in SetUp())
194  double m_dt_s;
195  double m_dt_min;
196  bool m_hadApnea;
197 
198  // Configuration parameters
205  // State between functions (i.e. shared between methods in preprocess, set to a default value at the start of preprocess)
207  // member to save off baseline PH in the patient
209 
210  // Patient
213  //Compartments
233  std::vector<SELiquidCompartment*> m_AerosolEffects;
235  //Circuits
237  //Nodes
247  //Paths
272 
276 };
277 }
SEPatientActionCollection * m_PatientActions
Definition: Respiratory.h:212
SEFluidCircuitPath * m_LeftPleuralCavityToRespiratoryMuscle
Definition: Respiratory.h:253
double m_PleuralComplianceSensitivity_Per_L
Definition: Respiratory.h:201
Class corresponding to the BioGearsRespiratorySystemData schema type.
Definition: BioGearsPhysiology.hxx:7038
SEGasSubstanceQuantity * m_LeftAlveoliCO2
Definition: Respiratory.h:231
SEFluidCircuitPath * m_EnvironmentToRightChestLeak
Definition: Respiratory.h:259
double m_ElapsedBreathingCycleTime_min
Definition: Respiratory.h:172
double m_ArterialO2PartialPressure_mmHg
Definition: Respiratory.h:163
SEGasSubstanceQuantity * m_TracheaCO2
Definition: Respiratory.h:226
RunningAverage m_ArterialO2Average_mmHg
Definition: Respiratory.h:165
Definition: SEScalar.h:33
static size_t TypeHash()
Definition: Respiratory.h:65
double m_TopBreathTotalVolume_L
Definition: Respiratory.h:154
SEFluidCircuitNode * m_LeftAlveoli
Definition: Respiratory.h:238
SEGasSubstanceQuantity * m_RightAlveoliCO2
Definition: Respiratory.h:232
SEGasSubstanceQuantity * m_LeftAlveoliO2
Definition: Respiratory.h:229
SEFluidCircuitPath * m_TracheaToLeftBronchi
Definition: Respiratory.h:248
SEFluidCircuitPath * m_LeftPulmonaryCapillary
Definition: Respiratory.h:269
SEFluidCircuitPath * m_LeftAlveoliToLeftPleuralConnection
Definition: Respiratory.h:265
double m_ConsciousRespirationPeriod_s
Definition: Respiratory.h:182
double m_TopBreathAlveoliVolume_L
Definition: Respiratory.h:155
double m_DriverPressure_cmH2O
Definition: Respiratory.h:170
double m_arterialPHBaseline
Definition: Respiratory.h:208
double m_TopBreathDeadSpaceVolume_L
Definition: Respiratory.h:156
SEFluidCircuitNode * m_LeftBronchi
Definition: Respiratory.h:239
SEFluidCircuitPath * m_MouthToTrachea
Definition: Respiratory.h:256
SEGasCompartment * m_Trachea
Definition: Respiratory.h:224
SELiquidCompartment * m_AerosolRightAlveoli
Definition: Respiratory.h:220
SELiquidCompartment * m_AerosolRightBronchi
Definition: Respiratory.h:219
Definition: SEConsciousRespirationCommand.h:18
double m_InstantaneousFunctionalResidualCapacity_L
Definition: Respiratory.h:174
const char * classname() const override
Definition: Respiratory.h:67
SEFluidCircuitCalculator m_Calculator
Definition: Respiratory.h:273
double m_InitialFunctionalResidualCapacity_L
Definition: Respiratory.h:148
double m_ConsciousEndPressure_cmH2O
Definition: Respiratory.h:187
SEGasCompartment * m_Lungs
Definition: Respiratory.h:223
SELiquidSubstanceQuantity * m_AortaCO2
Definition: Respiratory.h:228
double m_VentilationFrequency_Per_min
Definition: Respiratory.h:177
SELiquidCompartment * m_LeftLungExtravascular
Definition: Respiratory.h:221
SEFluidCircuitNode * m_LeftPleuralCavity
Definition: Respiratory.h:240
SEFluidCircuitPath * m_LeftAlveoliLeakToLeftPleuralCavity
Definition: Respiratory.h:260
double m_ExpiratoryReserveVolumeFraction
Definition: Respiratory.h:184
SELiquidCompartment * m_RightLungExtravascular
Definition: Respiratory.h:222
SEFluidCircuitPath * m_TracheaToRightBronchi
Definition: Respiratory.h:249
Definition: SEFluidCircuitCalculator.h:25
Definition: SELiquidSubstanceQuantity.h:28
Definition: SEFluidCircuitPath.h:25
RunningAverage m_BloodPHRunningAverage
Definition: Respiratory.h:160
Definition: SEPatient.h:48
std::vector< SELiquidCompartment * > m_AerosolEffects
Definition: Respiratory.h:233
SEFluidCircuitNode * m_RightAlveoli
Definition: Respiratory.h:242
double m_dRespClosedResistance_cmH2O_s_Per_L
Definition: Respiratory.h:203
RunningAverage m_ArterialCO2Average_mmHg
Definition: Respiratory.h:166
SEFluidCircuitPath * m_DriverPressurePath
Definition: Respiratory.h:254
Definition: RunningAverage.h:19
SEGasTransporter m_GasTransporter
Definition: Respiratory.h:274
bool m_BreathingCycle
Definition: Respiratory.h:162
Definition: SEFluidCircuitNode.h:21
Definition: SELiquidCompartment.h:27
double m_PeakRespiratoryDrivePressure_cmH2O
Definition: Respiratory.h:176
SELiquidCompartment * m_AerosolLeftAlveoli
Definition: Respiratory.h:218
SEFluidCircuitPath * m_GroundToConnection
Definition: Respiratory.h:271
SEFluidCircuitNode * m_RightBronchi
Definition: Respiratory.h:243
SEFluidCircuitNode * m_Stomach
Definition: Respiratory.h:246
double m_DefaultDrivePressure_cmH2O
Definition: Respiratory.h:169
SELiquidCompartment * m_AerosolLeftBronchi
Definition: Respiratory.h:217
SEFluidCircuitPath * m_LeftBronchiToLeftPleuralConnection
Definition: Respiratory.h:267
double m_ConsciousStartPressure_cmH2O
Definition: Respiratory.h:186
SEFluidCircuitPath * m_ConnectionToMouth
Definition: Respiratory.h:270
Definition: SEFluidCircuit.h:20
double m_BreathTimeExhale_min
Definition: Respiratory.h:168
SEGasCompartment * m_MechanicalVentilatorConnection
Definition: Respiratory.h:234
double m_IEscaleFactor
Definition: Respiratory.h:173
SEFluidCircuitNode * m_Ambient
Definition: Respiratory.h:245
SEFluidCircuitPath * m_RightPulmonaryCapillary
Definition: Respiratory.h:268
double m_dt_min
Definition: Respiratory.h:195
SEFluidCircuitPath * m_RightPleuralCavityToEnvironment
Definition: Respiratory.h:263
double m_ConsciousRespirationRemainingPeriod_s
Definition: Respiratory.h:183
SELiquidCompartment * m_AerosolMouth
Definition: Respiratory.h:215
Definition: BioGearsEngineTest.h:24
bool m_hadApnea
Definition: Respiratory.h:196
SEGasSubstanceQuantity * m_RightAlveoliO2
Definition: Respiratory.h:230
SEFluidCircuitNode * m_RespiratoryMuscle
Definition: Respiratory.h:241
SEFluidCircuitPath * m_EnvironmentToLeftChestLeak
Definition: Respiratory.h:258
SEFluidCircuitPath * m_MouthToStomach
Definition: Respiratory.h:257
SEFluidCircuitPath * m_RightBronchiToRightPleuralConnection
Definition: Respiratory.h:266
double m_AverageLocalTissueBronchodilationEffects
Definition: Respiratory.h:206
double m_InitialInspiratoryCapacity_L
Definition: Respiratory.h:149
Definition: SERespiratorySystem.h:32
static constexpr char const *const TypeTag()
Definition: Respiratory.h:66
Definition: SEGasSubstanceQuantity.h:20
double m_OverrideRRBaseline_Per_min
Definition: Respiratory.h:151
Definition: SEPulmonaryFunctionTest.h:24
SEFluidCircuitNode * m_RightPleuralCavity
Definition: Respiratory.h:244
bool m_ConsciousBreathing
Definition: Respiratory.h:181
double m_VentilationToTidalVolumeSlope
Definition: Respiratory.h:178
double m_InitialExpiratoryReserveVolume_L
Definition: Respiratory.h:147
The Respiratory System class handles the analysis and storage of data related the respiratory physiol...
Definition: Respiratory.h:53
double m_PreviousTotalLungVolume_L
Definition: Respiratory.h:159
double m_TopBreathPleuralPressure_cmH2O
Definition: Respiratory.h:157
SEFluidCircuitPath * m_LeftDriverPressurePath
Definition: Respiratory.h:255
SEFluidCircuitPath * m_RightAlveoliToRightPleuralConnection
Definition: Respiratory.h:264
double m_DriverPressureMin_cmH2O
Definition: Respiratory.h:171
SEPatient * m_Patient
Definition: Respiratory.h:211
double m_BreathingCycleTime_s
Definition: Respiratory.h:167
SEFluidCircuit * m_RespiratoryCircuit
Definition: Respiratory.h:236
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
double m_VentilatoryOcclusionPressure_cmH2O
Definition: Respiratory.h:204
SEFluidCircuitPath * m_LeftBronchiToLeftAlveoli
Definition: Respiratory.h:250
SEFluidCircuitPath * m_LeftPleuralCavityToEnvironment
Definition: Respiratory.h:262
bool m_bNotBreathing
Definition: Respiratory.h:153
SELiquidCompartment * m_AerosolTrachea
Definition: Respiratory.h:216
double m_dDefaultOpenResistance_cmH2O_s_Per_L
Definition: Respiratory.h:199
double m_dt_s
Definition: Respiratory.h:194
bool m_HadBronchoconstriction
Definition: Respiratory.h:191
SEFluidCircuitPath * m_RightPleuralCavityToRespiratoryMuscle
Definition: Respiratory.h:252
SELiquidTransporter m_AerosolTransporter
Definition: Respiratory.h:275
SEGasSubstanceQuantity * m_TracheaO2
Definition: Respiratory.h:225
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
SELiquidSubstanceQuantity * m_AortaO2
Definition: Respiratory.h:227
double m_ArterialCO2PartialPressure_mmHg
Definition: Respiratory.h:164
Definition: SEElectricalCircuit.h:18
size_t hash_code() const override
Definition: Respiratory.h:68
SEFluidCircuitPath * m_RightBronchiToRightAlveoli
Definition: Respiratory.h:251
double m_MaxDriverPressure_cmH2O
Definition: Respiratory.h:175
double m_LastCardiacCycleBloodPH
Definition: Respiratory.h:158
SEFluidCircuitPath * m_RightAlveoliLeakToRightPleuralCavity
Definition: Respiratory.h:261
bool m_HadAirwayObstruction
Definition: Respiratory.h:190
BioGears & m_data
Definition: Respiratory.h:60
double m_InitialResidualVolume_L
Definition: Respiratory.h:150
Definition: SEPatientActionCollection.h:54
double m_InspiratoryCapacityFraction
Definition: Respiratory.h:185
double m_dRespOpenResistance_cmH2O_s_Per_L
Definition: Respiratory.h:202
Definition: SEGasCompartment.h:24
SEGasCompartment * m_Environment
Definition: Respiratory.h:214
double m_dDefaultClosedResistance_cmH2O_s_Per_L
Definition: Respiratory.h:200
std::string m_TuningFile
Definition: Respiratory.h:144