SEScenarioExec.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5#include "cdm/utils/Logger.h"
6#include "cdm/utils/FileUtils.h"
7
8class SEAction;
9class SEScenario;
10class SEScenarioLog;
13
14class CDM_DECL SEScenarioExec : public Loggable
15{
16public:
17 SEScenarioExec(Logger* logger);
18 virtual ~SEScenarioExec();
19
20 virtual void Clear();
21 void Copy(const SEScenarioExec& src);
22
23 eSwitch LogToConsole() const { return m_LogToConsole; }
24 void LogToConsole(eSwitch s) { m_LogToConsole = s; }
25
26 std::string GetDataRootDirectory() const { return m_DataRootDirectory; }
27 void SetDataRootDirectory(const std::string& fn) { m_DataRootDirectory = fn; }
28
29 std::string GetOutputRootDirectory() const { return m_OutputRootDirectory; }
30 void SetOutputRootDirectory(const std::string& d);
31
32 eSwitch OrganizeOutputDirectory() const { return m_OrganizeOutputDirectory; }
33 void OrganizeOutputDirectory(eSwitch s) { m_OrganizeOutputDirectory = s; }
34
35 std::string GetScenarioContent() const { return m_ScenarioContent; }
36 void SetScenarioContent(const std::string& sc)
37 {
38 m_ScenarioContent = sc;
39 m_ScenarioFilename = "";
40 m_ScenarioDirectory = "";
41 m_ScenarioLogFilename = "";
42 m_ScenarioLogDirectory = "";
43 }
44 std::string GetScenarioFilename() const { return m_ScenarioFilename; }
45 void SetScenarioFilename(const std::string& fn)
46 {
47 m_ScenarioContent = "";
48 m_ScenarioFilename = fn;
49 m_ScenarioDirectory = "";
50 m_ScenarioLogFilename = "";
51 m_ScenarioLogDirectory = "";
52 }
53 std::string GetScenarioDirectory() const { return m_ScenarioDirectory; }
54 void SetScenarioDirectory(const std::string& dir)
55 {
56 m_ScenarioContent = "";
57 m_ScenarioFilename = "";
58 m_ScenarioDirectory = dir;
59 m_ScenarioLogFilename = "";
60 m_ScenarioLogDirectory = "";
61 }
62
63 std::string GetScenarioLogFilename() const { return m_ScenarioLogFilename; }
64 void SetScenarioLogFilename(const std::string& fn)
65 {
66 m_ScenarioLogFilename = fn;
67 m_ScenarioLogDirectory = "";
68 m_ScenarioContent = "";
69 m_ScenarioFilename = "";
70 m_ScenarioDirectory = "";
71 }
72 std::string GetScenarioLogDirectory() const { return m_ScenarioLogDirectory; }
73 void SetScenarioLogDirectory(const std::string& dir)
74 {
75 m_ScenarioLogFilename = "";
76 m_ScenarioLogDirectory = dir;
77 m_ScenarioContent = "";
78 m_ScenarioFilename = "";
79 m_ScenarioDirectory = "";
80 }
81
82 std::set<std::string>& GetDataRequestFilesSearch() { return m_DataRequestFilesSearch; }
83 const std::set<std::string>& GetDataRequestFilesSearch() const { return m_DataRequestFilesSearch; }
84
85 eSerializationFormat GetContentFormat() const { return m_ContentFormat; }
86 void SetContentFormat(eSerializationFormat s) { m_ContentFormat = s; }
87
88 int GetThreadCount() const { return m_ThreadCount; }
89 void SetThreadCount(int c) { m_ThreadCount = c; }
90
91 std::string GetEngineConfigurationContent() const { return m_EngineConfigurationContent; }
92 void SetEngineConfigurationContent(const std::string& ecc)
93 {
94 m_EngineConfigurationContent = ecc;
95 m_EngineConfigurationFilename = "";
96 }
97 std::string GetEngineConfigurationFilename() const { return m_EngineConfigurationFilename; }
98 void SetEngineConfigurationFilename(const std::string& fn)
99 {
100 m_EngineConfigurationContent = "";
101 m_EngineConfigurationFilename = fn;
102 }
103
104
105 // These parameters will help debug any serialization issues.
106 // A serialization issue is where get different results from running the same scenario where we
107 // 1. run we run the scenario as is
108 // 2. run the scenario but serialized out and in (after actions, or any time really)
109 // The two generated CSV files should match as well as match the baseline
110 // If they do not, then we are not maintaining state properly to the file and back into the engine
111 // To find serialization issues, uncomment out the AutoSerialization line in the ScenarioVerification.config
112 // Then run the `run ScenarioVerification` command to run all scenarios, have then save out and in after each action
113 // This test will also compare the resulting CSV file to the baseline CSV that did not save in and out
114 // If any scenario fails this comparison... run it through here with this block turned on.
115 // To debug the issue, this block will:
116 // 1. Run one run where we save out states after we apply an action and after the subsequent time step
117 // 2. Run another run where we save out the same times, but we reload the state after the first save
118 // This gives us two states at the same point in time, per action, that we can compare to see what is different
119 // Both times can have differences depending on the bug...good luck!
120
121 eSwitch AutoSerializeAfterActions() const { return m_AutoSerializeAfterActions; }
122 void AutoSerializeAfterActions(eSwitch s) { m_AutoSerializeAfterActions = s; }
123
124 double GetAutoSerializePeriod_s() const { return m_AutoSerializePeriod_s; }
125 void SetAutoSerializePeriod_s(double s) { m_AutoSerializePeriod_s = s; }
126
127 eSwitch TimeStampSerializedStates() const { return m_TimeStampSerializedStates; }
128 void TimeStampSerializedStates(eSwitch s) { m_TimeStampSerializedStates = s; }
129
130 bool SerializeToString(std::string& output, eSerializationFormat m, Logger* logger=nullptr) const;
131 bool SerializeFromString(const std::string& src, eSerializationFormat m, Logger* logger=nullptr);
132
133protected:
134 bool ConvertLog();
135 bool Execute(PhysiologyEngine& pe, SEScenario& sce);
136 bool Process(PhysiologyEngine& pe, SEScenario& sce);
137 bool ProcessActions(PhysiologyEngine& pe, SEScenario& sce);
141 bool ProcessAction(PhysiologyEngine& pe, SEAction& action);
142 void AdvanceEngine(PhysiologyEngine& pe);
143
148
149 // These are computed based on the scenario name
150 std::string m_BaseFilename;
151 std::string m_LogFilename;
153
154 // Note, its up to the deriving exec's to merge configs
155 // The basic config is empty
158
159 std::string m_ScenarioContent;
162
165
166 std::set<std::string> m_DataRequestFilesSearch;
167
168 // For both the EC and Scenrio Content
169 eSerializationFormat m_ContentFormat;
170
172
173 // Settings for serialization
183 std::stringstream m_SerializationOutput;
184 std::stringstream m_SerializationActions;
185};
Definition: Logger.h:23
Definition: Logger.h:71
Definition: PhysiologyEngine.h:58
Definition: SEAction.h:14
Definition: SEEngineConfiguration.h:8
Definition: SEScenarioExec.h:15
void SetScenarioDirectory(const std::string &dir)
Definition: SEScenarioExec.h:54
void AutoSerializeAfterActions(eSwitch s)
Definition: SEScenarioExec.h:122
double m_AutoSerializePeriod_s
Definition: SEScenarioExec.h:179
double GetAutoSerializePeriod_s() const
Definition: SEScenarioExec.h:124
void SetThreadCount(int c)
Definition: SEScenarioExec.h:89
std::string GetScenarioLogFilename() const
Definition: SEScenarioExec.h:63
std::string m_AutoSerializeBaseFilename
Definition: SEScenarioExec.h:176
void SetScenarioLogDirectory(const std::string &dir)
Definition: SEScenarioExec.h:73
int GetThreadCount() const
Definition: SEScenarioExec.h:88
eSwitch m_OrganizeOutputDirectory
Definition: SEScenarioExec.h:147
int m_ThreadCount
Definition: SEScenarioExec.h:171
std::string m_EngineConfigurationFilename
Definition: SEScenarioExec.h:157
void SetEngineConfigurationFilename(const std::string &fn)
Definition: SEScenarioExec.h:98
eSerializationFormat m_ContentFormat
Definition: SEScenarioExec.h:169
std::set< std::string > & GetDataRequestFilesSearch()
Definition: SEScenarioExec.h:82
eSerializationFormat GetContentFormat() const
Definition: SEScenarioExec.h:85
void LogToConsole(eSwitch s)
Definition: SEScenarioExec.h:24
std::string m_BaseFilename
Definition: SEScenarioExec.h:150
void SetScenarioFilename(const std::string &fn)
Definition: SEScenarioExec.h:45
std::string GetDataRootDirectory() const
Definition: SEScenarioExec.h:26
std::string m_DataRootDirectory
Definition: SEScenarioExec.h:145
void SetContentFormat(eSerializationFormat s)
Definition: SEScenarioExec.h:86
std::string m_EngineConfigurationContent
Definition: SEScenarioExec.h:156
std::string m_ScenarioFilename
Definition: SEScenarioExec.h:160
std::string m_AutoSerializeFilenameExt
Definition: SEScenarioExec.h:177
std::stringstream m_SerializationOutput
Definition: SEScenarioExec.h:183
std::string GetEngineConfigurationContent() const
Definition: SEScenarioExec.h:91
std::string GetScenarioDirectory() const
Definition: SEScenarioExec.h:53
eSwitch LogToConsole() const
Definition: SEScenarioExec.h:23
eSwitch TimeStampSerializedStates() const
Definition: SEScenarioExec.h:127
eSwitch OrganizeOutputDirectory() const
Definition: SEScenarioExec.h:32
eSwitch m_LogToConsole
Definition: SEScenarioExec.h:144
void TimeStampSerializedStates(eSwitch s)
Definition: SEScenarioExec.h:128
std::string m_DataRequestCSVFilename
Definition: SEScenarioExec.h:152
eSwitch m_ReloadSerializedState
Definition: SEScenarioExec.h:182
std::string GetScenarioLogDirectory() const
Definition: SEScenarioExec.h:72
std::string m_AutoSerializeFilename
Definition: SEScenarioExec.h:175
eSwitch m_AutoSerializeAfterActions
Definition: SEScenarioExec.h:178
std::string GetScenarioContent() const
Definition: SEScenarioExec.h:35
std::string m_ScenarioLogDirectory
Definition: SEScenarioExec.h:164
const std::set< std::string > & GetDataRequestFilesSearch() const
Definition: SEScenarioExec.h:83
std::string GetScenarioFilename() const
Definition: SEScenarioExec.h:44
eSwitch m_TimeStampSerializedStates
Definition: SEScenarioExec.h:181
std::string m_ScenarioDirectory
Definition: SEScenarioExec.h:161
void SetScenarioContent(const std::string &sc)
Definition: SEScenarioExec.h:36
double m_AutoSerializeTime_s
Definition: SEScenarioExec.h:180
void SetScenarioLogFilename(const std::string &fn)
Definition: SEScenarioExec.h:64
std::set< std::string > m_DataRequestFilesSearch
Definition: SEScenarioExec.h:166
void SetEngineConfigurationContent(const std::string &ecc)
Definition: SEScenarioExec.h:92
std::string GetOutputRootDirectory() const
Definition: SEScenarioExec.h:29
std::string GetEngineConfigurationFilename() const
Definition: SEScenarioExec.h:97
void OrganizeOutputDirectory(eSwitch s)
Definition: SEScenarioExec.h:33
std::string m_LogFilename
Definition: SEScenarioExec.h:151
eSwitch AutoSerializeAfterActions() const
Definition: SEScenarioExec.h:121
void SetAutoSerializePeriod_s(double s)
Definition: SEScenarioExec.h:125
std::string m_ScenarioContent
Definition: SEScenarioExec.h:159
bool m_SaveNextStep
Definition: SEScenarioExec.h:174
void SetDataRootDirectory(const std::string &fn)
Definition: SEScenarioExec.h:27
std::string m_OutputRootDirectory
Definition: SEScenarioExec.h:146
std::stringstream m_SerializationActions
Definition: SEScenarioExec.h:184
std::string m_ScenarioLogFilename
Definition: SEScenarioExec.h:163
Definition: SEScenario.h:12
Definition: SEScenarioLog.h:14

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.