16 #include "CbmTbDaqBuffer.h"
21 #include "StorableTimeslice.hpp"
23 #include "FairMQLogger.h"
24 #include "FairMQProgOptions.h"
25 #include "FairParGenericSet.h"
26 #include "FairRuntimeDb.h"
31 #include <boost/archive/binary_iarchive.hpp>
32 #include <boost/archive/binary_oarchive.hpp>
35 #include <boost/serialization/vector.hpp>
43 using std::runtime_error::runtime_error;
76 , fuNrOfChannelsPerGet4(0)
77 , fuNrOfChannelsPerFee(0)
79 , fuNrOfGet4PerGdpb(0)
80 , fuNrOfChannelsPerGdpb(0)
92 , fvulGdpbTsFullLast()
93 , fvulStarTsFullLast()
96 , fvuStarTrigCmdLast()
100 , fulCurrentEpochTime(0.)
109 , fUnpackPar(nullptr)
112 , fdFirstDigiTimeDif(0.)
114 , fhRawTDigEvT0(nullptr)
115 , fhRawTDigRef0(nullptr)
116 , fhRawTDigRef(nullptr)
117 , fhRawTRefDig0(nullptr)
118 , fhRawTRefDig1(nullptr)
119 , fhRawDigiLastDigi(nullptr)
124 , fhDetChanCoinc(nullptr)
135 , fBuffer(CbmTbDaqBuffer::Instance())
140 , fulGdpbTsFullLast(0.)
141 , fulStarTsFullLast(0.)
143 , fuStarDaqCmdLast(0)
144 , fuStarTrigCmdLast(0)
145 , fUnpackerAlgo(nullptr) {
164 int noChannel = fChannels.size();
165 LOG(info) <<
"Number of defined channels: " << noChannel;
166 for (
auto const& entry : fChannels) {
167 LOG(info) <<
"Channel name: " << entry.first;
170 if (entry.first ==
"syscmd") {
175 if (entry.first !=
"tofdigis")
183 const Int_t iHeaderSize = 4;
185 for (
int i = 0;
i < iHeaderSize;
i++)
188 fiReqMode = fConfig->GetValue<uint64_t>(
"ReqMode");
189 fiReqTint = fConfig->GetValue<uint64_t>(
"ReqTint");
190 fiPulserMode = fConfig->GetValue<int64_t>(
"PulserMode");
191 fiPulMulMin = fConfig->GetValue<uint64_t>(
"PulMulMin");
192 fiPulTotMin = fConfig->GetValue<uint64_t>(
"PulTotMin");
193 fiPulTotMax = fConfig->GetValue<uint64_t>(
"PulTotMax");
194 fdTShiftRef = fConfig->GetValue<double_t>(
"TShiftRef");
199 const Int_t iMaxReq = 36;
201 while (iNReq < iMaxReq) {
202 iReqDet = fConfig->GetValue<uint64_t>(Form(
"ReqDet%d", iNReq));
203 if (iReqDet == 0)
break;
210 for (UInt_t iGbtx = 0; iGbtx <
fviNrOfRpc.size(); iGbtx++) {
215 for (Int_t iRpc = 0; iRpc <
fviNrOfRpc[iGbtx]; iRpc++) {
223 for (Int_t iRpc = 0; iRpc < 2; iRpc++) {
230 for (Int_t iRpc = 0; iRpc < 2; iRpc++) {
238 for (Int_t iRpc = 0; iRpc < 1; iRpc++) {
245 for (Int_t iRpc = 0; iRpc < 8; iRpc++) {
266 LOG(error) << e.what();
273 LOG(info) <<
"Inspect " << entry;
274 std::size_t pos1 = channelName.find(entry);
275 if (pos1 != std::string::npos) {
276 const vector<std::string>::const_iterator
pos =
279 LOG(info) <<
"Found " << entry <<
" in " << channelName;
280 LOG(info) <<
"Channel name " << channelName
281 <<
" found in list of allowed channel names at position "
286 LOG(info) <<
"Channel name " << channelName
287 <<
" not found in list of allowed channel names.";
288 LOG(error) <<
"Stop device.";
293 LOG(info) <<
"Init parameter containers for CbmDeviceUnpackTofMcbm2018.";
298 std::string message {
"CbmMcbm2018TofPar,111"};
300 <<
"Requesting parameter container CbmMcbm2018TofPar, sending message: "
303 FairMQMessagePtr req(NewSimpleMessage(
"CbmMcbm2018TofPar,111"));
304 FairMQMessagePtr rep(NewMessage());
306 if (Send(req,
"parameters") > 0) {
307 if (Receive(rep,
"parameters") >= 0) {
308 if (rep->GetSize() != 0) {
312 LOG(info) <<
"Received unpack parameter from parmq server: "
316 LOG(error) <<
"Received empty reply. Parameter not available";
324 Bool_t initOK = kTRUE;
346 FairRuntimeDb* fRtdb = FairRuntimeDb::instance();
350 LOG(info) <<
"Setting parameter containers for " << fParCList->GetEntries()
353 for (Int_t iparC = 0; iparC < fParCList->GetEntries(); ++iparC) {
354 FairParGenericSet* tempObj = (FairParGenericSet*) (fParCList->At(iparC));
355 fParCList->Remove(tempObj);
357 std::string sParamName {tempObj->GetName()};
359 FairParGenericSet* newObj =
360 dynamic_cast<FairParGenericSet*
>(fRtdb->getContainer(sParamName.data()));
361 LOG(info) <<
" - Get " << sParamName.data() <<
" at " << newObj;
362 if (
nullptr == newObj) {
364 LOG(error) <<
"Failed to obtain parameter container " << sParamName
365 <<
", for parameter index " << iparC;
370 LOG(info) <<
" - Mod " << sParamName.data() <<
" to " << newObj;
372 fParCList->AddAt(newObj, iparC);
378 UShort_t usDetectorId) {
383 LOG(info) <<
"ReInit parameter containers for CbmDeviceUnpackMcbm2018TofPar.";
413 LOG(info) <<
"GDPB Id of TOF " <<
i <<
" : " << std::hex
422 LOG(info) <<
"Timeslice parameters: " <<
fuTotalMsNb
436 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
466 UInt_t uGet4topadi[32] = {4, 3, 2, 1,
467 8, 7, 6, 5, 12, 11, 10, 9, 16, 15,
468 14, 13, 20, 19, 18, 17, 24, 23, 22, 21,
469 28, 27, 26, 25, 32, 31, 30, 29};
471 UInt_t uPaditoget4[32] = {4, 3, 2, 1,
472 12, 11, 10, 9, 20, 19, 18, 17, 28, 27,
473 26, 25, 32, 31, 30, 29, 8, 7, 6, 5,
474 16, 15, 14, 13, 24, 23, 22, 21};
485 27, 2, 7, 3, 31, 26, 30, 1, 33, 37, 32, 13, 9, 14,
486 10, 15, 17, 21, 16, 35, 34, 38, 25, 24, 0, 6, 20, 23,
487 18, 22, 28, 4, 29, 5, 19, 36, 39, 8, 12, 11};
489 24, 7, 1, 3, 31, 33, 25, 2, 37, 12, 14, 39, 38, 11,
490 13, 15, 18, 16, 28, 34, 26, 17, 29, 27, 23, 22, 5, 0,
491 30, 32, 6, 4, 10, 8, 20, 19, 35, 9, 21, 36};
503 for (UInt_t iGbtx = 0; iGbtx < uNrOfGbtx; ++iGbtx) {
511 LOG(info) <<
"Nr. of possible Tof channels: " << uNrOfChannels;
516 for (UInt_t iGbtx = 0; iGbtx < uNrOfGbtx; iGbtx++) {
521 const Int_t RpcMap[5] = {4, 2, 0, 3, 1};
522 for (Int_t iRpc = 0; iRpc <
fviNrOfRpc[iGbtx]; iRpc++) {
526 for (Int_t iStr = 0; iStr < iStrMax; iStr++) {
527 Int_t iStrMap = iStr;
528 Int_t iRpcMap = RpcMap[iRpc];
530 if (
fviRpcSide[iGbtx] == 0) iStrMap = 31 - iStr;
551 const Int_t RpcMap[3] = {0, 1, 2};
552 for (Int_t iRpc = 0; iRpc <
fviNrOfRpc[iGbtx]; iRpc++) {
556 for (Int_t iStr = 0; iStr < iStrMax; iStr++) {
557 Int_t iStrMap = iStr;
558 Int_t iRpcMap = RpcMap[iRpc];
560 if (
fviRpcSide[iGbtx] == 0) iStrMap = 31 - iStr;
580 LOG(info) <<
" Map diamond at GBTX - iCh = " << iCh;
584 if (uFee < 4 && (0 == uCh % 4 || uCh < 4)) {
595 "Map T0 Ch %d to Address 0x%08x", iCh,
fviRpcChUId[iCh]);
606 LOG(info) <<
" Map CERN 20 gap at GBTX - iCh = " << iCh;
607 const Int_t StrMap[32] = {0, 1, 2, 3, 4, 31, 5, 6, 7, 30, 8,
608 9, 10, 29, 11, 12, 13, 14, 28, 15, 16, 17,
609 18, 27, 26, 25, 24, 23, 22, 21, 20, 19};
611 Int_t iModuleType = 7;
613 for (Int_t iFeet = 0; iFeet < 2; iFeet++) {
614 for (Int_t iStr = 0; iStr < 32; iStr++) {
615 Int_t iStrMap = 31 - 12 - StrMap[iStr];
616 Int_t iSideMap = iFeet;
620 iModuleId, iRpcMap, iStrMap, iSideMap, iModuleType);
631 Int_t iModuleType = 8;
632 for (Int_t iRpc = 0; iRpc < 8; iRpc++) {
634 iModuleId, 7 - iRpc, 0, 0, iModuleType);
637 iCh += (24 + 2 * 32);
639 LOG(info) <<
" Map end ceramics box at GBTX - iCh = " << iCh;
645 LOG(info) <<
" Map Star2 box at GBTX - iCh = " << iCh;
646 const Int_t iRpc[5] = {1, -1, 1, 0, 0};
647 const Int_t iSide[5] = {1, -1, 0, 1, 0};
648 for (Int_t iFeet = 0; iFeet < 5; iFeet++) {
649 for (Int_t iStr = 0; iStr < 32; iStr++) {
650 Int_t iStrMap = iStr;
651 Int_t iRpcMap = iRpc[iFeet];
652 Int_t iSideMap = iSide[iFeet];
653 if (iSideMap == 0) iStrMap = 31 - iStr;
671 LOG(info) <<
" Map Buc box at GBTX - iCh = " << iCh;
672 const Int_t iRpc[5] = {0, -1, 0, 1, 1};
673 const Int_t iSide[5] = {1, -1, 0, 1, 0};
674 for (Int_t iFeet = 0; iFeet < 5; iFeet++) {
675 for (Int_t iStr = 0; iStr < 32; iStr++) {
676 Int_t iStrMap = iStr;
677 Int_t iRpcMap = iRpc[iFeet];
678 Int_t iSideMap = iSide[iFeet];
684 iRpcMap = 1 - iRpcMap;
688 iSideMap = 1 - iSideMap;
692 iRpcMap = 1 - iRpcMap;
693 iSideMap = 1 - iSideMap;
696 iRpcMap = 1 - iRpcMap;
716 LOG(info) <<
" Found unused GBTX link at iCh = " << iCh;
721 LOG(error) <<
"Invalid Type specifier for Gbtx " << iGbtx <<
": "
726 for (UInt_t
i = 0;
i < uNrOfChannels;
i =
i + 8) {
727 if (
i % 64 == 0) LOG(info) <<
" Index " <<
i;
728 LOG(info) << Form(
"0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x",
743 LOG(info) <<
"create Histos for " <<
fuNrOfGdpbs <<
" gDPBs ";
746 new TH1F(Form(
"Raw_TDig-EvT0"),
747 Form(
"Raw digi time difference to 1st digi ; time [ns]; cts"),
754 new TH1F(Form(
"Raw_TDig-Ref0"),
755 Form(
"Raw digi time difference to Ref ; time [ns]; cts"),
762 new TH1F(Form(
"Raw_TDig-Ref"),
763 Form(
"Raw digi time difference to Ref ; time [ns]; cts"),
770 new TH1F(Form(
"Raw_TRef-Dig0"),
771 Form(
"Raw Ref time difference to last digi ; time [ns]; cts"),
778 new TH1F(Form(
"Raw_TRef-Dig1"),
779 Form(
"Raw Ref time difference to last digi ; time [ns]; cts"),
786 new TH1F(Form(
"Raw_Digi-LastDigi"),
787 Form(
"Raw Digi time difference to last digi ; time [ns]; cts"),
797 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; uGdpb++) {
799 new TH2F(Form(
"Raw_Tot_gDPB_%02u", uGdpb),
800 Form(
"Raw TOT gDPB %02u; channel; TOT [bin]", uGdpb),
810 new TH1I(Form(
"ChCount_gDPB_%02u", uGdpb),
811 Form(
"Channel counts gDPB %02u; channel; Hits", uGdpb),
828 new TH2F(Form(
"fhChanCoinc_%02u", uGdpb),
829 Form(
"Channels Coincidence %02u; Left; Right", uGdpb),
838 "Det Channels Coincidence; Left; Right",
854 LOG(debug) <<
"Received message number " <<
fNumMessages <<
" with size "
857 std::string msgStr(
static_cast<char*
>(msg->GetData()), msg->GetSize());
858 std::istringstream iss(msgStr);
859 boost::archive::binary_iarchive inputArchive(iss);
861 fles::StorableTimeslice component {0};
862 inputArchive >> component;
871 LOG(info) <<
"Processed " <<
fNumMessages <<
" time slices";
882 LOG(debug) <<
"Received message number " <<
fNumMessages <<
" with "
883 << parts.Size() <<
" parts";
885 fles::StorableTimeslice ts {0};
889 std::string msgStr(
static_cast<char*
>(parts.At(0)->GetData()),
890 (parts.At(0))->GetSize());
891 std::istringstream iss(msgStr);
892 boost::archive::binary_iarchive inputArchive(iss);
896 LOG(info) <<
"Initialize TS components list to " << ts.num_components();
897 for (
size_t c {0}; c < ts.num_components(); c++) {
898 auto systemID =
static_cast<int>(ts.descriptor(c, 0).sys_id);
899 LOG(info) <<
"Found systemID: " << std::hex << systemID << std::dec;
906 fles::StorableTimeslice component {0};
908 uint ncomp = parts.Size();
909 for (uint
i = 0;
i < ncomp;
i++) {
910 std::string msgStr(
static_cast<char*
>(parts.At(
i)->GetData()),
911 (parts.At(
i))->GetSize());
912 std::istringstream iss(msgStr);
913 boost::archive::binary_iarchive inputArchive(iss);
915 inputArchive >> component;
919 LOG(debug) <<
"HandleParts message " <<
fNumMessages <<
" with indx "
920 << component.index();
930 LOG(info) <<
"Processed " <<
fNumMessages <<
" time slices";
937 const char* cmd = (
char*) (msg->GetData());
938 const char cmda[4] = {*cmd};
939 LOG(info) <<
"Handle message " << cmd <<
", " << cmd[0];
944 if (strcmp(cmda,
"STOP")) {
960 LOG(debug) <<
"Timeslice " << ts.index() <<
" contains "
961 << ts.num_microslices(component) <<
" microslices of component "
965 LOG(error) <<
"Failed processing TS " << ts.index()
966 <<
" in unpacker algorithm class";
982 LOG(debug) <<
"Insert " << vDigi.size()
983 <<
" digis into DAQ buffer with size " <<
fBuffer->GetSize();
985 for (
auto digi : vDigi) {
989 LOG(debug) <<
"BufferInsert digi "
992 << Form(
", first %012.2f, last %012.2f, size %u",
1017 if (0 < ulCurEpochGdpbGet4)
1018 ulCurEpochGdpbGet4--;
1023 UInt_t uChannelNrInFee =
1058 Double_t dHitTot = uTot;
1063 LOG(error) <<
"Invalid mapping index " << uRemappedChannelNr <<
" vs "
1065 <<
", Get4 " <<
fuGet4Id <<
", Ch " << uChannel <<
", ChNr "
1066 << uChannelNr <<
", ChNrIF " << uChannelNrInFee <<
", FiS "
1070 LOG(error) <<
"Max number of error messages reached ";
1077 UInt_t uChanUId =
fviRpcChUId[uRemappedChannelNr];
1078 if (0 == uChanUId) {
1080 LOG(warn) <<
"Invalid ChanUId for " << uRemappedChannelNr <<
", ChOff "
1087 <<
", GdpbNr " <<
fuGdpbNr <<
", GbtxNr " << uGbtxNrInSys
1088 <<
", Get4 " <<
fuGet4Id <<
", Ch " << uChannel <<
", ChNr "
1089 << uChannelNr <<
", ChNrIF " << uChannelNrInFee <<
", FiS "
1093 LOG(warn) <<
"No more messages. Fix your mapping problem!";
1101 LOG(debug) << Form(
"Insert 0x%08x digi with time ", uChanUId) << dHitTime
1102 << Form(
", Tot %4.0f", dHitTot) <<
" into buffer with "
1103 <<
fBuffer->GetSize() <<
" data from "
1104 << Form(
"%11.1f to %11.1f ",
1107 <<
" at epoch " << ulCurEpochGdpbGet4;
1120 "Insert 0x%08x digi at %d with time ", uChanUId, uRemappedChannelNr)
1121 << dHitTime << Form(
", Tot %4.0f", dHitTot);
1151 if (0 < iBufferSize) {
1152 LOG(debug) <<
"Now processing " << iBufferSize
1153 <<
" stored messages for get4 " <<
fuGet4Nr
1155 const Int_t MaxBufferSize = 1000;
1156 if (iBufferSize < MaxBufferSize) {
1162 for (Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++) {
1190 uint64_t uData = mess.
getData();
1192 LOG(debug) <<
"Get4 MSG type " << mType <<
" from gdpbId " <<
fuGdpbId
1193 <<
", getId " <<
fuGet4Id <<
", (hit channel) " << channel
1194 <<
" data " << std::hex << uData;
1199 LOG(debug) <<
"GET4 System message, epoch "
1201 << std::setprecision(9) << std::fixed
1203 <<
" for board ID " << std::hex << std::setw(4) <<
fuGdpbId
1215 LOG(debug) <<
" +++++++ > gDPB: " << std::hex << std::setw(4)
1216 <<
fuGdpbId << std::dec <<
", Chip = " << std::setw(2)
1221 << std::setw(2) << uData << std::dec
1222 <<
" -- GET4 V1 Error Event";
1224 LOG(debug) <<
" +++++++ >gDPB: " << std::hex << std::setw(4) <<
fuGdpbId
1225 << std::dec <<
", Chip = " << std::setw(2)
1230 << std::setw(2) << uData << std::dec
1231 <<
" -- GET4 V1 Error Event ";
1235 LOG(debug) <<
"Unknown GET4 message, data: " << std::hex << std::setw(8)
1237 <<
" Full message: " << std::hex << std::setw(16)
1238 << mess.
getData() << std::dec;
1242 LOG(debug) <<
"ASIC pattern for missmatch, disable or resync";
1254 switch (iMsgIndex) {
1263 ULong64_t ulNewStarTsFull =
1275 LOG(debug) <<
"Possible error: identical STAR tokens found twice in a "
1276 "row => ignore 2nd! "
1305 LOG(info) <<
"Reference fake digi time shift initialized to "
1312 LOG(debug) <<
"Insert fake digi with time " << dTime <<
", Tot " << dTot;
1321 default: LOG(error) <<
"Unknown Star Trigger messageindex: " << iMsgIndex;
1326 const fles::MicrosliceDescriptor& mdsc) {
1327 LOG(info) <<
"Header ID: Ox" << std::hex << static_cast<int>(mdsc.hdr_id)
1329 LOG(info) <<
"Header version: Ox" << std::hex
1330 <<
static_cast<int>(mdsc.hdr_ver) << std::dec;
1331 LOG(info) <<
"Equipement ID: " << mdsc.eq_id;
1332 LOG(info) <<
"Flags: " << mdsc.flags;
1333 LOG(info) <<
"Sys ID: Ox" << std::hex << static_cast<int>(mdsc.sys_id)
1335 LOG(info) <<
"Sys version: Ox" << std::hex << static_cast<int>(mdsc.sys_ver)
1337 LOG(info) <<
"Microslice Idx: " << mdsc.idx;
1338 LOG(info) <<
"Checksum: " << mdsc.crc;
1339 LOG(info) <<
"Size: " << mdsc.size;
1340 LOG(info) <<
"Offset: " << mdsc.offset;
1344 if (0 == ts.num_components()) {
1345 LOG(error) <<
"No Component in TS " << ts.index();
1348 auto tsIndex = ts.index();
1350 LOG(debug) <<
"Found " << ts.num_components()
1351 <<
" different components in timeslice " << tsIndex;
1375 double TSLENGTH = 1.E6;
1376 double fdMaxDeltaT = (double)
fiReqTint;
1378 LOG(debug) <<
" Buffer size " <<
fBuffer->GetSize() <<
", DeltaT "
1382 while (
fBuffer->GetSize() > 0) {
1383 Double_t fTimeBufferLast =
fBuffer->GetTimeLast();
1387 if (fTimeBufferLast -
fBuffer->GetTimeFirst() < TSLENGTH)
return;
1393 Double_t dTEnd = digi->
GetTime() + fdMaxDeltaT;
1394 Double_t dTEndMax = digi->
GetTime() + 2 * fdMaxDeltaT;
1395 if (dTEnd > fTimeBufferLast) {
1396 LOG(warn) << Form(
"Remaining buffer < %f with %d entries is not "
1397 "sufficient for digi ending at %f -> skipped ",
1406 for (Int_t j = 0; j < 2; j++)
1407 bDet[
i][j] = kFALSE;
1410 for (Int_t j = 0; j < 2; j++)
1411 bPul[
i][j] = kFALSE;
1413 std::vector<CbmTofDigi*> vdigi;
1415 const Int_t AddrMask = 0x003FFFFF;
1416 Bool_t bOut = kFALSE;
1419 if (nDigi == vdigi.size()) vdigi.resize(nDigi + 100);
1420 vdigi[nDigi++] = digi;
1429 Int_t str = ((
CbmTofDigi*) digi)->GetChannel();
1440 if (str == 0) bPul[
i][1] = kFALSE;
1444 if (str == 0) bPul[
i][0] = kTRUE;
1445 if (str == 40) bPul[
i][1] = kTRUE;
1455 bDet[
i][1] = kFALSE;
1457 if (str == 31) bPul[
i][1] = kFALSE;
1467 if (str == 31) bPul[
i][0] = kFALSE;
1474 if (str == 0) bPul[
i][0] = kFALSE;
1487 if (dTEnd - digi->
GetTime() < fdMaxDeltaT * 0.5) {
1488 if (digi->
GetTime() + fdMaxDeltaT * 0.5 < dTEndMax)
1489 dTEnd = digi->
GetTime() + fdMaxDeltaT * 0.5;
1496 LOG(debug) << nDigi <<
" digis associated to dTEnd = " << dTEnd <<
":";
1498 for (UInt_t iDigi = 0; iDigi < nDigi; iDigi++)
1499 LOG(debug) << vdigi[iDigi]->ToString();
1507 if (bDet[
i][0] == kFALSE || bDet[
i][1] == kFALSE)
1515 if (bDet[
i][0] == kTRUE && bDet[
i][1] == kTRUE) { iDetMul++; }
1516 if (iDetMul >=
fiReqMode) { bOut = kTRUE; }
1521 LOG(debug) <<
"Found Req coinc in event with " << nDigi <<
" digis in "
1522 << iDetMul <<
" detectors, dTEnd = " << dTEnd;
1528 if (bPul[
i][0] == kTRUE && bPul[
i][1] == kTRUE) iPulMul++;
1532 LOG(debug) <<
"@Event " <<
fEventHeader[0] <<
": iPulMul = " << iPulMul;
1536 <<
" with iDetMul = " << iDetMul <<
", iPulMul = " << iPulMul;
1544 vdigi.resize(nDigi);
1545 const Int_t NDigiMax = 10000;
1546 if (nDigi > NDigiMax) {
1547 LOG(warn) <<
"Oversized event, truncated! ";
1548 for (UInt_t iDigi = NDigiMax; iDigi < nDigi; iDigi++)
1549 vdigi[iDigi]->Delete();
1551 vdigi.resize(nDigi);
1555 for (UInt_t iDigi = 0; iDigi < nDigi; iDigi++)
1556 vdigi[iDigi]->Delete();
1558 for (UInt_t iDigi = 0; iDigi < nDigi; iDigi++) {
1559 digi = vdigi[iDigi];
1571 LOG(debug) <<
"Send Digis for event " <<
fNumTint <<
" with size "
1572 << vdigi.size() << Form(
" at %p ", &vdigi);
1578 std::stringstream ossE;
1579 boost::archive::binary_oarchive oaE(ossE);
1581 std::string* strMsgE =
new std::string(ossE.str());
1583 std::stringstream oss;
1584 boost::archive::binary_oarchive oa(oss);
1586 std::string* strMsg =
new std::string(oss.str());
1589 parts.AddPart(NewMessage(
1590 const_cast<char*
>(strMsgE->c_str()),
1592 [](
void*,
void*
object) { delete static_cast<std::string*>(object); },
1595 parts.AddPart(NewMessage(
1596 const_cast<char*
>(strMsg->c_str()),
1598 [](
void*,
void*
object) { delete static_cast<std::string*>(object); },
1688 LOG(debug) <<
"Send data to channel " << idx <<
" "
1713 for (UInt_t
i = 0;
i < iNReq;
i++)
1719 LOG(info) << Form(
"Request Digi Address 0x%08x ", iAddr);