BioGearsSubstances.h
1 
2 /**************************************************************************************
3 Copyright 2015 Applied Research Associates, Inc.
4 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
5 this file except in compliance with the License. You may obtain a copy of the License
6 at:
7 http://www.apache.org/licenses/LICENSE-2.0
8 Unless required by applicable law or agreed to in writing, software distributed under
9 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
10 CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 specific language governing permissions and limitations under the License.
12 **************************************************************************************/
13 
14 #pragma once
15 #include <biogears/cdm/substance/SESubstanceManager.h>
16 
17 namespace biogears {
18 
19 class SELiquidCompartment;
20 class SETissueCompartment;
21 class SEScalarMass;
22 class SEScalarAmountPerVolume;
23 class AmountPerVolumeUnit;
24 class MassUnit;
25 class SEScalarMassPerVolume;
26 class MassPerVolumeUnit;
27 
28 class BioGears;
29 
31  friend class BioGearsSubstances;
32 
33 public:
36 
37  double GetMouth() const { return m_mouth; }
38  double GetTrachea() const { return m_trachea; }
39  double GetBronchi() const { return m_bronchi; }
40  double GetAlveoli() const { return m_alveoli; }
41 
42 protected:
43  double m_mouth = 0;
44  double m_trachea = 0;
45  double m_bronchi = 0;
46  double m_alveoli = 0;
47 };
48 
52 class BIOGEARS_API BioGearsSubstances : public SESubstanceManager {
53  friend class BioGearsEngineTest;
54 
55 public:
57  virtual ~BioGearsSubstances() = default;
58 
59  virtual void Clear();
60 
61  virtual bool LoadSubstanceDirectory();
62  virtual void InitializeSubstances();
63 
64  virtual void AddActiveSubstance(SESubstance& substance);
65  virtual bool IsActive(const SESubstance& sub) const;
66 
67  inline SESubstance& GetO2() { return *m_O2; }
68  inline SESubstance& GetCO() { return *m_CO; }
69  inline SESubstance& GetCO2() { return *m_CO2; }
70  inline SESubstance& GetN2() { return *m_N2; }
71  inline SESubstance& GetHb() { return *m_Hb; }
72  inline SESubstance& GetHbO2() { return *m_HbO2; }
73  inline SESubstance& GetHbCO2() { return *m_HbCO2; }
74  inline SESubstance& GetHbCO() { return *m_HbCO; }
75  inline SESubstance& GetHbO2CO2() { return *m_HbO2CO2; }
76  inline SESubstance& GetHCO3() { return *m_HCO3; }
77  inline SESubstance& GetEpi() { return *m_epi; }
78 
79  inline SESubstance& GetAlbumin() { return *m_albumin; }
80  inline SESubstance& GetAminoAcids() { return *m_aminoAcids; }
81  inline SESubstance& GetBicarbonate() { return *m_HCO3; }
82  inline SESubstance& GetCalcium() { return *m_calcium; }
83  inline SESubstance& GetChloride() { return *m_chloride; }
84  inline SESubstance& GetCreatinine() { return *m_creatinine; }
85  inline SESubstance& GetGlobulin() { return *m_globulin; }
86  inline SESubstance& GetGlucagon() { return *m_glucagon; }
87  inline SESubstance& GetGlucose() { return *m_glucose; }
88  inline SESubstance& GetInsulin() { return *m_insulin; }
89  inline SESubstance& GetKetones() { return *m_ketones; }
90  inline SESubstance& GetLactate() { return *m_lactate; }
91  inline SESubstance& GetPotassium() { return *m_potassium; }
92  inline SESubstance& GetTriacylglycerol() { return *m_triacylglycerol; }
93  inline SESubstance& GetSodium() { return *m_sodium; }
94  inline SESubstance& GetUrea() { return *m_urea; }
95 
96  inline SESubstance& GetPlatelets() { return *m_platelets; }
97  inline SESubstance& GetAntigen_A() { return *m_AntigenA; }
98  inline SESubstance& GetAntigen_B() { return *m_AntigenB; }
99  inline SESubstance& GetRBC() { return *m_RBC; }
100  inline SESubstance& GetWBC() { return *m_WBC; }
101 
102  void CalculateGenericClearance(double volumeCleared_mL, SELiquidCompartment& cmpt, SESubstance& sub, SEScalarMass* cleared = nullptr);
103  void CalculateGenericClearance(double volumeCleared_mL, SETissueCompartment& cmpt, SESubstance& sub, SEScalarMass* cleared = nullptr);
104  void CalculateGenericExcretion(double VascularFlow_mL_Per_s, SETissueCompartment& cmpt, SESubstance& sub, double FractionExcreted, double timestep_s, SEScalarMass* excreted = nullptr);
105  void SetLiquidCompartmentNonGasesForStarvation(double time_h);
106 
107  const SizeIndependentDepositionEfficencyCoefficient& GetSizeIndependentDepositionEfficencyCoefficient(SESubstance& substance);
108 
109  double GetSubstanceMass(SESubstance&, const std::vector<SELiquidCompartment*>&, const MassUnit& unit);
110  double GetSubstanceMass(SESubstance&, const std::vector<SETissueCompartment*>&, const MassUnit& unit);
111 
112  void WriteBloodGases();
113  void WritePulmonaryGases();
114  void ProbeBloodGases(SELiquidCompartment& cmpt, const std::string& prefix = "");
115 
116 protected:
117  virtual void InitializeGasCompartments();
118  virtual void InitializeLiquidCompartmentGases();
119  virtual void InitializeLiquidCompartmentNonGases();
120 
121  virtual void InitializeBloodGases(SETissueCompartment& tissue, SELiquidCompartment& vascular);
122  virtual void InitializeBloodGases(SELiquidCompartment& cmpt, double Hb_total_mM, double O2_sat, double O2_mmol_Per_L, double CO2_sat, double CO2_mmol_Per_L, double HCO3_mmol_Per_L, double pH, bool distribute = true);
123 
124  void SetSubstanceMolarity(SESubstance&, const std::vector<SELiquidCompartment*>&, const SEScalarAmountPerVolume& molarity);
125  void SetSubstanceMolarity(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarAmountPerVolume& molarity);
126  void SetSubstanceMolarity(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarAmountPerVolume& extracellular, const SEScalarAmountPerVolume& intracellular);
127  void SetSubstanceMolarity(SESubstance&, const SEScalarAmountPerVolume& extracellular, const SEScalarAmountPerVolume& intracellular);
128 
129  void SetSubstanceConcentration(SESubstance&, const std::vector<SELiquidCompartment*>&, const SEScalarMassPerVolume& concentration);
130  void SetSubstanceConcentration(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarMassPerVolume& concentration);
131  void SetSubstanceConcentration(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarMassPerVolume& extracellular, const SEScalarMassPerVolume& intracellular);
132 
133  // Common Substances
134  //Substances
146 
162 
168 
170 
171  std::map<SESubstance*, SizeIndependentDepositionEfficencyCoefficient*> m_SIDECoefficients;
172 
174 };
175 }
SESubstance * m_lactate
Definition: BioGearsSubstances.h:157
SESubstance & GetSodium()
Definition: BioGearsSubstances.h:93
SESubstance * m_glucose
Definition: BioGearsSubstances.h:154
SESubstance & GetGlobulin()
Definition: BioGearsSubstances.h:85
SESubstance * m_CO
Definition: BioGearsSubstances.h:136
SESubstance & GetChloride()
Definition: BioGearsSubstances.h:83
std::map< SESubstance *, SizeIndependentDepositionEfficencyCoefficient * > m_SIDECoefficients
Definition: BioGearsSubstances.h:171
SESubstance & GetAntigen_B()
Definition: BioGearsSubstances.h:98
SESubstance * m_glucagon
Definition: BioGearsSubstances.h:153
SESubstance * m_ketones
Definition: BioGearsSubstances.h:156
SESubstance & GetHb()
Definition: BioGearsSubstances.h:71
SESubstance * m_HCO3
Definition: BioGearsSubstances.h:144
SESubstance * m_HbCO2
Definition: BioGearsSubstances.h:141
SESubstance & GetPotassium()
Definition: BioGearsSubstances.h:91
SESubstance * m_AntigenB
Definition: BioGearsSubstances.h:165
SESubstance * m_RBC
Definition: BioGearsSubstances.h:166
SESubstance & GetInsulin()
Definition: BioGearsSubstances.h:88
SESubstance * m_N2
Definition: BioGearsSubstances.h:138
SESubstance & GetAntigen_A()
Definition: BioGearsSubstances.h:97
SESubstance & GetCalcium()
Definition: BioGearsSubstances.h:82
SESubstance * m_platelets
Definition: BioGearsSubstances.h:163
SESubstance * m_HbO2
Definition: BioGearsSubstances.h:140
SESubstance * m_chloride
Definition: BioGearsSubstances.h:150
SESubstance & GetGlucagon()
Definition: BioGearsSubstances.h:86
SESubstance * m_urea
Definition: BioGearsSubstances.h:161
SESubstance & GetCreatinine()
Definition: BioGearsSubstances.h:84
SESubstance * m_epi
Definition: BioGearsSubstances.h:145
~SizeIndependentDepositionEfficencyCoefficient()
Definition: BioGearsSubstances.h:35
SESubstance * m_triacylglycerol
Definition: BioGearsSubstances.h:158
SESubstance * m_sodium
Definition: BioGearsSubstances.h:160
BioGears & m_data
Definition: BioGearsSubstances.h:173
SESubstance * m_insulin
Definition: BioGearsSubstances.h:155
Definition: SEScalarMass.h:38
SESubstance & GetHbO2CO2()
Definition: BioGearsSubstances.h:75
SESubstance * m_aminoAcids
Definition: BioGearsSubstances.h:148
SizeIndependentDepositionEfficencyCoefficient()
Definition: BioGearsSubstances.h:34
SESubstance & GetCO()
Definition: BioGearsSubstances.h:68
Definition: SELiquidCompartment.h:27
double GetMouth() const
Definition: BioGearsSubstances.h:37
double GetTrachea() const
Definition: BioGearsSubstances.h:38
Definition: SEScalarAmountPerVolume.h:37
Definition: BioGearsEngineTest.h:24
SESubstance * m_albumin
Definition: BioGearsSubstances.h:147
SESubstance & GetEpi()
Definition: BioGearsSubstances.h:77
SESubstance & GetLactate()
Definition: BioGearsSubstances.h:90
SESubstance * m_CO2
Definition: BioGearsSubstances.h:137
SESubstance & GetPlatelets()
Definition: BioGearsSubstances.h:96
SESubstance & GetAlbumin()
Definition: BioGearsSubstances.h:79
SESubstance & GetN2()
Definition: BioGearsSubstances.h:70
SESubstance & GetBicarbonate()
Definition: BioGearsSubstances.h:81
Definition: SESubstance.h:49
SESubstance & GetCO2()
Definition: BioGearsSubstances.h:69
SESubstance * m_HbCO
Definition: BioGearsSubstances.h:142
double GetBronchi() const
Definition: BioGearsSubstances.h:39
SESubstance & GetO2()
Definition: BioGearsSubstances.h:67
double GetAlveoli() const
Definition: BioGearsSubstances.h:40
SESubstance * m_creatinine
Definition: BioGearsSubstances.h:151
SESubstance & GetAminoAcids()
Definition: BioGearsSubstances.h:80
SESubstance * m_calcium
Definition: BioGearsSubstances.h:149
Definition: SEScalarMassPerVolume.h:46
SESubstance * m_O2
Definition: BioGearsSubstances.h:135
SESubstance & GetRBC()
Definition: BioGearsSubstances.h:99
SESubstance & GetTriacylglycerol()
Definition: BioGearsSubstances.h:92
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
SESubstance & GetHCO3()
Definition: BioGearsSubstances.h:76
SESubstance & GetKetones()
Definition: BioGearsSubstances.h:89
Definition: SESubstanceManager.h:23
SESubstance & GetHbCO()
Definition: BioGearsSubstances.h:74
Definition: SEScalarMass.h:18
Definition: SEElectricalCircuit.h:18
SESubstance & GetHbCO2()
Definition: BioGearsSubstances.h:73
SESubstance & GetHbO2()
Definition: BioGearsSubstances.h:72
SESubstance * m_AntigenA
Definition: BioGearsSubstances.h:164
Definition: SETissueCompartment.h:32
SESubstance * m_globulin
Definition: BioGearsSubstances.h:152
Manages and initializes all systems with substances needed by BioGears.
Definition: BioGearsSubstances.h:52
bool m_isCOActive
Definition: BioGearsSubstances.h:169
SESubstance * m_Hb
Definition: BioGearsSubstances.h:139
SESubstance * m_HbO2CO2
Definition: BioGearsSubstances.h:143
SESubstance * m_potassium
Definition: BioGearsSubstances.h:159
SESubstance & GetUrea()
Definition: BioGearsSubstances.h:94
SESubstance & GetGlucose()
Definition: BioGearsSubstances.h:87
SESubstance * m_WBC
Definition: BioGearsSubstances.h:167
SESubstance & GetWBC()
Definition: BioGearsSubstances.h:100