CARMA C++
Evaluators.h
1 /*
2  * Fault System DAG Tree Evaluators
3  *
4  * Copyright (c) 2010 Ira W. Snyder <iws@ovro.caltech.edu>
5  */
6 
7 #ifndef EVALUATORS_H
8 #define EVALUATORS_H
9 
10 #include <carma/fault/AlarmFaultAccumulator.h>
11 #include <carma/fault/DagMLNode.h>
12 
13 /*----------------------------------------------------------------------------*/
14 /* Blank/Flag Node Evaluator */
15 /*----------------------------------------------------------------------------*/
16 
17 struct BFEvalResult {
18  uint32_t bitmask;
19  DagMLNodeList faults;
20 };
21 
22 class BFEvaluator
23 {
24  public:
25  BFEvaluator();
26 
27  void attach_to_monitor_system(carma::monitor::MonitorSystem *inputCms,
29  void set_monitor_map(const DagMLNodeMap &monitor_map);
30  void set_gather_map(const DagMLNodeMap &gather_map);
31 
32  // transient support
33  void set_correlator_noise(const int saNo, const bool on);
34 
35  void evaluate(const int frame, DagMLNodePtr node, struct BFEvalResult &result);
36 
37  private:
38 
39  /*
40  * Evaluate the validity of a tree of nodes
41  *
42  * This is a dispatcher based on node type. All non-masked faulting
43  * nodes will be returned in the list of faults.
44  */
45  void evaluate_node_recursive(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
46 
47  /* Evaluators for each node type */
48  void evaluate_mp_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
49  void evaluate_mp_ref_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
50  void evaluate_gather_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
51  void evaluate_gather_ref_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
52  void evaluate_transient_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
53  void evaluate_bfoutput_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
54  void evaluate_if_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
55  void evaluate_varmap_scope_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
56  void evaluate_bad_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
57 
58  /*
59  * Update the bitmask as needed
60  */
61  void addErrorBit(enum DagMLNode::EffectBits bit);
62 
65 
66  DagMLNodeMap monitor_map_;
67  DagMLNodeMap gather_map_;
68 
69  std::vector<bool> correlatorNoiseOn_;
70 
71  /* per-evaluation faults and effect */
72  DagMLNodeList faults_;
73  uint32_t bitmask_;
74 };
75 
76 /*----------------------------------------------------------------------------*/
77 /* Alarm Output Node Evaluator */
78 /*----------------------------------------------------------------------------*/
79 
80 struct AlarmEvalResult {
81  bool noisyAlarm;
82  bool silentAlarm;
83  DagMLNodeList faults;
84  AccumulatorList history;
85 };
86 
87 class AlarmEvaluator
88 {
89  public:
90  AlarmEvaluator();
91 
92  void attach_to_monitor_system(carma::monitor::MonitorSystem *inputCms,
94  void set_monitor_map(const DagMLNodeMap &monitor_map);
95  void set_gather_map(const DagMLNodeMap &gather_map);
96 
97  // transient support
98  void set_alarm_enable_subarray(const int saNo, const bool on);
99 
100  void evaluate(const int frame, DagMLNodePtr node, struct AlarmEvalResult &result);
101 
102  private:
103 
104  /*
105  * Evaluate the validity of a tree of nodes
106  *
107  * This is a dispatcher based on node type. All non-masked faulting
108  * nodes will be returned in the list of faults.
109  */
110  void evaluate_node_recursive(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
111 
112  /* Evaluators for each node type */
113  void evaluate_mp_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
114  void evaluate_mp_ref_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
115  void evaluate_gather_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
116  void evaluate_gather_ref_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
117  void evaluate_top_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
118  void evaluate_transient_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
119  void evaluate_if_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
120  void evaluate_varmap_scope_node(DagMLNodePtr node, const DagMLNodeUpdateInfo &info);
121 
123  carma::monitor::MonitorSystem *outputCms_;
124 
125  AlarmFaultAccumulator accumulator_;
126  DagMLNodeMap monitor_map_;
127  DagMLNodeMap gather_map_;
128  std::vector<bool> alarmEnableSubarray_;
129 
130  /* per-evaluation faults */
131  DagMLNodeList faults_;
132 };
133 
134 #endif /* EVALUATORS_H */
Monitor system base class.
Definition: MonitorSystem.h:81