BioGearsEngineTest.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 // The following tests will be exported and runnable
14 #include <math.h>
15 
16 #include <biogears/circuit_test_exports.h>
17 
18 #include <biogears/engine/BioGearsPhysiologyEngine.h>
19 #include <biogears/engine/Controller/BioGearsEngine.h>
20 namespace biogears {
21 class SETestSuite;
22 class HowToTracker;
23 
24 class BIOGEARS_CIRCUIT_TEST_API BioGearsEngineTest : Loggable {
25 public:
27  BioGearsEngineTest(Logger* logger);
28  virtual ~BioGearsEngineTest();
29 
30  bool RunTest(const std::string& testName, const std::string& sOutputDirectory);
31  void FillFunctionMap();
32 
33 protected:
34  bool myLogger;
35  typedef void (BioGearsEngineTest::*testFunction)(const std::string&);
36  typedef std::map<std::string, testFunction> testMap;
37  testMap bgeMap;
38  std::stringstream m_ss;
39 
41  // Circuit Hemodynamics and Compartment Transport Tests //
42  // System Specific Functions Tests as well //
44 public:
46  // Cardiovascular //
47  void CardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
48  void CardiovascularAndRenalCircuitAndTransportTest(const std::string& sTestDirectory);
49  void CardiovascularAndTissueCircuitAndTransportTest(const std::string& sTestDirectory);
50  void CardiovascularTissueAndRenalCircuitAndTransportTest(const std::string& sTestDirectory);
51  void CardiovascularBloodGasesTest(const std::string& sTestDirectory); // Characterize the cv circuit
52  void TuneCardiovascularCircuitTest(const std::string& sTestDirectory);
53  // Cardiovascular Utilities //
54  void CardiovascularCircuitScaleTests(const std::string& sTestDirectory);
55 
56 protected:
58  Heart };
59  void SinusoidHeartDriver(double time_s, double heartRate_s, double& lHeartElastance, double& rHeartElastance);
60  void CardiovascularCircuitAndTransportTest(CardiovascularDriver driverType, double complianceScale, double resistanceScale, double volumeScale, double heartRate_bpm,
61  double sysRes, double sysComp, double aortaRes, double aortaComp, double rightHeartRes, double venaCavaComp, bool connectTissue, bool connectRenal,
62  bool balanceBloodgases, const std::string& sTestDirectory, const std::string& sTestName, bool breakOutResults);
63  void TuneCardiovascularCircuitTest(SETestSuite& testSuite, const std::string& sTestDirectory, const std::string& sTestName, SEPatient& patient);
64 
67  double m_Systolic;
68  double m_Diastolic;
69  double m_Pulse;
71 
72 public:
74  // Renal //
75  void RenalCircuitAndTransportTest(const std::string& sTestDirectory);
76  void RenalTGFFeedbackTest(const std::string& sTestDirectory);
77  void RenalTGFandUPRFeedbackTest(const std::string& sTestDirectory);
78  void RenalSecretionTest(const std::string& sTestDirectory);
79  void RenalUrinateTest(const std::string& sTestDirectory);
80 
81 protected:
83  TGFandUPR };
84  void RenalFeedbackTest(RenalFeedback feedback, const std::string& sTestDirectory, const std::string& sTestName);
86  Urinating };
87  void RenalSystemTest(RenalSystems systemtest, const std::string& sTestDirectory, const std::string& sTestName);
88 
89 public:
91  // Respiratory //
92  void RespiratoryCircuitAndTransportTest(const std::string& sTestDirectory);
93  void RespiratoryDriverTest(const std::string& sTestDirectory);
94 
95 protected:
100  RespiratoryWithMechanicalVentilator };
101  void RespiratoryCircuitAndTransportTest(RespiratoryConfiguration config, const std::string& sTestDirectory);
102 
103 public:
105  // Anesthesia Machine //
106  void AnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
107  void RespiratoryWithAnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
108 
109 protected:
110  void AnesthesiaMachineCircuitAndTransportTest(RespiratoryConfiguration config, const std::string& sTestDirectory);
111 
112 public:
114  // Inhaler //
115  void RespiratoryWithInhalerCircuitAndTransportTest(const std::string& sTestDirectory);
116  void RespiratoryWithMechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
117 
118 protected:
119 public:
121  // GI //
122  enum MealType { CarbsOnly,
126  None };
127  void CustomNutrientKineticsTest(const std::string& sOutputDirectory);
128  void ProteinGluconeogenesisTest(const std::string& sOutputDirectory);
129  void StarvingKetogenesisTest(const std::string& sOutputDirectory);
130  void AnaerobicExerciseTest(const std::string& sOutputDirectory);
131  void HormoneStabilityTest(const std::string& sOutputDirectory);
132  void StorageTest(const std::string& sOutputDirectory);
133  void FullStoresFastingTest(const std::string& sOutputDirectory);
134  void LipogenesisTest(const std::string& sOutputDirectory);
135  void DigestionProtein(const std::string& sOutputDirectory);
136  void DigestionFat(const std::string& sOutputDirectory);
137  void DigestionMixed(const std::string& sOutputDirectory);
138  void DigestionCarbs(const std::string& sOutputDirectory);
139  void AbsorptionCarbs(const std::string& sOutputDirectory);
140  void AbsorptionProtein(const std::string& sOutputDirectory);
141  void AbsorptionFat(const std::string& sOutputDirectory);
142 
143 protected:
144  void NutrientKineticsTest(bool usingAbsorption, bool usingDynamicHormones, bool usingGlycogen, bool usingProteinStorage, bool usingFatStorage, bool fullStores, bool useDiffusion, bool useConsumption, bool usingLipogenesis, bool usingGluconeogenesis, bool isAnaerobic, double exerciseWork_W, const std::string& sOutputDirectory, double testDuration_hr, MealType mealType = None, std::string testName = "Custom");
145  void ProduceAndConsume(double baseEnergyRequested_kcal, double exerciseEnergyRequested_kcal, bool isAnaerobic, BioGears& bg, double deltaT_s, double brainFlowFraction, double& muscleGlycogen_g, double& CO2Produced_mol, double& O2Consumed_mol, double& brainEnergyDeficit_kcal, double& muscleEnergyDeficit_kcal, double& lactateFromGlucose_g, DataTrack& trk);
146  void DigestionTest(const std::string& sOutputDirectory, MealType = None);
147  void AbsorptionTest(const std::string& sOutputDirectory, MealType = None);
148 
149 public:
151  // Environment and Energy //
152  void InternalTemperatureVariableBMRCircuitTest(const std::string& sTestDirectory);
153  void InternalTemperatureVariableSkinCircuitTest(const std::string& sTestDirectory);
154  void InternalTemperatureVariableCoreCircuitTest(const std::string& sTestDirectory);
155  void EnvironmentVariableTemperatureCircuitTest(const std::string& sTestDirectory);
156  void CombinedInternalAndEnvironmentVariableBMRandTemperatureCircuitTest(const std::string& sTestDirectory);
157  void CombinedInternalAndEnvironmentSkinTempDropCircuitTest(const std::string& sTestDirectory);
158  void EnvironmentISO7730ComparisonTest(const std::string& sTestDirectory);
159 
160 protected:
161 public:
163  // Tissue Tests //
164  void DiffusionClearanceExcretionTests(const std::string& rptDirectory);
165  void AlveolarCarbonDioxideDiffusionTest(const std::string& rptDirectory);
166  void AlveolarOxygenDiffusionTest(const std::string& rptDirectory);
167  void EigenDiffusionTest(const std::string& rptDirectory);
168  void FacilitatedDiffusionTest(const std::string& rptDirectory);
169  void TissueCombinedTransportTest(const std::string& rptDirectory);
170 
171 protected:
172  void DistributeMass(SETestSuite& testSuite);
173  void PerfusionLimitedDiffusionTest(SETestSuite& testSuite);
174 
175  void GenericClearanceTest(SETestSuite& testSuite);
176  void GenericExcretionTest(SETestSuite& testSuite);
177 
178 public:
180  // Nervous Tests //
181  void BrainInjuryTest(const std::string& rptDirectory);
182 
183 protected:
184 
185 public:
187  // Blood Chemistry Tests //
188  void AcuteInflammationTest(const std::string& rptDirectory);
189 
190 protected:
191  double Up1(double y, double x, double n);
192  double Up2(double y, double x, double n);
193  double Down(double y, double x, double n);
194  double AlbuminTransport(SELiquidCompartment& from, SELiquidCompartment& to, SEFluidCircuitPath& flowPath, SESubstance& alb, double dt_min, double tissueIntegrity);
195  void UpdateOncoticPressure(SEScalarMassPerVolume& albVas, SEScalarMassPerVolume& albExtra, SEFluidCircuitPath& plasma, SEFluidCircuitPath& inter);
196 
197 public:
199  // Acid Base Engine Tests //
200  void FourCompartmentTestSimple(const std::string& sOutputDirectory);
201  void AcidBaseFourCompartmentTest(const std::string& sOutputDirectory);
202  void FiveCompartmentTestWithDiffusion(const std::string& sOutputDirectory);
203  void FiveCompartmentTestWithActiveDiffusion(const std::string& sOutputDirectory);
204  void AcidBaseFourCompartmentTestWithProductionConsumption(const std::string& sOutputDirectory);
205  void AcidBaseFiveCompartmentTestWithDiffusion(const std::string& sOutputDirectory);
206  void AcidBaseFiveCompartmentTestWithProductionConsumptionAndDiffusion(const std::string& sOutputDirectory);
207 
208 protected:
209  void FourCompartmentTest(bool usingAcidBase, bool usingProductionConsumption, bool usingDiffusion, bool activeDiffusion, const std::string& sOutputDirectory);
213  bool activeDiffusion; //Flag to determine whether we are testing active diffusion of ionic species (needs to be used in conjunction with usingDiffusion)
214 
216  // Acid Base Tests //
218 public:
219  void AcidBaseMathTest(const std::string& sOutputDirectory);
220  void AcidBaseFeedbackTest(const std::string& sOutputDirectory);
221  void AcidBaseLimitsTest(const std::string& sOutputDirectory);
222  void AcidBaseExtremeTest(const std::string& rptDirectory);
223  void AcidBaseBloodGasTests(const std::string& sOutputDirectory);
224 
225 protected:
226  enum bloodType { ARTERIAL,
233  CUSTOM };
234  void AcidBaseBloodGasTest(BioGears& bg, bloodType compartment, SETestSuite& testSuite);
235 
237  // Aerosol Tests //
239 public:
240  void AerosolTest(const std::string& sOutputDirectory);
241 
242 protected:
243  void SizeIndependentDepositionEfficencyCoefficientsTest(SETestSuite& suite, SESubstance& substance, double expectedMouthCoeff, double expectedCarinaCoeff, double expectedDeadSpaceCoeff, double expectedAlveoliCoeff);
244  void DepositionFractionTest(SETestSuite& suite, SESubstance& substance, double expectedMouthDepFrac, double expectedCarinaDepFrac, double expectedDeadSpaceDepFrac, double expectedAlveoliDepFrac);
245 
246 public:
248  // General Engine Tests //
249  void ConditionCombinations(const std::string& rptDirectory);
250  void MultiEngineTest(const std::string& sTestDirectory);
251  void SerializationTest(const std::string& sTestDirectory);
252  void SolverSpeedTest(const std::string& sTestDirectory);
253 
254 protected:
255  void InhalerState(PhysiologyEngine* bg, HowToTracker& tracker);
256  void InjectSuccsState(PhysiologyEngine* bg, HowToTracker& tracker, const SESubstance& succs);
257 };
258 }
bool activeDiffusion
Definition: BioGearsEngineTest.h:213
double m_CardiacOutput
Definition: BioGearsEngineTest.h:70
std::stringstream m_ss
Definition: BioGearsEngineTest.h:38
double m_Systolic
Definition: BioGearsEngineTest.h:67
Definition: BioGearsEngineTest.h:232
Definition: CardiovascularCircuit.cpp:36
Definition: BioGearsEngineTest.h:96
RespiratoryConfiguration
Definition: BioGearsEngineTest.h:96
bool usingProductionConsumption
Definition: BioGearsEngineTest.h:211
Definition: BioGearsEngineTest.h:231
Definition: SEFluidCircuitPath.h:25
Definition: SEPatient.h:48
double m_Pulse
Definition: BioGearsEngineTest.h:69
Definition: BioGearsEngineTest.h:229
Definition: BioGearsEngineTest.h:99
Definition: Logger.h:27
Definition: CardiovascularCircuit.cpp:35
Definition: Logger.h:75
Definition: SELiquidCompartment.h:27
Definition: BioGearsEngineTest.h:97
Definition: PhysiologyEngine.h:68
double m_Diastolic
Definition: BioGearsEngineTest.h:68
double m_MeanCVPressure
Definition: BioGearsEngineTest.h:66
Definition: BioGearsEngineTest.h:228
bool usingDiffusion
Definition: BioGearsEngineTest.h:212
Definition: BioGearsEngineTest.h:82
double m_MeanAortaPressure
Definition: BioGearsEngineTest.h:65
Definition: SerializationTest.cpp:47
Definition: BioGearsEngineTest.h:24
Definition: BioGearsEngineTest.h:85
Definition: DataTrack.h:37
Definition: BioGearsEngineTest.h:230
Definition: SESubstance.h:49
Definition: BioGearsEngineTest.h:123
MealType
Definition: BioGearsEngineTest.h:122
CardiovascularDriver
Definition: BioGearsEngineTest.h:57
RenalFeedback
Definition: BioGearsEngineTest.h:82
std::map< std::string, testFunction > testMap
Definition: BioGearsEngineTest.h:36
Definition: SEScalarMassPerVolume.h:46
bloodType
Definition: BioGearsEngineTest.h:226
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
Definition: SETestSuite.h:20
bool usingAcidBase
Definition: BioGearsEngineTest.h:210
Definition: BioGearsEngineTest.h:124
Definition: BioGearsEngineTest.h:227
RenalSystems
Definition: BioGearsEngineTest.h:85
Definition: SEElectricalCircuit.h:18
testMap bgeMap
Definition: BioGearsEngineTest.h:37
Definition: BioGearsEngineTest.h:125
bool myLogger
Definition: BioGearsEngineTest.h:34