43 , fbDebugMonitorMode(kFALSE)
44 , fbStoreLostEventMsg(kFALSE)
45 , fbAddStatusToEvent(kTRUE)
51 , fuNrOfChannelsPerGet4(0)
52 , fuNrOfChannelsPerFee(0)
54 , fuNrOfGet4PerGdpb(0)
55 , fuNrOfChannelsPerGdpb(0)
62 , fdAllowedTriggersSpread(-1.0)
63 , fdStarTriggerDeadtime()
64 , fdStarTriggerDelay()
65 , fdStarTriggerWinSize()
68 , fulCurrentTsIndex(0)
70 , fdTsStopTimeCore(-1.0)
80 , fvulCurrentEpochCycle()
81 , fvulCurrentEpochFull()
83 , fvvBufferMajorAsicErrors()
86 , fbTriggerFoundA(kFALSE)
87 , fbTriggerFoundB(kFALSE)
88 , fbTriggerFoundC(kFALSE)
93 , fvulGdpbTsFullLast()
94 , fvulStarTsFullLast()
97 , fvuStarTrigCmdLast()
98 , fvulGdpbTsFullLastCore()
99 , fvulStarTsFullLastCore()
100 , fvuStarTokenLastCore()
101 , fvuStarDaqCmdLastCore()
102 , fvuStarTrigCmdLastCore()
103 , fvdMessCandidateTimeStart()
104 , fvdMessCandidateTimeStop()
105 , fvdTrigCandidateTimeStart()
106 , fvdTrigCandidateTimeStop()
107 , fbEpochAfterCandWinFound(kFALSE)
108 , fbTriggerAfterCandWinFound(kFALSE)
109 , fvbGdpbLastMissmatchPattern()
110 , fvbGdpbLastEnablePattern()
111 , fvbGdpbLastResyncPattern()
112 , fvSectorStatusPattern()
113 , fvhHitsTimeToTriggerRaw()
114 , fvhHitsTimeToTriggerRawPulser()
115 , fvhHitsTimeToTriggerSel()
116 , fvhHitsTimeToTriggerSelVsDaq()
117 , fvhHitsTimeToTriggerSelVsTrig()
119 , fvhTriggerDistributionInTs()
120 , fvhTriggerDistributionInMs()
121 , fvhMessDistributionInMs()
122 , fhEventSizeDistribution(nullptr)
123 , fhEventSizeEvolution(nullptr)
124 , fhEventNbEvolution(nullptr)
125 , fhEventNbDistributionInTs(nullptr)
126 , fhEventSizeDistributionInTs(nullptr)
127 , fhRawTriggersStats(nullptr)
128 , fhRawTriggersStatsCore(nullptr)
129 , fhRawTriggersStatsOver(nullptr)
130 , fhRawTriggersStatsSel(nullptr)
131 , fhMissingTriggersEvolution(nullptr)
132 , fcTimeToTrigRaw(nullptr)
133 , fcTimeToTrigSel(nullptr)
134 , fcTrigDistMs(nullptr)
135 , fcMessDistMs(nullptr)
136 , fcEventBuildStats(nullptr)
137 , fcTriggerStats(nullptr)
1210 std::vector<std::vector<CbmTofStarTrigger2019>::iterator> itTrigger;
1211 std::vector<std::vector<gdpbv100::FullMessage>::iterator> itErrorMessStart;
1212 std::vector<std::vector<gdpbv100::FullMessage>::iterator> itMessStart;
1213 std::vector<std::vector<std::pair<uint64_t, std::bitset<kuNbAsicPerGdpb>>>::iterator> itStatUpdtStart;
1214 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1222 Bool_t bAllSectAllTriggDone = kTRUE;
1223 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1226 bAllSectAllTriggDone = kFALSE;
1234 while (kFALSE == bAllSectAllTriggDone) {
1236 Bool_t bAllSectorsMatch = kTRUE;
1237 UInt_t uFirstStarToken = 0;
1238 UShort_t usFirstStarDaqCmd = 0;
1239 UShort_t usFirstStarTrigCmd = 0;
1240 ULong64_t ulFirstFullGdpbTs = 0;
1248 uFirstStarToken = (*itTrigger[0]).GetStarToken();
1249 usFirstStarDaqCmd = (*itTrigger[0]).GetStarDaqCmd();
1250 usFirstStarTrigCmd = (*itTrigger[0]).GetStarTrigCmd();
1251 ulFirstFullGdpbTs = (*itTrigger[0]).GetFullGdpbTs();
1252 for (UInt_t uGdpb = 1; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1253 if (itTrigger[uGdpb] ==
fvvBufferTriggers[uGdpb].end() || (*itTrigger[uGdpb]).GetStarToken() != uFirstStarToken
1254 || (*itTrigger[uGdpb]).GetStarDaqCmd() != usFirstStarDaqCmd
1255 || (*itTrigger[uGdpb]).GetStarTrigCmd() != usFirstStarTrigCmd) {
1256 bAllSectorsMatch = kFALSE;
1262 if (kTRUE == bAllSectorsMatch) {
1268 Double_t dMeanTriggerGdpbTs = 0;
1269 Double_t dMeanTriggerStarTs = 0;
1270 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1272 dMeanTriggerGdpbTs += (*itTrigger[uGdpb]).GetFullGdpbTs();
1273 dMeanTriggerStarTs += (*itTrigger[uGdpb]).GetFullStarTs();
1276 Long64_t ilTriggerDt =
1277 static_cast<Long64_t
>((*itTrigger[uGdpb]).GetFullGdpbTs()) -
static_cast<Long64_t
>(ulFirstFullGdpbTs);
1282 std::vector<gdpbv100::FullMessage> vTrigMess = (*itTrigger[uGdpb]).GetGdpbMessages();
1283 for (std::vector<gdpbv100::FullMessage>::iterator itMess = vTrigMess.begin(); itMess != vTrigMess.end();
1285 starSubEvent.
AddMsg((*itMess));
1302 <= (*itTrigger[uGdpb]).GetFullGdpbTs()) {
1303 ++itStatUpdtStart[uGdpb];
1308 --itStatUpdtStart[uGdpb];
1332 UInt_t uNbErrorsInEventGdpb = 0;
1334 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinBegErrors) {
1335 ++itErrorMessStart[uGdpb];
1338 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinEnd) {
1342 ++itErrorMessStart[uGdpb];
1343 ++uNbErrorsInEventGdpb;
1348 std::vector<gdpbv100::FullMessage>::iterator itFirstMessOutOfDeadtime = itMessStart[uGdpb];
1351 && ((*itMessStart[uGdpb]).GetFullTimeNs() < dDeadEnd || (*itMessStart[uGdpb]).GetFullTimeNs() < dWinEnd)) {
1352 Double_t dMessTime = (*itMessStart[uGdpb]).GetFullTimeNs();
1367 UInt_t uTot = (*itMessStart[uGdpb]).getGdpbHit32Tot();
1376 if (dWinBeg < dMessTime && dMessTime < dWinEnd) {
1377 starSubEvent.
AddMsg((*itMessStart[uGdpb]));
1392 if (dMessTime < dDeadEnd) ++itFirstMessOutOfDeadtime;
1394 ++itMessStart[uGdpb];
1396 itMessStart[uGdpb] = itFirstMessOutOfDeadtime;
1406 static_cast<ULong64_t
>(dMeanTriggerStarTs), uFirstStarToken, usFirstStarDaqCmd,
1407 usFirstStarTrigCmd);
1416 std::vector<CbmTofStarTrigger2019>::iterator itEarliestTrigger;
1417 ULong64_t ulEarliestGdpbTs = 0xFFFFFFFFFFFFFFFFUL;
1418 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1420 && ((*itTrigger[uGdpb]).GetFullGdpbTs() < ulEarliestGdpbTs
1421 || 0xFFFFFFFFFFFFFFFFUL == (*itTrigger[uGdpb]).GetFullGdpbTs())) {
1422 itEarliestTrigger = itTrigger[uGdpb];
1423 ulEarliestGdpbTs = (*itTrigger[uGdpb]).GetFullGdpbTs();
1426 UInt_t uEarliestStarToken = (*itEarliestTrigger).GetStarToken();
1427 UShort_t usEarliestStarDaqCmd = (*itEarliestTrigger).GetStarDaqCmd();
1428 UShort_t usEarliestStarTrigCmd = (*itEarliestTrigger).GetStarTrigCmd();
1429 ULong64_t ulEarliestFullGdpbTs = (*itEarliestTrigger).GetFullGdpbTs();
1432 UInt_t uNrOfMatchedGdpbs = 0;
1433 std::vector<Bool_t> vbMatchingTrigger(
fuNrOfGdpbs, kFALSE);
1434 Double_t dMeanTriggerGdpbTs = 0;
1435 Double_t dMeanTriggerStarTs = 0;
1436 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1438 && (*itTrigger[uGdpb]).GetStarToken() == uEarliestStarToken
1439 && (*itTrigger[uGdpb]).GetStarDaqCmd() == usEarliestStarDaqCmd
1440 && (*itTrigger[uGdpb]).GetStarTrigCmd() == usEarliestStarTrigCmd) {
1441 uNrOfMatchedGdpbs++;
1442 vbMatchingTrigger[uGdpb] = kTRUE;
1445 Long64_t ilTriggerDt =
1446 static_cast<Long64_t
>((*itTrigger[uGdpb]).GetFullGdpbTs()) -
static_cast<Long64_t
>(ulEarliestFullGdpbTs);
1450 dMeanTriggerGdpbTs += (*itTrigger[uGdpb]).GetFullGdpbTs();
1451 dMeanTriggerStarTs += (*itTrigger[uGdpb]).GetFullStarTs();
1456 dMeanTriggerGdpbTs /= uNrOfMatchedGdpbs;
1457 dMeanTriggerStarTs /= uNrOfMatchedGdpbs;
1459 static_cast<ULong64_t
>(dMeanTriggerStarTs), (*itEarliestTrigger).GetStarToken(),
1460 (*itEarliestTrigger).GetStarDaqCmd(), (*itEarliestTrigger).GetStarTrigCmd());
1468 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1472 ULong64_t ulTriggerTime =
static_cast<ULong64_t
>(dMeanTriggerGdpbTs);
1473 if (kTRUE == vbMatchingTrigger[uGdpb]) {
1475 ulTriggerTime = (*itTrigger[uGdpb]).GetFullGdpbTs();
1478 std::vector<gdpbv100::FullMessage> vTrigMess = (*itTrigger[uGdpb]).GetGdpbMessages();
1479 for (std::vector<gdpbv100::FullMessage>::iterator itMess = vTrigMess.begin(); itMess != vTrigMess.end();
1481 starSubEvent.
AddMsg((*itMess));
1497 ++itStatUpdtStart[uGdpb];
1502 --itStatUpdtStart[uGdpb];
1518 UInt_t uNbErrorsInEventGdpb = 0;
1520 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinBegErrors) {
1521 ++itErrorMessStart[uGdpb];
1524 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinEnd) {
1528 ++itErrorMessStart[uGdpb];
1529 ++uNbErrorsInEventGdpb;
1534 std::vector<gdpbv100::FullMessage>::iterator itFirstMessOutOfDeadtime = itMessStart[uGdpb];
1537 && ((*itMessStart[uGdpb]).GetFullTimeNs() < dDeadEnd || (*itMessStart[uGdpb]).GetFullTimeNs() < dWinEnd)) {
1538 Double_t dMessTime = (*itMessStart[uGdpb]).GetFullTimeNs();
1551 UInt_t uTot = (*itMessStart[uGdpb]).getGdpbHit32Tot();
1559 if (dWinBeg < dMessTime && dMessTime < dWinEnd) {
1560 starSubEvent.
AddMsg((*itMessStart[uGdpb]));
1566 usEarliestStarDaqCmd);
1568 usEarliestStarTrigCmd);
1574 if (dMessTime < dDeadEnd) ++itFirstMessOutOfDeadtime;
1576 ++itMessStart[uGdpb];
1578 itMessStart[uGdpb] = itFirstMessOutOfDeadtime;
1581 if (kTRUE == vbMatchingTrigger[uGdpb]) ++itTrigger[uGdpb];
1589 bAllSectAllTriggDone = kTRUE;
1590 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1593 bAllSectAllTriggDone = kFALSE;
1607 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1609 std::string sFolder = Form(
"sector%2u", uSector);
1611 LOG(info) <<
"gDPB " << uGdpb <<
" is " << sFolder;
1614 Form(
"Time to trigger for all neighboring hits in sector %2u; t "
1615 "- Ttrigg [ns]; Hits []",
1617 2000, -5000, 5000));
1622 Form(
"Time to trigger for all selected hits in sector %2u; t - "
1623 "Ttrigg [ns]; Hits []",
1633 new TH2D(Form(
"hHitsTimeToTriggerRawPulserSect%2u", uSector),
1634 Form(
"Time to trigger for all neighboring hits within pulser TOT range "
1635 "in sector %2u; t - Ttrigg [ns]; TOT [bins]; Hits []",
1637 2000, -5000, 5000, 256, 0, 256));
1640 Form(
"Time to trigger for all selected hits vs DAQ CMD in "
1641 "sector %2u; t - Ttrigg [ns]; DAQ CMD []; Hits []",
1646 Form(
"Time to trigger for all selected hits vs TRIG CMD in "
1647 "sector %2u; t - Ttrigg [ns]; TRIG CMD []; Hits []",
1652 fvhTriggerDt.push_back(
new TH1I(Form(
"hTriggerDtSect%2u", uSector),
1653 Form(
"Trigger time difference between sector %2u and the first sector, "
1654 "full events only; Ttrigg%2u - TtriggRef [Clk]; events []",
1664 Form(
"Trigger distribution inside TS in sector %2u; Time in "
1665 "TS [us]; Trigger [];",
1671 Form(
"Trigger distribution inside MS in sector %2u; Time in "
1672 "MS [us]; Trigger [];",
1678 Form(
"Messages distribution inside MS in sector %2u; Time in "
1679 "MS [us]; Trigger [];",
1696 fhEventNbPerTs =
new TH1I(
"hEventNbPerTs",
"Number of Events per TS; Events []; TS []", 1000, 0, 1000);
1699 new TH1I(
"hEventSizeDistribution",
"Event size distribution; Event size [byte]; Events []",
1703 "hEventSizeEvolution",
"Event size evolution; Time in run [min]; mean Event size [byte];", 14400, 0, 14400);
1706 new TH1I(
"hEventNbEvolution",
"Event number evolution; Time in run [min]; Events [];", 14400, 0, 14400);
1720 new TH1I(
"hEventNbDistributionInTs",
"Event number distribution inside TS; Time in TS [us]; Events [];",
1724 "Event size distribution inside TS; Time in TS [us]; mean "
1725 "Event size [Byte];",
1728 fhRawTriggersStats =
new TH2I(
"hRawTriggersStats",
"Raw triggers statistics per sector; ; Sector []; Messages []",
1729 5, 0, 5, 12, 13, 25);
1737 new TH2I(
"hRawTriggersStatsCore",
"Raw triggers in Core MS statistics per sector; ; Sector []; Messages []", 5, 0,
1746 "Raw triggers in Overlap MS statistics "
1747 "per sector; ; Sector []; Messages []",
1748 5, 0, 5, 12, 13, 25);
1756 "hRawTriggersStatsSel",
"Selected triggers statistics per sector; ; Sector []; Messages []", 3, 0, 3, 12, 13, 25);
1762 "Missing trigger counts per sector vs time in run; Time in run "
1763 "[min]; Sector []; Missing triggers []",
1764 14400, 0, 14400, 12, 13, 25);
1781 fcTimeToTrigRaw =
new TCanvas(
"cTimeToTrigRaw",
"Raw Time to trig for all sectors", w,
h);
1783 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1793 fcTimeToTrigSel =
new TCanvas(
"cTimeToTrigSel",
"Selected Time to trig for all sectors", w,
h);
1795 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1806 fcTrigDistMs =
new TCanvas(
"cTrigDistMs",
"Trigger time to MS start for all sectors", w,
h);
1808 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1818 fcMessDistMs =
new TCanvas(
"cMessDistMs",
"Message time to MS start for all sectors", w,
h);
1820 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1829 fcTriggerStats =
new TCanvas(
"cTriggerStats",
"Trigger statistics per sector", w,
h);
1860 fcEventBuildStats =
new TCanvas(
"cEvtBuildStats",
"Event building statistics", w,
h);