59 LOG(info) <<
"Init options for CbmDeviceBuildRawEvents.";
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");
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;
112 fpAlgo->SetEventOverlapMode(mode);
123 fpAlgo->SetReferenceDetector(refDet);
126 LOG(info) <<
"CbmDeviceBuildRawEvents::InitTask => Trying to change "
127 "reference to unsupported detector, ignored! "
132 for (std::vector<std::string>::iterator itStrAdd =
fvsAddDet.begin();
144 fpAlgo->AddDetector(addDet);
147 LOG(info) <<
"CbmDeviceBuildRawEvents::InitTask => Trying to add "
148 "unsupported detector, ignored! "
155 for (std::vector<std::string>::iterator itStrRem =
fvsDelDet.begin();
167 fpAlgo->RemoveDetector(remDet);
170 LOG(info) <<
"CbmDeviceBuildRawEvents::InitTask => Trying to remove "
171 "unsupported detector, ignored! "
177 for (std::vector<std::string>::iterator itStrTrigWin =
fvsSetTrigWin.begin();
180 size_t charPosDel = (*itStrTrigWin).find(
',');
181 if (std::string::npos == charPosDel) {
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) <<
" )";
191 std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
202 <<
"CbmDeviceBuildRawEvents::InitTask => "
203 <<
"Trying to set trigger window for unsupported detector, ignored! "
210 std::string sNext = (*itStrTrigWin).substr(charPosDel);
211 charPosDel = sNext.find(
',');
212 if (std::string::npos == charPosDel) {
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) <<
" )";
220 Double_t dWinBeg = std::stod(sNext.substr(0, charPosDel));
224 Double_t dWinEnd = std::stod(sNext.substr(charPosDel));
226 fpAlgo->SetTriggerWindow(selDet, dWinBeg, dWinEnd);
229 for (std::vector<std::string>::iterator itStrMinNb =
fvsSetTrigMinNb.begin();
232 size_t charPosDel = (*itStrMinNb).find(
',');
233 if (std::string::npos == charPosDel) {
235 <<
"CbmDeviceBuildRawEvents::InitTask => "
236 <<
"Trying to set trigger min Nb with invalid option pattern, ignored! "
237 <<
" (Should be ECbmModuleId,uMinNb but instead found " << (*itStrMinNb)
243 std::string sSelDet = (*itStrMinNb).substr(0, charPosDel);
254 <<
"CbmDeviceBuildRawEvents::InitTask => "
255 <<
"Trying to set trigger min Nb for unsupported detector, ignored! "
262 UInt_t uMinNb = std::stoul((*itStrMinNb).substr(charPosDel));
264 fpAlgo->SetTriggerMinNumber(selDet, uMinNb);
272 fvDigiSts =
new std::vector<CbmStsDigi>();
273 fvDigiMuch =
new std::vector<CbmMuchBeamTimeDigi>();
274 fvDigiTrd =
new std::vector<CbmTrdDigi>();
275 fvDigiTof =
new std::vector<CbmTofDigi>();
277 fvDigiPsd =
new std::vector<CbmPsdDigi>();
296 fEvents =
new TClonesArray(
"CbmEvent", 500);
299 if (kFALSE ==
fpAlgo->InitAlgo()) {
throw InitTaskError(
"Failed to initilize the algorithm class."); }
304 std::vector<std::pair<TNamed*, std::string>> vHistos =
fpAlgo->GetHistoVector();
306 std::vector<std::pair<TCanvas*, std::string>> vCanvases =
fpAlgo->GetCanvasVector();
312 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
317 std::pair<std::string, std::string> psHistoConfig(vHistos[uHisto].
first->GetName(), vHistos[uHisto].second);
321 FairMQMessagePtr messageHist(NewMessage());
323 BoostSerializer<std::pair<std::string, std::string>>().Serialize(*messageHist, psHistoConfig);
327 LOG(info) <<
"Config of hist " << psHistoConfig.first.data() <<
" in folder " << psHistoConfig.second.data();
333 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
336 std::string sCanvName = (vCanvases[uCanv].first)->GetName();
339 std::pair<std::string, std::string> psCanvConfig(sCanvName, sCanvConf);
344 FairMQMessagePtr messageCan(NewMessage());
346 BoostSerializer<std::pair<std::string, std::string>>().Serialize(*messageCan, psCanvConfig);
351 LOG(info) <<
"Config string of Canvas " << psCanvConfig.first.data() <<
" is " << psCanvConfig.second.data();
356 LOG(error) << e.what();
383 LOG(debug) <<
"Received message number " <<
fulNumMessages <<
" with " << parts.Size() <<
" parts"
384 <<
", size0: " << parts.At(0)->GetSize();
389 uint32_t uPartIdx = 0;
393 RootSerializer().Deserialize(*parts.At(uPartIdx),
fTsMetaData);
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);
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);
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);
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);
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);
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);
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);
466 fpAlgo->ClearEventVector();
474 std::chrono::system_clock::time_point currentTime = std::chrono::system_clock::now();
475 std::chrono::duration<double_t> elapsedSeconds = currentTime -
fLastPublishTime;