← Documentation
ADS-IDAC Engine 5.0.0
AnalysisInfoContainer.cpp
Go to the documentation of this file.
1// AnalysisInfoContainer.cpp: implementation of the AnalysisInfoContainer class.
2//
4
6#include "../Global/fmodule.h"
7#include "../Global/CheckedIO.h"
8#include "Scheduler.h"
9#include "../Branch/BranchRecord.h"
10#include <boost/serialization/export.hpp>
11#include "../Global/SimulationContext.h"
12#include <boost/archive/binary_oarchive.hpp>
13#include <boost/archive/binary_iarchive.hpp>
14BOOST_CLASS_EXPORT_IMPLEMENT(AnalysisInfoContainer)
15using namespace std;
16
17
19// Construction/Destruction
21
23{
24
25}
26
28{
30}
31
33{
34 auto apd = make_unique<AnalysisProcedureDataContainerUnit>();
35 (*apd) = _apdcu;
36 this->procedure_step_data.push_back(std::move(apd));
37}
38
39void AnalysisInfoContainer::addScanQueueData(double _time, int _operator, KBScannedParameters &_kbsp)
40{
41 int n, priority;
42 string str;
43 auto asd = make_unique<AnalysisScanDataContainerUnit>();
44 asd->setAnalysisScanDataTime(_time);
45 asd->setAnalysisScanDataOperator(_operator);
46 //
47 for (n = 0; n < _kbsp.alarm_scan_list.size(); n++)
48 {
49 str = _kbsp.alarm_scan_list.at(n)->getInfoName();
50 priority = _kbsp.alarm_scan_list.at(n)->getDecision();
51 asd->alarm_name.push_back(str);
52 asd->alarm_priority.push_back(priority);
53 }
54 //
55 for (n = 0; n < _kbsp.component_scan_list.size(); n++)
56 {
57 str = _kbsp.component_scan_list.at(n)->getInfoName();
58 priority = _kbsp.component_scan_list.at(n)->getDecision();
59 asd->component_name.push_back(str);
60 asd->component_priority.push_back(priority);
61 }
62 //
63 for (n = 0; n < _kbsp.support_system_scan_list.size(); n++)
64 {
65 str = _kbsp.support_system_scan_list.at(n)->getInfoName();
66 priority = _kbsp.support_system_scan_list.at(n)->getDecision();
67 asd->support_system_name.push_back(str);
68 asd->support_system_priority.push_back(priority);
69 }
70 //
71 for (n = 0; n < _kbsp.parameter_scan_list.size(); n++)
72 {
73 str = _kbsp.parameter_scan_list.at(n)->getInfoName();
74 priority = _kbsp.parameter_scan_list.at(n)->getDecision();
75 asd->parameter_name.push_back(str);
76 asd->parameter_priority.push_back(priority);
77 }
78 scan_data.push_back(std::move(asd));
79}
80
81void AnalysisInfoContainer::addRecord(string str, int _branch_ID){
82 auto aip = make_unique<AnalysisInfoContainerUnit>(r5pars_.timesno, str, _branch_ID);
83 record.push_back(std::move(aip));
84
85};
86
87void AnalysisInfoContainer::saveInfoToFile(string strDirName, int iSeqNum){
88 string file_name_record = strDirName;
89 string file_name_procedure = strDirName;
90 string file_name_scan_data = strDirName;
91 file_name_record += "Scenario info.txt";
92 file_name_procedure += "Procedure data.txt";
93 file_name_scan_data += "Scan data.txt";
94
95 ofstream fout(file_name_record.c_str(), ios::app);
96 fout << "*********************************************\n"
97 << "*** Event Hightlights for Sequence " << iSeqNum << " ***\n"
98 << "*********************************************\n";
99 for(auto& ai : record){
100 ai->saveInfoToFile(fout);
101 }
102 checked_close(fout, file_name_record);
103
104 ofstream fout1(file_name_procedure.c_str(), ios::app);
105 fout1<< "*********************************************\n"
106 << "*** Event Hightlights for Sequence " << iSeqNum << " ***\n"
107 << "*********************************************\n";
108 // output procedure data units to file
109 fout1<< "Time" << '\t'
110 << "Operator" << '\t'
111 << "Procedure" << '\t'
112 << "Step" << '\t'
113 << "Action" << '\t'
114 << "Relevance" << '\t'
115 << "Time_Load_PIF" << '\t'
116 << "Dynamic_Factor" << '\t'
117 << "Static_Factor" << '\t'
118 << "Skip_Probability" << '\n';
119 //
120 for(auto& apd : this->procedure_step_data){
121 apd->saveProcedureDataInfotoFile(fout1);
122 }
123 checked_close(fout1, file_name_procedure);
124 //
125 //Output scan queue data to file
126 ofstream fout2(file_name_scan_data.c_str(), ios::app);
127 fout2<< "*********************************************\n"
128 << "*** Event Hightlights for Sequence " << iSeqNum << " ***\n"
129 << "*********************************************\n";
130 // output scan data units to file
131 fout2<< "Time" << '\t'
132 << "Operator" << '\t'
133 << "Scan Queue Size" << '\n';
134 //
135 for(auto& asd : this->scan_data){
136 asd->saveScanDataInfotoFile(fout2);
137 }
138 checked_close(fout2, file_name_scan_data);
139}
140
142 string file_name = g_sim.SScheduler.getESDirectory();
144}
145
147 record.clear();
148 this->procedure_step_data.clear();
149 this->scan_data.clear();
150}
152 for(auto& src : _ai.record){
153 auto record_pt = make_unique<AnalysisInfoContainerUnit>();
154 record_pt->copyAnalysisInfoContainerUnit(*src);
155 this->record.push_back(std::move(record_pt));
156 }
157
158 for(auto& src : _ai.procedure_step_data){
159 auto procedure_pt = make_unique<AnalysisProcedureDataContainerUnit>();
160 procedure_pt->copyAnalysisProcedureDataContainerUnit(*src);
161 this->procedure_step_data.push_back(std::move(procedure_pt));
162 }
163
164 for(auto& src : _ai.scan_data) {
165 auto scan_pt = make_unique<AnalysisScanDataContainerUnit>();
166 scan_pt->copyAnalysisScanDataContainerUnit(*src);
167 this->scan_data.push_back(std::move(scan_pt));
168 }
169}
172}
174 this->copyAnalysisInfoContainer(_ai);
175}
176void AnalysisInfoContainer::addRecordWithTime(double _time, string _str){
177 auto aip = make_unique<AnalysisInfoContainerUnit>(_time, _str);
178 record.push_back(std::move(aip));
179}
181 int i, num;
182 num = this->record.size();
183 fout << "AnalysisInfoContainer\n" << num << '\n';
184 for(i = 0; i < num; i++){
185 this->record.at(i)->saveAnalysisInfoContainerUnitToFile(fout);
186 }
187
188 num = this->procedure_step_data.size();
189 fout << "AnalysisProcedureDataContainer\n" << num << '\n';
190 for(i = 0; i < num; i++){
191 this->procedure_step_data.at(i)->saveAnalysisProcedureDataContainerUnittoFile(fout);
192 }
193
194 num = this->scan_data.size();
195 fout << "AnalysisScanDataContainer\n" << num << '\n';
196 for(i = 0; i <num; i++) {
197 this->scan_data.at(i)->saveAnalysisScanDataContainerUnittoFile(fout);
198 }
199
200}
202 int i, num;
203
204 string str;
205 fin >> str >> num;
206 if (str != "AnalysisInfoContainer"){
207 ofstream fout("err messages.txt", ios::app);
208 cout << "AnalysisInfoContainer::retrieveAnalysisInfoContainerFromFile retrieval error in previous function" << endl;
209 fout << r5pars_.timesno << " AnalysisInfoContainer::retrieveAnalysisInfoContainerFromFile retrieval error in previous function\n";
210 fout.close();
211 r5pars_.sim_err = true;
212 g_sim.Branch_center.setTempESMessage("AnalysisInfoContainer::retrieveAnalysisInfoContainerFromFile Prior err.");
214 return;
215 }
216
217 for(i = 0; i < num; i++){
218 auto record_pt = make_unique<AnalysisInfoContainerUnit>();
219 record_pt->retrieveAnalysisInfoContainerUnitFromFile(fin);
220 this->record.push_back(std::move(record_pt));
221 }
222
223 fin >> str >> num;
224 if (str != "AnalysisProcedureDataContainer"){
225 ofstream fout("err messages.txt", ios::app);
226 cout << "AnalysisInfoContainer::retrieveAnalysisProcedureContainerFromFile retrieval error in previous function" << endl;
227 fout << r5pars_.timesno << " AnalysisInfoContainer::retrieveAnalysisProcedureContainerFromFile retrieval error in previous function\n";
228 fout.close();
229 r5pars_.sim_err = true;
230 g_sim.Branch_center.setTempESMessage("AnalysisInfoContainer::retrieveAnalysisProcedureContainerFromFile Prior err.");
232 return;
233 }
234
235 for(i = 0; i< num; i++){
236 auto procedure_pt = make_unique<AnalysisProcedureDataContainerUnit>();
237 procedure_pt->retrieveAnalysisProcedureDataContainerUnitfromFile(fin);
238 this->procedure_step_data.push_back(std::move(procedure_pt));
239 }
240
241 fin >> str >> num;
242 if (str != "AnalysisScanDataContainer"){
243 ofstream fout("err messages.txt", ios::app);
244 cout << "AnalysisInfoContainer::retrieveAnalysisScanDataContainerFromFile retrieval error in previous function" << endl;
245 fout << r5pars_.timesno << " AnalysisInfoContainer::retrieveAnalysisScanDataContainerFromFile retrieval error in previous function\n";
246 fout.close();
247 r5pars_.sim_err = true;
248 g_sim.Branch_center.setTempESMessage("AnalysisInfoContainer::retrieveAnalysisScanDataContainerFromFile Prior err.");
250 return;
251 }
252
253 for(i = 0; i< num; i++){
254 auto scan_data_pt = make_unique<AnalysisScanDataContainerUnit>();
255 scan_data_pt->retrieveAnalysisScanDataContainerUnitfromFile(fin);
256 this->scan_data.push_back(std::move(scan_data_pt));
257 }
258
259}
bool checked_close(std::ofstream &ofs, const std::string &path)
Flush and close an output stream and report a failed write.
Definition: CheckedIO.h:19
Simulation configuration, directory management, CLI options, and truncation control.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
void copyAnalysisInfoContainer(AnalysisInfoContainer &)
void retrieveAnalysisInfoContainerFromFile(std::ifstream &)
void addRecord(std::string, int)
std::vector< std::unique_ptr< AnalysisInfoContainerUnit > > record
void addScanQueueData(double, int, KBScannedParameters &)
void addProcedureData(AnalysisProcedureDataContainerUnit)
void addRecordWithTime(double, std::string)
std::vector< std::unique_ptr< AnalysisProcedureDataContainerUnit > > procedure_step_data
void saveAnalysisInfoContainerToFile(std::ofstream &)
std::vector< std::unique_ptr< AnalysisScanDataContainerUnit > > scan_data
void copyAnalysisInfoContainerForRestart(AnalysisInfoContainer &)
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
int getIDOfRecentGeneratedES()
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
std::vector< std::shared_ptr< BranchExpectedParameterValue > > parameter_scan_list
std::vector< std::shared_ptr< BranchExpectedSupportSystemState > > support_system_scan_list
std::vector< std::shared_ptr< BranchExpectedAlarmState > > alarm_scan_list
std::vector< std::shared_ptr< BranchExpectedComponentState > > component_scan_list
std::string getESDirectory()
Definition: Scheduler.cpp:601
struct @0 r5pars_
Scheduler SScheduler
Simulation scheduling, parses CLI options.
BranchRecord Branch_center
Dynamic event tree state.