What’s New in the Pulse Physiology Engine 4.4.0
×
SubstanceManager.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5
6#include "engine/CommonDefs.h"
7#include "cdm/substance/SESubstanceManager.h"
11
12namespace pulse
13{
14 class Data;
15 class PULSE_DECL SizeIndependentDepositionEfficencyCoefficient
16 {
17 friend class SubstanceManager;
18 public:
19 SizeIndependentDepositionEfficencyCoefficient() {};
20 ~SizeIndependentDepositionEfficencyCoefficient() {}
21
22 double GetAirway() const { return m_airway; }
23 double GetTrachea() const { return m_trachea; }
24 double GetDeadSpace() const { return m_deadSpace; }
25 double GetAlveoli() const { return m_alveoli; }
26
27 protected:
28 double m_airway = 0;
29 double m_trachea = 0;
30 double m_deadSpace = 0;
31 double m_alveoli = 0;
32 };
33
37 class PULSE_DECL SubstanceManager : public SESubstanceManager
38 {
39 friend class EngineTest;
40 public:
41 SubstanceManager(Data& data);
42 virtual ~SubstanceManager() = default;
43
44 void Clear() override;
45 bool LoadSubstanceDirectory(const std::string& data_dir = ".") override;
46
47 virtual bool Setup();
48 virtual void InitializeSubstances();
49
50 void AddActiveAerosol(const SESubstance& substance) override;
51 void AddActiveSubstance(const SESubstance& substance) override;
52 bool IsActive(const SESubstance& sub) const override;
53
54 inline SESubstance& GetO2() { return *m_O2; }
55 inline SESubstance& GetCO() { return *m_CO; }
56 inline SESubstance& GetCO2() { return *m_CO2; }
57 inline SESubstance& GetN2() { return *m_N2; }
58 inline SESubstance& GetHb() { return *m_Hb; }
59 inline SESubstance& GetHbO2() { return *m_HbO2; }
60 inline SESubstance& GetHbCO2() { return *m_HbCO2; }
61 inline SESubstance& GetHbCO() { return *m_HbCO; }
62 inline SESubstance& GetHbO2CO2() { return *m_HbO2CO2; }
63 inline SESubstance& GetHCO3() { return *m_HCO3; }
64 inline SESubstance& GetEpi() { return *m_epi; }
65 inline SESubstance& GetNorepi() { return *m_norepi; }
66
67 inline SESubstance& GetAcetoacetate() { return *m_acetoacetate; }
68 inline SESubstance& GetAlbumin() { return *m_albumin; }
69 inline SESubstance& GetBicarbonate() { return *m_HCO3; }
70 inline SESubstance& GetCalcium() { return *m_calcium; }
71 inline SESubstance& GetChloride() { return *m_chloride; }
72 inline SESubstance& GetCreatinine() { return *m_creatinine; }
73 inline SESubstance& GetGlobulin() { return *m_globulin; }
74 inline SESubstance& GetGlucose() { return *m_glucose; }
75 inline SESubstance& GetInsulin() { return *m_insulin; }
76 inline SESubstance& GetLactate() { return *m_lactate; }
77 inline SESubstance& GetPotassium() { return *m_potassium; }
78 inline SESubstance& GetTristearin() { return *m_tristearin; }
79 inline SESubstance& GetSodium() { return *m_sodium; }
80 inline SESubstance& GetUrea() { return *m_urea; }
81
82 void CalculateGenericClearance(double volumeCleared_mL, SELiquidCompartment& cmpt, SESubstance& sub, SEScalarMass* cleared = nullptr);
83 void CalculateGenericClearance(double volumeCleared_mL, SETissueCompartment& cmpt, SESubstance& sub, SEScalarMass* cleared = nullptr);
84 void CalculateGenericExcretion(double VascularFlow_mL_Per_s, SETissueCompartment& cmpt, SESubstance& sub, double FractionExcreted, double timestep_s, SEScalarMass* excreted = nullptr);
85
86 const SizeIndependentDepositionEfficencyCoefficient& GetSizeIndependentDepositionEfficencyCoefficient(const SESubstance& substance);
87
88 double GetSubstanceMass(SESubstance&, const std::vector<SELiquidCompartment*>&, const MassUnit& unit);
89 double GetSubstanceMass(SESubstance&, const std::vector<SETissueCompartment*>&, const MassUnit& unit);
90
91 void WriteBloodGases();
92 void WritePulmonaryGases();
93 void ProbeBloodGases(SELiquidCompartment& cmpt, const std::string& prefix = "");
94
95 virtual void InitializeGasCompartments();
96 virtual void InitializeLiquidCompartmentGases();
97 virtual void InitializeLiquidCompartmentNonGases();
98
99 protected:
100 virtual void CopyConcentrations(SELiquidCompartment& src, SELiquidCompartment& tgt);
101 virtual void InitializeBloodGases(SETissueCompartment& tissue, SELiquidCompartment& vascular);
102 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);
103
104 void SetSubstanceMolarity(SESubstance&, const std::vector<SELiquidCompartment*>&, const SEScalarAmountPerVolume& molarity);
105 void SetSubstanceMolarity(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarAmountPerVolume& molarity);
106 void SetSubstanceMolarity(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarAmountPerVolume& extracellular, const SEScalarAmountPerVolume& intracellular);
107
108 void SetSubstanceConcentration(SESubstance&, const std::vector<SELiquidCompartment*>&, const SEScalarMassPerVolume& concentration);
109 void SetSubstanceConcentration(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarMassPerVolume& concentration);
110 void SetSubstanceConcentration(SESubstance&, const std::vector<SETissueCompartment*>&, const SEScalarMassPerVolume& extracellular, const SEScalarMassPerVolume& intracellular);
111
112 // Common Substances
113 //Substances
114 SESubstance* m_O2;
115 SESubstance* m_CO;
116 SESubstance* m_CO2;
117 SESubstance* m_N2;
118 SESubstance* m_Hb;
119 SESubstance* m_HbO2;
120 SESubstance* m_HbCO2;
121 SESubstance* m_HbCO;
122 SESubstance* m_HbO2CO2;
123 SESubstance* m_HCO3;
124 SESubstance* m_epi;
125 SESubstance* m_norepi;
126
127 SESubstance* m_acetoacetate;
128 SESubstance* m_albumin;
129 SESubstance* m_calcium;
130 SESubstance* m_chloride;
131 SESubstance* m_creatinine;
132 SESubstance* m_globulin;
133 SESubstance* m_glucose;
134 SESubstance* m_insulin;
135 SESubstance* m_lactate;
136 SESubstance* m_tristearin;
137 SESubstance* m_potassium;
138 SESubstance* m_sodium;
139 SESubstance* m_urea;
140
141 bool m_isCOActive;
142
143 std::map<const SESubstance*, SizeIndependentDepositionEfficencyCoefficient> m_SIDECoefficients;
144
145 Data& m_data;
146 };
147END_NAMESPACE
Definition: SEScalarMass.h:8
Definition: SELiquidCompartment.h:11
Definition: SEScalarAmountPerVolume.h:35
Definition: SEScalarMass.h:28
Definition: SEScalarMassPerVolume.h:37
Definition: SESubstanceAerosolization.h:7
Definition: SESubstance.h:16
Definition: SESubstanceManager.h:10
Definition: SETissueCompartment.h:9
Definition: Logger.h:14

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.