CbmRoot
Loading...
Searching...
No Matches
CbmDeviceMcbmEventSink.h
Go to the documentation of this file.
1/* Copyright (C) 2020-2021 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
12#ifndef CBMDEVICEMCBMEVTSINK_H_
13#define CBMDEVICEMCBMEVTSINK_H_
14
16#include "CbmEvent.h"
17#include "CbmMqTMessage.h"
18#include "CbmMuchBeamTimeDigi.h"
19#include "CbmPsdDigi.h"
20#include "CbmRichDigi.h"
21#include "CbmStsDigi.h"
22#include "CbmTofDigi.h"
23#include "CbmTrdDigi.h"
24
25#include "TimesliceMetaData.h"
26
28#include "FairMQDevice.h"
29
31#include "Rtypes.h"
32#include "TClonesArray.h"
33#include "TObjArray.h"
34
36#include <chrono>
37#include <map>
38#include <vector>
39
40class TFile;
41class TList;
42class TClonesArray;
43//class TimesliceMetaData;
44class FairRunOnline;
45class FairRootManager;
46
49public:
50 CbmUnpackedTimeslice(FairMQParts& parts);
52
54 std::vector<CbmTofDigi> fvDigiBmon;
55 std::vector<CbmStsDigi> fvDigiSts;
56 std::vector<CbmMuchBeamTimeDigi> fvDigiMuch;
57 std::vector<CbmTrdDigi> fvDigiTrd;
58 std::vector<CbmTofDigi> fvDigiTof;
59 std::vector<CbmRichDigi> fvDigiRich;
60 std::vector<CbmPsdDigi> fvDigiPsd;
61 TClonesArray fEventsArray;
62};
63
64class CbmDeviceMcbmEventSink : public FairMQDevice {
65public:
68
69protected:
70 virtual void InitTask();
71 bool HandleMissTsData(FairMQMessagePtr&, int);
72 bool HandleData(FairMQParts&, int);
73 bool HandleCommand(FairMQMessagePtr&, int);
74
75private:
77
79 Bool_t fbFillHistos = kFALSE;
80 Bool_t fbFinishDone = kFALSE;
81
84 std::string fsOutputFileName = "mcbm_digis_events.root";
86 std::string fsChannelNameMissedTs = "missedts";
87 std::string fsChannelNameDataInput = "events";
88 std::string fsChannelNameCommands = "commands";
89 std::string fsChannelNameHistosInput = "histogram-in";
90 std::string fsChannelNameHistosConfig = "histo-conf";
91 std::string fsChannelNameCanvasConfig = "canvas-conf";
93 uint32_t fuPublishFreqTs = 100;
94 double_t fdMinPublishTime = 0.5;
95 double_t fdMaxPublishTime = 5.0;
96
98 std::vector<std::string> fsAllowedChannels = {fsChannelNameDataInput};
99
101 // TList* fParCList = nullptr;
102 // Bool_t InitParameters( TList* fParCList );
103
105 uint64_t fuPrevTsIndex = 0;
106 uint64_t fulNumMessages = 0;
107 uint64_t fulTsCounter = 0;
108 uint64_t fulMissedTsCounter = 0;
109 std::chrono::system_clock::time_point fLastPublishTime = std::chrono::system_clock::now();
110
112 bool fbReceivedEof = false;
113 uint64_t fuLastTsIndex = 0;
114 uint64_t fuTotalTsCount = 0;
115
118 // FairEventHeader* fEvtHeader;
120 TClonesArray* fTimeSliceMetaDataArray = nullptr;
123 std::vector<CbmTofDigi>* fvDigiBmon = nullptr;
124 std::vector<CbmStsDigi>* fvDigiSts = nullptr;
125 std::vector<CbmMuchBeamTimeDigi>* fvDigiMuch = nullptr;
126 std::vector<CbmTrdDigi>* fvDigiTrd = nullptr;
127 std::vector<CbmTofDigi>* fvDigiTof = nullptr;
128 std::vector<CbmRichDigi>* fvDigiRich = nullptr;
129 std::vector<CbmPsdDigi>* fvDigiPsd = nullptr;
131 TClonesArray* fEventsArray = nullptr;
132 // std::vector< CbmEvent * > & fEventVector; //! vector with all created events
133
136 std::vector<uint64_t> fvulMissedTsIndices = {};
138 std::map<uint64_t, CbmUnpackedTimeslice> fmFullTsStorage = {};
139
141 FairRunOnline* fpRun = nullptr;
142 FairRootManager* fpFairRootMgr = nullptr;
143
145 TObjArray fArrayHisto = {};
147 std::vector<std::pair<std::string, std::string>> fvpsHistosFolder = {};
151 std::vector<std::pair<std::string, std::string>> fvpsCanvasConfig = {};
152
154 bool IsChannelNameAllowed(std::string channelName);
155 // Bool_t InitContainers();
156 void CheckTsQueues();
158 void DumpTreeEntry();
159 bool SendHistograms();
160 void Finish();
161};
162
163#endif /* CBMDEVICEMCBMEVTSINK_H_ */
TObjArray fArrayHisto
Array of histograms to send to the histogram server.
std::vector< std::pair< std::string, std::string > > fvpsHistosFolder
Vector of string pairs with ( HistoName, FolderPath ) to send to the histogram server.
std::vector< CbmRichDigi > * fvDigiRich
TimesliceMetaData * fTsMetaData
std::vector< CbmPsdDigi > * fvDigiPsd
std::vector< CbmTrdDigi > * fvDigiTrd
void PrepareTreeEntry(CbmUnpackedTimeslice unpTs)
std::vector< std::pair< std::string, std::string > > fvpsCanvasConfig
uint64_t fuPrevTsIndex
Parameters management.
std::string fsOutputFileName
Keep track of whether the Finish was already called.
std::vector< CbmTofDigi > * fvDigiTof
std::chrono::system_clock::time_point fLastPublishTime
uint32_t fuPublishFreqTs
Histograms management.
bool fbReceivedEof
Control Commands reception.
std::vector< CbmMuchBeamTimeDigi > * fvDigiMuch
std::vector< std::string > fsAllowedChannels
List of MQ channels names.
std::vector< CbmTofDigi > * fvDigiBmon
Digis storage.
bool IsChannelNameAllowed(std::string channelName)
Internal methods.
bool HandleData(FairMQParts &, int)
TClonesArray * fEventsArray
CbmEvents.
bool HandleMissTsData(FairMQMessagePtr &, int)
Bool_t fbFinishDone
Switch ON/OFF filling of histograms.
FairRunOnline * fpRun
Data storage.
std::map< uint64_t, CbmUnpackedTimeslice > fmFullTsStorage
Buffered TS.
std::vector< uint64_t > fvulMissedTsIndices
output container of CbmEvents
bool HandleCommand(FairMQMessagePtr &, int)
std::vector< CbmStsDigi > * fvDigiSts
std::string fsChannelNameMissedTs
message queues
TClonesArray * fTimeSliceMetaDataArray
TS MetaData storage.
std::vector< CbmRichDigi > fvDigiRich
std::vector< CbmPsdDigi > fvDigiPsd
std::vector< CbmTrdDigi > fvDigiTrd
std::vector< CbmMuchBeamTimeDigi > fvDigiMuch
CbmUnpackedTimeslice(FairMQParts &parts)
TODO: rename to CbmTsWithEvents.
std::vector< CbmTofDigi > fvDigiTof
TimesliceMetaData fTsMetaData
std::vector< CbmStsDigi > fvDigiSts
std::vector< CbmTofDigi > fvDigiBmon