Hepatic.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/system/physiology/SEHepaticSystem.h>
18 #include <biogears/engine/Controller/BioGearsSystem.h>
19 #include <biogears/schema/biogears/BioGearsPhysiology.hxx>
20 
21 namespace biogears {
22 class SETissueSystem;
23 class SELiquidSubstanceQuantity;
24 class SELiquidSubstanceQuantity;
25 class SESubstance;
26 class SETissueSystem;
27 class SEEnergySystem;
28 class SEPatient;
29 class BioGears;
30 
34 class BIOGEARS_API Hepatic : public SEHepaticSystem, public BioGearsSystem {
35  friend class BioGears;
36  friend class BioGearsEngineTest;
37 
38 protected:
39  static auto make_unique(BioGears& bg) -> std::unique_ptr<Hepatic>;
40  Hepatic(BioGears& bg);
42 
43 public:
44  virtual ~Hepatic() override;
45 
46  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
47  static constexpr char const * const TypeTag() { return "Hepatic"; }
48  const char* classname() const override { return TypeTag(); }
49  size_t hash_code() const override { return TypeHash(); }
50 
51  void Clear() override;
52 
53  // Set members to a stable homeostatic state
54  void Initialize() override;
55 
56  // Load a state
57  virtual bool Load(const CDM::BioGearsHepaticSystemData& in);
58  virtual CDM::BioGearsHepaticSystemData* Unload() const override;
59 
60  //Assessments
61  SEScalar& CalculateLiverSOFA();
62 
63 protected:
64  virtual void Unload(CDM::BioGearsHepaticSystemData& data) const;
65 
66  // Set pointers and other member variables common to both homeostatic initialization and loading a state
67  void SetUp() override;
68 
69 public:
70  void AtSteadyState() override;
71  void PreProcess() override;
72  void Process() override;
73  void PostProcess() override;
74  static double CalculateRelativeHormoneChange(double insulinSetPoint_pmol_Per_L, double glucagonSetPoint_pg_Per_mL, SELiquidSubstanceQuantity* currentInsulin, SELiquidSubstanceQuantity* currentGlucagon, BioGears& m_data);
75 
76 protected:
77  //Pre-Process methods
78  void ProduceAlbumin(double duration_s);
79 
80  //Process methods
81  void Glycogenesis();
82  void Glycogenolysis();
83  void Lipogenesis();
84  void Gluconeogenesis();
85 
86  //Post-Process methods
87 
88  // Serializable member variables (Set in Initialize and in schema)
89 
90  // Stateless member variable (Set in SetUp())
91  std::stringstream m_ss;
92  double m_dt_s;
96  SELiquidSubstanceQuantity* m_liverInsulin = nullptr;
97  SELiquidSubstanceQuantity* m_liverGlucagon = nullptr;
98  SELiquidSubstanceQuantity* m_liverVascularGlucose = nullptr;
99  SELiquidSubstanceQuantity* m_liverExtracellularGlucose = nullptr;
100  SELiquidSubstanceQuantity* m_liverExtracellularAA = nullptr;
101  SELiquidSubstanceQuantity* m_liverExtracellularTAG = nullptr;
102  SELiquidSubstanceQuantity* m_liverExtracellularUrea = nullptr;
103  SELiquidSubstanceQuantity* m_liverExtracellularLactate = nullptr;
104  SELiquidSubstanceQuantity* m_liverExtracellularO2 = nullptr;
105  SELiquidSubstanceQuantity* m_liverExtracellularCO2 = nullptr;
106  SELiquidSubstanceQuantity* m_liverExtracellularKetones = nullptr;
107  SELiquidSubstanceQuantity* m_muscleInsulin = nullptr;
108  SELiquidSubstanceQuantity* m_muscleGlucagon = nullptr;
109  SELiquidSubstanceQuantity* m_muscleVascularGlucose = nullptr;
110  SELiquidSubstanceQuantity* m_LiverTissueAlbumin = nullptr;
125 };
126 }
double m_AlbuminProdutionRate_g_Per_s
Definition: Hepatic.h:95
SEEnergySystem * m_energy
Definition: Hepatic.h:123
Definition: SEScalar.h:33
static constexpr char const *const TypeTag()
Definition: Hepatic.h:47
SESubstance * m_AminoAcids
Definition: Hepatic.h:114
double m_dt_s
Definition: Hepatic.h:92
SESubstance * m_Glucagon
Definition: Hepatic.h:111
SETissueSystem * m_tsu
Definition: Hepatic.h:122
SESubstance * m_Ketones
Definition: Hepatic.h:120
BioGears & m_data
Definition: Hepatic.h:41
Definition: SELiquidSubstanceQuantity.h:28
SESubstance * m_Urea
Definition: Hepatic.h:116
Definition: SEPatient.h:48
SESubstance * m_Insulin
Definition: Hepatic.h:112
Definition: SETissueSystem.h:30
SESubstance * m_Glucose
Definition: Hepatic.h:113
size_t hash_code() const override
Definition: Hepatic.h:49
Definition: BioGearsEngineTest.h:24
static size_t TypeHash()
Definition: Hepatic.h:46
Definition: SEHepaticSystem.h:23
SESubstance * m_CO2
Definition: Hepatic.h:119
SESubstance * m_Triacylglycerol
Definition: Hepatic.h:115
Definition: SESubstance.h:49
Definition: SEEnergySystem.h:32
SESubstance * m_Lactate
Definition: Hepatic.h:117
double m_maxMuscleGlycogen_g
Definition: Hepatic.h:94
std::stringstream m_ss
Definition: Hepatic.h:91
SEPatient * m_Patient
Definition: Hepatic.h:124
double m_maxLiverGlycogen_g
Definition: Hepatic.h:93
SESubstance * m_O2
Definition: Hepatic.h:118
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
Class corresponding to the BioGearsHepaticSystemData schema type.
Definition: BioGearsPhysiology.hxx:3982
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
Definition: SEElectricalCircuit.h:18
Definition: Hepatic.h:34
SESubstance * m_Albumin
Definition: Hepatic.h:121
const char * classname() const override
Definition: Hepatic.h:48