Saturation.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 <memory>
15 
16 #include <biogears/cdm/CommonDataModel.h>
17 #include <biogears/exports.h>
18 
19 #include <biogears/cdm/system/physiology/SETissueSystem.h>
20 #include <biogears/engine/Controller/BioGearsSystem.h>
21 
22 namespace biogears {
23 struct error_functor;
24 class SESubstance;
25 class SELiquidCompartment;
26 class SELiquidSubstanceQuantity;
27 class BioGears;
28 class SEScalarFraction;
29 class SEScalarTemperature;
30 
35 class BIOGEARS_API SaturationCalculator : public Loggable {
36 protected:
37  friend struct error_functor;
38  friend class BioGears;
39  friend class BioGearsEngineTest;
40 
41 
42  static auto make_unique(BioGears& bg) -> std::unique_ptr<SaturationCalculator>;
43 
46 
47 public:
48  virtual ~SaturationCalculator();
49 
50  void Initialize(SESubstanceManager& substances);
51 
52  void SetBodyState(const SEScalarMassPerVolume& AlbuminConcentration, const SEScalarFraction& Hematocrit, const SEScalarTemperature& Temperature, const SEScalarAmountPerVolume& StrongIonDifference, const SEScalarAmountPerVolume& Phosphate);
53  void CalculateBloodGasDistribution(SELiquidCompartment& cmpt);
54  void CalculateCarbonMonoxideSpeciesDistribution(SELiquidCompartment& cmpt);
55 
56 protected: // Stewart Model + Dash-Bassingthwaighte Model + Henderson-Hasselbach Model
57  void CalculateHemoglobinSaturations(double O2PartialPressureGuess_mmHg, double CO2PartialPressureGuess_mmHg, double pH, double temperature_C, double hematocrit, double& OxygenSaturation, double& CarbonDioxideSaturation, double CO2_scaling_factor);
58  bool DistributeHemoglobinBySaturation();
59 
60  // All properties are stateless and are set by either the Initialize method or SetBodyState method
66  SESubstance* m_CO; //Remember to tell amb I added these CO members
70  // Used for conversions
78  // This is the current compartment and the quantities we are balancing
82  SELiquidSubstanceQuantity* m_subCOQ; //Remember to tell amb I added these CO members
89  // The current state of the body to balance to
91  double m_hematocrit;
93  // Here is the stuff that will need to go into the CDM
94  double m_StrongIonDifference_mmol_Per_L; // BloodChemistrySystemData mmol/L
95  double m_Phosphate_mmol_Per_L; //BloodChemistryData mmol/L
96 };
97 }
SELiquidSubstanceQuantity * m_subHCO3Q
Definition: Saturation.h:84
SESubstance * m_CO
Definition: Saturation.h:66
SELiquidSubstanceQuantity * m_subHbCOQ
Definition: Saturation.h:83
double m_HbCO2_g_Per_mol
Definition: Saturation.h:76
Definition: SEScalarTemperature.h:36
SELiquidSubstanceQuantity * m_subCO2Q
Definition: Saturation.h:81
double m_Phosphate_mmol_Per_L
Definition: Saturation.h:95
SESubstance * m_CO2
Definition: Saturation.h:65
double m_CO2_g_Per_mol
Definition: Saturation.h:72
double m_temperature_C
Definition: Saturation.h:92
Definition: SELiquidSubstanceQuantity.h:28
SELiquidSubstanceQuantity * m_subO2Q
Definition: Saturation.h:80
Definition: Logger.h:27
SESubstance * m_HbO2
Definition: Saturation.h:63
Definition: SELiquidCompartment.h:27
double m_O2_g_Per_mol
Definition: Saturation.h:71
Definition: SEScalarAmountPerVolume.h:37
SELiquidSubstanceQuantity * m_subCOQ
Definition: Saturation.h:82
Definition: SEScalarFraction.h:18
double m_HCO3_g_Per_mol
Definition: Saturation.h:73
BioGears & m_data
Definition: Saturation.h:45
SELiquidSubstanceQuantity * m_subHbO2Q
Definition: Saturation.h:86
SELiquidSubstanceQuantity * m_subHbO2CO2Q
Definition: Saturation.h:88
double m_albumin_g_per_L
Definition: Saturation.h:90
Definition: BioGearsEngineTest.h:24
double m_hematocrit
Definition: Saturation.h:91
Definition: SESubstance.h:49
Definition: Saturation.cpp:57
SELiquidCompartment * m_cmpt
Definition: Saturation.h:79
double m_HbO2CO2_g_Per_mol
Definition: Saturation.h:77
SESubstance * m_HbO2CO2
Definition: Saturation.h:64
SELiquidSubstanceQuantity * m_subHbCO2Q
Definition: Saturation.h:87
SELiquidSubstanceQuantity * m_subHbQ
Definition: Saturation.h:85
double m_Hb_g_Per_mol
Definition: Saturation.h:74
Definition: SEScalarMassPerVolume.h:46
The SaturationCalculator class holds the blood gas distribution model.
Definition: Saturation.h:35
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
SESubstance * m_HbCO
Definition: Saturation.h:67
SESubstance * m_HbCO2
Definition: Saturation.h:69
SESubstance * m_O2
Definition: Saturation.h:61
Definition: SESubstanceManager.h:23
double m_HbO2_g_Per_mol
Definition: Saturation.h:75
Definition: SEElectricalCircuit.h:18
double m_StrongIonDifference_mmol_Per_L
Definition: Saturation.h:94
SESubstance * m_Hb
Definition: Saturation.h:62
SESubstance * m_HCO3
Definition: Saturation.h:68