/* Copyright (C) 2019 PI-UHd, GSI SPDX-License-Identifier: GPL-3.0-only Authors: Norbert Herrmann [committer] */ /** * CbmDeviceEventBuilderEtofStar2019.h * */ #ifndef CBMDEVICEEVENTBUILDERETOFSTAR2019_H_ #define CBMDEVICEEVENTBUILDERETOFSTAR2019_H_ #include "CbmMqTMessage.h" #include "Timeslice.hpp" #include "FairMQDevice.h" #include "TMessage.h" #include "TStopwatch.h" class CbmStar2019EventBuilderEtofAlgo; class CbmStar2019TofPar; class CbmDeviceEventBuilderEtofStar2019 : public FairMQDevice { public: CbmDeviceEventBuilderEtofStar2019(); virtual ~CbmDeviceEventBuilderEtofStar2019(); virtual Bool_t DoUnpack(const fles::Timeslice& ts, size_t component); virtual void Reset(); virtual void Finish(); void SetParContainers(); Bool_t InitContainers(); Bool_t ReInitContainers(); void SetSandboxMode(Bool_t bSandboxMode = kTRUE) { fbSandboxMode = bSandboxMode; } void SetEventDumpEnable(Bool_t bDumpEna = kTRUE); /// Temp until we change from CbmMcbmUnpack to something else void AddMsComponentToList(size_t component, UShort_t usDetectorId); void SetNbMsInTs(size_t /*uCoreMsNb*/, size_t /*uOverlapMsNb*/) {}; CbmDeviceEventBuilderEtofStar2019(const CbmDeviceEventBuilderEtofStar2019&) = delete; CbmDeviceEventBuilderEtofStar2019 operator=(const CbmDeviceEventBuilderEtofStar2019&) = delete; protected: virtual void InitTask(); bool HandleData(FairMQMessagePtr&, int); bool HandleParts(FairMQParts&, int); bool HandleMessage(FairMQMessagePtr&, int); virtual bool SendEvent(std::vector<Int_t>, int); virtual bool SendSubevent(uint, char*, int, int); private: uint64_t fNumMessages; /// Control flags Bool_t fbMonitorMode; //! Switch ON the filling of a minimal set of histograms Bool_t fbDebugMonitorMode; //! Switch ON the filling of a additional set of histograms Bool_t fbSandboxMode; //! Switch OFF the emission of data toward the STAR DAQ Bool_t fbEventDumpEna; //! Switch ON the dumping of the events to a binary file /// Parameters management TList* fParCList; /// Statistics & first TS rejection uint64_t fulTsCounter; uint64_t fNumEvt; bool CheckTimeslice(const fles::Timeslice& ts); bool IsChannelNameAllowed(std::string channelName); std::vector<std::string> fAllowedChannels = {"tofcomponent", "parameters", "etofevts", "syscmd"}; std::vector<std::vector<std::string>> fChannelsToSend = {{}, {}, {}}; /// Processing algo CbmStar2019EventBuilderEtofAlgo* fEventBuilderAlgo; TStopwatch fTimer; CbmStar2019TofPar* fUnpackPar; //! /// Event dump to binary file std::fstream* fpBinDumpFile; const UInt_t kuBinDumpBegWord = 0xFEEDBEAF; const UInt_t kuBinDumpEndWord = 0xFAEBDEEF; }; #endif /* CBMDEVICEEVENTBUILDERETOFSTAR2019_H_ */