61 LOG(info) <<
"Init options for CbmDeviceBuildDigiEvents.";
65 fsEvtOverMode = fConfig->GetValue<std::string>(
"EvtOverMode");
66 fsRefDet = fConfig->GetValue<std::string>(
"RefDet");
67 fvsAddDet = fConfig->GetValue<std::vector<std::string>>(
"AddDet");
68 fvsDelDet = fConfig->GetValue<std::vector<std::string>>(
"DelDet");
69 fvsSetTrigWin = fConfig->GetValue<std::vector<std::string>>(
"SetTrigWin");
70 fvsSetTrigMinNb = fConfig->GetValue<std::vector<std::string>>(
"SetTrigMinNb");
71 fvsSetTrigMaxNb = fConfig->GetValue<std::vector<std::string>>(
"SetTrigMaxNb");
95 int noChannel = fChannels.size();
96 LOG(info) <<
"Number of defined channels: " << noChannel;
97 for (
auto const& entry : fChannels) {
98 LOG(info) <<
"Channel name: " << entry.first;
116 fpAlgo->SetEventOverlapMode(mode);
120 fpAlgo->SetReferenceDetector(refDet);
123 LOG(info) <<
"CbmDeviceBuildDigiEvents::InitTask => Trying to change "
124 "reference to unsupported detector, ignored! "
129 for (std::vector<std::string>::iterator itStrAdd =
fvsAddDet.begin();
134 fpAlgo->AddDetector(addDet);
137 LOG(info) <<
"CbmDeviceBuildDigiEvents::InitTask => Trying to add "
138 "unsupported detector, ignored! "
145 for (std::vector<std::string>::iterator itStrRem =
fvsDelDet.begin();
150 fpAlgo->RemoveDetector(remDet);
153 LOG(info) <<
"CbmDeviceBuildDigiEvents::InitTask => Trying to remove "
154 "unsupported detector, ignored! "
161 for (std::vector<std::string>::iterator itStrTrigWin =
fvsSetTrigWin.begin();
164 size_t charPosDel = (*itStrTrigWin).find(
',');
165 if (std::string::npos == charPosDel) {
167 <<
"CbmDeviceBuildDigiEvents::InitTask => "
168 <<
"Trying to set trigger window with invalid option pattern, ignored! "
169 <<
" (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
170 << (*itStrTrigWin) <<
" )";
175 std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
179 <<
"CbmDeviceBuildDigiEvents::InitTask => "
180 <<
"Trying to set trigger window for unsupported detector, ignored! "
187 std::string sNext = (*itStrTrigWin).substr(charPosDel);
188 charPosDel = sNext.find(
',');
189 if (std::string::npos == charPosDel) {
191 <<
"CbmDeviceBuildDigiEvents::InitTask => "
192 <<
"Trying to set trigger window with invalid option pattern, ignored! "
193 <<
" (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
194 << (*itStrTrigWin) <<
" )";
197 Double_t dWinBeg = std::stod(sNext.substr(0, charPosDel));
201 Double_t dWinEnd = std::stod(sNext.substr(charPosDel));
203 fpAlgo->SetTriggerWindow(selDet, dWinBeg, dWinEnd);
207 for (std::vector<std::string>::iterator itStrMinNb =
fvsSetTrigMinNb.begin();
210 size_t charPosDel = (*itStrMinNb).find(
',');
211 if (std::string::npos == charPosDel) {
213 <<
"CbmDeviceBuildDigiEvents::InitTask => "
214 <<
"Trying to set trigger min Nb with invalid option pattern, ignored! "
215 <<
" (Should be ECbmModuleId,uMinNb but instead found " << (*itStrMinNb)
221 std::string sSelDet = (*itStrMinNb).substr(0, charPosDel);
225 <<
"CbmDeviceBuildDigiEvents::InitTask => "
226 <<
"Trying to set trigger min Nb for unsupported detector, ignored! "
233 UInt_t uMinNb = std::stoul((*itStrMinNb).substr(charPosDel));
235 fpAlgo->SetTriggerMinNumber(selDet, uMinNb);
239 for (std::vector<std::string>::iterator itStrMaxNb =
fvsSetTrigMaxNb.begin();
242 size_t charPosDel = (*itStrMaxNb).find(
',');
243 if (std::string::npos == charPosDel) {
245 <<
"CbmDeviceBuildDigiEvents::InitTask => "
246 <<
"Trying to set trigger Max Nb with invalid option pattern, ignored! "
247 <<
" (Should be ECbmModuleId,uMaxNb but instead found " << (*itStrMaxNb)
253 std::string sSelDet = (*itStrMaxNb).substr(0, charPosDel);
257 <<
"CbmDeviceBuildDigiEvents::InitTask => "
258 <<
"Trying to set trigger Max Nb for unsupported detector, ignored! "
265 Int_t iMaxNb = std::stol((*itStrMaxNb).substr(charPosDel));
267 fpAlgo->SetTriggerMaxNumber(selDet, iMaxNb);
273 ++itStrMinLayersNb) {
274 size_t charPosDel = (*itStrMinLayersNb).find(
',');
275 if (std::string::npos == charPosDel) {
277 <<
"CbmDeviceBuildDigiEvents::InitTask => "
278 <<
"Trying to set trigger min layers Nb with invalid option pattern, ignored! "
279 <<
" (Should be ECbmModuleId,uMinLayersNb but instead found " << (*itStrMinLayersNb)
285 std::string sSelDet = (*itStrMinLayersNb).substr(0, charPosDel);
289 <<
"CbmDeviceBuildDigiEvents::InitTask => "
290 <<
"Trying to set trigger min layers Nb for unsupported detector, ignored! "
297 UInt_t uMinLayersNb = std::stoul((*itStrMinLayersNb).substr(charPosDel));
299 fpAlgo->SetTriggerMinLayersNumber(selDet, uMinLayersNb);
305 ++itStrHistMaxDigi) {
306 size_t charPosDel = (*itStrHistMaxDigi).find(
',');
307 if (std::string::npos == charPosDel) {
309 <<
"CbmDeviceBuildDigiEvents::InitTask => "
310 <<
"Trying to set Histos max Digi nb with invalid option pattern, ignored! "
311 <<
" (Should be ECbmModuleId,dMaxDigiNb but instead found " << (*itStrHistMaxDigi)
317 std::string sSelDet = (*itStrHistMaxDigi).substr(0, charPosDel);
321 <<
"CbmDeviceBuildDigiEvents::InitTask => "
322 <<
"Trying to set Histos max Digi nb for unsupported detector, ignored! "
329 Double_t dHistMaxDigiNb = std::stod((*itStrHistMaxDigi).substr(charPosDel));
331 LOG(debug) <<
"set Histos max Digi nb to " << dHistMaxDigiNb;
332 fpAlgo->SetHistogramMaxDigiNb(selDet, dHistMaxDigiNb);
339 fvDigiBmon =
new std::vector<CbmBmonDigi>(1000000);
340 fvDigiSts =
new std::vector<CbmStsDigi>(1000000);
341 fvDigiMuch =
new std::vector<CbmMuchDigi>(1000000);
342 fvDigiTrd =
new std::vector<CbmTrdDigi>(1000000);
343 fvDigiTof =
new std::vector<CbmTofDigi>(1000000);
344 fvDigiRich =
new std::vector<CbmRichDigi>(1000000);
345 fvDigiPsd =
new std::vector<CbmPsdDigi>(1000000);
366 if (kFALSE ==
fpAlgo->InitAlgo()) {
throw InitTaskError(
"Failed to initialize the algorithm class."); }
375 LOG(error) << e.what();
440 std::vector<std::pair<TNamed*, std::string>> vHistos =
fpAlgo->GetHistoVector();
442 std::vector<std::pair<TCanvas*, std::string>> vCanvases =
fpAlgo->GetCanvasVector();
448 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
453 std::pair<std::string, std::string> psHistoConfig(vHistos[uHisto].
first->GetName(), vHistos[uHisto].second);
456 LOG(info) <<
"Config of hist " << psHistoConfig.first.data() <<
" in folder " << psHistoConfig.second.data();
462 for (UInt_t uCanv = 0; uCanv < vCanvases.size(); ++uCanv) {
465 std::string sCanvName = (vCanvases[uCanv].first)->GetName();
468 std::pair<std::string, std::string> psCanvConfig(sCanvName, sCanvConf);
472 LOG(info) <<
"Config string of Canvas " << psCanvConfig.first.data() <<
" is " << psCanvConfig.second.data();
482 LOG(debug) <<
"Received message number " <<
fulNumMessages <<
" with " << parts.Size() <<
" parts"
483 <<
", size0: " << parts.At(0)->GetSize();
488 uint32_t uPartIdx = 0;
496 if (0 < (parts.At(uPartIdx))->GetSize()) {
497 std::string msgStrBmon(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
498 std::istringstream issBmon(msgStrBmon);
499 boost::archive::binary_iarchive inputArchiveBmon(issBmon);
505 if (0 < (parts.At(uPartIdx))->GetSize()) {
506 std::string msgStrSts(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
507 std::istringstream issSts(msgStrSts);
508 boost::archive::binary_iarchive inputArchiveSts(issSts);
514 if (0 < (parts.At(uPartIdx))->GetSize()) {
515 std::string msgStrMuch(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
516 std::istringstream issMuch(msgStrMuch);
517 boost::archive::binary_iarchive inputArchiveMuch(issMuch);
523 if (0 < (parts.At(uPartIdx))->GetSize()) {
524 std::string msgStrTrd(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
525 std::istringstream issTrd(msgStrTrd);
526 boost::archive::binary_iarchive inputArchiveTrd(issTrd);
532 if (0 < (parts.At(uPartIdx))->GetSize()) {
533 std::string msgStrTof(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
534 std::istringstream issTof(msgStrTof);
535 boost::archive::binary_iarchive inputArchiveTof(issTof);
541 if (0 < (parts.At(uPartIdx))->GetSize()) {
542 std::string msgStrRich(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
543 std::istringstream issRich(msgStrRich);
544 boost::archive::binary_iarchive inputArchiveRich(issRich);
550 if (0 < (parts.At(uPartIdx))->GetSize()) {
551 std::string msgStrPsd(
static_cast<char*
>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
552 std::istringstream issPsd(msgStrPsd);
553 boost::archive::binary_iarchive inputArchivePsd(issPsd);
560 RootSerializer().Deserialize(*parts.At(uPartIdx),
fTsMetaData);
565 LOG(debug) <<
"Bmon Vector size: " <<
fvDigiBmon->size();
566 LOG(debug) <<
"STS Vector size: " <<
fvDigiSts->size();
567 LOG(debug) <<
"MUCH Vector size: " <<
fvDigiMuch->size();
568 LOG(debug) <<
"TRD Vector size: " <<
fvDigiTrd->size();
569 LOG(debug) <<
"TOF Vector size: " <<
fvDigiTof->size();
570 LOG(debug) <<
"RICH Vector size: " <<
fvDigiRich->size();
571 LOG(debug) <<
"PSD Vector size: " <<
fvDigiPsd->size();
604 fpAlgo->ClearEventVector();
611 std::chrono::system_clock::time_point currentTime = std::chrono::system_clock::now();
612 std::chrono::duration<double_t> elapsedSeconds = currentTime -
fLastPublishTime;
679 std::vector<CbmEvent*> vEvents =
fpAlgo->GetEventVector();
682 LOG(debug) <<
"In Vector size: " << vEvents.size();
683 std::vector<CbmDigiEvent> vOutEvents;
684 vOutEvents.reserve(vEvents.size());
687 selEvent.
fTime =
event->GetStartTime();
688 selEvent.
fNumber =
event->GetNumber();
697 event->SortIndices();
765 vOutEvents.push_back(std::move(selEvent));
768 LOG(debug) <<
"Out Vector size: " << vEvents.size();
770 std::stringstream ossEvt;
771 boost::archive::binary_oarchive oaEvt(ossEvt);
773 std::string* strMsgEvt =
new std::string(ossEvt.str());
774 FairMQMessagePtr message(NewMessage(
775 const_cast<char*
>(strMsgEvt->c_str()),
777 [](
void*,
void*
object) { delete static_cast<std::string*>(object); },
779 LOG(debug) <<
"Serializing done";
783 FairMQParts partsOut;
784 partsOut.AddPart(std::move(partsIn.At(0)));
785 partsOut.AddPart(std::move(partsIn.At(partsIn.Size() - 1)));
786 partsOut.AddPart(std::move(message));
787 LOG(debug) <<
"Message preparation done";
803 FairMQMessagePtr messageHeader(NewMessage());
805 BoostSerializer<std::pair<uint32_t, uint32_t>>().Serialize(*messageHeader, pairHeader);
806 FairMQParts partsOut;
807 partsOut.AddPart(std::move(messageHeader));
811 FairMQMessagePtr messageHist(NewMessage());
813 BoostSerializer<std::pair<std::string, std::string>>().Serialize(*messageHist,
fvpsHistosFolder[uHisto]);
814 partsOut.AddPart(std::move(messageHist));
820 FairMQMessagePtr messageHist(NewMessage());
821 partsOut.AddPart(std::move(messageHist));
826 FairMQMessagePtr messageCan(NewMessage());
828 BoostSerializer<std::pair<std::string, std::string>>().Serialize(*messageCan,
fvpsCanvasConfig[uCanv]);
829 partsOut.AddPart(std::move(messageCan));
835 FairMQMessagePtr messageHist(NewMessage());
836 partsOut.AddPart(std::move(messageHist));
840 FairMQMessagePtr msgHistos(NewMessage());
842 RootSerializer().Serialize(*msgHistos, &
fArrayHisto);
843 partsOut.AddPart(std::move(msgHistos));
847 LOG(error) <<
"CbmTsConsumerReqDevExample::SendHistoConfAndData => Problem sending data";
852 fpAlgo->ResetHistograms(kFALSE);