← Documentation
ADS-IDAC Engine 5.0.0
ProcedureStep.cpp
Go to the documentation of this file.
1// ProcedureStep.cpp: implementation of the ProcedureStep class.
2//
4
5#include "ProcedureStep.h"
6#include "../Scheduler/Scheduler.h"
7#include "../Global/fmodule.h"
8#include "../ControlPanel/ControlPanel.h"
9#include "../Branch/BranchRecord.h"
10#include "../Branch/BranchExpectedMentalBelief.h"
11#include "../Crew/OperatorDM.h"
12#include "Procedures.h"
13#include <boost/serialization/export.hpp>
14#include <boost/archive/binary_oarchive.hpp>
15#include <boost/archive/binary_iarchive.hpp>
16#include "../Global/SimulationContext.h"
17BOOST_CLASS_EXPORT_IMPLEMENT(ProcedureStep)
18using namespace std;
19
20
22// Construction/Destruction
24
26{
29 current_step_name = "NONE";
30 next_procedure_name = "NONE";
31 next_step_name = "NONE";;
32 description = "NONE";
36}
37
39{
40 this->clear();
41}
56
58 procedure_step_unit.clear();
59}
62bool ProcedureStep::readInfoFromFile(string _procedure_name, string _step_name){
63 string file_directory_and_name, str, sub_str;
64 bool found_file;
65 int i, n_procedure_step_unit;
66 double x_temp;
67 int num_quotation = 0;
68 file_directory_and_name = g_sim.SScheduler.getEOPDirectory();
69 file_directory_and_name += "ZProcedure_";
70 file_directory_and_name += _procedure_name;
71 file_directory_and_name += '_';
72 file_directory_and_name += _step_name;
73 file_directory_and_name += ".txt";
74 ifstream fin;
75 fin.open(file_directory_and_name.c_str(), ios::in);
76 if(!fin.is_open()){
77 cout << "File: " << file_directory_and_name << " cound not be found" << endl;
78 ofstream fout("err messages.txt", ios::app);
79 fout << r5pars_.timesno << " File: " << file_directory_and_name << " cound not be found\n";
80 fout.close();
81 found_file = false;
82 }
83 else{
84 found_file = true;
85 }
86 if(!found_file){
87 return found_file;
88 }
90 // ensure that input file procedure/step name matches procedure.txt description
91 if (current_procedure_name != _procedure_name || current_step_name != _step_name) {
92 ofstream fout("err messages.txt", ios::app);
93 cout << "ProcedureStep::readInfoFromFile File: " << _procedure_name << ' ' << _step_name << " input file has incorrect procedure or step name" << endl;
94 fout << r5pars_.timesno << " ProcedureStep::readInfoFromFile File: " << _procedure_name << ' ' << _step_name << " input file has incorrect procedure or step name\n";
95 fout.close();
96 r5pars_.sim_err = true;
97 g_sim.Branch_center.setTempESMessage("ProcedureStep::readInfoFromFile err.");
99 }
100 this->readDescriptionFromFile(fin);
101 if(fin.eof()){
102 ofstream fout("err messages.txt", ios::app);
103 cout << "ProcedureStep::readInfoFromFile File: " << _procedure_name << ' ' << _step_name << " has incorrect quotation mark." << endl;
104 fout << r5pars_.timesno << " ProcedureStep::readInfoFromFile File: " << _procedure_name << ' ' << _step_name << " has incorrect quotation mark.\n";
105 fout.close();
106 r5pars_.sim_err = true;
107 g_sim.Branch_center.setTempESMessage("ProcedureStep::readInfoFromFile err.");
109 }
110
111 fin >> procedure_type
114 >> x_temp
115 >> n_procedure_step_unit;
116 for(i = 0; i < n_procedure_step_unit; i++){
117 auto ps_pt = make_unique<ProcedureStepUnit>();
118 if(ps_pt->readInfofromFile(fin) == false)
119 {
120 cout << "check " << this->current_procedure_name << " " << this->current_step_name;
121 }
122 procedure_step_unit.push_back(std::move(ps_pt));
123 }
125 fin.close();
126 return found_file;
127}
129 char ch = ' ';
130 while (ch != '"' && !fin.eof()){
131 fin.get(ch);}
132 if(ch == '"') description = ch;
133 do{
134 fin.get(ch);
135 description += ch;
136 }while(ch != '"' && !fin.eof());
137}
149 for(auto& src : _psp.procedure_step_unit){
150 auto ptr = make_unique<ProcedureStepUnit>();
151 ptr->copyProcedureStepUnit(*src);
152 procedure_step_unit.push_back(std::move(ptr));
153 }
154}
155
156
157bool ProcedureStep::oneThroughProcessForProcedureStep(Operator &_operator, double _skip_action_threshold, double _skip_non_response_threshold, bool _skip, ShortTermMemory &_stm){
158 BranchProcedureStep *b_procedure_pt;
159 bool next_is_a_mental_procedure = false;
160 bool this_is_a_mental_procedure = false;
161 bool branch_generated = false;
162 bool found_ps_unit = false;
163 double time;
164 double static_HEP_multiplier;
165 string str, message;
166 int branch_number;
167 decltype(procedure_step_unit)::iterator ps_unit_itr;
168 ProcedureStepUnit *ps_unit_pt = 0;
170/* switch (_operator.getTypeOfOperator()) {
171 case sim::Operator::ODM:
172 _skip_action_threshold = g_sim.Decision_Maker.getSkipActionThreshold();
173 _skip_non_response_threshold = g_sim.Decision_Maker.getSkipNonResponseThreshold();
174 _skip = g_sim.Decision_Maker.getSkipProcedureStep();
175 _stm = g_sim.Decision_Maker.memory;
176 break;
177 case sim::Operator::OAT:
178 _skip_action_threshold = g_sim.Action_Taker.getSkipActionThreshold();
179 _skip_non_response_threshold = g_sim.Action_Taker.getSkipNonResponseThreshold();
180 _skip = g_sim.Action_Taker.getSkipProcedureStep();
181 _stm = g_sim.Action_Taker.memory;
182 break;
183 default:
184 break;
185 }
186*/
187 //identify the procedure_step_unit to work
188 ps_unit_itr = this->procedure_step_unit.begin();
189 while(ps_unit_itr != this->procedure_step_unit.end() && !found_ps_unit){
190 state_of_activation = (*ps_unit_itr)->getStateOfActivation();
192 found_ps_unit = true;
193 ps_unit_pt = ps_unit_itr->get();
194 }
195 ps_unit_itr++;
196 }
197 if (ps_unit_pt != 0){
198 if(ps_unit_pt->getStateOfAction() == sim::None){
203 b_procedure_pt = new BranchProcedureStep();
204 b_procedure_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());//(sender, receiver)
205 // set time for procedure step transfer
208 } else {
210 }
211 b_procedure_pt->setTimerAndProbability(time, 1.0 - _operator.hfe_bbn.getProcedureStepFailureProbability());//(remaining time, probability)
212 b_procedure_pt->setProcedureName(next_procedure_name);
213 b_procedure_pt->setStepName(next_step_name);
215 b_procedure_pt->setLastStepName(current_step_name);
217 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_pt);
218 branch_generated = true;
219 return branch_generated;
220 }
221 else{
222 //
223 static_HEP_multiplier = this->calculateProcedureStepStaticHEPMultiplier();
224 //
225 branch_generated = ps_unit_pt->executeAction(_operator, _stm, sim::Strategy::FollowProcedure, this->getDescription(),
226 this->getCurrentProcedureName(), this->getCurrentStepName(), _skip_action_threshold,
227 static_HEP_multiplier);
228 }
229 }
230 else if(ps_unit_pt->getNumberOfANDExpectation() <= 0){//simple action no expectation
231 if (_skip) {
233 str= "Procedure: Skipped Step Action";
236 g_sim.Aux_info.addRecord(str,branch_number);
237 }
238 else {
240 }
241 }
242 else if(_skip && ps_unit_pt->getStateOfExpectation() == sim::None){ // skipped step - bypass expectations & non response action
244 str= "Procedure: Skipped Step Action";
247 g_sim.Aux_info.addRecord(str,branch_number);
248 }
249 else if(ps_unit_pt->getStateOfExpectation() == sim::State::Active){
250 branch_generated = ps_unit_pt->executeExpectation(_operator, _stm, sim::Strategy::FollowProcedure);
251 }
252 else if (ps_unit_pt->getStateOfExpectation() == sim::None){
254 branch_generated = ps_unit_pt->executeExpectation(_operator, _stm, sim::Strategy::FollowProcedure);
255 }
256 else if (ps_unit_pt->getStateOfExpectation() == sim::State::Failed && ps_unit_pt->hasNonResponseAction())
257 {
258 if(ps_unit_pt->getStateOfNonResponseAction() == sim::None){
260 //
261 static_HEP_multiplier = this->calculateProcedureStepStaticHEPMultiplier();
262 //
263 branch_generated = ps_unit_pt->executeNonResponseAction(_operator, _stm, sim::Strategy::FollowProcedure, this->getCurrentProcedureName(), this->getCurrentStepName(),_skip_non_response_threshold, static_HEP_multiplier);
264 }
265 else {
266 if(_skip) {
267 str= "Procedure: Skipped Non-Response Action";
270 g_sim.Aux_info.addRecord(str,branch_number);
271 }
273 }
274 }
276 {
277 message = "Sequence_terminated_by_non-response_action_(STOP):_Procedure:_";
278 message += this->getCurrentProcedureName();
279 message += " - Step: ";
280 message += this->getCurrentStepName();
283 }
284 else{
286 }
287 }
288 else{//complete this procedure
291 //
292 if (next_procedure_name != "NONE" && next_procedure_name != "None") {
293 b_procedure_pt = new BranchProcedureStep();
294 b_procedure_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());//(sender, receiver)
295 // set time for procedure step transfer
298 } else {
300 }
301 b_procedure_pt->setTimerAndProbability(time, 1.0 - _operator.hfe_bbn.getProcedureStepFailureProbability());//(remaining time, probability)
302 b_procedure_pt->setProcedureName(next_procedure_name);
303 b_procedure_pt->setStepName(next_step_name);
305 b_procedure_pt->setLastStepName(current_step_name);
307 //
308 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(), b_procedure_pt);
309 branch_generated = true;
310 }
311 else {
312 // branch will not be generated when procedure is complete - need to update hard wired diagnosis
313 // for completed procedure
314 switch (_operator.getTypeOfOperator()) {
317 break;
320 break;
321 default:
322 break;
323 }
324 }
325 }
326 return branch_generated;
327}
330 vector<unique_ptr<ExpectationORUnit>>::iterator expectation_itr;
331 vector<unique_ptr<ExpectationElement>>::iterator expectation_OR_itr;
332 decltype(procedure_step_unit)::iterator procedure_step_unit_itr;
333 for (procedure_step_unit_itr = procedure_step_unit.begin(); procedure_step_unit_itr != procedure_step_unit.end(); procedure_step_unit_itr++){
334 (*procedure_step_unit_itr)->setStateOfActivation(sim::None);
335 (*procedure_step_unit_itr)->setStateOfAction(sim::None);
336 (*procedure_step_unit_itr)->setStateOfExpectation(sim::None);
337 (*procedure_step_unit_itr)->setStateOfNonResponseAction(sim::None);
338 //reset expectation state of activation
339 for(expectation_itr = (*procedure_step_unit_itr)->expectation.begin();expectation_itr!=(*procedure_step_unit_itr)->expectation.end();expectation_itr++){
340 (*expectation_itr)->setStateOfActivation(sim::None);
341 for(expectation_OR_itr = (*expectation_itr)->expectation_OR.begin(); expectation_OR_itr != (*expectation_itr)->expectation_OR.end(); expectation_OR_itr++){
342 (*expectation_OR_itr)->setStateOfExpectation(sim::None);
343 }
344 }
345 //
346 }
347}
348bool ProcedureStep::oneThroughProcessForInstinctiveResponseProcedure(Operator &_operator, double _skip_action_threshold, double _skip_non_response_threshold, bool _skip, ShortTermMemory &_stm){
349 bool next_is_a_mental_procedure = false;
350 bool next_is_a_functional_recovery_guideline = false;
351 bool this_is_a_mental_procedure = false;
352 bool branch_generated = false;
353 bool found_ps_unit = false;
354 bool command_action = false;
355 double static_HEP_multiplier;
356 string str, sub_str, active_procedure_name, active_step_name, active_combined_name;
357 int branch_number;
359 int action_type = sim::None;
360 decltype(procedure_step_unit)::iterator ps_unit_itr;
361 map<string, ProcedureStep *>::iterator procedure_map_itr;
362 ProcedureStepUnit *ps_unit_pt = 0;
364 //
365 //identify the procedure_step_unit to work
366 ps_unit_itr = this->procedure_step_unit.begin();
367 while(ps_unit_itr != this->procedure_step_unit.end() && !found_ps_unit){
368 state_of_activation = (*ps_unit_itr)->getStateOfActivation();
370 found_ps_unit = true;
371 ps_unit_pt = ps_unit_itr->get();
372 }
373 ps_unit_itr++;
374 }
375 if (ps_unit_pt != 0){
376 // determine if next procedure step is a mental procedure
377 if(next_procedure_name.size() > 5){
378 sub_str = next_procedure_name.substr(0,5);
379 if (sub_str == "MPBG_"){
380 next_is_a_mental_procedure = true;
381 }
382 }
383 //
384 // determine if next procedure step is a functional recovery guideline
385 if(next_procedure_name.size() > 4){
386 sub_str = next_procedure_name.substr(0,4);
387 if (sub_str == "FRG_"){
388 next_is_a_functional_recovery_guideline = true;
389 }
390 }
391 //
392 action_type = ps_unit_pt->getTypeOfAction();
393 if (action_type == sim::Action::Action || action_type == sim::State::Control ||
395 {
396 command_action = true;
397 }
398 if(ps_unit_pt->getStateOfAction() == sim::None){
401 //
402 branch_generated = executeInstinctiveResponseProcedureTransfer(_operator, _stm);
403 }
404
405 else{
406 // execute procedure step unit action
407 if ( _operator.getTypeOfOperator() == sim::Operator::ODM && command_action ) {
409 }
410 //
411 static_HEP_multiplier = this->calculateProcedureStepStaticHEPMultiplier();
412 //
413 branch_generated = ps_unit_pt->executeAction(_operator, _stm, entry, this->getDescription(),
414 this->getCurrentProcedureName(), this->getCurrentStepName(), _skip_action_threshold,
415 static_HEP_multiplier);
416 }
417 }
418 else if(ps_unit_pt->getNumberOfANDExpectation() <= 0){//simple action no expectation
419 if (_skip) {
421 str= "Procedure: Skipped Step Action";
424 g_sim.Aux_info.addRecord(str,branch_number);
425 }
426 else {
428 }
429 }
430
431 else if(_skip && ps_unit_pt->getStateOfExpectation() == sim::None){ // skipped step - bypass expectations & non response action
433 str= "Procedure: Skipped Step Action";
436 g_sim.Aux_info.addRecord(str,branch_number);
437 }
438
439 else if(ps_unit_pt->getStateOfExpectation() == sim::State::Active){
440 if ( _operator.getTypeOfOperator() == sim::Operator::ODM) {
442 }
443 branch_generated = ps_unit_pt->executeExpectation(_operator, _stm, entry);
444 }
445
446 else if (ps_unit_pt->getStateOfExpectation() == sim::None){
448 if ( _operator.getTypeOfOperator() == sim::Operator::ODM) {
450 }
451 branch_generated = ps_unit_pt->executeExpectation(_operator, _stm, entry);
452 }
453
454 else if (ps_unit_pt->getStateOfExpectation() == sim::State::Failed && ps_unit_pt->hasNonResponseAction())
455 {
456 if(ps_unit_pt->getStateOfNonResponseAction() == sim::None){
458 if ( _operator.getTypeOfOperator() == sim::Operator::ODM) {
460 }
461 //
462 static_HEP_multiplier = this->calculateProcedureStepStaticHEPMultiplier();
463 //
464 branch_generated = ps_unit_pt->executeNonResponseAction(_operator, _stm, entry, this->getCurrentProcedureName(), this->getCurrentStepName(),_skip_non_response_threshold, static_HEP_multiplier);
465 }
466 else {
467 if(_skip) {
468 str= "Procedure: Skipped Non-Response Action";
471 g_sim.Aux_info.addRecord(str,branch_number);
472 }
474 }
475 }
476 else{
478 }
479
480 }
481 else{
482
483 //
484 if (next_procedure_name != "NONE" && next_procedure_name != "None") {
485 branch_generated = executeInstinctiveResponseProcedureTransfer(_operator, _stm);
486 }
487 else {
490 //
491 // branch will not be generated when procedure is complete - need to update hard wired diagnosis
492 // for completed procedure
493 switch (_operator.getTypeOfOperator()) {
496 break;
499 break;
500 default:
501 break;
502 }
503 }
504
505 }
506 return branch_generated;
507}
508
510{
511 string str, sub_str, active_procedure_name, active_step_name, active_combined_name;
512 bool next_is_a_mental_procedure = false;
513 bool next_is_a_functional_recovery_guideline = false;
514 bool branch_generated = false;
515 double time;
516 map<string, ProcedureStep *>::iterator procedure_map_itr;
517 BranchProcedureStep *b_procedure_pt;
518 ProcedureStep * ps_pt;
519 //
520 // determine if next procedure is a mental procedure
521 if(next_procedure_name.size() > 5){
522 sub_str = next_procedure_name.substr(0,5);
523 if (sub_str == "MPBG_"){
524 next_is_a_mental_procedure = true;
525 }
526 }
527 //
528 // determine if next procedure step is a functional recovery guideline
529 if(next_procedure_name.size() > 4){
530 sub_str = next_procedure_name.substr(0,4);
531 if (sub_str == "FRG_"){
532 next_is_a_functional_recovery_guideline = true;
533 }
534 }
535 //
536 if (!next_is_a_mental_procedure && _operator.getTypeOfOperator() == sim::Operator::ODM) // only sim::Operator::ODM can transfer from mental procedure to a paper procedure
537 {
538 // get active paper emergency procedure name and step
539 active_procedure_name = _stm.perceived_info.getCurrentProcedureName();
540 active_step_name = _stm.perceived_info.getCurrentProceduralStepName();
541 active_combined_name = active_procedure_name + active_step_name;
542 procedure_map_itr = g_sim.All_procedure.procedure_map.find(active_combined_name);
543 if(procedure_map_itr != g_sim.All_procedure.procedure_map.end()){
544 ps_pt = procedure_map_itr->second;
545 // reset the state of activation for the current paper procedure step
546 if (ps_pt != 0)
547 {
548 ps_pt->resetStateOfActivation();
549 }
550 }
551 if (next_is_a_functional_recovery_guideline) {
552 // if instinctive response procedure refers to an FRG, sim::State::Pause the active paper procedure
553 // in memory to allow return to appropriate step after FRG is complete
554 _stm.perceived_info.interruptCurrentProcedureStep(); // sets state of activation to sim::State::Pause
555 //
556 //update state of hardwired diagnoses
557 switch (_operator.getTypeOfOperator()) {
560 break;
563 break;
564 default:
565 break;
566 }
567 }
568 else {
569 // next procedure is a paper procedure.
570 // Mark current paper procedure complete as sim::State::Interrupted in memory
571 _stm.perceived_info.setStateOfAProcedureStep(active_procedure_name,active_step_name, sim::State::Interrupted);
572 //
573 //update state of hard wired diagnoses
574 switch (_operator.getTypeOfOperator()) {
577 break;
580 break;
581 default:
582 break;
583 }
584 }
585 }
586 //
589 //
590 if ( _operator.getTypeOfOperator() == sim::Operator::ODM || next_is_a_mental_procedure )
591 {
592
593 b_procedure_pt = new BranchProcedureStep();
594 b_procedure_pt->setSenderAndReceiver(_operator.getTypeOfOperator(), _operator.getTypeOfOperator());//(sender, receiver)
595 //
596 // set time delay for procedure transfer
598 {
599 time = g_sim.All_procedure.getStepTransferTime(); // transfer within same procedure
600 }
601 else if (next_is_a_functional_recovery_guideline)
602 {
603 time = -0.5; // set time low for FRG transition to avoid conflict with paused procedures
604 }
605 else
606 {
607 time = g_sim.All_procedure.getProcedureTransferTime(); // transfer to a new procedure
608 }
609 b_procedure_pt->setTimerAndProbability(time, 1.0 - _operator.hfe_bbn.getProcedureInterpretationFailureProbability());//(remaining time, probability)
610 b_procedure_pt->setProcedureName(next_procedure_name);
611 b_procedure_pt->setStepName(next_step_name);
614 b_procedure_pt->setLastStepName(current_step_name);
615 if (next_is_a_mental_procedure) {
618 branch_generated = true;
619 } else if (_operator.getTypeOfOperator() == sim::Operator::ODM && !next_is_a_mental_procedure)
620 {
622 g_sim.Branch_center.addProcedureStep(_operator.getTypeOfOperator(),b_procedure_pt);
624 }
625 }
626 else
627 {
628 // operator other than sim::Operator::ODM attempted transfer to paper procedure
629 // ignore transfer and complete procedure step
630 ofstream fout("err messages.txt", ios::app);
631 cout << " " << r5pars_.timesno << " ProcedureStep::executeInstinctiveResponseProcedureTransfer: Illegal procedure transfer operation in " << current_procedure_name << ' ' << current_step_name << endl;
632 fout << r5pars_.timesno << " ProcedureStep::executeInstinctiveResponseProcedureTransfer: Illegal procedure transfer operation in " << current_procedure_name << ' ' << current_step_name << "\n";
633 fout.close();
634 //
635 // since branch will not be generated when procedure is complete, update hard wired diagnosis
636 // for completed procedure
637 switch (_operator.getTypeOfOperator()) {
640 break;
643 break;
644 default:
645 break;
646 }
647 }
648 return branch_generated;
649}
650
652 string str;
653 bool this_is_a_mental_procedure = false;
654 if (_procedure_name.size() >= 5){
655 str = _procedure_name.substr(0, 5);
656 if(str == "MPBG_") this_is_a_mental_procedure = true;
657 }
658 return this_is_a_mental_procedure;
659}
660
662 double multiplier = 1.0;
663 //
664 // determine HEP multiplier based on procedure type
665 switch(this->getProcedureType()) {
666 case sim::Proc::NOP:
668 break;
669 case sim::Proc::AOP:
671 break;
672 case sim::Proc::EOP:
674 break;
675 case sim::Proc::FRG:
677 break;
678 case sim::Proc::ECA:
680 break;
683 break;
684 default:
685 multiplier *= 1.0;
686 ofstream fout("err messages.txt", ios::app);
687 cout << " " << r5pars_.timesno << " ProcedureStep::calculateProcedureStepStaticHEPMultiplier: Unrecognized Procedure Type in " << current_procedure_name << ' ' << current_step_name << endl;
688 fout << r5pars_.timesno << " ProcedureStep::calculateProcedureStepStaticHEPMultiplier: Unrecognized Procedure Type in " << current_procedure_name << ' ' << current_step_name << "\n";
689 fout.close();
690 break;
691 }
692 //
693 // determine HEP multiplier based on procedure step characteristics
694 switch (this->getProcedureStepCharacteristics()) {
697 break;
700 break;
703 break;
706 break;
709 break;
710 default:
711 multiplier *= 1.0;
712 ofstream fout("err messages.txt", ios::app);
713 cout << " " << r5pars_.timesno << " ProcedureStep::calculateProcedureStepStaticHEPMultiplier: Unrecognized Step Type in " << current_procedure_name << ' ' << current_step_name << endl;
714 fout << r5pars_.timesno << " ProcedureStep::calculateProcedureStepStaticHEPMultiplier: Unrecognized Step Type in " << current_procedure_name << ' ' << current_step_name << "\n";
715 fout.close();
716 break;
717 }
718 //
719 // adjust multiplier for step complexity
720 if (this->getProcedureStepComplexity() > 1.0) {
721 multiplier *= fmin(10.0,this->getProcedureStepComplexity());
722 } else {
723 multiplier *= fmax(0.1, this->getProcedureStepComplexity());
724 }
725 //
726 return multiplier;
727}
728
731
733 int i , num;
734 fout << current_procedure_name << ' ' << current_step_name << ' '
735 << next_procedure_name << ' ' << next_step_name << ' '
736 << description << ' ' << branch_control_flag << ' '
738 << procedure_type << '\n';
739 num = this->procedure_step_unit.size();
740 fout << num << '\n';
741 for(i = 0; i < num; i++){
742 this->procedure_step_unit.at(i)->saveProcedureStepUnitToFile(fout);
743 }
744 this->saveStateOfActivationToFile(fout);
745}
747 int i, num;
750 this->readDescriptionFromFile(fin);
753 fin >> num;
754 for(i = 0; i < num; i++){
755 auto procedure_step_unit_pt = make_unique<ProcedureStepUnit>();
756 procedure_step_unit_pt->retrieveProcedureStepUnitFromFile(fin);
757 procedure_step_unit.push_back(std::move(procedure_step_unit_pt));
758 }
760}
Emergency Operating Procedure (EOP) management — step execution and procedure flow.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
void addRecord(std::string, int)
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
void addProcedureStep(int, BranchProcedureStep *)
void addInstinctiveResponseProcedure(int, BranchProcedureStep *)
int getIDOfRecentGeneratedBranch()
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
void displayInformation(std::string strInformation)
void setSenderAndReceiver(int, int)
void setTypeOfPauseActivity(int)
void setLastProcedureName(std::string)
void setLastStepName(std::string)
void setProcedureName(std::string)
double getProcedureInterpretationFailureProbability()
void interruptCurrentProcedureStep()
Definition: InfoChunk.cpp:1037
std::string getCurrentProceduralStepName()
Definition: InfoChunk.cpp:155
std::string getCurrentProcedureName()
Definition: InfoChunk.cpp:140
void setStateOfAProcedureStep(std::string, std::string, int)
Definition: InfoChunk.cpp:1286
int getMentalPriorityOfAProcedureStep(std::string, std::string)
Definition: InfoChunk.cpp:1335
void KBcheckHardWiredMatchForProcedureActivity(std::string, int)
Definition: KB.cpp:235
void setPauseActivity(bool)
Definition: Operator.cpp:577
int getTypeOfOperator()
Definition: Operator.cpp:59
KB knowledge_base
Definition: Operator.h:127
HumanFailureEventsBBN hfe_bbn
Definition: Operator.h:136
bool executeExpectation(Operator &, ShortTermMemory &, int)
void setStateOfNonResponseAction(int)
bool hasNonResponseAction() const
bool executeAction(Operator &, ShortTermMemory &, int, std::string, std::string, std::string, double, double)
bool executeNonResponseAction(Operator &, ShortTermMemory &, int, std::string, std::string, double, double)
std::string next_procedure_name
Definition: ProcedureStep.h:66
std::string description
Definition: ProcedureStep.h:67
std::vector< std::unique_ptr< ProcedureStepUnit > > procedure_step_unit
Definition: ProcedureStep.h:62
std::string current_procedure_name
Definition: ProcedureStep.h:65
int getProcedureStepCharacteristics()
std::string next_step_name
Definition: ProcedureStep.h:66
void setNextStepName(std::string name)
virtual ~ProcedureStep()
bool checkWhetherThisIsAMentalProcedure(std::string)
double calculateProcedureStepStaticHEPMultiplier()
void setProcedureStepComplexity(double complexity)
std::string getNextProcedureName()
std::string current_step_name
Definition: ProcedureStep.h:65
void copyProcedureStep(ProcedureStep &)
bool oneThroughProcessForProcedureStep(Operator &, double, double, bool, ShortTermMemory &)
double procedure_step_complexity
Definition: ProcedureStep.h:69
std::string getCurrentProcedureName()
void readDescriptionFromFile(std::ifstream &)
void saveProcedureStepToFile(std::ofstream &)
void setDescription(std::string desc)
void setBranchControlFlag(int flag)
int getProcedureType()
int branch_control_flag
Definition: ProcedureStep.h:71
void retrieveProcedureStepFromFile(std::ifstream &)
std::string getCurrentStepName()
int getBranchControlFlag()
bool readInfoFromFile(std::string, std::string)
void setCurrentProcedureName(std::string name)
void setCurrentStepName(std::string name)
bool oneThroughProcessForInstinctiveResponseProcedure(Operator &, double, double, bool, ShortTermMemory &)
void setNextProcedureName(std::string name)
int procedure_step_characteristics
Definition: ProcedureStep.h:68
bool executeInstinctiveResponseProcedureTransfer(Operator &, ShortTermMemory &)
std::string getDescription()
void setProcedureStepCharacteristics(int characteristics)
void setProcedureType(int type)
std::string getNextStepName()
void resetStateOfActivation()
double getProcedureStepComplexity()
double getVerificationStepMultiplier()
Definition: Procedures.cpp:65
double getDiagnosisStepMultiplier()
Definition: Procedures.cpp:66
double getObjectiveStepMultiplier()
Definition: Procedures.cpp:62
double getPrerequisiteStepMultiplier()
Definition: Procedures.cpp:63
double getMentalProcedureMultiplier()
Definition: Procedures.cpp:57
double getNormalProcedureMultiplier()
Definition: Procedures.cpp:56
std::map< std::string, ProcedureStep * > procedure_map
Definition: Procedures.h:72
double getProcedureTransferTime()
Definition: Procedures.cpp:55
double getAbnormalProcedureMultiplier()
Definition: Procedures.cpp:58
double getOptimalRecoveryProcedureMultiplier()
Definition: Procedures.cpp:59
double getFunctionalRecoveryProcedureMultipler()
Definition: Procedures.cpp:60
double getMonitoringStepMultiplier()
Definition: Procedures.cpp:64
double getStepTransferTime()
Definition: Procedures.cpp:53
void setInfoSequenceTerminatedByNonResponseAction(std::string)
Definition: Scheduler.cpp:827
void setSequenceTerminatedByNonResponseAction(bool)
Definition: Scheduler.cpp:814
std::string getEOPDirectory()
Definition: Scheduler.cpp:616
InfoChunk perceived_info
void setStateOfActivation(int)
void saveStateOfActivationToFile(std::ofstream &)
void retrieveStateOfActivationFromFile(std::ifstream &)
void copyStateOfActivation(StateOfActivation &)
void setTimerAndProbability(double, double)
struct @0 r5pars_
constexpr int Action
Definition: SimConstants.h:199
constexpr int ProcedureTransfer
Definition: SimConstants.h:263
constexpr int ProcedureXfr
Definition: SimConstants.h:262
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 ECA
Definition: SimConstants.h:274
constexpr int MentalProcedure
Definition: SimConstants.h:275
constexpr int VerificationStep
Definition: SimConstants.h:279
constexpr int EOP
Definition: SimConstants.h:272
constexpr int ObjectiveRelated
Definition: SimConstants.h:276
constexpr int DiagnosisStep
Definition: SimConstants.h:280
constexpr int MonitoringStep
Definition: SimConstants.h:278
constexpr int FRG
Definition: SimConstants.h:273
constexpr int PrerequisiteAction
Definition: SimConstants.h:277
constexpr int NOP
Definition: SimConstants.h:270
constexpr int AOP
Definition: SimConstants.h:271
constexpr int Failed
Definition: SimConstants.h:103
constexpr int Interrupted
Definition: SimConstants.h:124
constexpr int Succeed
Definition: SimConstants.h:104
constexpr int Done
Definition: SimConstants.h:123
constexpr int Active
Definition: SimConstants.h:118
constexpr int Skip
Definition: SimConstants.h:108
constexpr int Control
Definition: SimConstants.h:111
constexpr int Pause
Definition: SimConstants.h:119
constexpr int InstinctiveResponse
Definition: SimConstants.h:175
constexpr int FollowProcedure
Definition: SimConstants.h:177
constexpr int FollowInstruction
Definition: SimConstants.h:180
constexpr int None
Definition: SimConstants.h:75
Scheduler SScheduler
Simulation scheduling, parses CLI options.
Procedures All_procedure
Emergency operating procedures.
OperatorAT Action_Taker
Crew action execution model.
OperatorDM Decision_Maker
Crew decision-making model.
CommandControlCenter Command_handler
Command/control dispatch.
AnalysisInfoContainer Aux_info
Analysis records.
BranchRecord Branch_center
Dynamic event tree state.