1 #ifndef __DIADES__AUTOMATA__CLASSICALDIAGNOSER__HH 2 #define __DIADES__AUTOMATA__CLASSICALDIAGNOSER__HH 9 #include <unordered_map> 10 #include <unordered_set> 11 #include <boost/dynamic_bitset.hpp> 23 namespace serialization
27 template<
class Archive>
28 void load(Archive & ar, FaultSet & bset,
const unsigned int version)
32 bset.resize(s.length(),
false);
33 for(
unsigned i = 0; i < s.length();++i)
35 bset.set(bset.size() - 1 - i, (s[i]==
'1'));
40 template<
class Archive>
41 void save(Archive & ar,
const FaultSet & bset,
const unsigned int version)
52 BOOST_SERIALIZATION_SPLIT_FREE(boost::dynamic_bitset<>)
78 static string typeName() {
return "Automata::ClassicalDiagnoser"; }
105 typedef unordered_map< Event, unordered_multimap< State, FaultSet > >
ReachableInfo;
124 const unordered_set<Event> & faults,
bool silentClosure);
141 unordered_multimap< State, FaultSet > & result);
151 void initModelStatesLabels(
const ObservableComponent & model, vector<State> & modelStateOf,
170 ConstNodeMap< unordered_multimap< State, FaultSet > > & silent);
187 const unordered_set<Event> & faults,
189 NodeMap< pair<int, FaultSet > > & stateInfoNonDet,
191 unordered_set<State> & initialStateNonDetState,
217 FaultStatus getFaultStatus(
State diagnoserState,
const Event & fault)
const;
250 return _diagnosedEvents.begin();
257 return _diagnosedEvents.end();
265 return _diagnosedEvents.size();
286 bool initialize() { currentDiagnoserState = initialState();
return currentDiagnoserState.valid(); }
291 void getDiagnosis(
Diagnosis & diagnosis)
const;
296 void diagnose(
const Event & obs);
303 bool isConsistent(
const Event & obs)
const;
319 bool diagnoser2dot(
const string & fileName,
string &
log)
const;
349 bool diagnoser2hd(
const string & fileName,
string & log)
const;
364 template<
class Archive>
365 void serialize(Archive & ar,
const unsigned int version)
368 ar & boost::serialization::base_object<ObservableComponent>(*this);
369 ar & _diagnosedEvents;
373 ar & currentDiagnoserState;
boost::dynamic_bitset FaultSet
vector< FaultSet::size_type > faultToIndex
unordered_set< Event >::const_iterator beginOfDiagnosedEvents() const
pair< ModelState, FaultSet > DiagnosisHypothesis
Diades::Utils::Exception< ClassicalDiagnoser > Exception
State currentDiagnoserState
boost::dynamic_bitset FaultSet
An observable Component defined as a automaton.
unordered_set< Event > _diagnosedEvents
unordered_map< Event, unordered_multimap< State, FaultSet > > ReachableInfo
Node source(const Edge &edge) const
unsigned numberOfDiagnosedEvents() const
void serialize(Archive &ar, const unsigned int version)
vector< string > labelStates
Namespace of the Diades project.
unordered_set< Event >::const_iterator endOfDiagnosedEvents() const
NodeMap< DiagnoserInfoState > stateInfo
multimap< ModelState, FaultSet > DiagnoserInfoState
virtual ~ClassicalDiagnoser()
Log log(Logger logger, const string &msg)
Diades::Graph::Node State
void load(Archive &ar, FaultSet &bset, const unsigned int version)
Namespace of the Graph library (libGraph)
State initialState() const
vector< Event > indexToFault
void save(Archive &ar, const FaultSet &bset, const unsigned int version)