BloodChemistry.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/patient/SEPatient.h>
18 #include <biogears/cdm/system/physiology/SEBloodChemistrySystem.h>
19 #include <biogears/cdm/utils/RunningAverage.h>
20 #include <biogears/engine/Controller/BioGearsSystem.h>
21 #include <biogears/schema/biogears/BioGearsPhysiology.hxx>
22 
23 namespace biogears {
24 class SECompleteBloodCount;
25 class SEComprehensiveMetabolicPanel;
26 class SELiquidCompartment;
27 class SELiquidSubstanceQuantity;
28 class SEPatientActionCollection;
29 class BioGears;
38 class BIOGEARS_API BloodChemistry : public SEBloodChemistrySystem, public BioGearsSystem {
39  friend BioGears;
40  friend class BioGearsEngineTest;
41 
42 protected:
43  static auto make_unique(BioGears& bg) -> std::unique_ptr<BloodChemistry>;
46 
47 public:
48  virtual ~BloodChemistry() override;
49 
50  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
51  static constexpr char const* const TypeTag() { return "BloodChemistry"; }
52  const char* classname() const override { return TypeTag(); }
53  size_t hash_code() const override { return TypeHash(); }
54 
55  void Clear() override;
56 
57  // Set members to a stable homeostatic state
58  void Initialize() override;
59 
60  // Load a state
61  bool Load(const CDM::BioGearsBloodChemistrySystemData& in);
62  CDM::BioGearsBloodChemistrySystemData* Unload() const override;
63 
64 protected:
65  void Unload(CDM::BioGearsBloodChemistrySystemData& data) const;
66 
67  // Set pointers and other member variables common to both homeostatic initialization and loading a state
68  void SetUp() override;
69 
70 public:
71  void AtSteadyState() override;
72  void PreProcess() override;
73  void Process() override;
74  void PostProcess() override;
75 
76  bool CalculateCompleteBloodCount(SECompleteBloodCount& cbc);
77  bool CalculateComprehensiveMetabolicPanel(SEComprehensiveMetabolicPanel& cmp);
78  SEScalar& CalculateCoagulationSOFA();
79  void CalculateHemolyticTransfusionReaction(bool rhMismatch = false);
80 
81 protected:
82  void CheckBloodSubstanceLevels();
83  void InflammatoryResponse();
84  void ManageSIRS(); //SIRS = Systemic Inflammatory Response Syndrome
85 
86  //Override
87  void ProcessOverride();
88  void OverrideControlLoop();
89 
90  // Serializable member variables (Set in Initialize and in schema)
93 
94  // Patient
97 
98  // Stateless member variable (Set in SetUp())
136 
137  //Initialize HTR concentrations
145 };
146 }
SELiquidSubstanceQuantity * m_pulmonaryArteriesO2
Definition: BloodChemistry.h:112
SELiquidCompartment * m_venaCava
Definition: BloodChemistry.h:116
static size_t TypeHash()
Definition: BloodChemistry.h:50
SELiquidSubstanceQuantity * m_venaCavaCreatinine
Definition: BloodChemistry.h:124
SELiquidSubstanceQuantity * m_venaCavaAminoAcids
Definition: BloodChemistry.h:120
SELiquidSubstanceQuantity * m_venaCavaPotassium
Definition: BloodChemistry.h:131
SELiquidSubstanceQuantity * m_venaCavaUrea
Definition: BloodChemistry.h:135
SELiquidSubstanceQuantity * m_venaCavaSodium
Definition: BloodChemistry.h:133
Definition: SEScalar.h:33
RunningAverage m_ArterialCarbonDioxide_mmHg
Definition: BloodChemistry.h:92
SELiquidSubstanceQuantity * m_aortaCO
Definition: BloodChemistry.h:108
SELiquidSubstanceQuantity * m_venaCavaCalcium
Definition: BloodChemistry.h:122
SELiquidSubstanceQuantity * m_pulmonaryVeinsCO2
Definition: BloodChemistry.h:115
SELiquidSubstanceQuantity * m_venaCavaCO2
Definition: BloodChemistry.h:118
SELiquidSubstanceQuantity * m_aortaO2
Definition: BloodChemistry.h:106
SELiquidSubstanceQuantity * m_aortaCO2
Definition: BloodChemistry.h:107
SELiquidSubstanceQuantity * m_venaCavaGlucose
Definition: BloodChemistry.h:127
SELiquidSubstanceQuantity * m_venaCavaEpinephrine
Definition: BloodChemistry.h:125
SELiquidSubstanceQuantity * m_venaCavaInsulin
Definition: BloodChemistry.h:128
SELiquidSubstanceQuantity * m_pulmonaryArteriesCO2
Definition: BloodChemistry.h:113
SEPatientActionCollection * m_PatientActions
Definition: BloodChemistry.h:96
Definition: SEBloodChemistrySystem.h:437
SELiquidCompartment * m_aorta
Definition: BloodChemistry.h:105
SELiquidSubstanceQuantity * m_brainO2
Definition: BloodChemistry.h:110
double m_redBloodCellVolume_mL
Definition: BloodChemistry.h:99
Definition: SELiquidSubstanceQuantity.h:28
Definition: BloodChemistry.h:38
Definition: SEPatient.h:48
SELiquidSubstanceQuantity * m_venaCavaAlbumin
Definition: BloodChemistry.h:119
SELiquidSubstanceQuantity * m_venaCavaGlucagon
Definition: BloodChemistry.h:126
double m_RemovedRBC_ct
Definition: BloodChemistry.h:144
Definition: RunningAverage.h:19
Definition: SEBloodChemistrySystem.h:41
Definition: SECompleteBloodCount.h:24
double m_patientRBC_ct
Definition: BloodChemistry.h:139
double m_HbLostToUrine_g
Definition: BloodChemistry.h:100
Definition: SELiquidCompartment.h:27
double m_RhTransfusionReactionVolume_mL
Definition: BloodChemistry.h:101
RunningAverage m_ArterialOxygen_mmHg
Definition: BloodChemistry.h:91
double m_2Agglutinate_ct
Definition: BloodChemistry.h:140
SELiquidSubstanceQuantity * m_venaCavaLactate
Definition: BloodChemistry.h:130
double m_p3Agglutinate_ct
Definition: BloodChemistry.h:141
size_t hash_code() const override
Definition: BloodChemistry.h:53
Definition: BioGearsEngineTest.h:24
double m_d3Agglutinate_ct
Definition: BloodChemistry.h:142
SEInflammatoryResponse * m_InflammatoryResponse
Definition: BloodChemistry.h:103
static constexpr char const *const TypeTag()
Hopefully this returns a unique ID for every type.
Definition: BloodChemistry.h:51
SELiquidSubstanceQuantity * m_venaCavaChloride
Definition: BloodChemistry.h:123
SELiquidSubstanceQuantity * m_venaCavaKetones
Definition: BloodChemistry.h:129
const char * classname() const override
Definition: BloodChemistry.h:52
SELiquidSubstanceQuantity * m_venaCavaBicarbonate
Definition: BloodChemistry.h:121
double m_HbPerRedBloodCell_ug_Per_ct
Definition: BloodChemistry.h:102
Definition: SEComprehensiveMetabolicPanel.h:22
double m_RhFactorMismatch_ct
Definition: BloodChemistry.h:104
friend BioGears
Definition: BloodChemistry.h:39
SELiquidSubstanceQuantity * m_venaCavaO2
Definition: BloodChemistry.h:117
SELiquidSubstanceQuantity * m_venaCavaTriacylglycerol
Definition: BloodChemistry.h:134
SELiquidSubstanceQuantity * m_venaCavaRBC
Definition: BloodChemistry.h:132
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
Class corresponding to the BioGearsBloodChemistrySystemData schema type.
Definition: BioGearsPhysiology.hxx:694
double m_donorRBC_ct
Definition: BloodChemistry.h:138
double m_4Agglutinate_ct
Definition: BloodChemistry.h:143
SELiquidSubstanceQuantity * m_pulmonaryVeinsO2
Definition: BloodChemistry.h:114
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
Definition: SEElectricalCircuit.h:18
BioGears & m_data
Definition: BloodChemistry.h:45
SELiquidSubstanceQuantity * m_aortaBicarbonate
Definition: BloodChemistry.h:109
SEPatient * m_Patient
Definition: BloodChemistry.h:95
Definition: SEPatientActionCollection.h:54
SELiquidSubstanceQuantity * m_myocardiumO2
Definition: BloodChemistry.h:111