← Documentation
ADS-IDAC Engine 5.0.0
ProcedureStepUnit.cpp
Go to the documentation of this file.
1// ProcedureStepUnit.cpp: implementation of the ProcedureStepUnit class.
2//
4
5#include "ProcedureStepUnit.h"
6#include <sstream>
7#include <boost/serialization/export.hpp>
8#include <boost/archive/binary_oarchive.hpp>
9#include <boost/archive/binary_iarchive.hpp>
10BOOST_CLASS_EXPORT_IMPLEMENT(ProcedureStepUnit)
11#include "ProcedureExpectedAlarmStateUnit.h"
15#include "../ControlPanel/ControlPanel.h"
16#include "../Crew/OperatorDM.h"
17#include "../Crew/OperatorAT.h"
18#include "Procedures.h"
20#include "../Global/SimulationContext.h"
21using namespace std;
22
23
25// Construction/Destruction
27
34}
36}
37
39 string _action_name,
41 double multiplier = 1.0;
42 double time_load_PIF, time_factor;
43 double action_relevance, relevance_factor;
44 double dynamic_multiplier = 1.0;
45 //
46 // get operator specific dynamic factors
47 switch (_operator) {
49 action_relevance = g_sim.Decision_Maker.checkItemRelevanceToCurrentDiagnosis(_action_name);
50 break;
52 action_relevance = g_sim.Action_Taker.checkItemRelevanceToCurrentDiagnosis(_action_name);
53 break;
54 default: break;
55 }
56 //
57 // calculate relevance factor
58 if (action_relevance > 0.0) {
59 relevance_factor = 10.0 * pow(10.0, -2.0 * action_relevance);
60 relevance_factor = fmin(relevance_factor, 10.0);
61 relevance_factor = fmax(relevance_factor, 0.1);
62 } else {
63 relevance_factor = 10.0;
64 }
65 //
66 // calculate time constrained load factor
67 if (time_load_PIF > 1.0) {
68 time_factor = time_load_PIF;
69 time_factor = fmin(time_factor, 10.0);
70 time_factor = fmax(time_factor, 1.0);
71 } else {
72 time_factor = pow(10.0, time_load_PIF - 1.0);
73 time_factor = fmin(time_factor, 1.0);
74 time_factor = fmax(time_factor, 0.1);
75 }
76
77 dynamic_multiplier = relevance_factor * time_factor;
78 dynamic_multiplier = fmin(dynamic_multiplier, 100.0);
79 dynamic_multiplier = fmax(dynamic_multiplier, 0.01);
80 //
81 _apdcu.setActionRelevance(relevance_factor);
82 _apdcu.setTimePIF(time_factor);
83 _apdcu.setDynamicMultiplier(dynamic_multiplier);
84 //
85 return dynamic_multiplier;
86}
87
88double ProcedureStepUnit::calculateAdjustedSkipProbability(double _skip, double _psf) {
89 double adjusted_skip_prob;
90 _psf = fmax(_psf, 0.01); // limit minimum _psf value
91 _psf = fmin(_psf, 500.0); // limit maximum _psf value
92 if (_psf > 1.0) { // calculate adjusted skip probability - Based on SPAR-H method in NUREG/CR-6883
93 adjusted_skip_prob = _skip * _psf / (_skip * (_psf - 1.0) + 1.0);
94 } else {
95 adjusted_skip_prob = _skip * _psf;
96 }
97 return adjusted_skip_prob;
98}
99
101 int n_return;
102 DisplayType n_temp;
103 string sub_str;
104 SystemDisplay *sd_pt;
105 map<string, SystemAlarm *>::iterator alarm_map_itr;
106 map<string, SystemDisplay *>::iterator display_map_itr;
107 map<string, SystemControl *>::iterator control_map_itr;
108 n_return = sim::State::Unknown;
109 alarm_map_itr = g_sim.Indicator.alarms.alarm_map.find(_object_name);
110 if (alarm_map_itr != g_sim.Indicator.alarms.alarm_map.end()) {//check whether is an alarm
111 n_return = sim::Comm::AlarmState;
112 return n_return;
113 }
114 display_map_itr = g_sim.Indicator.indicators.display_map.find(_object_name);
115 if (display_map_itr
116 != g_sim.Indicator.indicators.display_map.end()) {//check wether is a control panel component stat eor parameter value
117 sd_pt = display_map_itr->second;
118 n_temp = sd_pt->getTypeOfDisplay();
119 if (n_temp == DisplayType::ComponentState) {
120 n_return = sim::Comm::ComponentState;
121 } else if (n_temp == DisplayType::SupportSystemState) {
123 } else if (n_temp == DisplayType::ParameterValue || n_temp == DisplayType::HeatStructure
124 || n_temp == DisplayType::ParameterTrend) {
125 n_return = sim::Comm::ParameterValue;
126 }
127 //
128 else {
129 ofstream fout("err messages.txt", ios::app);
130 cout << "ProcedureStepUnit::checkForTypeOfExpectation obj: " << _object_name << " Type of display:" << static_cast<int>(n_temp)
131 << " cannot be recognized" << endl;
132 fout << r5pars_.timesno << " ProcedureStepUnit::checkForTypeOfExpectation obj: " << _object_name
133 << " Type of display:" << static_cast<int>(n_temp) << " cannot be recognized\n";
134 fout.close();
135 r5pars_.sim_err = true;
136 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::checkForTypeOfExpectation err.");
138 }
139 return n_return;
140 }
141 if (_object_name == "Mental_Belief") {
142 n_return = sim::Branch::MentalBelief;
143 } else if (_object_name == "Parameter_Difference") {
145 } else {
146 ofstream fout("err messages.txt", ios::app);
147 cout << "ProcedureStepUnit::checkForTypeOfExpectation: Obj_name: " << _object_name << " cannot be recognized"
148 << endl;
149 fout << r5pars_.timesno << " ProcedureStepUnit::checkForTypeOfExpectation: Obj_name: " << _object_name
150 << " cannot be recognized\n";
151 fout.close();
152 r5pars_.sim_err = true;
153 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::checkForTypeOfExpectation err.");
155 }
156 return n_return;
157}
168}
170 bool b_return;
171 map<string, SystemControl *>::iterator control_map_itr;
172 control_map_itr = g_sim.Indicator.controls.control_map.find(_object_name);
173 if (control_map_itr != g_sim.Indicator.controls.control_map.end()) {
174 b_return = true;
175 } else {
176 b_return = false;
177 }
178 return b_return;
179}
183 int n_expectation;
184 n_expectation = this->readInfofromFileAction(fin);
186 this->readInfofromFileExpectation(fin, n_expectation);
187 if (this->readInfoFromFileNonResponseExit(fin) == false) { return false; }
188 }
189 return true;
190}
192 string str_obj;
193 int n_expectation, obj_type;
194 double minimum_time, alpha_weibull, beta_weibull, act_value;
195 double a_beta, b_beta;
196 bool is_a_maneuver_action = false;
197 string sub_action_name, control_parameter_name;
198 n_expectation = 0;
199 //action body
200 fin >> str_obj;
201 if (str_obj == "0") {//procedure transfer
202 action = make_unique<ProcedureActionUnit>();
203 action->setInfoName("PROCEDURE_TRANSFER");
205 return n_expectation;
206 } else if (str_obj == "Do_And_Return") {//need to verify
207 mental_procedure = make_unique<ProcedureStepInfo>();
208 mental_procedure->readInfoFromFile(fin);
210 } else if (str_obj == "SCAN") { //add parameter to scan queue
211 scanned_parameter = make_unique<ProcedureScannedParameterUnit>();
212 n_expectation = scanned_parameter->readInfoFromFile(fin);
214 return n_expectation;
215 } else {
216 action = make_unique<ProcedureActionUnit>();
217 fin >> obj_type;
218 if (obj_type == sim::ControlAction::ParameterControl) {
219 fin >> minimum_time >> alpha_weibull >> beta_weibull
220 >> control_parameter_name
221 >> a_beta >> b_beta >> n_expectation;
222 action->setParameterName(control_parameter_name);
224 } else {
225 // obj_type is of type sim::ControlAction::Additive, sim::Action::Action, or sim::Branch::Verify
226 fin >> minimum_time >> alpha_weibull >> beta_weibull
227 >> act_value
228 >> a_beta >> b_beta >> n_expectation;
229 if (str_obj.size() > 9) {
230 sub_action_name = str_obj.substr(0, 9);
231 if (sub_action_name == "MANEUVER_") {
232 is_a_maneuver_action = true;
233 }
234 }
235 if (checkIfIsChangeSystemAction(str_obj) && obj_type != sim::Branch::Verify) {
236 action->setControlValue(act_value);
237 if (obj_type == sim::ControlAction::Additive) {
239 } else {
241 }
242 } else if (is_a_maneuver_action) {
243 action->setControlValue(act_value);
245 }
246 //else if (obj_type == sim::ControlAction::ParameterScan) {
247 // action->setControlValue(act_value); //control value is priority for scanned parameter
248 // type_of_action = sim::ControlAction::ParameterScan;
249 //}
250 else {
251 //
253 }
254 }
255 //
256 // set control name
257
258 action->setInfoName(str_obj);
259 //
260 // set timing parameters (three parameter Weibull Distribution)
261 action->setT_Minimum(minimum_time);
262 action->setAlpha_Weibull(alpha_weibull);
263 action->setBeta_Weibull(beta_weibull);
264 //
265 // set Beta Distribution parameters for skipped steps
266 action->setAlpha_Parameter(a_beta);
267 action->setBeta_Parameter(b_beta);
268 //
269 }
270 return n_expectation;
271}
272void ProcedureStepUnit::readInfofromFileExpectation(ifstream &fin, int n_expectation) {
273 string str_obj;
274 int obj_type, i_temp;
280 ExpectationORUnit *exp_or_pt;
283 ExpectationElement *exp_pt;
284
285//
286 for (i_temp = 0; i_temp < n_expectation; i_temp++) {
287 auto exp_or_uptr = make_unique<ExpectationORUnit>();
288 exp_or_pt = exp_or_uptr.get();
289 expectation.push_back(std::move(exp_or_uptr));
290 do {
291 fin >> str_obj;
292 obj_type = this->checkForTypeOfExpectation(str_obj);
293 if (obj_type == sim::Comm::AlarmState) {
294 alarm_pt = new ProcedureExpectedAlarmStateUnit();
295 alarm_pt->readInfoFromFileWithoutInfoName(fin);
296 alarm_pt->setInfoName(str_obj);
297 alarm_pt->setTypeOfExpectation(obj_type);
298 exp_pt = (ExpectationElement *) alarm_pt;
299 or_pt = (ProcedureExpectORLink *) alarm_pt;
300 exp_or_pt->add(exp_pt);
301 } else if (obj_type == sim::Comm::ComponentState) {
304 comp_pt->setInfoName(str_obj);
305 comp_pt->setTypeOfExpectation(obj_type);
306 exp_pt = (ExpectationElement *) comp_pt;
307 or_pt = (ProcedureExpectORLink *) comp_pt;
308 exp_or_pt->add(exp_pt);
309 } else if (obj_type == sim::Comm::SupportSystemState) {
312 ss_pt->setInfoName(str_obj);
313 ss_pt->setTypeOfExpectation(obj_type);
314 exp_pt = (ExpectationElement *) ss_pt;
315 or_pt = (ProcedureExpectORLink *) ss_pt;
316 exp_or_pt->add(exp_pt);
317 } else if (obj_type == sim::Comm::ParameterValue || obj_type == sim::Comm::ParameterTrend) {
318 par_val_pt = new ProcedureExpectedParameterValueUnit();
319 par_val_pt->readInfoFromFileWithoutInfoName(fin);
320 par_val_pt->setInfoName(str_obj);
321 par_val_pt->setTypeOfExpectation(obj_type);
322 exp_pt = (ExpectationElement *) par_val_pt;
323 or_pt = (ProcedureExpectORLink *) par_val_pt;
324 exp_or_pt->add(exp_pt);
325 } else if (obj_type == sim::Branch::MentalBelief) {
326 mp_pt = new ExpectedMentalBelief();
327 mp_pt->readInfoFromFile(fin);
328 mp_pt->setTypeOfExpectation(obj_type);
329 exp_pt = (ExpectationElement *) mp_pt;
330 or_pt = (ProcedureExpectORLink *) mp_pt;
331 exp_or_pt->add(exp_pt);
332 } else if (obj_type == sim::Comm::ParameterDifference) {
334 par_dif_pt->readInfoFromFile(fin);
335 par_dif_pt->setTypeOfExpectation(obj_type);
336 exp_pt = (ExpectationElement *) par_dif_pt;
337 or_pt = (ProcedureExpectORLink *) par_dif_pt;
338 exp_or_pt->add(exp_pt);
339 } else {//parmeter trend and parameter state are not provided currently
340 ofstream fout("err messages.txt", ios::app);
341 cout << "ProcedureStepUnit::readInfofromFile: expectation body obj_type:" << obj_type << " cannot be recognized"
342 << endl;
343 fout << r5pars_.timesno << " ProcedureStepUnit::readInfofromFile: expectation body obj_type:" << obj_type
344 << " cannot be recognized\n";
345 fout.close();
346 r5pars_.sim_err = true;
347 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::readInfofromFile err.");
349 }
350 } while (or_pt->getORLink() == sim::Bool::Yes);
351 }
352}
354 string str_obj, str1, str2, control_parameter_name;
355 double minimum_time, alpha_weibull, beta_weibull, act_value;
356 double a_beta, b_beta;
357 int obj_type, n;
358 ProcedureStepInfo *procedure_pt;
359 ProcedureActionUnit *act_pt;
361 fin >> obj_type;
363 if (obj_type == sim::Branch::Procedure) {
364 procedure_pt = new ProcedureStepInfo();
365 fin >> str1 >> str2 >> a_beta >> b_beta;
366 procedure_pt->setProcedureName(str1);
367 procedure_pt->setStepName(str2);
368 //
369 // set Beta Distribution parameters for skipped steps
370 procedure_pt->setAlpha_Parameter(a_beta);
371 procedure_pt->setBeta_Parameter(b_beta);
372 //
373 non_response_procedure.reset(procedure_pt);
374 } else if (obj_type == sim::Action::Action || obj_type == sim::ControlAction::Additive) {
375 act_pt = new ProcedureActionUnit();
376 fin >> str_obj >> n >> minimum_time >> alpha_weibull >> beta_weibull
377 >> act_value >> a_beta >> b_beta;
378 act_pt->setInfoName(str_obj);
379 //act_pt->setBothTotalTimeRequiredAndRemainingTime(remaining_time);
380 //
381 // set timing parameters (three parameter Weibull Distribution)
382 act_pt->setT_Minimum(minimum_time);
383 act_pt->setAlpha_Weibull(alpha_weibull);
384 act_pt->setBeta_Weibull(beta_weibull);
385 //
386 // set Beta Distribution parameters for skipped steps
387 act_pt->setAlpha_Parameter(a_beta);
388 act_pt->setBeta_Parameter(b_beta);
389 //
390 act_pt->setControlValue(act_value);
391 non_response_action_unit.reset(act_pt);
392 } else if (obj_type == sim::ControlAction::ParameterControl) {
393 act_pt = new ProcedureActionUnit();
394 fin >> str_obj
395 >> minimum_time >> alpha_weibull >> beta_weibull
396 >> control_parameter_name
397 >> a_beta >> b_beta;
398 act_pt->setInfoName(str_obj);
399 //
400 // set timing parameters (three parameter Weibull Distribution)
401 act_pt->setT_Minimum(minimum_time);
402 act_pt->setAlpha_Weibull(alpha_weibull);
403 act_pt->setBeta_Weibull(beta_weibull);
404 //
405 // set Beta Distribution parameters for skipped steps
406 act_pt->setAlpha_Parameter(a_beta);
407 act_pt->setBeta_Parameter(b_beta);
408 //
409 act_pt->setParameterName(control_parameter_name);
410 non_response_action_unit.reset(act_pt);
411 } else if (obj_type == sim::ControlAction::ParameterScan) {
412 int parameter_type, priority;
413 scan_par_pt = new ProcedureScannedParameterUnit();
414 fin >> str_obj
415 >> parameter_type
416 >> priority
417 >> minimum_time >> alpha_weibull >> beta_weibull
418 >> a_beta >> b_beta;
419 scan_par_pt->setInfoName(str_obj);
420 scan_par_pt->setTypeOfScannedParameter(parameter_type);
421 scan_par_pt->setScanPriority(priority);
422 //set timing parameters
423 scan_par_pt->setT_Minimum(minimum_time);
424 scan_par_pt->setAlpha_Weibull(alpha_weibull);
425 scan_par_pt->setBeta_Weibull(beta_weibull);
426 //set beta distribution parameters
427 scan_par_pt->setAlpha_Parameter(a_beta);
428 scan_par_pt->setBeta_Parameter(b_beta);
429 //
430 non_response_scan.reset(scan_par_pt);
431 } else if (obj_type == sim::ControlAction::Stop) { //stop current scenario
432 } else if (obj_type == sim::Strategy::Advise) { //ask for advice
433 } else if (obj_type == sim::None) { //no non-response exit
434 } else {
435 ofstream fout("err messages.txt", ios::app);
436 cout << "ProcedureStepUnit::readinfoFromFileNonResponseExit obj_type:" << obj_type << " cannot be recognized"
437 << endl;
438 fout << r5pars_.timesno << " ProcedureStepUnit::readinfoFromFileNonResponseExit exit obj_type:" << obj_type
439 << " cannot be recognized\n";
440 fout.close();
441 r5pars_.sim_err = true;
442 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::readInfofromFile err.");
444 return false;
445 }
446 return true;
447}
449 ProcedureStepInfo *procedure_pt, *procedure_pt1;
450 ProcedureActionUnit *act_pt, *act_pt1;
451 ProcedureScannedParameterUnit *scan_pt, *scan_pt1;
452 this->copyStateOfActivation(_psu);
458 if (_psu.getActionPtr() != 0) {
459 action = make_unique<ProcedureActionUnit>();
460 action->copyProcedureActionUnit(*_psu.action);
461 }
462 if (_psu.getMentalProcedurePtr() != 0) {
463 mental_procedure = make_unique<ProcedureStepInfo>();
464 mental_procedure->copyProcedureStepInfo(*_psu.mental_procedure);
465 }
466 if (_psu.getScannedParameterUnitPtr() != 0) {
467 scanned_parameter = make_unique<ProcedureScannedParameterUnit>();
468 scanned_parameter->copyProcedureScannedParameterUnit(*_psu.scanned_parameter);
469 }
470 if (_psu.hasNonResponseAction()) {
472 procedure_pt = new ProcedureStepInfo();
473 procedure_pt1 = _psu.non_response_procedure.get();
474 procedure_pt->copyProcedureStepInfo(*procedure_pt1);
475 non_response_procedure.reset(procedure_pt);
478 act_pt = new ProcedureActionUnit();
479 act_pt1 = _psu.non_response_action_unit.get();
480 act_pt->copyProcedureActionUnit(*act_pt1);
481 non_response_action_unit.reset(act_pt);
483 scan_pt = new ProcedureScannedParameterUnit();
484 scan_pt1 = _psu.non_response_scan.get();
485 scan_pt->copyProcedureScannedParameterUnit(*scan_pt1);
486 non_response_scan.reset(scan_pt);
487 } else {}
488 }
489 for (auto& src : _psu.expectation) {
490 auto ptr = make_unique<ExpectationORUnit>();
491 ptr->copyExpectationORUnit(*src);
492 expectation.push_back(std::move(ptr));
493 }
495};
496
499
501 ShortTermMemory &_stm,
502 int _entry,
503 string message,
504 string _procedure_name,
505 string _step_name,
506 double _skip_threshold,
507 double _static_HEP_factor) {
508 bool branch_generated = false;
509 bool is_a_mental_procedure = false;
510 bool next_is_a_mental_procedure = false;
511 bool next_is_a_functional_recovery_guideline = false;
512 bool generate_control_branches = false;
513 int i, j, num_of_time_branches, num_of_control_branches;
514 AnalysisProcedureDataContainerUnit procedure_step_info;
515 string str, sub_str, str_prob;
516 double control_value, skip_probability, control_probability;
517 double delta_cdf, cdf_lower, cdf_upper;
518 double time = 0.0;
519 double HEP_multiplier = 1.0;
520 //double actual_time_for_action;
521 BranchProcedureStep *b_procedure_pt = 0;
524 SystemControl *sc_ptr = 0;
525 ControlValue *control_value_ptr = 0;
526 MentalParameterValue *mpv_pt = 0;
527 int receiver = sim::Operator::OAT;
528 if (_operator.getTypeOfOperator() == sim::Operator::OAT) receiver = sim::Source::Plant;
529 BranchAction *b_action_pt;
530 BranchScannedParameter *b_scan_pt;
532 str = _procedure_name;
533 if (str.size() > 5) {
534 sub_str = str.substr(0, 5);
535 if (sub_str == "MPBG_") {
536 is_a_mental_procedure = true;
537 }
538 }
541 // calculate probability of skipping step
542 skip_probability = action->calculateProbability(); // calculate probability of skipping a step
543 //
544 HEP_multiplier *= this->calculateDynamicHEPMultiplier(_operator.getTypeOfOperator(), action->getInfoName(), procedure_step_info);
545 HEP_multiplier *= _static_HEP_factor;
546 skip_probability = this->calculateAdjustedSkipProbability(skip_probability, HEP_multiplier);
547 // Use the Dynamic BBN
548 skip_probability = _operator.hfe_bbn.getProcedureStepFailureProbability();
549 procedure_step_info.setTime(r5pars_.timesno);
550 procedure_step_info.setOperatorID(_operator.getTypeOfOperator());
551 procedure_step_info.setActionName(action->getInfoName());
552 procedure_step_info.setProcedureName(_procedure_name);
553 procedure_step_info.setProcedureStep(_step_name);
554 procedure_step_info.setStaticMultiplier(_static_HEP_factor);
555 procedure_step_info.setSkipProbability(skip_probability);
556 g_sim.Aux_info.addProcedureData(procedure_step_info);
557 //
558// if (skip_probability < _skip_threshold) // reset probability to 1.0 if step is not skipped
559// {
560// skip_probability = 0.0;
561// }
562 // determine if multiple time branches will be generated
564 _step_name,
565 action->getInfoName());
566 if (tu_pt != 0) {
567 num_of_time_branches = tu_pt->getNumOfBranches();
568 } else {
569 num_of_time_branches = 1;
570 }
571 //
572 // determine if muliple control value branches will be generated
574 _step_name,
575 action->getInfoName());
576 if (cvu_pt != 0) {
577 num_of_control_branches = cvu_pt->getNumberOfBranches();
578 generate_control_branches = true;
579 } else {
580 num_of_control_branches = 1;
581 }
582 //
583 for (j = 0; j < num_of_control_branches; j++) {
584 if (generate_control_branches) {
585 control_probability = cvu_pt->probabilities.at(j);
586 } else {
587 control_probability = 1.0;
588 }
589 // set control value
590 if (type_of_action == sim::ControlAction::ParameterControl) // set control equal to perceived parameter value
591 {
592 mpv_pt = _stm.perceived_info.checkExistanceOfPerceivedParameterValue(action->getParameterName());
593 sc_ptr = g_sim.Indicator.controls.getControlFromMap(action->getInfoName());
594 if (sc_ptr != 0) {
595 control_value_ptr = (ControlValue *) sc_ptr;
596 if (mpv_pt != 0 && sc_ptr->getTypeOfControl() == DisplayType::ControlValue) {
597 if (generate_control_branches) {
598 control_value = cvu_pt->control_values.at(j);
599 } else {
600 control_value = mpv_pt->getObservedParameterValue();
601 }
602 control_value = fmin(control_value, control_value_ptr->getValueForOnOrFullyOpen());
603 control_value = fmax(control_value, control_value_ptr->getValueForOffOrFullyClose());
604 } else // control parameter has not been perceived, do not change control value
605 {
606 control_value = control_value_ptr->getControlValue();
607 //
608 ofstream fout("err messages.txt", ios::app);
609 cout << "ProcedureStepUnit::executeAction - Parameter: " << action->getParameterName()
610 << " can not be recognized" << endl;
611 fout << r5pars_.timesno << " ProcedureStepUnit::executeAction - Parameter: " << action->getParameterName()
612 << " can not be recognized\n";
613 fout.close();
614 }
615 } else {
616 ofstream fout("err messages.txt", ios::app);
617 cout << "ProcedureStepUnit::executeAction - Control: " << action->getInfoName() << " can not be recognized"
618 << endl;
619 fout << r5pars_.timesno << " ProcedureStepUnit::executeAction - Control: " << action->getInfoName()
620 << " can not be recognized\n";
621 fout.close();
622 r5pars_.sim_err = true;
623 g_sim.Branch_center.setTempESMessage("DiagnosisActionModule::onceThroughProcessForReasoningStrategy error");
625 }
626 } else {
627 if (generate_control_branches) {
628 control_value = cvu_pt->control_values.at(j);
629 } else {
630 control_value = action->getControlValue();
631 }
632 sc_ptr = g_sim.Indicator.controls.getControlFromMap(action->getInfoName());
634 control_value_ptr = (ControlValue *) sc_ptr;
635 // Displayed control value may differ from actual control value due to perception filtering
636 // control_value = control_value_ptr->getDisplayedControlValue();
637 control_value += control_value_ptr->getControlValue();
638 //control_value += action->getControlValue();
639 // verify that control value does not exceeed component control range
640 control_value = fmin(control_value, control_value_ptr->getValueForOnOrFullyOpen());
641 control_value = fmax(control_value, control_value_ptr->getValueForOffOrFullyClose());
642 }
643 }
644 //
645 //
646 delta_cdf = 1.0 / (double) num_of_time_branches;
647 for (i = 0; i < num_of_time_branches; i++) {
648 b_action_pt = new BranchAction();
649 b_action_pt->setActionName(action->getInfoName());
650 b_action_pt->setControlValue(control_value);
651 if (type_of_action == sim::State::Control && is_a_mental_procedure) {//maneuver control initiated from a mental procedure
652 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
653 } else {//maneuver control initiated by a paper procedure or regular actions
654 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), receiver);
655 }
656 //
657 // calculate time required to perform action
658 cdf_lower = delta_cdf * ((double) i);
659 cdf_upper = delta_cdf * ((double) (i + 1));
660 time = action->calculateMeanRequiredTime(cdf_lower, cdf_upper);
661 b_action_pt->setActionTime(time);
662 if (_operator.getTypeOfOperator() == sim::Operator::ODM && b_action_pt->getIntendedReceiver() == sim::Operator::OAT) {
663 // set current time to sim::Operator::ODM communication time
664 // the action_time will be used by the BranchProbability module to set plant interaction time
666 }
667 b_action_pt->setTimerAndProbability(time,
668 control_probability * (1.0 - skip_probability)
669 / static_cast<double> (num_of_time_branches));
670 b_action_pt->setMessage(message);
671 b_action_pt->setTypeOfPauseActivity(_entry);
672 g_sim.Branch_center.addAction(_operator.getTypeOfOperator(), b_action_pt);
673 //
674 //
675 branch_generated = true;
676 } // end time branch "for loop"
677 } // end control value branch "for loop"
678 // skip procedure step
679 // check to verify probability for skipping is above threshold to minimize branch generation
680 if (skip_probability > _skip_threshold) {
681 b_action_pt = new BranchAction();
682 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
683 //
684 // set time delay for skipped step to 1.0 second
685 b_action_pt->setTimerAndProbability(1.0, skip_probability);
686 str = "WAITING:_Skipped_Step_" + action->getInfoName();
687 b_action_pt->setActionName(str);
688 std::ostringstream streamObj;
689 streamObj << skip_probability;
690 message += "_(skip probability_=" + streamObj.str() + "):_";
691 b_action_pt->setMessage(message);
693 b_action_pt->setTypeOfPauseActivity(_entry);
694 g_sim.Branch_center.addAction(_operator.getTypeOfOperator(), b_action_pt);
695 branch_generated = true;
696 }
697 } else if (type_of_action == sim::Branch::MentalBelief) { // sub-module has not been verified
698 //
699 if (_entry == sim::Strategy::FollowInstruction) {
701 }
702 // determine if next procedure is a mental procedure
703 if (mental_procedure->getProcedureName().size() > 5) {
704 sub_str = mental_procedure->getProcedureName().substr(0, 5);
705 if (sub_str == "MPBG_") {
706 next_is_a_mental_procedure = true;
707 }
708 }
709 //
710 // determine if next procedure step is a functional recovery guideline
711 if (mental_procedure->getProcedureName().size() > 4) {
712 sub_str = mental_procedure->getProcedureName().substr(0, 4);
713 if (sub_str == "FRG_") {
714 next_is_a_functional_recovery_guideline = true;
715 }
716 }
717 //
718 if ((_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::FollowProcedure && !next_is_a_mental_procedure) ||
719 (_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::InstinctiveResponse && !next_is_a_mental_procedure) ||
720 (_entry == sim::Strategy::InstinctiveResponse && next_is_a_mental_procedure)) {
721 b_procedure_pt = new BranchProcedureStep();
722 b_procedure_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
723 // set time delay for procedure transfer
724 if (mental_procedure->getProcedureName() == _procedure_name) {
725 time = g_sim.All_procedure.getStepTransferTime(); // transfer within same procedure
726 } else {
727 time = g_sim.All_procedure.getProcedureTransferTime(); // transfer to a new procedure
728 }
729 b_procedure_pt->setTimerAndProbability(time, 1.0 - _operator.hfe_bbn.getProcedureTransferFailureProbability());
730 b_procedure_pt->setProcedureName(mental_procedure->getProcedureName());
731 b_procedure_pt->setStepName(mental_procedure->getStepName());
732 b_procedure_pt->setLastProcedureName(_procedure_name);
733 b_procedure_pt->setLastStepName(_step_name);
734 // b_procedure_step_pt->setTypeOfPauseActivity(_entry);
735 if (_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::FollowProcedure && !next_is_a_mental_procedure) {
736 b_procedure_pt->setTypeOfPauseActivity(_entry);
737 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_pt);
738 branch_generated = true;
739 } else if (_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::InstinctiveResponse && !next_is_a_mental_procedure) {
741 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_pt);
743 } else if (_entry == sim::Strategy::InstinctiveResponse && next_is_a_mental_procedure) {
744 b_procedure_pt->setTypeOfPauseActivity(_entry);
746 branch_generated = true;
747 }
748 } else {
749 //illegal procedure transfer
750 ofstream fout("err messages.txt", ios::app);
751 cout << " " << r5pars_.timesno
752 << " ProcedureStepUnit::executeAction: Illegal procedure transfer operation in " << _procedure_name << ' '
753 << _step_name << endl;
754 fout << r5pars_.timesno << " ProcedureStepUnit::executeAction: Illegal procedure transfer operation in "
755 << _procedure_name << ' ' << _step_name << "\n";
756 fout.close();
757 }
758 //
759 return branch_generated;
761 skip_probability = scanned_parameter->calculateProbability(); // calculate probability of skipping a step
762 //
763 HEP_multiplier *=
764 this->calculateDynamicHEPMultiplier(_operator.getTypeOfOperator(), scanned_parameter->getInfoName(), procedure_step_info);
765 HEP_multiplier *= _static_HEP_factor;
766 skip_probability = this->calculateAdjustedSkipProbability(skip_probability, HEP_multiplier);
767 // Use Dynamic BBN
768 skip_probability = _operator.hfe_bbn.getProcedureStepFailureProbability();
769 procedure_step_info.setTime(r5pars_.timesno);
770 procedure_step_info.setOperatorID(_operator.getTypeOfOperator());
771 procedure_step_info.setActionName(scanned_parameter->getInfoName());
772 procedure_step_info.setProcedureName(_procedure_name);
773 procedure_step_info.setProcedureStep(_step_name);
774 procedure_step_info.setStaticMultiplier(_static_HEP_factor);
775 procedure_step_info.setSkipProbability(skip_probability);
776 g_sim.Aux_info.addProcedureData(procedure_step_info);
777 //
778// if (skip_probability < _skip_threshold) // reset probability to 1.0 if step is not skipped
779// {
780// skip_probability = 0.0;
781// }
782 //
784 _step_name,
785 scanned_parameter->getInfoName());
786 if (tu_pt != 0) {
787 num_of_time_branches = tu_pt->getNumOfBranches();
788 } else {
789 num_of_time_branches = 1;
790 }
791 //
792 delta_cdf = 1.0 / (double) num_of_time_branches;
793 for (i = 0; i < num_of_time_branches; i++) {
794 b_scan_pt = new BranchScannedParameter();
795 b_scan_pt->setInfoName(scanned_parameter->getInfoName());
796 b_scan_pt->setTypeOfScannedParameter(scanned_parameter->getTypeOfScannedParameter());
797 b_scan_pt->setScanPriority(scanned_parameter->getScanPriority());
798 b_scan_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
799 b_scan_pt->setT_Minimum(scanned_parameter->getT_Minimum());
800 b_scan_pt->setAlpha_Weibull(scanned_parameter->getAlpha_Weibull());
801 b_scan_pt->setBeta_Weibull(scanned_parameter->getBeta_Weibull());
802 //
803 // calculate time required to perform action
804 cdf_lower = delta_cdf * ((double) i);
805 cdf_upper = delta_cdf * ((double) (i + 1));
806 time = b_scan_pt->calculateMeanRequiredTime(cdf_lower, cdf_upper);
807 //
808 b_scan_pt->setTimerAndProbability(time, (1.0 - skip_probability) / static_cast<double> (num_of_time_branches));
809 b_scan_pt->setTypeOfPauseActivity(_entry);
811 //
812 branch_generated = true;
813 }
814 // skip
815 // check to verify probability for skipping is above threshold to minimize branch generation
816 if (skip_probability > _skip_threshold) {
817 b_scan_pt = new BranchScannedParameter();
818 b_scan_pt->setInfoName(scanned_parameter->getInfoName());
819 b_scan_pt->setTypeOfScannedParameter(scanned_parameter->getTypeOfScannedParameter());
820 b_scan_pt->setScanPriority(scanned_parameter->getScanPriority());
821 b_scan_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
822 b_scan_pt->setT_Minimum(scanned_parameter->getT_Minimum());
823 b_scan_pt->setAlpha_Weibull(scanned_parameter->getAlpha_Weibull());
824 b_scan_pt->setBeta_Weibull(scanned_parameter->getBeta_Weibull());
826 //
827 b_scan_pt->setTimerAndProbability(1.0, skip_probability);
828 b_scan_pt->setTypeOfPauseActivity(_entry);
830 //
831 branch_generated = true;
832 }
833 } else if (type_of_action
834 == sim::State::Waiting) {//all non-interact with system actions have been chnaged to waiting type of action in readInfoFromFile
835 //
836 str = "WAITING:_Verify_" + action->getInfoName();
837 //
838 skip_probability = action->calculateProbability(); // calculate probability of skipping a step
839 //
840 HEP_multiplier *= this->calculateDynamicHEPMultiplier(_operator.getTypeOfOperator(), action->getInfoName(), procedure_step_info);
841 HEP_multiplier *= _static_HEP_factor;
842 skip_probability = this->calculateAdjustedSkipProbability(skip_probability, HEP_multiplier);
843 // Use Dynamic BBN
844 skip_probability = _operator.hfe_bbn.getProcedureStepFailureProbability();
845 procedure_step_info.setTime(r5pars_.timesno);
846 procedure_step_info.setOperatorID(_operator.getTypeOfOperator());
847 procedure_step_info.setActionName(str);
848 procedure_step_info.setProcedureName(_procedure_name);
849 procedure_step_info.setProcedureStep(_step_name);
850 procedure_step_info.setStaticMultiplier(_static_HEP_factor);
851 procedure_step_info.setSkipProbability(skip_probability);
852 g_sim.Aux_info.addProcedureData(procedure_step_info);
853 //
854// if (skip_probability < _skip_threshold) // reset probability to 1.0 if step is not skipped
855// {
856// skip_probability = 0.0;
857// }
858 //
860 _step_name,
861 action->getInfoName());
862 if (tu_pt != 0) {
863 num_of_time_branches = tu_pt->getNumOfBranches();
864 } else {
865 num_of_time_branches = 1;
866 }
867 //
868 delta_cdf = 1.0 / (double) num_of_time_branches;
869 for (i = 0; i < num_of_time_branches; i++) {
870 //perform procedure step unit action
871 b_action_pt = new BranchAction();
872// b_action_pt->setActionName(action->getInfoName());
873 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
874 b_action_pt->setT_Minimum(action->getT_Minimum());
875 b_action_pt->setAlpha_Weibull(action->getAlpha_Weibull());
876 b_action_pt->setBeta_Weibull(action->getBeta_Weibull());
877 //
878 // calculate time required to perform action
879 cdf_lower = delta_cdf * ((double) i);
880 cdf_upper = delta_cdf * ((double) (i + 1));
881 time = b_action_pt->calculateMeanRequiredTime(cdf_lower, cdf_upper);
882 //
883 b_action_pt->setTimerAndProbability(time, (1.0 - skip_probability) / static_cast<double> (num_of_time_branches));
884 //
885 b_action_pt->setActionName(str);
886 b_action_pt->setMessage(message);
887 b_action_pt->setTypeOfPauseActivity(_entry);
888 g_sim.Branch_center.addAction(_operator.getTypeOfOperator(), b_action_pt);
889 //
890 branch_generated = true;
891 }
892 // skip procedure step unit action
893 // check to verify probability for skipping is above threshold to minimize branch generation
894 if (skip_probability > _skip_threshold) {
895 b_action_pt = new BranchAction();
896// b_action_pt->setActionName(action->getInfoName());
897 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
898 // set time delay for skipped step of 1.0 second
899 b_action_pt->setTimerAndProbability(1.0, skip_probability);
900 str = "WAITING:_Skipped_Verification_Step_" + action->getInfoName();
901 b_action_pt->setActionName(str);
902 std::ostringstream streamObj;
903 streamObj << skip_probability;
904 message += "_(skipped_step_probability_=_" + streamObj.str() + ")";
905 b_action_pt->setMessage(message);
907 b_action_pt->setTypeOfPauseActivity(_entry);
908 g_sim.Branch_center.addAction(_operator.getTypeOfOperator(), b_action_pt);
909 //
910 branch_generated = true;
911 }
912 } else {//type_of_action == sim::State::Unknown or sim::Branch::ProcedureTransfer which is handler in ProcedureStep
913 ofstream fout("err messages.txt", ios::app);
914 cout << "ProcedureStepUnit::executAction: neither ACTIVE nor sim::None procedure step unit is found." << endl;
915 fout << r5pars_.timesno
916 << " ProcedureStepUnit::executAction: neither ACTIVE nor sim::None procedure step unit is found.\n";
917 fout.close();
918 r5pars_.sim_err = true;
919 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::executeAction err.");
921 }
922 return branch_generated;
923};
925 bool found_expectation = false;
926 bool branch_generated = false;
927 int state_of_activation, n_count;
928 decltype(expectation)::iterator expectationOR_itr;
929 expectationOR_itr = expectation.begin();
930 n_count = 1;
931 while (expectationOR_itr != expectation.end() && !found_expectation) {
932 state_of_activation = (*expectationOR_itr)->getStateOfActivation();
934 found_expectation = true;
935 (*expectationOR_itr)->setStateOfActivation(sim::State::Active);
936 branch_generated = (*expectationOR_itr)->assessExpectation(_operator, _stm, _entry);
938 found_expectation = true;
939 branch_generated = (*expectationOR_itr)->assessExpectation(_operator, _stm, _entry);
941 found_expectation = true;
943 } else if (state_of_activation == sim::State::Succeed) {
944 } else {}
945 expectationOR_itr++;
946 n_count++;
947 }
948 if (!found_expectation) {
950 }
951 return branch_generated;
952}
953
955 ShortTermMemory &_stm,
956 int _entry,
957 string _current_procedure,
958 string _current_step,
959 double _skip_threshold,
960 double _static_HEP_factor) {
961 bool branch_generated = false;
962 bool next_is_a_mental_procedure = false;
963 bool next_is_a_functional_recovery_guideline = false;
964 bool illegal_procedure_transfer = false;
965 bool generate_control_branches = false;
966 double skip_probability, control_probability, control_value;
967 double time, delta_cdf, cdf_lower, cdf_upper;
968 double HEP_multiplier = 1.0;
969 AnalysisProcedureDataContainerUnit procedure_step_info;
971 int i, j, num_of_time_branches, num_of_control_branches;
972 int type = this->type_of_non_response_action;
973 BranchAction *b_action_pt;
974 BranchProcedureStep *b_procedure_step_pt;
975 BranchScannedParameter *b_scan_pt;
978 BranchEndState *es_pt;
979 MentalParameterValue *mpv_pt;
980 string str, sub_str, str_prob;
981 InfoChunkMental *wm;
982 ProcedureActionUnit *act_pt;
983 SystemControl *sc_ptr;
984 ControlValue *control_value_ptr;
985 ProcedureStepInfo *procedure_pt;
987 wm = _stm.getWorkingMemory();
988 int receiver = sim::Operator::OAT;
989 if (_operator.getTypeOfOperator() == sim::Operator::OAT) receiver = sim::Source::Plant;
990 if (hasNonResponseAction()) {
992 act_pt = non_response_action_unit.get();
993 // calculate probability of skipping step
994 skip_probability = act_pt->calculateProbability(); // calculate probability of skipping a step
995 //
996 HEP_multiplier *= this->calculateDynamicHEPMultiplier(_operator.getTypeOfOperator(), act_pt->getInfoName(), procedure_step_info);
997 HEP_multiplier *= _static_HEP_factor;
998 skip_probability = this->calculateAdjustedSkipProbability(skip_probability, HEP_multiplier);
999 // Use Dynamic BBN
1000 skip_probability = _operator.hfe_bbn.getProcedureStepFailureProbability();
1001 procedure_step_info.setTime(r5pars_.timesno);
1002 procedure_step_info.setOperatorID(_operator.getTypeOfOperator());
1003 procedure_step_info.setActionName(act_pt->getInfoName());
1004 procedure_step_info.setProcedureName(_current_procedure);
1005 procedure_step_info.setProcedureStep(_current_step);
1006 procedure_step_info.setStaticMultiplier(_static_HEP_factor);
1007 procedure_step_info.setSkipProbability(skip_probability);
1008 g_sim.Aux_info.addProcedureData(procedure_step_info);
1009 //
1010// if (skip_probability < _skip_threshold) {
1011// skip_probability = 0.0;
1012// }
1013 //
1015 _current_step,
1016 act_pt->getInfoName());
1017 if (tu_pt != 0) {
1018 num_of_time_branches = tu_pt->getNumOfBranches();
1019 } else {
1020 num_of_time_branches = 1;
1021 }
1022 //
1024 _current_step,
1025 act_pt->getInfoName());
1026 if (cvu_pt != 0) {
1027 num_of_control_branches = cvu_pt->getNumberOfBranches();
1028 generate_control_branches = true;
1029 } else {
1030 num_of_control_branches = 1;
1031 }
1032 //
1033 for (j = 0; j < num_of_control_branches; j++) {
1034 if (generate_control_branches) {
1035 control_probability = cvu_pt->probabilities.at(j);
1036 } else {
1037 control_probability = 1.0;
1038 }
1039 // set control value
1040 if (type == sim::ControlAction::ParameterControl) // set control equal to perceived parameter value
1041 {
1044 control_value_ptr = (ControlValue *) sc_ptr;
1045 if (mpv_pt != 0 && sc_ptr->getTypeOfControl() == DisplayType::ControlValue) {
1046 if (generate_control_branches) {
1047 control_value = cvu_pt->control_values.at(j);
1048 } else {
1049 control_value = mpv_pt->getObservedParameterValue();
1050 }
1051 control_value = fmin(control_value, control_value_ptr->getValueForOnOrFullyOpen());
1052 control_value = fmax(control_value, control_value_ptr->getValueForOffOrFullyClose());
1053 } else // control parameter has not been perceived, do not change control value
1054 {
1055 control_value = control_value_ptr->getControlValue();
1056 }
1057 } else if (type == sim::Action::Action || type == sim::ControlAction::Additive) {
1058 if (generate_control_branches) {
1059 control_value = cvu_pt->control_values.at(j);
1060 } else {
1061 control_value = act_pt->getControlValue();
1062 }
1063 if (type == sim::ControlAction::Additive) {
1065 control_value_ptr = (ControlValue *) sc_ptr;
1066 // Displayed control value may differ from actual control value due to perception filtering
1067 // control_value = control_value_ptr->getDisplayedControlValue();
1068 control_value += control_value_ptr->getControlValue();
1069 // verify that control value does not exceeed component control range
1070 control_value = fmin(control_value, control_value_ptr->getValueForOnOrFullyOpen());
1071 control_value = fmax(control_value, control_value_ptr->getValueForOffOrFullyClose());
1072 }
1073 }
1074 //
1075 delta_cdf = 1.0 / (double) num_of_time_branches;
1076 for (i = 0; i < num_of_time_branches; i++) {
1077 // nonresponse action is performed
1078 b_action_pt = new BranchAction();
1079 b_action_pt->setActionName(act_pt->getInfoName());
1080 b_action_pt->setControlValue(control_value);
1081 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), receiver);
1082 //
1083 // calculate time to perform action
1084 cdf_lower = delta_cdf * ((double) i);
1085 cdf_upper = delta_cdf * ((double) (i + 1));
1086 time = action->calculateMeanRequiredTime(cdf_lower, cdf_upper);
1087 //
1088 b_action_pt->setActionTime(time);
1089 if (_operator.getTypeOfOperator() == sim::Operator::ODM && receiver == sim::Operator::OAT) {
1090 // set branch time to ODM communication time
1092 }
1093 b_action_pt->setTimerAndProbability(time,
1094 control_probability * (1.0 - skip_probability)
1095 / static_cast<double> (num_of_time_branches));
1096 b_action_pt->setTypeOfPauseActivity(_entry);
1097 g_sim.Branch_center.addAction(_operator.getTypeOfOperator(), b_action_pt);
1098 //
1099 branch_generated = true;
1100 } // end time branch "for loop"
1101 } // end control value branch "for loop"
1102 // non response action is skipped
1103 // check to verify probability for skipping is above threshold to minimize branch generation
1104 if (skip_probability > _skip_threshold) {
1105 b_action_pt = new BranchAction();
1106 b_action_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
1107 // use time delay of 1.0 second for a skipped step
1108 b_action_pt->setTimerAndProbability(1.0, skip_probability);
1109 str = "WAITING:_Skip_Non_Response_Action_" + act_pt->getInfoName();
1110 str += "_(skip_probability_=_";
1111 std::ostringstream streamObj;
1112 streamObj << skip_probability;
1113 str += streamObj.str() + ")";
1114 b_action_pt->setActionName(str);
1116 b_action_pt->setTypeOfPauseActivity(_entry);
1117 g_sim.Branch_center.addAction(_operator.getTypeOfOperator(), b_action_pt);
1118 branch_generated = true;
1119 }
1120 } else if (type == sim::Branch::Procedure) {
1121 if (_entry == sim::Strategy::FollowInstruction) {
1123 }
1124 procedure_pt = non_response_procedure.get();
1125 // calculate probability of skipping step
1126 skip_probability = procedure_pt->calculateProbability();
1127 //
1128 HEP_multiplier *= this->calculateDynamicHEPMultiplier(_operator.getTypeOfOperator(), "Procedure", procedure_step_info);
1129 HEP_multiplier *= _static_HEP_factor;
1130 skip_probability = this->calculateAdjustedSkipProbability(skip_probability, HEP_multiplier);
1131 // Use Dynamic BBN
1132 skip_probability = _operator.hfe_bbn.getProcedureTransferFailureProbability();
1133 procedure_step_info.setTime(r5pars_.timesno);
1134 procedure_step_info.setOperatorID(_operator.getTypeOfOperator());
1135 procedure_step_info.setActionName("Procedure_Transfer");
1136 procedure_step_info.setProcedureName(_current_procedure);
1137 procedure_step_info.setProcedureStep(_current_step);
1138 procedure_step_info.setStaticMultiplier(_static_HEP_factor);
1139 procedure_step_info.setSkipProbability(skip_probability);
1140 g_sim.Aux_info.addProcedureData(procedure_step_info);
1141 //
1142// if (skip_probability < _skip_threshold) {
1143// skip_probability = 0.0;
1144// }
1145 //
1146 // nonresponse action is performed
1147 //
1148 // determine if next procedure is a mental procedure
1149 if (procedure_pt->getProcedureName().size() > 5) {
1150 sub_str = procedure_pt->getProcedureName().substr(0, 5);
1151 if (sub_str == "MPBG_") {
1152 next_is_a_mental_procedure = true;
1153 }
1154 }
1155 //
1156 // determine if next procedure step is a functional recovery guideline
1157 if (procedure_pt->getProcedureName().size() > 4) {
1158 sub_str = procedure_pt->getProcedureName().substr(0, 4);
1159 if (sub_str == "FRG_") {
1160 next_is_a_functional_recovery_guideline = true;
1161 }
1162 }
1163 //
1164 if ((_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::FollowProcedure && !next_is_a_mental_procedure) ||
1165 /*(_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::InstinctiveResponse && !next_is_a_mental_procedure) || */
1166 (_entry == sim::Strategy::InstinctiveResponse && next_is_a_mental_procedure)) {
1167 b_procedure_step_pt = new BranchProcedureStep();
1168 b_procedure_step_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
1169 // set time delay for procedure transfer
1170 if (procedure_pt->getProcedureName() == _current_procedure) {
1171 time = g_sim.All_procedure.getStepTransferTime(); // transfer within same procedure
1172 } else {
1173 time = g_sim.All_procedure.getProcedureTransferTime(); // transfer to a new procedure
1174 }
1175 b_procedure_step_pt->setTimerAndProbability(time, 1.0 - skip_probability);
1176 b_procedure_step_pt->setProcedureName(procedure_pt->getProcedureName());
1177 b_procedure_step_pt->setStepName(procedure_pt->getStepName());
1178 b_procedure_step_pt->setLastProcedureName(_current_procedure);
1179 b_procedure_step_pt->setLastStepName(_current_step);
1180 // b_procedure_step_pt->setTypeOfPauseActivity(_entry);
1181 if (_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::FollowProcedure && !next_is_a_mental_procedure) {
1182 b_procedure_step_pt->setTypeOfPauseActivity(_entry);
1183 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_step_pt);
1184 branch_generated = true;
1185 }
1186 /*else if (_operator.getTypeOfOperator() == sim::Operator::ODM && _entry == sim::Strategy::InstinctiveResponse && !next_is_a_mental_procedure)
1187 {
1188
1189 b_procedure_step_pt->setTypeOfPauseActivity(sim::Branch::ProcedureXfr);
1190 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_step_pt);
1191 g_sim.Decision_Maker.setPauseActivity(true);
1192 }*/
1193 else if (_entry == sim::Strategy::InstinctiveResponse && next_is_a_mental_procedure) {
1194 b_procedure_step_pt->setTypeOfPauseActivity(_entry);
1195 g_sim.Branch_center.addInstinctiveResponseProcedure(_operator.getTypeOfOperator(), b_procedure_step_pt);
1196 branch_generated = true;
1197 }
1198 } else {
1199 //illegal procedure transfer
1200 illegal_procedure_transfer = true;
1201 ofstream fout("err messages.txt", ios::app);
1202 cout << " " << r5pars_.timesno
1203 << " ProcedureStep::executeNonResponseAction: Illegal procedure transfer operation in "
1204 << _current_procedure << ' ' << _current_step << endl;
1205 fout << r5pars_.timesno << " ProcedureStep::executeNonResponseAction: Illegal procedure transfer operation in "
1206 << _current_procedure << ' ' << _current_step << "\n";
1207 fout.close();
1208 skip_probability = 1.0;
1209 }
1210 //
1211 // skip procedure transfer non response action
1212 // check to verify probability for skipping is above threshold to minimize branch generation
1213 // or treat illegal procedure transfer as skipped step
1214 if (skip_probability > _skip_threshold || illegal_procedure_transfer) {
1215 b_procedure_step_pt = new BranchProcedureStep();
1216 b_procedure_step_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
1217 b_procedure_step_pt->setTimerAndProbability(1.0, skip_probability);
1218 b_procedure_step_pt->setProcedureName(_current_procedure);
1219 b_procedure_step_pt->setStepName(_current_step);
1220 b_procedure_step_pt->setLastProcedureName(_current_procedure);
1221 b_procedure_step_pt->setLastStepName(_current_step);
1222 b_procedure_step_pt->setStateOfActivation(sim::State::Skip);
1223 b_procedure_step_pt->setTypeOfPauseActivity(_entry);
1224 if (_entry == sim::Strategy::FollowProcedure) {
1225 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_step_pt);
1226 } else {
1227 g_sim.Branch_center.addInstinctiveResponseProcedure(_operator.getTypeOfOperator(), b_procedure_step_pt);
1228 }
1229 branch_generated = true;
1230 }
1231 } else if (type == sim::ControlAction::ParameterScan) {
1233 skip_probability = scanned_parameter->calculateProbability(); // calculate probability of skipping a step
1234 //
1235 HEP_multiplier *=
1236 this->calculateDynamicHEPMultiplier(_operator.getTypeOfOperator(), scanned_parameter->getInfoName(), procedure_step_info);
1237 HEP_multiplier *= _static_HEP_factor;
1238 skip_probability = this->calculateAdjustedSkipProbability(skip_probability, HEP_multiplier);
1239 // Use Dynamic BBN
1240 skip_probability = _operator.hfe_bbn.getProcedureStepFailureProbability();
1241 procedure_step_info.setTime(r5pars_.timesno);
1242 procedure_step_info.setOperatorID(_operator.getTypeOfOperator());
1243 procedure_step_info.setActionName(scanned_parameter->getInfoName());
1244 procedure_step_info.setProcedureName(_current_procedure);
1245 procedure_step_info.setProcedureStep(_current_step);
1246 procedure_step_info.setStaticMultiplier(_static_HEP_factor);
1247 procedure_step_info.setSkipProbability(skip_probability);
1248 g_sim.Aux_info.addProcedureData(procedure_step_info);
1249 //
1250// if (skip_probability < _skip_threshold) // reset probability to 1.0 if step is not skipped
1251// {
1252// skip_probability = 0.0;
1253// }
1254 //
1256 _current_step,
1257 scanned_parameter->getInfoName());
1258 if (tu_pt != 0) {
1259 num_of_time_branches = tu_pt->getNumOfBranches();
1260 } else {
1261 num_of_time_branches = 1;
1262 }
1263 //
1264 delta_cdf = 1.0 / (double) num_of_time_branches;
1265 for (i = 0; i < num_of_time_branches; i++) {
1266 b_scan_pt = new BranchScannedParameter();
1267 b_scan_pt->setInfoName(scanned_parameter->getInfoName());
1268 b_scan_pt->setTypeOfScannedParameter(scanned_parameter->getTypeOfScannedParameter());
1269 b_scan_pt->setScanPriority(scanned_parameter->getScanPriority());
1270 b_scan_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
1271 b_scan_pt->setT_Minimum(scanned_parameter->getT_Minimum());
1272 b_scan_pt->setAlpha_Weibull(scanned_parameter->getAlpha_Weibull());
1273 b_scan_pt->setBeta_Weibull(scanned_parameter->getBeta_Weibull());
1274 //
1275 // calculate time required to perform action
1276 cdf_lower = delta_cdf * ((double) i);
1277 cdf_upper = delta_cdf * ((double) (i + 1));
1278 time = b_scan_pt->calculateMeanRequiredTime(cdf_lower, cdf_upper);
1279 //
1280 b_scan_pt->setTimerAndProbability(time, (1.0 - skip_probability) / static_cast<double> (num_of_time_branches));
1281 b_scan_pt->setTypeOfPauseActivity(_entry);
1283 //
1284 branch_generated = true;
1285 }
1286 // skip
1287 // check to verify probability for skipping is above threshold to minimize branch generation
1288 if (_operator.hfe_bbn.getProcedureStepFailureProbability() > _skip_threshold) {
1289 b_scan_pt = new BranchScannedParameter();
1290 b_scan_pt->setInfoName(scanned_parameter->getInfoName());
1291 b_scan_pt->setTypeOfScannedParameter(scanned_parameter->getTypeOfScannedParameter());
1292 b_scan_pt->setScanPriority(scanned_parameter->getScanPriority());
1293 b_scan_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());
1294 b_scan_pt->setT_Minimum(scanned_parameter->getT_Minimum());
1295 b_scan_pt->setAlpha_Weibull(scanned_parameter->getAlpha_Weibull());
1296 b_scan_pt->setBeta_Weibull(scanned_parameter->getBeta_Weibull());
1298 //
1299 b_scan_pt->setTimerAndProbability(1.0, skip_probability);
1300 b_scan_pt->setTypeOfPauseActivity(_entry);
1302 //
1303 branch_generated = true;
1304 }
1305 } else if (type == sim::ControlAction::Stop) {
1306 //
1307 // branch termination handled in ProcedureStep::oneThroughProcess
1308 } else {}
1309 }
1310 return branch_generated;
1311}
1314
1316 if (!expectation.empty()) return expectation.size();
1318 return 0;
1319}
1321 fout << type_of_action << ' '
1323 << state_of_action << ' '
1325 << state_of_expectation << '\n';
1326 //
1333 // procedure transfer
1335 // mental procedure
1336 }
1337 //
1338 //
1339 //this->saveProcedureStepUnitActionToFile(fout);
1340 //
1343}
1345 fin >> type_of_action
1350 //
1357 // procedure transfer
1359 // mental procedure
1360 }
1361 //this->retrieveProcedureStepUnitActionFromFile(fin);
1364}
1366 if (action != 0) {
1367 fout << "1 " << '\n';
1368 action->saveProcedureActionUnitToFile(fout);
1369 } else {
1370 fout << "0 " << '\n';
1371 }
1372}
1374 int i_exist;
1375 fin >> i_exist;
1376 if (i_exist == 1) {
1377 action = make_unique<ProcedureActionUnit>();
1378 action->retrieveProcedureActionUnitFromFile(fin);
1379 } else if (i_exist == 0) {
1380 //do nothing here
1381 } else {
1382 ofstream fout("err messages.txt", ios::app);
1383 cout << "ProcedureStepUnit::retrieveProcedureStepUnitActionFromFile: data mismatch in retrieving info from file."
1384 << endl;
1385 fout << r5pars_.timesno
1386 << " ProcedureStepUnit::retrieveProcedureStepUnitActionFromFile: data mismatch in retrieving info from file\n";
1387 fout.close();
1388 r5pars_.sim_err = true;
1389 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::retrieveProcedureStepUnitActionFromFile err.");
1391 }
1392}
1393
1395 if (mental_procedure != 0) {
1396 fout << "1 ";
1397 mental_procedure->saveProcedureStepInfoToFile(fout);
1398 } else {
1399 fout << "0" << '\n';
1400 }
1401}
1402
1404 int i_exist;
1405 fin >> i_exist;
1406 if (i_exist == 1) {
1407 mental_procedure = make_unique<ProcedureStepInfo>();
1408 mental_procedure->retrieveProcedureStepInfoFromFile(fin);
1409 } else if (i_exist == 0) {
1410 //do nothing here
1411 } else {
1412 ofstream fout("err messages.txt", ios::app);
1413 cout
1414 << "ProcedureStepUnit::retrieveProcedureStepUnitMentalProcedureFromFile: data mismatch in retrieving info from file."
1415 << endl;
1416 fout << r5pars_.timesno
1417 << " ProcedureStepUnit::retrieveProcedureStepUnitMentalProcedureFromFile: data mismatch in retrieving info from file\n";
1418 fout.close();
1419 r5pars_.sim_err = true;
1420 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::retrieveProcedureStepUnitMentalProcedureFromFile err.");
1422 }
1423}
1424
1426 if (scanned_parameter != 0) {
1427 fout << "1 ";
1428 scanned_parameter->saveProcedureScannedParameterUnitToFile(fout);
1429 } else {
1430 fout << "0" << '\n';
1431 }
1432}
1433
1435 int i_exist;
1436 fin >> i_exist;
1437 if (i_exist == 1) {
1438 scanned_parameter = make_unique<ProcedureScannedParameterUnit>();;
1439 scanned_parameter->retrieveProcedureScannedParameterUnitFromFile(fin);
1440 } else if (i_exist == 0) {
1441 //do nothing here
1442 } else {
1443 ofstream fout("err messages.txt", ios::app);
1444 cout
1445 << "ProcedureStepUnit::retrieveProcedureStepUnitScannedParameterUnitFromFile: data mismatch in retrieving info from file."
1446 << endl;
1447 fout << r5pars_.timesno
1448 << " ProcedureStepUnit::retrieveProcedureStepUnitScannedParameterUnitFromFile: data mismatch in retrieving info from file\n";
1449 fout.close();
1450 r5pars_.sim_err = true;
1451 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::retrieveProcedureStepUnitScannedParameterUnitFromFile err.");
1453 }
1454}
1455
1457 ProcedureActionUnit *act_pt;
1458 ProcedureStepInfo *procedure_pt;
1460
1461 if (hasNonResponseAction()) {
1462 fout << "1 ";
1465 act_pt = non_response_action_unit.get();
1466 act_pt->saveProcedureActionUnitToFile(fout);
1468 procedure_pt = non_response_procedure.get();
1469 procedure_pt->saveProcedureStepInfoToFile(fout);
1471 scan_pt = non_response_scan.get();
1474 //do nothing here
1475 } else {
1476 ofstream fout("err messages.txt", ios::app);
1477 cout << "ProcedureStepUnit::saveProcedureStepUnitNonResponseActionToFile: type_of_non_response_action "
1478 << type_of_non_response_action << " cannot be recognized" << endl;
1479 fout << r5pars_.timesno
1480 << " ProcedureStepUnit::saveProcedureStepUnitNonResponseActionToFile: type_of_non_response_action "
1481 << type_of_non_response_action << " cannot be recognized\n";
1482 fout.close();
1483 r5pars_.sim_err = true;
1484 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::saveProcedureStepUnitNonResponseActionToFile err.");
1486 }
1487 } else {
1488 fout << "0" << '\n';
1489 }
1490}
1491
1493 int i_exist;
1494 ProcedureActionUnit *act_pt;
1495 ProcedureStepInfo *procedure_pt;
1497 fin >> i_exist;
1498 if (i_exist == 1) {
1500 procedure_pt = new ProcedureStepInfo();
1501 procedure_pt->retrieveProcedureStepInfoFromFile(fin);
1502 non_response_procedure.reset(procedure_pt);
1505 act_pt = new ProcedureActionUnit();
1507 non_response_action_unit.reset(act_pt);
1509 scan_pt = new ProcedureScannedParameterUnit();
1511 non_response_scan.reset(scan_pt);
1512 } else if (type_of_non_response_action == sim::ControlAction::Stop) {//stop current scenario
1513 //do nothing here
1514 } else if (type_of_non_response_action == sim::Strategy::Advise) {//ask for advice
1515 } else if (type_of_non_response_action == sim::None) {//no non-response exit
1516 } else {
1517 ofstream fout("err messages.txt", ios::app);
1518 cout << "ProcedureStepUnit::retrieveProcedureStepUnitNonResponseActionFromFile( obj_type:"
1519 << type_of_non_response_action << " cannot be recognized" << endl;
1520 fout << r5pars_.timesno << " ProcedureStepUnit::retrieveProcedureStepUnitNonResponseActionFromFile( obj_type:"
1521 << type_of_non_response_action << " cannot be recognized\n";
1522 fout.close();
1523 r5pars_.sim_err = true;
1524 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::readInfofromFile err.");
1526 }
1527 } else if (i_exist == 0) {
1528 //do nothing
1529 } else {
1530 //error message
1531 }
1532}
1533
1535 fout << expectation.size() << '\n';
1536 for (auto& e : expectation) {
1537 e->saveExpectationORUnitToFile(fout);
1538 }
1539}
1540
1542 int i, num;
1543 fin >> num;
1544 for (i = 0; i < num; i++) {
1545 auto expOr_pt = make_unique<ExpectationORUnit>();
1546 expOr_pt->retrieveExpectationORUnitFromFile(fin);
1547 this->expectation.push_back(std::move(expOr_pt));
1548 }
1549}
1550
1551
1552
Emergency Operating Procedure (EOP) management — step execution and procedure flow.
DisplayType
Definition: SimConstants.h:41
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
document e
void addProcedureData(AnalysisProcedureDataContainerUnit)
void setActionTime(double)
The end state (ES node) that terminates one sequence of the DET.
BranchProcedureActionTimeUnit * checkToGenerateActionTimeBranches(std::string, std::string, std::string)
BranchProcedureControlValueUnit * checkToGenerateControlValueBranches(std::string, std::string, std::string)
Looks up the control value branch definition of a procedure action.
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
void addAction(int, BranchAction *)
void addProcedureStep(int, BranchProcedureStep *)
void addInstinctiveResponseProcedure(int, BranchProcedureStep *)
BranchProcedureAtionTime source_of_procedure_time_branches
Definition: BranchRecord.h:295
void addScannedParameter(int, BranchScannedParameter *)
Crew fork registration for a scanned parameter; same contract as addGoal().
BranchProcedureControlValue control_value_branches
Definition: BranchRecord.h:297
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
void setSenderAndReceiver(int, int)
int getIntendedReceiver()
void setTypeOfPauseActivity(int)
void setControlValue(double)
double getControlValue()
double getValueForOnOrFullyOpen()
double getValueForOffOrFullyClose()
std::map< std::string, SystemAlarm * > alarm_map
std::map< std::string, SystemControl * > control_map
SystemControl * getControlFromMap(std::string)
std::map< std::string, SystemDisplay * > display_map
ControlPanelDisplay indicators
Definition: ControlPanel.h:53
ControlPanelControl controls
Definition: ControlPanel.h:54
ControlPanelAlarm alarms
Definition: ControlPanel.h:52
void setActionName(std::string)
void setLastProcedureName(std::string)
void setLastStepName(std::string)
void setProcedureName(std::string)
void add(ExpectationElement *)
void readInfoFromFile(std::ifstream &)
MentalParameterValue * checkExistanceOfPerceivedParameterValue(std::string)
Definition: InfoChunk.cpp:921
void setInfoName(std::string)
Definition: KBElement.cpp:25
std::string getInfoName()
Definition: KBElement.cpp:26
void setPauseActivity(bool)
Definition: Operator.cpp:577
TimeConstrainedModule time_constrained_load
Definition: Operator.h:132
double getNominalCommunicationTime()
Definition: Operator.cpp:790
int getTypeOfOperator()
Definition: Operator.cpp:59
HumanFailureEventsBBN hfe_bbn
Definition: Operator.h:136
double checkItemRelevanceToCurrentDiagnosis(std::string)
Definition: Operator.cpp:1209
void setBeta_Parameter(double)
Definition: Probability.cpp:46
double calculateProbability()
void setAlpha_Parameter(double)
Definition: Probability.cpp:44
void setParameterName(std::string)
std::string getParameterName()
void copyProcedureActionUnit(ProcedureActionUnit &)
void retrieveProcedureActionUnitFromFile(std::ifstream &)
void saveProcedureActionUnitToFile(std::ofstream &)
void copyProcedureScannedParameterUnit(ProcedureScannedParameterUnit &)
void retrieveProcedureScannedParameterUnitFromFile(std::ifstream &)
void saveProcedureScannedParameterUnitToFile(std::ofstream &)
void setStepName(std::string step_name)
std::string getProcedureName()
void copyProcedureStepInfo(ProcedureStepInfo &)
void saveProcedureStepInfoToFile(std::ofstream &)
void retrieveProcedureStepInfoFromFile(std::ifstream &)
std::string getStepName()
void setProcedureName(std::string procedure_name)
void saveProcedureStepUnitNonResponseActionToFile(std::ofstream &)
bool executeExpectation(Operator &, ShortTermMemory &, int)
void setTypeOfNonResponseAction(int)
std::vector< std::unique_ptr< ExpectationORUnit > > expectation
std::unique_ptr< ProcedureScannedParameterUnit > non_response_scan
std::unique_ptr< ProcedureStepInfo > mental_procedure
void retrieveProcedureStepUnitMentalProcedureFromFile(std::ifstream &)
void retrieveProcedureStepUnitFromFile(std::ifstream &)
void setStateOfNonResponseAction(int)
void readInfofromFileExpectation(std::ifstream &, int)
void retrieveProcedureStepUnitExpectationFromFile(std::ifstream &)
bool hasNonResponseAction() const
double calculateDynamicHEPMultiplier(int, std::string, AnalysisProcedureDataContainerUnit &)
std::unique_ptr< ProcedureScannedParameterUnit > scanned_parameter
int checkForTypeOfExpectation(std::string)
bool executeAction(Operator &, ShortTermMemory &, int, std::string, std::string, std::string, double, double)
ProcedureStepInfo * getMentalProcedurePtr()
double calculateAdjustedSkipProbability(double, double)
void retrieveProcedureStepUnitNonResponseActionFromFile(std::ifstream &)
ProcedureScannedParameterUnit * getScannedParameterUnitPtr()
bool checkIfIsChangeSystemAction(std::string)
ProcedureActionUnit * getActionPtr()
void saveProcedureStepUnitToFile(std::ofstream &)
bool executeNonResponseAction(Operator &, ShortTermMemory &, int, std::string, std::string, double, double)
void setActionPtr(ProcedureActionUnit *)
void saveProcedureStepUnitScannedParameterToFile(std::ofstream &)
std::unique_ptr< ProcedureStepInfo > non_response_procedure
bool readInfofromFile(std::ifstream &)
std::unique_ptr< ProcedureActionUnit > action
void saveProcedureStepUnitExpectationToFile(std::ofstream &)
void retrieveProcedureStepUnitActionFromFile(std::ifstream &)
bool readInfoFromFileNonResponseExit(std::ifstream &)
void saveProcedureStepUnitMentalProcedureToFile(std::ofstream &)
void saveProcedureStepUnitActionToFile(std::ofstream &)
void copyProcedureStepUnit(ProcedureStepUnit &)
std::unique_ptr< ProcedureActionUnit > non_response_action_unit
int readInfofromFileAction(std::ifstream &)
void retrieveProcedureStepUnitScannedParameterFromFile(std::ifstream &)
double getProcedureTransferTime()
Definition: Procedures.cpp:55
double getStepTransferTime()
Definition: Procedures.cpp:53
InfoChunkMental * getWorkingMemory()
InfoChunk perceived_info
void setStateOfActivation(int)
void copyStateOfActivation(StateOfActivation &)
void setMessage(std::string)
DisplayType getTypeOfControl()
DisplayType getTypeOfDisplay()
void setTimerAndProbability(double, double)
void setT_Minimum(double)
Definition: Timer.cpp:38
double calculateMeanRequiredTime()
Definition: Timer.cpp:131
void setBeta_Weibull(double)
Definition: Timer.cpp:36
void setAlpha_Weibull(double)
Definition: Timer.cpp:34
struct @0 r5pars_
constexpr int Action
Definition: SimConstants.h:199
constexpr int Yes
Definition: SimConstants.h:80
constexpr int Verify
Definition: SimConstants.h:260
constexpr int ProcedureTransfer
Definition: SimConstants.h:263
constexpr int Procedure
Definition: SimConstants.h:261
constexpr int MentalBelief
Definition: SimConstants.h:265
constexpr int ParameterDifference
Definition: SimConstants.h:289
constexpr int ParameterTrend
Definition: SimConstants.h:287
constexpr int SupportSystemState
Definition: SimConstants.h:292
constexpr int ComponentState
Definition: SimConstants.h:285
constexpr int AlarmState
Definition: SimConstants.h:284
constexpr int ParameterValue
Definition: SimConstants.h:286
constexpr int ParameterScan
Definition: SimConstants.h:252
constexpr int Additive
Definition: SimConstants.h:236
constexpr int ParameterControl
Definition: SimConstants.h:251
constexpr int Stop
Definition: SimConstants.h:239
constexpr int ODM
Definition: SimConstants.h:145
constexpr int OAT
Definition: SimConstants.h:144
constexpr int Plant
Definition: SimConstants.h:135
constexpr int Failed
Definition: SimConstants.h:103
constexpr int Succeed
Definition: SimConstants.h:104
constexpr int Active
Definition: SimConstants.h:118
constexpr int Skip
Definition: SimConstants.h:108
constexpr int Control
Definition: SimConstants.h:111
constexpr int Waiting
Definition: SimConstants.h:125
constexpr int Unknown
Definition: SimConstants.h:120
constexpr int InstinctiveResponse
Definition: SimConstants.h:175
constexpr int FollowProcedure
Definition: SimConstants.h:177
constexpr int Advise
Definition: SimConstants.h:186
constexpr int FollowInstruction
Definition: SimConstants.h:180
constexpr int None
Definition: SimConstants.h:75
Procedures All_procedure
Emergency operating procedures.
OperatorAT Action_Taker
Crew action execution model.
ControlPanel Indicator
Control room panel state.
OperatorDM Decision_Maker
Crew decision-making model.
AnalysisInfoContainer Aux_info
Analysis records.
BranchRecord Branch_center
Dynamic event tree state.