Tissue.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/SEFluidCircuitPath.h>
18 #include <biogears/cdm/system/physiology/SETissueSystem.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 SESubstance;
25 class SEGasCompartment;
26 class SETissueCompartment;
27 class SELiquidCompartment;
28 class SELiquidSubstanceQuantity;
29 class SEPatientActionCollection;
30 class SEPatient;
31 class SEEnergySystem;
32 class BioGears;
40 class BIOGEARS_API Tissue : public SETissueSystem, public BioGearsSystem {
41  friend class BioGears;
42  friend class BioGearsEngineTest;
43 
44 protected:
45  static auto make_unique(BioGears& bg) -> std::unique_ptr<Tissue>;
46  Tissue(BioGears& bg);
48 
49 
50 public:
51  virtual ~Tissue() override;
52 
53  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
54  static constexpr char const * const TypeTag() { return "Tissue"; }
55  const char* classname() const override { return TypeTag(); }
56  size_t hash_code() const override { return TypeHash(); }
57 
58  void Clear() override;
59 
60  // Set members to a stable homeostatic state
61  void Initialize() override;
62 
63  // Load a state
64  virtual bool Load(const CDM::BioGearsTissueSystemData& in);
65  virtual CDM::BioGearsTissueSystemData* Unload() const override;
66 
67 protected:
68  virtual void Unload(CDM::BioGearsTissueSystemData& data) const;
69  // Set pointers and other member variables common to both homeostatic initialization and loading a state
70  void SetUp() override;
71 
72 public:
73  void AtSteadyState() override;
74  void PreProcess() override;
75  void Process() override;
76  void PostProcess() override;
77 
78  // Used to add Hepatic O2/CO2 changes to Tissue outputs (there's probably a better way to transfer this data)
79  static double m_hepaticO2Consumed_mol;
80  static double m_hepaticCO2Produced_mol;
81 
82 protected:
83  // Preprocess Methods
84  void ProteinStorageAndRelease();
85  void FatStorageAndRelease();
86 
87  // Process Methods
88  void CalculateDiffusion();
89  void CalculatePulmonaryCapillarySubstanceTransfer();
90  void AlveolarPartialPressureGradientDiffusion(SEGasCompartment& pulmonary, SELiquidCompartment& vascular, SESubstance& sub, double DiffusingCapacityO2_mL_Per_s_mmHg, double timestep_s);
91  void CalculateVitals();
92  void CheckGlycogenLevels();
93  void ManageSubstancesAndSaturation();
94 
95 
96  //conditions
97  void Dehydrate();
98 
99  // Tissue Nutrients
100  void CalculateMetabolicConsumptionAndProduction(double time);
101  void SetStarvationState();
102 
103  //Tissue fluid exchange
104  void CalculateTissueFluidFluxes();
105  void CalculateOncoticPressure();
106 
107  //Override
108  void ProcessOverride();
109  void OverrideControlLoop();
110 
111  // Serializable member variables (Set in Initialize and in schema)
118 
119  // Stateless member variable (Set in SetUp())
120  double m_Dt_s;
123 
124  std::stringstream m_ss;
142 
147 
164 
170 
175 
179 
180  std::map<SETissueCompartment*, SELiquidCompartment*> m_TissueToVascular;
181  std::map<SELiquidCompartment*, SEFluidCircuitPath*> m_VascularCopPaths;
182  std::map<SETissueCompartment*, SEFluidCircuitPath*> m_InterstitialCopPaths;
183  std::map<SETissueCompartment*, SEFluidCircuitPath*> m_ExtraToIntraPaths;
184  std::map<SETissueCompartment*, SEFluidCircuitPath*> m_EndothelialResistancePaths;
185  std::vector<SETissueCompartment*> m_ConsumptionProdutionTissues;
186  std::string m_AnaerobicTissues;
187 };
188 }
SESubstance * m_Triacylglycerol
Definition: Tissue.h:129
SELiquidSubstanceQuantity * m_MuscleVascularGlucose
Definition: Tissue.h:169
SELiquidSubstanceQuantity * m_MuscleAA
Definition: Tissue.h:150
std::map< SETissueCompartment *, SEFluidCircuitPath * > m_ExtraToIntraPaths
Definition: Tissue.h:183
SELiquidSubstanceQuantity * m_MuscleInsulin
Definition: Tissue.h:148
SEGasCompartment * m_LeftAlveoli
Definition: Tissue.h:171
SESubstance * m_Ketones
Definition: Tissue.h:134
Class corresponding to the BioGearsTissueSystemData schema type.
Definition: BioGearsPhysiology.hxx:9030
SELiquidSubstanceQuantity * m_MuscleGlucagon
Definition: Tissue.h:149
SESubstance * m_Creatinine
Definition: Tissue.h:135
SELiquidCompartment * m_LiverIntracellular
Definition: Tissue.h:159
SEFluidCircuitNode * m_GutE3
Definition: Tissue.h:143
SELiquidSubstanceQuantity * m_FatVascularLipid
Definition: Tissue.h:166
SELiquidCompartment * m_FatIntracellular
Definition: Tissue.h:162
RunningAverage m_CO2ProducedRunningAverage_mL_Per_s
Definition: Tissue.h:115
SELiquidCompartment * m_MuscleVascular
Definition: Tissue.h:168
std::vector< SETissueCompartment * > m_ConsumptionProdutionTissues
Definition: Tissue.h:185
SELiquidSubstanceQuantity * m_LiverVascularGlucose
Definition: Tissue.h:167
double m_RestingPatientMass_kg
Definition: Tissue.h:112
SETissueCompartment * m_RightLungTissue
Definition: Tissue.h:155
SEPatientActionCollection * m_PatientActions
Definition: Tissue.h:176
static constexpr char const *const TypeTag()
Definition: Tissue.h:54
SELiquidCompartment * m_LiverExtracellular
Definition: Tissue.h:160
SELiquidCompartment * m_FatVascular
Definition: Tissue.h:165
Definition: SELiquidSubstanceQuantity.h:28
Definition: SEFluidCircuitPath.h:25
Definition: SEPatient.h:48
double m_maxProteinStorage_g
Definition: Tissue.h:121
SELiquidCompartment * m_LeftPulmonaryCapillaries
Definition: Tissue.h:173
Definition: RunningAverage.h:19
SETissueCompartment * m_FatTissue
Definition: Tissue.h:161
const char * classname() const override
Definition: Tissue.h:55
SESubstance * m_CO
Definition: Tissue.h:132
Definition: SETissueSystem.h:30
RunningAverage m_O2ConsumedRunningAverage_mL_Per_s
Definition: Tissue.h:114
Definition: SEFluidCircuitNode.h:21
Definition: SELiquidCompartment.h:27
SESubstance * m_Sodium
Definition: Tissue.h:136
SETissueCompartment * m_LiverTissue
Definition: Tissue.h:158
SEPatient * m_Patient
Definition: Tissue.h:177
double m_Dt_s
Definition: Tissue.h:120
SETissueCompartment * m_BrainTissue
Definition: Tissue.h:163
SESubstance * m_Calcium
Definition: Tissue.h:138
double m_lastFatigueTime
Definition: Tissue.h:122
size_t hash_code() const override
Definition: Tissue.h:56
SESubstance * m_Chloride
Definition: Tissue.h:139
Definition: BioGearsEngineTest.h:24
SESubstance * m_Insulin
Definition: Tissue.h:140
SESubstance * m_Glucagon
Definition: Tissue.h:127
SESubstance * m_CO2
Definition: Tissue.h:131
std::map< SETissueCompartment *, SEFluidCircuitPath * > m_EndothelialResistancePaths
Definition: Tissue.h:184
SELiquidSubstanceQuantity * m_FatGlucagon
Definition: Tissue.h:152
Definition: SESubstance.h:49
static double m_hepaticCO2Produced_mol
Definition: Tissue.h:80
SEFluidCircuitPath * m_GutE3ToGround
Definition: Tissue.h:144
SELiquidSubstanceQuantity * m_FatTAG
Definition: Tissue.h:153
RunningAverage m_RespiratoryQuotientRunningAverage
Definition: Tissue.h:116
Definition: SEEnergySystem.h:32
SEFluidCircuitPath * m_SplanchnicToGut
Definition: Tissue.h:146
SETissueCompartment * m_MuscleTissue
Definition: Tissue.h:156
std::stringstream m_ss
Definition: Tissue.h:124
std::map< SETissueCompartment *, SEFluidCircuitPath * > m_InterstitialCopPaths
Definition: Tissue.h:182
SESubstance * m_AminoAcids
Definition: Tissue.h:126
SEEnergySystem * m_energy
Definition: Tissue.h:178
RunningAverage m_FatigueRunningAverage
Definition: Tissue.h:117
SELiquidCompartment * m_MuscleIntracellular
Definition: Tissue.h:157
SELiquidCompartment * m_RightPulmonaryCapillaries
Definition: Tissue.h:174
static double m_hepaticO2Consumed_mol
Definition: Tissue.h:79
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
SETissueCompartment * m_LeftLungTissue
Definition: Tissue.h:154
SESubstance * m_O2
Definition: Tissue.h:130
std::map< SELiquidCompartment *, SEFluidCircuitPath * > m_VascularCopPaths
Definition: Tissue.h:181
SESubstance * m_Lactate
Definition: Tissue.h:133
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
SESubstance * m_Urea
Definition: Tissue.h:141
SESubstance * m_Potassium
Definition: Tissue.h:137
SEGasCompartment * m_RightAlveoli
Definition: Tissue.h:172
Definition: SEElectricalCircuit.h:18
double m_RestingFluidMass_kg
Definition: Tissue.h:113
std::map< SETissueCompartment *, SELiquidCompartment * > m_TissueToVascular
Definition: Tissue.h:180
std::string m_AnaerobicTissues
Definition: Tissue.h:186
SESubstance * m_Albumin
Definition: Tissue.h:125
Definition: SETissueCompartment.h:32
SESubstance * m_Glucose
Definition: Tissue.h:128
SEFluidCircuitPath * m_SmallIntestineToGut
Definition: Tissue.h:145
This class encapsulates logic necessary to connect independent systems together.
Definition: Tissue.h:40
Definition: SEPatientActionCollection.h:54
SELiquidSubstanceQuantity * m_FatInsulin
Definition: Tissue.h:151
static size_t TypeHash()
Definition: Tissue.h:53
Definition: SEGasCompartment.h:24
BioGears & m_data
Definition: Tissue.h:47