Building Medical Digital Twins with Pulse: Open Source Simulation Tools for Developers and Researchers
×
EngineTest.h
1 /* Distributed under the Apache License, Version 2.0.
2  See accompanying NOTICE file for details.*/
3 
4 #include "cdm/utils/testing/SETestManager.h"
5 #include "engine/human_adult/whole_body/Engine.h"
6 #include "engine/human_adult/whole_body/controller/Controller.h"
7 
8 class SESubstance;
9 class SETestSuite;
10 class HowToTracker;
11 
12 namespace pulse { namespace human_adult_whole_body
13 {
14  class EngineTest : public SETestManager
15  {
16  public:
17  EngineTest(Logger* logger = nullptr);
18  virtual ~EngineTest();
19 
20  virtual bool RunTest(const std::string& testName, const std::string& sOutputDirectory) override;
21 
22  protected:
23  virtual void FillFunctionMap() override;
24  typedef void(EngineTest::* testFunction)(const std::string&);
25  std::map<std::string, testFunction> testMap;
26  std::stringstream m_ss;
27 
28 
30  // Circuit Hemodynamics and Compartment Transport Tests //
31  // System Specific Functions Tests as well //
33  public:
35  // Cardiovascular //
37  void CardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
38  void CardiovascularAndRenalCircuitAndTransportTest(const std::string& sTestDirectory);
39  void CardiovascularAndTissueCircuitAndTransportTest(const std::string& sTestDirectory);
40  void CardiovascularAndCerebrospinalFluidCircuitAndTransportTest(const std::string& sTestDirectory);
41  void ExpandedLungsCardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
42  void FullCardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
43  void ExpandedLungsFullCardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
44  void CardiovascularBloodGasesTest(const std::string& sTestDirectory);// Everything with Saturation
45  void ExpandedLungsCardiovascularBloodGasesTest(const std::string& sTestDirectory);// Everything with Saturation
46  // Cardiovascular Utilities //
47  void TuneCardiovascularCircuitTest(const std::string& sTestDirectory);
48  void CardiovascularCircuitScaleTests(const std::string& sTestDirectory);
49  protected:
50  enum CardiovascularDriver { Sinusoid = 0, Heart };
51  enum Expanded { None=0, Vasculature, Respiratory }; // Vasculature expansion defined by ComputationalLife
52  void SinusoidHeartDriver(double time_s, double heartRate_s, double& lHeartElastance, double& rHeartElastance);
53  void CardiovascularCircuitAndTransportTest(CardiovascularDriver driverType,
54  double complianceScale, double resistanceScale, double volumeScale, double heartRate_bpm,
55  double sysRes, double sysComp, double aortaRes, double aortaComp, double rightHeartRes, double venaCavaComp,
56  bool balanceBloodGases, bool connectCSF, bool connectTissue, bool expandedKidneys, bool expandedLungs,
57  const std::string& sTestDirectory, const std::string& sTestName, bool breakOutResults);
58  void TuneCardiovascularCircuitTest(SETestSuite& testSuite, const std::string& sTestDirectory, const std::string& sTestName, SEPatient& patient);
59 
60  double m_MeanAortaPressure;
61  double m_MeanCVPressure;
62  double m_Systolic;
63  double m_Diastolic;
64  double m_Pulse;
65  double m_CardiacOutput;
66 
67  public:
69  // Renal //
71  void RenalCircuitAndTransportTest(const std::string& sTestDirectory);
72  void RenalTGFFeedbackTest(const std::string& sTestDirectory);
73  void RenalTGFandUPRFeedbackTest(const std::string& sTestDirectory);
74  void RenalSecretionTest(const std::string& sTestDirectory);
75  void RenalUrinateTest(const std::string& sTestDirectory);
76  protected:
77  enum RenalFeedback { TGF, TGFandUPR };
78  void RenalFeedbackTest(RenalFeedback feedback, const std::string& sTestDirectory, const std::string& sTestName);
79  enum RenalSystems { Secretion, Urinating};
80  void RenalSystemTest(RenalSystems systemtest, const std::string& sTestDirectory, const std::string& sTestName);
81 
82  public:
84  // Respiratory //
86  void RespiratoryCircuitAndTransportTest(const std::string& sTestDirectory);
87  void ExpandedLungsRespiratoryCircuitAndTransportTest(const std::string& sTestDirectory);
88  void RespiratoryDriverTest(const std::string& sTestDirectory);
89  protected:
90  enum RespiratoryConfiguration { RespiratorySolo,
91  ExpandedLungsRespiratorySolo,
92  AnesthesiaMachineSolo,
93  RespiratoryWithAnesthesiaMachine,
94  ExpandedLungsRespiratoryWithAnesthesiaMachine,
95  RespiratoryWithInhaler,
96  ExpandedLungsRespiratoryWithInhaler,
97  RespiratoryWithMechanicalVentilation,
98  ExpandedLungsRespiratoryWithMechanicalVentilation,
99  MechanicalVentilatorSolo,
100  RespiratoryWithMechanicalVentilator,
101  ExpandedLungsRespiratoryWithMechanicalVentilator
102  };
103  void RespiratoryCircuitAndTransportTest(RespiratoryConfiguration config, bool expandedLungs, const std::string& sTestDirectory);
104 
105  public:
107  // Anesthesia Machine //
109  void AnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
110  void RespiratoryWithAnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
111  void ExpandedLungsRespiratoryWithAnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
112  protected:
113  void AnesthesiaMachineCircuitAndTransportTest(RespiratoryConfiguration config, bool expandedLungs, const std::string& sTestDirectory);
114 
115  public:
117  // Inhaler //
119  void RespiratoryWithInhalerCircuitAndTransportTest(const std::string& sTestDirectory);
120  void ExpandedLungsRespiratoryWithInhalerCircuitAndTransportTest(const std::string& sTestDirectory);
121  protected:
122 
123  public:
125  // Mechanical Ventilator //
127  void MechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
128  void RespiratoryWithMechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
129  void ExpandedLungsRespiratoryWithMechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
130  protected:
131  void MechanicalVentilatorCircuitAndTransportTest(RespiratoryConfiguration config, bool expandedLungs, const std::string& sTestDirectory);
132 
133  public:
135  // Mechanical Ventilation //
137  void RespiratoryWithMechanicalVentilationCircuitAndTransportTest(const std::string& sTestDirectory);
138  void ExpandedLungsRespiratoryWithMechanicalVentilationCircuitAndTransportTest(const std::string& sTestDirectory);
139  protected:
140 
141  public:
143  // Environment and Energy //
144  void InternalTemperatureVariableBMRCircuitTest(const std::string& sTestDirectory);
145  void InternalTemperatureVariableSkinCircuitTest(const std::string& sTestDirectory);
146  void InternalTemperatureVariableCoreCircuitTest(const std::string& sTestDirectory);
147  void EnvironmentVariableTemperatureCircuitTest(const std::string& sTestDirectory);
148  void CombinedInternalAndEnvironmentVariableBMRandTemperatureCircuitTest(const std::string& sTestDirectory);
149  void CombinedInternalAndEnvironmentSkinTempDropCircuitTest(const std::string& sTestDirectory);
150  void EnvironmentISO7730ComparisonTest(const std::string& sTestDirectory);
151  protected:
152 
153  public:
155  // Tissue Tests //
157  void DiffusionClearanceExcretionTests(const std::string& rptDirectory);
158  void AlveolarCarbonDioxideDiffusionTest(const std::string& rptDirectory);
159  void AlveolarOxygenDiffusionTest(const std::string& rptDirectory);
160  void InstantPlusSimpleDiffusionTest(const std::string& rptDirectory);
161  void SimpleDiffusionTwoCompartmentTest(const std::string& rptDirectory);
162  void SimpleDiffusionFourCompartmentTest(const std::string& rptDirectory);
163  void SimpleDiffusionHierarchyTest(const std::string& rptDirectory);
164  void FacilitatedDiffusionTest(const std::string& rptDirectory);
165  protected:
166  void DistributeMass(SETestSuite& testSuite);
167  void PerfusionLimitedDiffusionTest(SETestSuite& testSuite);
168  void InstantDiffusionTest(SETestSuite& testSuite);
169  void ActiveTransportTest(SETestSuite& testSuite);
170  void GenericClearanceTest(SETestSuite& testSuite);
171  void GenericExcretionTest(SETestSuite& testSuite);
172 
173  public:
175  // Nervous Tests //
177  void BrainInjuryTest(const std::string& rptDirectory);
178  protected:
179 
180  public:
182  // Acid Base Engine Tests //
184  void FourCompartmentTestSimple(const std::string& sOutputDirectory);
185  void AcidBaseFourCompartmentTest(const std::string& sOutputDirectory);
186  void FiveCompartmentTestWithDiffusion(const std::string& sOutputDirectory);
187  void AcidBaseFourCompartmentTestWithProductionConsumption(const std::string& sOutputDirectory);
188  void AcidBaseFiveCompartmentTestWithDiffusion(const std::string& sOutputDirectory);
189  void AcidBaseFiveCompartmentTestWithProductionConsumptionAndDiffusion(const std::string& sOutputDirectory);
190  protected:
191  void FourCompartmentTest(bool usingAcidBase, bool usingProductionConsumption, bool usingDiffusion, const std::string& sOutputDirectory);
192  bool usingAcidBase;
193  bool usingProductionConsumption;
194  bool usingDiffusion;
195 
196  public:
198  // Acid Base Tests //
200  void AcidBaseMathTest(const std::string& sOutputDirectory);
201  void AcidBaseFeedbackTest(const std::string& sOutputDirectory);
202  void AcidBaseLimitsTest(const std::string& sOutputDirectory);
203  void AcidBaseExtremeTest(const std::string & rptDirectory);
204  void AcidBaseBloodGasTests(const std::string& sOutputDirectory);
205  protected:
206  enum bloodType { ARTERIAL, VENOUS, CAPILLARY, RESPIRATORY_ACIDOSIS, METABOLIC_ALKALOSIS, METABOLIC_ACIDOSIS, RESPIRATORY_ALKALOSIS, CUSTOM };
207  void AcidBaseBloodGasTest(Controller& bg, bloodType compartment, SETestSuite& testSuite);
208 
209  public:
211  // Aerosol Tests //
213  void AerosolTest(const std::string& sOutputDirectory);
214  protected:
215  void SizeIndependentDepositionEfficencyCoefficientsTest(SETestSuite& suite, SESubstance& substance, double expectedMouthCoeff, double expectedCarinaCoeff, double expectedDeadSpaceCoeff, double expectedAlveoliCoeff);
216  void DepositionFractionTest(SETestSuite& suite, SESubstance& substance, double expectedMouthDepFrac, double expectedCarinaDepFrac,
217  double expectedLeftDeadSpaceDepFrac, double expectedLeftAlveoliDepFrac, double expectedRightDeadSpaceDepFrac, double expectedRightAlveoliDepFrac);
218 
219  public:
221  // General Engine Tests //
223  void ReadScenarios(const std::string& sOutputDirectory);
224  void ReuseEngine(const std::string& sOutputDirectory);
225  void SerializationTest(const std::string& sTestDirectory);
226  void SetupPatientTest(const std::string& sTestDirectory);
227 
228  void ConditionCombinations(const std::string& rptDirectory);
229  void SolverSpeedTest(const std::string& sTestDirectory);
230 
231  protected:
232  void InhalerState(PhysiologyEngine* bg, HowToTracker& tracker);
233  void InjectSuccsState(PhysiologyEngine* bg, HowToTracker& tracker, const SESubstance& succs);
234 
235  void SetupPatient(SETestSuite& testSuite, const std::string& sTestDirectory, const std::string& sTestName, SEPatient* patient, SEPatient* expectedPatient, bool expectedPass);
236  bool CheckSetupPatient(SEPatient& setupPatient, SEPatient& expectedPatient, std::vector<std::string>& errs);
237  public:
239  // Black Box Tests //
241  void EmptyBlackBoxTest(const std::string& sOutputDirectory);
242  void ImposeFlowBlackBoxTest(const std::string& sOutputDirectory);
243  void ImposePressureAndFlowBlackBoxTest(const std::string& sOutputDirectory);
244  protected:
245 
246  };
247 END_NAMESPACE_EX
Definition: Logger.h:71
Definition: PhysiologyEngine.h:70
Definition: SEPatient.h:13
Definition: SESubstance.h:15
Definition: SETestManager.h:10
Definition: SETestSuite.h:10
Definition: Logger.h:14

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.