1208 std::vector<std::vector<CbmTofStarTrigger2019>::iterator> itTrigger;
1209 std::vector<std::vector<gdpbv100::FullMessage>::iterator> itErrorMessStart;
1210 std::vector<std::vector<gdpbv100::FullMessage>::iterator> itMessStart;
1211 std::vector<std::vector<std::pair<uint64_t, std::bitset<kuNbAsicPerGdpb>>>::iterator> itStatUpdtStart;
1212 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1220 Bool_t bAllSectAllTriggDone = kTRUE;
1221 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1224 bAllSectAllTriggDone = kFALSE;
1232 while (kFALSE == bAllSectAllTriggDone) {
1234 Bool_t bAllSectorsMatch = kTRUE;
1235 UInt_t uFirstStarToken = 0;
1236 UShort_t usFirstStarDaqCmd = 0;
1237 UShort_t usFirstStarTrigCmd = 0;
1238 ULong64_t ulFirstFullGdpbTs = 0;
1246 uFirstStarToken = (*itTrigger[0]).GetStarToken();
1247 usFirstStarDaqCmd = (*itTrigger[0]).GetStarDaqCmd();
1248 usFirstStarTrigCmd = (*itTrigger[0]).GetStarTrigCmd();
1249 ulFirstFullGdpbTs = (*itTrigger[0]).GetFullGdpbTs();
1250 for (UInt_t uGdpb = 1; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1251 if (itTrigger[uGdpb] ==
fvvBufferTriggers[uGdpb].end() || (*itTrigger[uGdpb]).GetStarToken() != uFirstStarToken
1252 || (*itTrigger[uGdpb]).GetStarDaqCmd() != usFirstStarDaqCmd
1253 || (*itTrigger[uGdpb]).GetStarTrigCmd() != usFirstStarTrigCmd) {
1254 bAllSectorsMatch = kFALSE;
1260 if (kTRUE == bAllSectorsMatch) {
1266 Double_t dMeanTriggerGdpbTs = 0;
1267 Double_t dMeanTriggerStarTs = 0;
1268 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1270 dMeanTriggerGdpbTs += (*itTrigger[uGdpb]).GetFullGdpbTs();
1271 dMeanTriggerStarTs += (*itTrigger[uGdpb]).GetFullStarTs();
1274 Long64_t ilTriggerDt =
1275 static_cast<Long64_t
>((*itTrigger[uGdpb]).GetFullGdpbTs()) -
static_cast<Long64_t
>(ulFirstFullGdpbTs);
1280 std::vector<gdpbv100::FullMessage> vTrigMess = (*itTrigger[uGdpb]).GetGdpbMessages();
1281 for (std::vector<gdpbv100::FullMessage>::iterator itMess = vTrigMess.begin(); itMess != vTrigMess.end();
1283 starSubEvent.
AddMsg((*itMess));
1300 <= (*itTrigger[uGdpb]).GetFullGdpbTs()) {
1301 ++itStatUpdtStart[uGdpb];
1306 --itStatUpdtStart[uGdpb];
1308 uint16_t usGdpbId =
fUnpackPar->GetGdpbId(uGdpb);
1330 UInt_t uNbErrorsInEventGdpb = 0;
1332 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinBegErrors) {
1333 ++itErrorMessStart[uGdpb];
1336 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinEnd) {
1340 ++itErrorMessStart[uGdpb];
1341 ++uNbErrorsInEventGdpb;
1346 std::vector<gdpbv100::FullMessage>::iterator itFirstMessOutOfDeadtime = itMessStart[uGdpb];
1349 && ((*itMessStart[uGdpb]).GetFullTimeNs() < dDeadEnd || (*itMessStart[uGdpb]).GetFullTimeNs() < dWinEnd)) {
1350 Double_t dMessTime = (*itMessStart[uGdpb]).GetFullTimeNs();
1365 UInt_t uTot = (*itMessStart[uGdpb]).getGdpbHit32Tot();
1374 if (dWinBeg < dMessTime && dMessTime < dWinEnd) {
1375 starSubEvent.
AddMsg((*itMessStart[uGdpb]));
1390 if (dMessTime < dDeadEnd) ++itFirstMessOutOfDeadtime;
1392 ++itMessStart[uGdpb];
1394 itMessStart[uGdpb] = itFirstMessOutOfDeadtime;
1404 static_cast<ULong64_t
>(dMeanTriggerStarTs), uFirstStarToken, usFirstStarDaqCmd,
1405 usFirstStarTrigCmd);
1414 std::vector<CbmTofStarTrigger2019>::iterator itEarliestTrigger;
1415 ULong64_t ulEarliestGdpbTs = 0xFFFFFFFFFFFFFFFFUL;
1416 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1418 && ((*itTrigger[uGdpb]).GetFullGdpbTs() < ulEarliestGdpbTs
1419 || 0xFFFFFFFFFFFFFFFFUL == (*itTrigger[uGdpb]).GetFullGdpbTs())) {
1420 itEarliestTrigger = itTrigger[uGdpb];
1421 ulEarliestGdpbTs = (*itTrigger[uGdpb]).GetFullGdpbTs();
1424 UInt_t uEarliestStarToken = (*itEarliestTrigger).GetStarToken();
1425 UShort_t usEarliestStarDaqCmd = (*itEarliestTrigger).GetStarDaqCmd();
1426 UShort_t usEarliestStarTrigCmd = (*itEarliestTrigger).GetStarTrigCmd();
1427 ULong64_t ulEarliestFullGdpbTs = (*itEarliestTrigger).GetFullGdpbTs();
1430 UInt_t uNrOfMatchedGdpbs = 0;
1431 std::vector<Bool_t> vbMatchingTrigger(
fuNrOfGdpbs, kFALSE);
1432 Double_t dMeanTriggerGdpbTs = 0;
1433 Double_t dMeanTriggerStarTs = 0;
1434 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1436 && (*itTrigger[uGdpb]).GetStarToken() == uEarliestStarToken
1437 && (*itTrigger[uGdpb]).GetStarDaqCmd() == usEarliestStarDaqCmd
1438 && (*itTrigger[uGdpb]).GetStarTrigCmd() == usEarliestStarTrigCmd) {
1439 uNrOfMatchedGdpbs++;
1440 vbMatchingTrigger[uGdpb] = kTRUE;
1443 Long64_t ilTriggerDt =
1444 static_cast<Long64_t
>((*itTrigger[uGdpb]).GetFullGdpbTs()) -
static_cast<Long64_t
>(ulEarliestFullGdpbTs);
1448 dMeanTriggerGdpbTs += (*itTrigger[uGdpb]).GetFullGdpbTs();
1449 dMeanTriggerStarTs += (*itTrigger[uGdpb]).GetFullStarTs();
1454 dMeanTriggerGdpbTs /= uNrOfMatchedGdpbs;
1455 dMeanTriggerStarTs /= uNrOfMatchedGdpbs;
1457 static_cast<ULong64_t
>(dMeanTriggerStarTs), (*itEarliestTrigger).GetStarToken(),
1458 (*itEarliestTrigger).GetStarDaqCmd(), (*itEarliestTrigger).GetStarTrigCmd());
1466 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1470 ULong64_t ulTriggerTime =
static_cast<ULong64_t
>(dMeanTriggerGdpbTs);
1471 if (kTRUE == vbMatchingTrigger[uGdpb]) {
1473 ulTriggerTime = (*itTrigger[uGdpb]).GetFullGdpbTs();
1476 std::vector<gdpbv100::FullMessage> vTrigMess = (*itTrigger[uGdpb]).GetGdpbMessages();
1477 for (std::vector<gdpbv100::FullMessage>::iterator itMess = vTrigMess.begin(); itMess != vTrigMess.end();
1479 starSubEvent.
AddMsg((*itMess));
1485 fUnpackPar->GetGdpbToSectorOffset() + uGdpb);
1495 ++itStatUpdtStart[uGdpb];
1500 --itStatUpdtStart[uGdpb];
1502 uint16_t usGdpbId =
fUnpackPar->GetGdpbId(uGdpb);
1516 UInt_t uNbErrorsInEventGdpb = 0;
1518 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinBegErrors) {
1519 ++itErrorMessStart[uGdpb];
1522 && (*itErrorMessStart[uGdpb]).GetFullTimeNs() < dWinEnd) {
1526 ++itErrorMessStart[uGdpb];
1527 ++uNbErrorsInEventGdpb;
1532 std::vector<gdpbv100::FullMessage>::iterator itFirstMessOutOfDeadtime = itMessStart[uGdpb];
1535 && ((*itMessStart[uGdpb]).GetFullTimeNs() < dDeadEnd || (*itMessStart[uGdpb]).GetFullTimeNs() < dWinEnd)) {
1536 Double_t dMessTime = (*itMessStart[uGdpb]).GetFullTimeNs();
1549 UInt_t uTot = (*itMessStart[uGdpb]).getGdpbHit32Tot();
1557 if (dWinBeg < dMessTime && dMessTime < dWinEnd) {
1558 starSubEvent.
AddMsg((*itMessStart[uGdpb]));
1564 usEarliestStarDaqCmd);
1566 usEarliestStarTrigCmd);
1572 if (dMessTime < dDeadEnd) ++itFirstMessOutOfDeadtime;
1574 ++itMessStart[uGdpb];
1576 itMessStart[uGdpb] = itFirstMessOutOfDeadtime;
1579 if (kTRUE == vbMatchingTrigger[uGdpb]) ++itTrigger[uGdpb];
1587 bAllSectAllTriggDone = kTRUE;
1588 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1591 bAllSectAllTriggDone = kFALSE;
1605 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1606 UInt_t uSector =
fUnpackPar->GetGdpbToSectorOffset() + uGdpb;
1607 std::string sFolder = Form(
"sector%2u", uSector);
1609 LOG(info) <<
"gDPB " << uGdpb <<
" is " << sFolder;
1612 Form(
"Time to trigger for all neighboring hits in sector %2u; t "
1613 "- Ttrigg [ns]; Hits []",
1615 2000, -5000, 5000));
1620 Form(
"Time to trigger for all selected hits in sector %2u; t - "
1621 "Ttrigg [ns]; Hits []",
1631 new TH2D(Form(
"hHitsTimeToTriggerRawPulserSect%2u", uSector),
1632 Form(
"Time to trigger for all neighboring hits within pulser TOT range "
1633 "in sector %2u; t - Ttrigg [ns]; TOT [bins]; Hits []",
1635 2000, -5000, 5000, 256, 0, 256));
1638 Form(
"Time to trigger for all selected hits vs DAQ CMD in "
1639 "sector %2u; t - Ttrigg [ns]; DAQ CMD []; Hits []",
1644 Form(
"Time to trigger for all selected hits vs TRIG CMD in "
1645 "sector %2u; t - Ttrigg [ns]; TRIG CMD []; Hits []",
1650 fvhTriggerDt.push_back(
new TH1I(Form(
"hTriggerDtSect%2u", uSector),
1651 Form(
"Trigger time difference between sector %2u and the first sector, "
1652 "full events only; Ttrigg%2u - TtriggRef [Clk]; events []",
1662 Form(
"Trigger distribution inside TS in sector %2u; Time in "
1663 "TS [us]; Trigger [];",
1669 Form(
"Trigger distribution inside MS in sector %2u; Time in "
1670 "MS [us]; Trigger [];",
1676 Form(
"Messages distribution inside MS in sector %2u; Time in "
1677 "MS [us]; Trigger [];",
1694 fhEventNbPerTs =
new TH1I(
"hEventNbPerTs",
"Number of Events per TS; Events []; TS []", 1000, 0, 1000);
1697 new TH1I(
"hEventSizeDistribution",
"Event size distribution; Event size [byte]; Events []",
1701 "hEventSizeEvolution",
"Event size evolution; Time in run [min]; mean Event size [byte];", 14400, 0, 14400);
1704 new TH1I(
"hEventNbEvolution",
"Event number evolution; Time in run [min]; Events [];", 14400, 0, 14400);
1718 new TH1I(
"hEventNbDistributionInTs",
"Event number distribution inside TS; Time in TS [us]; Events [];",
1722 "Event size distribution inside TS; Time in TS [us]; mean "
1723 "Event size [Byte];",
1726 fhRawTriggersStats =
new TH2I(
"hRawTriggersStats",
"Raw triggers statistics per sector; ; Sector []; Messages []",
1727 5, 0, 5, 12, 13, 25);
1735 new TH2I(
"hRawTriggersStatsCore",
"Raw triggers in Core MS statistics per sector; ; Sector []; Messages []", 5, 0,
1744 "Raw triggers in Overlap MS statistics "
1745 "per sector; ; Sector []; Messages []",
1746 5, 0, 5, 12, 13, 25);
1754 "hRawTriggersStatsSel",
"Selected triggers statistics per sector; ; Sector []; Messages []", 3, 0, 3, 12, 13, 25);
1760 "Missing trigger counts per sector vs time in run; Time in run "
1761 "[min]; Sector []; Missing triggers []",
1762 14400, 0, 14400, 12, 13, 25);
1779 fcTimeToTrigRaw =
new TCanvas(
"cTimeToTrigRaw",
"Raw Time to trig for all sectors", w,
h);
1781 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1791 fcTimeToTrigSel =
new TCanvas(
"cTimeToTrigSel",
"Selected Time to trig for all sectors", w,
h);
1793 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1804 fcTrigDistMs =
new TCanvas(
"cTrigDistMs",
"Trigger time to MS start for all sectors", w,
h);
1806 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1816 fcMessDistMs =
new TCanvas(
"cMessDistMs",
"Message time to MS start for all sectors", w,
h);
1818 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
1827 fcTriggerStats =
new TCanvas(
"cTriggerStats",
"Trigger statistics per sector", w,
h);
1858 fcEventBuildStats =
new TCanvas(
"cEvtBuildStats",
"Event building statistics", w,
h);