BioGearsEngine.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 #pragma once
13 #include <string>
14 #pragma warning(push)
15 // Disabling the waring about STL classes used have
16 // to have a dll interface to be used by clients
17 // From what I have read STL is compiler dependent
18 // But since we are releasing source, you can build
19 // the project neccessary to ensure proper linkage
20 // If anyone else has opinions on this, let me know
21 // abray@ara.com
22 #pragma warning(disable : 4251)
23 #include <biogears/cdm/engine/PhysiologyEngine.h>
24 #include <biogears/engine/Controller/BioGears.h>
25 #pragma warning(pop)
26 
27 namespace biogears {
28 //--------------------------------------------------------------------------------------------------
35 //--------------------------------------------------------------------------------------------------
36 class BIOGEARS_API BioGearsEngine : public PhysiologyEngine, public BioGears {
37 public:
38  //-------------------------------------------------------------------------------
39  BioGearsEngine(Logger* logger);
40 
41  BioGearsEngine(const std::string& logFileName);
42  BioGearsEngine(const char* logFileName);
43  BioGearsEngine(Logger* logger, const std::string& working_dir);
44  BioGearsEngine(Logger* logger, const char* working_dir);
45  BioGearsEngine(const std::string&, const std::string& working_dir);
46  BioGearsEngine(const char*, const char*);
47 
48  virtual ~BioGearsEngine() override;
49 
50  virtual bool LoadState(const char* file, const SEScalarTime* simTime = nullptr) override;
51  virtual bool LoadState(const std::string& file, const SEScalarTime* simTime = nullptr) override;
52  virtual bool LoadState(const CDM::PhysiologyEngineStateData& state, const SEScalarTime* simTime = nullptr) override;
53  virtual std::unique_ptr<CDM::PhysiologyEngineStateData> SaveState(const char* file) override;
54  virtual std::unique_ptr<CDM::PhysiologyEngineStateData> SaveState(const std::string& file = "") override;
55 
56  virtual Logger* GetLogger() override;
57  virtual PhysiologyEngineTrack* GetEngineTrack() override;
58 
59  virtual bool InitializeEngine(const char* patientFile, const std::vector<const SECondition*>* conditions = nullptr, const PhysiologyEngineConfiguration* config = nullptr) override;
60  virtual bool InitializeEngine(const std::string& patientFile, const std::vector<const SECondition*>* conditions = nullptr, const PhysiologyEngineConfiguration* config = nullptr) override;
61  virtual bool InitializeEngine(const SEPatient& patient, const std::vector<const SECondition*>* conditions = nullptr, const PhysiologyEngineConfiguration* config = nullptr) override;
62 
63  virtual const PhysiologyEngineConfiguration* GetConfiguration() override;
64 
65  virtual double GetTimeStep(const TimeUnit& unit) override;
66  virtual double GetSimulationTime(const TimeUnit& unit) override;
67 
68  virtual void AdvanceModelTime(bool appendDataTrack = false) override;
69  virtual void AdvanceModelTime(double time, const TimeUnit& unit = TimeUnit::s, bool appendDataTrack = false) override; //NOTE: Maynot compile on clang will evaluate
70  virtual bool ProcessAction(const SEAction& action) override;
71 
72  virtual SESubstanceManager& GetSubstanceManager() override;
73  virtual void SetEventHandler(SEEventHandler* handler) override;
74  virtual const SEPatient& GetPatient() override;
75  virtual bool GetPatientAssessment(SEPatientAssessment& assessment) override;
76 
77  virtual const SEEnvironment* GetEnvironment() override;
78  virtual const SEBloodChemistrySystem* GetBloodChemistrySystem() override;
79  virtual const SECardiovascularSystem* GetCardiovascularSystem() override;
80  virtual const SEDrugSystem* GetDrugSystem() override;
81  virtual const SEEndocrineSystem* GetEndocrineSystem() override;
82  virtual const SEEnergySystem* GetEnergySystem() override;
83  virtual const SEGastrointestinalSystem* GetGastrointestinalSystem() override;
84  virtual const SEHepaticSystem* GetHepaticSystem() override;
85  virtual const SENervousSystem* GetNervousSystem() override;
86  virtual const SERenalSystem* GetRenalSystem() override;
87  virtual const SERespiratorySystem* GetRespiratorySystem() override;
88  virtual const SETissueSystem* GetTissueSystem() override;
89  virtual const SEAnesthesiaMachine* GetAnesthesiaMachine() override;
90  virtual const SEElectroCardioGram* GetElectroCardioGram() override;
91  virtual const SEInhaler* GetInhaler() override;
92 
93  virtual const SECompartmentManager& GetCompartments() override;
94  virtual Tree<const char*> GetDataRequestGraph() const override;
95 
96  virtual bool IsAutoTracking() const override;
97  virtual void SetAutoTrackFlag(bool flag) override;
98  virtual bool IsTrackingStabilization() const override;
99 
106  virtual void SetTrackStabilizationFlag(bool flag) override;
107 
108 protected:
109  virtual bool IsReady();
110  virtual bool InitializeEngine(const std::vector<const SECondition*>* conditions = nullptr, const PhysiologyEngineConfiguration* config = nullptr);
111 
112  double m_timeStep_remainder = 0.0;
113  double m_timeSinceLastDataTrack = 0.0;
116 #pragma warning(push,0)
117  std::stringstream m_ss;
118 #pragma warning(pop)
119 
120  bool m_isAutoTracking = true;
121  bool m_areTrackingStabilization = false;
122 
123 };
124 }
PhysiologyEngineTrack m_EngineTrack
Definition: BioGearsEngine.h:115
Class corresponding to the PhysiologyEngineStateData schema type.
Definition: EngineState.hxx:692
This is the implementation of the PhysiologyEngine interface for the biogears engines.
Definition: BioGearsEngine.h:36
Definition: SENervousSystem.h:25
Definition: SEEndocrineSystem.h:32
Definition: SEElectroCardioGram.h:21
Definition: SEAction.h:22
std::stringstream m_ss
Definition: BioGearsEngine.h:117
Definition: SECompartmentManager.h:32
Data formed at a level of a clinicians report. This is high level data, such as a mean or generalized...
Definition: SEPatientAssessment.h:25
Definition: SEPatient.h:48
Definition: SEBloodChemistrySystem.h:41
Definition: SETissueSystem.h:30
Definition: Logger.h:75
SEEventHandler * m_EventHandler
Definition: BioGearsEngine.h:114
Definition: PhysiologyEngine.h:68
Definition: SEScalarTime.h:37
Definition: SEScalarTime.h:18
Definition: SECardiovascularSystem.h:35
Definition: SEGastrointestinalSystem.h:26
Definition: PhysiologyEngineTrack.h:79
static const TimeUnit s
Definition: SEScalarTime.h:30
Definition: SEHepaticSystem.h:23
Definition: SERespiratorySystem.h:32
Definition: SEEnergySystem.h:32
Definition: SEAnesthesiaMachine.h:36
Definition: SEDrugSystem.h:35
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
Definition: SEInhaler.h:29
Definition: SESubstanceManager.h:23
Definition: SEElectricalCircuit.h:18
Definition: SEEventHandler.h:23
Definition: SEEnvironment.h:33
Definition: SERenalSystem.h:42
Definition: PhysiologyEngineConfiguration.h:28