/** @file CbmErrorMessage.h ** @author Pierre-Alain Loizeau ** @date 19.02.2020 **/ #ifndef CBMERRORMESSAGE_H #define CBMERRORMESSAGE_H 1 /// CbmRoot (+externals) headers #include "CbmDefs.h" /// FairRoot headers /// Fairsoft (Root, Boost, ...) headers #include // for THashConsistencyHolder, ClassDef #include // for UInt_t, Double_t, Int_t #include #include /// C/C++ headers #include // for string #include // for unique_ptr /** @class CbmErrorMessage ** @brief Base class for persistent representation of error messages information. ** @author Pierre-Alain Loizeau ** @since 19.02.2020 ** @version 19.02.2020 ** ** CbmErrorMessage is a base class for the ROOT representation of ** the error message delivered by the detector readout chains. ** The available information fields are the system ID, the time stamp, ** an origin index (address), the flags and (optionally) a payload. ** ** The base class only provides bulk setters/getters, with the idea that ** derived class will provide direct accessors to specific flags/payloads. **/ class CbmErrorMessage { public: /** Default constructor **/ CbmErrorMessage(){}; /** * \brief Standard constructor. * \param[in] sysId System ID from ECbmModuleId enum. * \param[in] dTime Error time [ns]. * \param[in] uAddress Some address for the error source. * \param[in] uFlags Flags/error pattern, 32b available. * \param[in] uPayload Optional error payload, 32b available. **/ CbmErrorMessage( ECbmModuleId sysId, Double_t dTime, UInt_t uAddress, UInt_t uFlags, UInt_t uPayload = 0 ); /** Destructor **/ ~CbmErrorMessage(); /** @brief Class name (static) ** @return CbmErrorMessage **/ static const char* GetClassName() { return "CbmErrorMessage"; } /** @brief System (enum DetectorId) **/ ECbmModuleId GetSystemId() const { return fModuleId; } /** @brief Absolute time [ns] **/ Double_t GetTime() const { return fdTime; } /** @brief Origin address **/ UInt_t GetAddress() const { return fuAddress; } /** @brief Flags (bitfield) **/ UInt_t GetFlags() const { return fuFlags; } /** @brief Payload (optional) **/ UInt_t GetPayload() const { return fuPayload; } /** @brief Output information **/ std::string ToString() const; template void serialize(Archive& ar, const unsigned int /*version*/) { ar& fModuleId; ar& fdTime; ar& fuAddress; ar& fuFlags; ar& fuPayload; } private: friend class boost::serialization::access; ECbmModuleId fModuleId = ECbmModuleId::kLastModule; Double_t fdTime = -1.0; UInt_t fuAddress = 0; UInt_t fuFlags = 0; UInt_t fuPayload = 0; ClassDefNV(CbmErrorMessage,1); }; #endif