CbmRoot
Loading...
Searching...
No Matches
CbmDeviceBuildRawEvents.cxx
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, Dominik Smith [committer] */
4
13
15#include "CbmEvent.h"
16#include "CbmFlesCanvasTools.h"
17#include "CbmMQDefs.h"
18#include "CbmMatch.h"
19#include "CbmMvdDigi.h"
20
21#include "TimesliceMetaData.h"
22
24#include "FairMQLogger.h"
25#include "FairMQProgOptions.h" // device->fConfig
26#include "FairParGenericSet.h"
27#include "FairRunOnline.h"
28
29#include "BoostSerializer.h"
30
31#include "RootSerializer.h"
32
34#include "TCanvas.h"
35#include "TFile.h"
36#include "TH1.h"
37#include "TList.h"
38#include "TNamed.h"
39
40#include <boost/archive/binary_iarchive.hpp>
41#include <boost/serialization/utility.hpp>
42
44#include <array>
45#include <iomanip>
46#include <stdexcept>
47#include <string>
48struct InitTaskError : std::runtime_error {
49 using std::runtime_error::runtime_error;
50};
51
52using namespace std;
53
55
57try {
59 LOG(info) << "Init options for CbmDeviceBuildRawEvents.";
60 fbFillHistos = fConfig->GetValue<bool>("FillHistos");
61 fbIgnoreTsOverlap = fConfig->GetValue<bool>("IgnOverMs");
62
63 fsEvtOverMode = fConfig->GetValue<std::string>("EvtOverMode");
64 fsRefDet = fConfig->GetValue<std::string>("RefDet");
65 fvsAddDet = fConfig->GetValue<std::vector<std::string>>("AddDet");
66 fvsDelDet = fConfig->GetValue<std::vector<std::string>>("DelDet");
67 fvsSetTrigWin = fConfig->GetValue<std::vector<std::string>>("SetTrigWin");
68 fvsSetTrigMinNb = fConfig->GetValue<std::vector<std::string>>("SetTrigMinNb");
69
70 fsChannelNameDataInput = fConfig->GetValue<std::string>("TsNameIn");
71 fsChannelNameDataOutput = fConfig->GetValue<std::string>("EvtNameOut");
72 fsChannelNameHistosInput = fConfig->GetValue<std::string>("ChNameIn");
73 fsChannelNameHistosConfig = fConfig->GetValue<std::string>("ChNameHistCfg");
74 fsChannelNameCanvasConfig = fConfig->GetValue<std::string>("ChNameCanvCfg");
76
77 fuPublishFreqTs = fConfig->GetValue<uint32_t>("PubFreqTs");
78 fdMinPublishTime = fConfig->GetValue<double_t>("PubTimeMin");
79 fdMaxPublishTime = fConfig->GetValue<double_t>("PubTimeMax");
80
81 // Get the information about created channels from the device
82 // Check if the defined channels from the topology (by name)
83 // are in the list of channels which are possible/allowed
84 // for the device
85 // The idea is to check at initilization if the devices are
86 // properly connected. For the time beeing this is done with a
87 // nameing convention. It is not avoided that someone sends other
88 // data on this channel.
89 //logger::SetLogLevel("INFO");
90 int noChannel = fChannels.size();
91 LOG(info) << "Number of defined channels: " << noChannel;
92 for (auto const& entry : fChannels) {
93 LOG(info) << "Channel name: " << entry.first;
94 if (std::string::npos != entry.first.find(fsChannelNameDataInput)) {
95 if (!IsChannelNameAllowed(entry.first)) throw InitTaskError("Channel name does not match.");
96 OnData(entry.first, &CbmDeviceBuildRawEvents::HandleData);
97 }
98 }
99
101 /* clang-format off */
102
107 EOverlapModeRaw mode =
109 : ("MergeOverlap" == fsEvtOverMode ? EOverlapModeRaw::MergeOverlap
110 : ("AllowOverlap" == fsEvtOverMode ? EOverlapModeRaw::AllowOverlap
115 : ("kSts" == fsRefDet ? kRawEventBuilderDetSts
116 : ("kMuch" == fsRefDet ? kRawEventBuilderDetMuch
117 : ("kTrd" == fsRefDet ? kRawEventBuilderDetTrd
118 : ("kTof" == fsRefDet ? kRawEventBuilderDetTof
119 : ("kRich" == fsRefDet ? kRawEventBuilderDetRich
120 : ("kPsd" == fsRefDet ? kRawEventBuilderDetPsd
122 if (kRawEventBuilderDetUndef != refDet) {
124 }
125 else {
126 LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to change "
127 "reference to unsupported detector, ignored! "
128 << fsRefDet;
129 }
130
132 for (std::vector<std::string>::iterator itStrAdd = fvsAddDet.begin();
133 itStrAdd != fvsAddDet.end();
134 ++itStrAdd) {
135 RawEventBuilderDetector addDet = ("kBmon" == *itStrAdd ? kRawEventBuilderDetBmon
136 : ("kSts" == *itStrAdd ? kRawEventBuilderDetSts
137 : ("kMuch" == *itStrAdd ? kRawEventBuilderDetMuch
138 : ("kTrd" == *itStrAdd ? kRawEventBuilderDetTrd
139 : ("kTof" == *itStrAdd ? kRawEventBuilderDetTof
140 : ("kRich" == *itStrAdd ? kRawEventBuilderDetRich
141 : ("kPsd" == *itStrAdd ? kRawEventBuilderDetPsd
143 if (kRawEventBuilderDetUndef != addDet) {
144 fpAlgo->AddDetector(addDet);
145 }
146 else {
147 LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to add "
148 "unsupported detector, ignored! "
149 << (*itStrAdd);
150 continue;
151 }
152 }
153
155 for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin();
156 itStrRem != fvsDelDet.end();
157 ++itStrRem) {
158 RawEventBuilderDetector remDet = ("kBmon" == *itStrRem ? kRawEventBuilderDetBmon
159 : ("kSts" == *itStrRem ? kRawEventBuilderDetSts
160 : ("kMuch" == *itStrRem ? kRawEventBuilderDetMuch
161 : ("kTrd" == *itStrRem ? kRawEventBuilderDetTrd
162 : ("kTof" == *itStrRem ? kRawEventBuilderDetTof
163 : ("kRich" == *itStrRem ? kRawEventBuilderDetRich
164 : ("kPsd" == *itStrRem ? kRawEventBuilderDetPsd
166 if (kRawEventBuilderDetUndef != remDet) {
167 fpAlgo->RemoveDetector(remDet);
168 }
169 else {
170 LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to remove "
171 "unsupported detector, ignored! "
172 << (*itStrRem);
173 continue;
174 }
175 }
177 for (std::vector<std::string>::iterator itStrTrigWin = fvsSetTrigWin.begin();
178 itStrTrigWin != fvsSetTrigWin.end();
179 ++itStrTrigWin) {
180 size_t charPosDel = (*itStrTrigWin).find(',');
181 if (std::string::npos == charPosDel) {
182 LOG(info)
183 << "CbmDeviceBuildRawEvents::InitTask => "
184 << "Trying to set trigger window with invalid option pattern, ignored! "
185 << " (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
186 << (*itStrTrigWin) << " )";
187 continue;
188 }
189
191 std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
192 ECbmModuleId selDet = ("kBmon" == sSelDet ? ECbmModuleId::kBmon
193 : ("kSts" == sSelDet ? ECbmModuleId::kSts
194 : ("kMuch" == sSelDet ? ECbmModuleId::kMuch
195 : ("kTrd" == sSelDet ? ECbmModuleId::kTrd
196 : ("kTof" == sSelDet ? ECbmModuleId::kTof
197 : ("kRich" == sSelDet ? ECbmModuleId::kRich
198 : ("kPsd" == sSelDet ? ECbmModuleId::kPsd
200 if (ECbmModuleId::kNotExist == selDet) {
201 LOG(info)
202 << "CbmDeviceBuildRawEvents::InitTask => "
203 << "Trying to set trigger window for unsupported detector, ignored! "
204 << sSelDet;
205 continue;
206 }
207
209 charPosDel++;
210 std::string sNext = (*itStrTrigWin).substr(charPosDel);
211 charPosDel = sNext.find(',');
212 if (std::string::npos == charPosDel) {
213 LOG(info)
214 << "CbmDeviceBuildRawEvents::InitTask => "
215 << "Trying to set trigger window with invalid option pattern, ignored! "
216 << " (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
217 << (*itStrTrigWin) << " )";
218 continue;
219 }
220 Double_t dWinBeg = std::stod(sNext.substr(0, charPosDel));
221
223 charPosDel++;
224 Double_t dWinEnd = std::stod(sNext.substr(charPosDel));
225
226 fpAlgo->SetTriggerWindow(selDet, dWinBeg, dWinEnd);
227 }
229 for (std::vector<std::string>::iterator itStrMinNb = fvsSetTrigMinNb.begin();
230 itStrMinNb != fvsSetTrigMinNb.end();
231 ++itStrMinNb) {
232 size_t charPosDel = (*itStrMinNb).find(',');
233 if (std::string::npos == charPosDel) {
234 LOG(info)
235 << "CbmDeviceBuildRawEvents::InitTask => "
236 << "Trying to set trigger min Nb with invalid option pattern, ignored! "
237 << " (Should be ECbmModuleId,uMinNb but instead found " << (*itStrMinNb)
238 << " )";
239 continue;
240 }
241
243 std::string sSelDet = (*itStrMinNb).substr(0, charPosDel);
244 ECbmModuleId selDet = ("kBmon" == sSelDet ? ECbmModuleId::kBmon
245 : ("kSts" == sSelDet ? ECbmModuleId::kSts
246 : ("kMuch" == sSelDet ? ECbmModuleId::kMuch
247 : ("kTrd" == sSelDet ? ECbmModuleId::kTrd
248 : ("kTof" == sSelDet ? ECbmModuleId::kTof
249 : ("kRich" == sSelDet ? ECbmModuleId::kRich
250 : ("kPsd" == sSelDet ? ECbmModuleId::kPsd
252 if (ECbmModuleId::kNotExist == selDet) {
253 LOG(info)
254 << "CbmDeviceBuildRawEvents::InitTask => "
255 << "Trying to set trigger min Nb for unsupported detector, ignored! "
256 << sSelDet;
257 continue;
258 }
259
261 charPosDel++;
262 UInt_t uMinNb = std::stoul((*itStrMinNb).substr(charPosDel));
263
264 fpAlgo->SetTriggerMinNumber(selDet, uMinNb);
265 }
266
268 /* clang-format on */
269
271 fvDigiBmon = new std::vector<CbmBmonDigi>();
272 fvDigiSts = new std::vector<CbmStsDigi>();
273 fvDigiMuch = new std::vector<CbmMuchBeamTimeDigi>();
274 fvDigiTrd = new std::vector<CbmTrdDigi>();
275 fvDigiTof = new std::vector<CbmTofDigi>();
276 fvDigiRich = new std::vector<CbmRichDigi>();
277 fvDigiPsd = new std::vector<CbmPsdDigi>();
278
279 fTimeSliceMetaDataArray = new TClonesArray("TimesliceMetaData", 1);
280 if (NULL == fTimeSliceMetaDataArray) { throw InitTaskError("Failed creating the TS meta data TClonesarray "); }
282
291
292 // Mvd currently not implemented in event builder
293 //std::vector<CbmMvdDigi>* pMvdDigi = new std::vector<CbmMvdDigi>();
294
296 fEvents = new TClonesArray("CbmEvent", 500);
297
299 if (kFALSE == fpAlgo->InitAlgo()) { throw InitTaskError("Failed to initilize the algorithm class."); }
300
302 if (kTRUE == fbFillHistos) {
304 std::vector<std::pair<TNamed*, std::string>> vHistos = fpAlgo->GetHistoVector();
306 std::vector<std::pair<TCanvas*, std::string>> vCanvases = fpAlgo->GetCanvasVector();
307
312 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
313 // LOG(info) << "Registering " << vHistos[ uHisto ].first->GetName()
314 // << " in " << vHistos[ uHisto ].second.data()
315 // ;
316 fArrayHisto.Add(vHistos[uHisto].first);
317 std::pair<std::string, std::string> psHistoConfig(vHistos[uHisto].first->GetName(), vHistos[uHisto].second);
318 fvpsHistosFolder.push_back(psHistoConfig);
319
321 FairMQMessagePtr messageHist(NewMessage());
322 // Serialize<BoostSerializer<std::pair<std::string, std::string>>>(*messageHist, psHistoConfig);
323 BoostSerializer<std::pair<std::string, std::string>>().Serialize(*messageHist, psHistoConfig);
324
326 if (Send(messageHist, fsChannelNameHistosConfig) < 0) { throw InitTaskError("Problem sending histo config"); }
327 LOG(info) << "Config of hist " << psHistoConfig.first.data() << " in folder " << psHistoConfig.second.data();
328 }
329
333 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
334 // LOG(info) << "Registering " << vCanvases[ uCanv ].first->GetName()
335 // << " in " << vCanvases[ uCanv ].second.data();
336 std::string sCanvName = (vCanvases[uCanv].first)->GetName();
337 std::string sCanvConf = GenerateCanvasConfigString(vCanvases[uCanv].first);
338
339 std::pair<std::string, std::string> psCanvConfig(sCanvName, sCanvConf);
340
341 fvpsCanvasConfig.push_back(psCanvConfig);
342
344 FairMQMessagePtr messageCan(NewMessage());
345 // Serialize<BoostSerializer<std::pair<std::string, std::string>>>(*messageCan, psCanvConfig);
346 BoostSerializer<std::pair<std::string, std::string>>().Serialize(*messageCan, psCanvConfig);
347
349 if (Send(messageCan, fsChannelNameCanvasConfig) < 0) { throw InitTaskError("Problem sending canvas config"); }
350
351 LOG(info) << "Config string of Canvas " << psCanvConfig.first.data() << " is " << psCanvConfig.second.data();
352 }
353 }
354}
355catch (InitTaskError& e) {
356 LOG(error) << e.what();
357 // Wrapper defined in CbmMQDefs.h to support different FairMQ versions
359}
360
362{
363 for (auto const& entry : fsAllowedChannels) {
364 std::size_t pos1 = channelName.find(entry);
365 if (pos1 != std::string::npos) {
366 const vector<std::string>::const_iterator pos =
367 std::find(fsAllowedChannels.begin(), fsAllowedChannels.end(), entry);
368 const vector<std::string>::size_type idx = pos - fsAllowedChannels.begin();
369 LOG(info) << "Found " << entry << " in " << channelName;
370 LOG(info) << "Channel name " << channelName << " found in list of allowed channel names at position " << idx;
371 return true;
372 }
373 }
374 LOG(info) << "Channel name " << channelName << " not found in list of allowed channel names.";
375 LOG(error) << "Stop device.";
376 return false;
377}
378
379// handler is called whenever a message arrives on "data", with a reference to the message and a sub-channel index (here 0)
380bool CbmDeviceBuildRawEvents::HandleData(FairMQParts& parts, int /*index*/)
381{
383 LOG(debug) << "Received message number " << fulNumMessages << " with " << parts.Size() << " parts"
384 << ", size0: " << parts.At(0)->GetSize();
385
386 if (0 == fulNumMessages % 10000) LOG(info) << "Received " << fulNumMessages << " messages";
387
389 uint32_t uPartIdx = 0;
390
392 // Deserialize<RootSerializer>(*parts.At(uPartIdx), fTsMetaData);
393 RootSerializer().Deserialize(*parts.At(uPartIdx), fTsMetaData);
394 new ((*fTimeSliceMetaDataArray)[fTimeSliceMetaDataArray->GetEntriesFast()])
395 TimesliceMetaData(std::move(*fTsMetaData));
396 ++uPartIdx;
397
399 std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
400 std::istringstream issBmon(msgStrBmon);
401 boost::archive::binary_iarchive inputArchiveBmon(issBmon);
402 inputArchiveBmon >> *fvDigiBmon;
403 ++uPartIdx;
404
406 std::string msgStrSts(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
407 std::istringstream issSts(msgStrSts);
408 boost::archive::binary_iarchive inputArchiveSts(issSts);
409 inputArchiveSts >> *fvDigiSts;
410 ++uPartIdx;
411
413 std::string msgStrMuch(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
414 std::istringstream issMuch(msgStrMuch);
415 boost::archive::binary_iarchive inputArchiveMuch(issMuch);
416 inputArchiveMuch >> *fvDigiMuch;
417 ++uPartIdx;
418
420 std::string msgStrTrd(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
421 std::istringstream issTrd(msgStrTrd);
422 boost::archive::binary_iarchive inputArchiveTrd(issTrd);
423 inputArchiveTrd >> *fvDigiTrd;
424 ++uPartIdx;
425
427 std::string msgStrTof(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
428 std::istringstream issTof(msgStrTof);
429 boost::archive::binary_iarchive inputArchiveTof(issTof);
430 inputArchiveTof >> *fvDigiTof;
431 ++uPartIdx;
432
434 std::string msgStrRich(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
435 std::istringstream issRich(msgStrRich);
436 boost::archive::binary_iarchive inputArchiveRich(issRich);
437 inputArchiveRich >> *fvDigiRich;
438 ++uPartIdx;
439
441 std::string msgStrPsd(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
442 std::istringstream issPsd(msgStrPsd);
443 boost::archive::binary_iarchive inputArchivePsd(issPsd);
444 inputArchivePsd >> *fvDigiPsd;
445 ++uPartIdx;
446
448 fpAlgo->ProcessTs();
449
451 if (!SendEvents(parts)) return false;
452
455
457 fvDigiBmon->clear();
458 fvDigiSts->clear();
459 fvDigiMuch->clear();
460 fvDigiTrd->clear();
461 fvDigiTof->clear();
462 fvDigiRich->clear();
463 fvDigiPsd->clear();
464
467 fEvents->Clear("C");
468
470 if (kTRUE == fbFillHistos) {
474 std::chrono::system_clock::time_point currentTime = std::chrono::system_clock::now();
475 std::chrono::duration<double_t> elapsedSeconds = currentTime - fLastPublishTime;
476 if ((fdMaxPublishTime < elapsedSeconds.count())
477 || (0 == fulNumMessages % fuPublishFreqTs && fdMinPublishTime < elapsedSeconds.count())) {
479 fLastPublishTime = std::chrono::system_clock::now();
480 }
481 }
482
483 return true;
484}
485
486bool CbmDeviceBuildRawEvents::SendEvents(FairMQParts& partsIn)
487{
489 fEvents->Delete();
490
492 std::vector<CbmEvent*> vEvents = fpAlgo->GetEventVector();
493
495 for (CbmEvent* event : vEvents) {
496 LOG(debug) << "Vector: " << event->ToString();
497 new ((*fEvents)[fEvents->GetEntriesFast()]) CbmEvent(std::move(*event));
498 LOG(debug) << "TClonesArray: " << static_cast<CbmEvent*>(fEvents->At(fEvents->GetEntriesFast() - 1))->ToString();
499 }
500
502 FairMQMessagePtr message(NewMessage());
503 // Serialize<RootSerializer>(*message, fEvents);
504 RootSerializer().Serialize(*message, fEvents);
505
507 FairMQParts partsOut(std::move(partsIn));
508 partsOut.AddPart(std::move(message));
509
510 if (Send(partsOut, fsChannelNameDataOutput) < 0) {
511 LOG(error) << "Problem sending data to " << fsChannelNameDataOutput;
512 return false;
513 }
514
515 return true;
516}
517
519{
521 FairMQMessagePtr message(NewMessage());
522 // Serialize<RootSerializer>(*message, &fArrayHisto);
523 RootSerializer().Serialize(*message, &fArrayHisto);
524
526 if (Send(message, fsChannelNameHistosInput) < 0) {
527 LOG(error) << "Problem sending data";
528 return false;
529 }
530
532 fpAlgo->ResetHistograms(kFALSE);
533
534 return true;
535}
536
538{
541 delete fTsMetaData;
542
544 fvDigiBmon->clear();
545 fvDigiSts->clear();
546 fvDigiMuch->clear();
547 fvDigiTrd->clear();
548 fvDigiTof->clear();
549 fvDigiRich->clear();
550 fvDigiPsd->clear();
551
553 fEvents->Delete();
554
555 delete fpRun;
557 delete fEvents;
558 delete fpAlgo;
559}
560
static const RawEventBuilderDetector kRawEventBuilderDetSts
Pre-defined detector types.
static const RawEventBuilderDetector kRawEventBuilderDetBmon
static const RawEventBuilderDetector kRawEventBuilderDetTrd
static const RawEventBuilderDetector kRawEventBuilderDetPsd
static const RawEventBuilderDetector kRawEventBuilderDetRich
static const RawEventBuilderDetector kRawEventBuilderDetTof
static const RawEventBuilderDetector kRawEventBuilderDetMuch
static const RawEventBuilderDetector kRawEventBuilderDetUndef
ECbmModuleId
Definition CbmDefs.h:39
@ kTrd
Transition Radiation Detector.
@ kTof
Time-of-flight Detector.
@ kNotExist
If not found.
@ kPsd
Projectile spectator detector.
@ kSts
Silicon Tracking System.
@ kMuch
Muon detection system.
@ kRich
Ring-Imaging Cherenkov Detector.
std::string GenerateCanvasConfigString(TCanvas *pCanv)
bool first
void SetEventOverlapMode(EOverlapModeRaw mode)
Control flags.
void SetTimeSliceMetaDataArray(TClonesArray *TimeSliceMetaDataArray)
std::vector< std::pair< TNamed *, std::string > > GetHistoVector()
void SetIgnoreTsOverlap(Bool_t bFlagIn=kTRUE)
std::vector< std::pair< TCanvas *, std::string > > GetCanvasVector()
void RemoveDetector(RawEventBuilderDetector selDet)
void AddDetector(ECbmModuleId selDet, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn=0, Int_t iTriggerMaxDigisIn=-1, Double_t fdTimeWinBegIn=-100, Double_t fdTimeWinEndIn=100)
std::vector< CbmEvent * > & GetEventVector()
Data output access.
void ResetHistograms(Bool_t bResetTime=kTRUE)
void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
void SetDigis(std::vector< CbmBmonDigi > *BmonDigis)
Set digi containers.
void SetReferenceDetector(ECbmModuleId refDet, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn=0, Int_t iTriggerMaxDigisIn=-1, Double_t fdTimeWinBegIn=-100, Double_t fdTimeWinEndIn=100)
void SetTriggerWindow(ECbmModuleId selDet, Double_t dWinBeg, Double_t dWinEnd)
std::string fsEvtOverMode
Switch ON/OFF filling of histograms.
std::vector< CbmTofDigi > * fvDigiTof
TClonesArray * fEvents
Data emission.
bool HandleData(FairMQParts &, int)
std::vector< CbmMuchBeamTimeDigi > * fvDigiMuch
std::vector< std::string > fvsSetTrigMinNb
std::vector< CbmStsDigi > * fvDigiSts
std::string fsChannelNameDataInput
message queues
std::vector< std::string > fvsAddDet
std::vector< std::string > fsAllowedChannels
List of MQ channels names.
std::vector< std::string > fvsDelDet
std::vector< std::pair< std::string, std::string > > fvpsCanvasConfig
Bool_t fbFillHistos
Ignore data in Overlap part of the TS.
uint32_t fuPublishFreqTs
Histograms management.
bool SendEvents(FairMQParts &partsIn)
TClonesArray * fTimeSliceMetaDataArray
Total size of all MS in a TS, [nanoseconds].
std::vector< CbmPsdDigi > * fvDigiPsd
std::vector< std::pair< std::string, std::string > > fvpsHistosFolder
Vector of string pairs with ( HistoName, FolderPath ) to send to the histogram server.
std::vector< CbmBmonDigi > * fvDigiBmon
Digis storage.
std::vector< CbmRichDigi > * fvDigiRich
bool IsChannelNameAllowed(std::string channelName)
TObjArray fArrayHisto
Array of histograms to send to the histogram server.
std::chrono::system_clock::time_point fLastPublishTime
FairRunOnline * fpRun
output container of CbmEvents
std::vector< std::string > fvsSetTrigWin
std::vector< CbmTrdDigi > * fvDigiTrd
CbmAlgoBuildRawEvents * fpAlgo
Processing algos.
uint64_t fulNumMessages
Statistics & first TS rejection.
Class characterising one event by a collection of links (indices) to data objects,...
Definition CbmEvent.h:34
std::string ToString() const
Definition CbmEvent.cxx:96
void ChangeState(FairMQDevice *device, cbm::mq::Transition transition)
Definition CbmMQDefs.h:26
Hash for CbmL1LinkKey.