79 , fbMonitorMode(kFALSE)
80 , fbDebugMonitorMode(kFALSE)
81 , fRawDataMode(kFALSE)
94 , fInSubSubEvent(kFALSE)
97 , fLastCTSch0_re_time(0.)
98 , fLastCTSch2_re_time(0.)
99 , fLastCTSch2_fe_time(0.)
100 , fPrevLastCTSch0_re_time(0.)
101 , fPrevLastCTSch2_re_time(0.)
102 , fPrevLastCTSch2_fe_time(0.)
125 LOG(info) <<
"Initializing mCBM RICH 2019 unpacker algo";
137 LOG(info) <<
"Init parameter containers for CbmMcbm2018UnpackerAlgoRich2020";
145 LOG(info) <<
"ReInit parameter containers for CbmMcbm2018UnpackerAlgoRich2020";
192 LOG(warning) <<
"fvMsComponentsList.size() > 1 for RICH. Unpacking may not "
193 "work due to implementation limitations.";
196 LOG(info) <<
"CbmMcbm2018UnpackerAlgoRich2020::AddMsComponentToList => Component " << component
197 <<
" with detector ID 0x" << std::hex << usDetectorId << std::dec <<
" added to list";
202 LOG(debug2) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTs(ts)";
217 if (0 == ts.index()) {
return kTRUE; }
219 LOG(debug2) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTs(ts, " << component <<
")";
230 TString sCompList =
"";
233 LOG(fatal) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTs => More than 1 "
234 "component in list, unpacking impossible! List is "
239 LOG(debug) <<
"Components: " << ts.num_components();
240 LOG(debug) <<
"Microslices: " << ts.num_microslices(component);
242 const uint64_t compSize = ts.size_component(component);
243 LOG(debug) <<
"Component " << component <<
" has size " << compSize;
252 <<
" Overlap MS, for a core duration of " <<
fdTsCoreSizeInNs <<
" ns and a full duration of "
258 LOG(info) <<
"In each TS " <<
fuNbMsLoop <<
" MS will be looped over";
261 for (
size_t iMS = 0; iMS <
fuNbMsLoop; ++iMS) {
263 LOG(debug) <<
"=======================================================";
264 const fles::MicrosliceView mv = ts.get_microslice(component, iMS);
265 const fles::MicrosliceDescriptor& msDesc = mv.desc();
267 LOG(debug) <<
"msDesc.size=" << msDesc.size;
269 LOG(debug) <<
"msDesc.idx=" << msDesc.idx;
279 LOG(debug) <<
"=======================================================";
310 const fles::MicrosliceView mv = ts.get_microslice(uMsCompIdx, uMsIdx);
311 const fles::MicrosliceDescriptor& msDesc = mv.desc();
312 const uint8_t* ptr = mv.content();
313 const size_t size = msDesc.size;
315 if (
size == 0)
return kTRUE;
327 <<
"Reserved 0000 0000";
333 dataPtr = (Int_t*) (ptr + offset);
334 Int_t mbsNumber = (Int_t)(dataPtr[0] & 0xffffff);
335 uint8_t mts_error_msg = (uint8_t)((dataPtr[0] >> 24) & 0xff);
341 <<
"mbsNumber = " << mbsNumber;
349 dataPtr = (Int_t*) (ptr + offset);
350 Int_t TRBeventSize1 = (Int_t)(dataPtr[0]);
355 <<
"HadesTransportUnitQueue - Length = " << TRBeventSize1;
358 if (*dataPtr > 0 && UInt_t(*dataPtr) == 0x80030000) {
359 LOG(info) <<
"dataPtr == 0x80030000";
368 dataPtr = (Int_t*) (ptr + offset);
369 Int_t dcdr = (Int_t)(dataPtr[0]);
371 if (dcdr == 0x00030062) {
375 <<
"HadesTransportUnitQueue - Decoder = " << dcdr;
382 <<
"HadesTransportUnitQueue - Decoder = " << dcdr <<
" is not 0x00030062 (196706) => 0x" << std::hex
397 dataPtr = (Int_t*) (ptr + offset);
398 Int_t TRBeventSize2 = (Int_t)(dataPtr[0]);
400 if (TRBeventSize2 == TRBeventSize1 - 8) {
404 <<
"TRB event - Length = " << TRBeventSize2 <<
" == " << TRBeventSize1 <<
"-8";
411 <<
"TRB event - Length = " << TRBeventSize2 <<
" != " << TRBeventSize1 <<
"-8=" << TRBeventSize1 - 8;
449 while (
static_cast<size_t>(offset) <
size) {
456 dataPtr = (Int_t*) (ptr + offset);
458 Int_t headerCopy = *dataPtr;
460 dataPtr = &headerCopy;
462 Int_t SubEvSize = (Int_t) ((dataPtr[0] >> 16) & 0xffff);
463 Int_t HubId = (Int_t) ((dataPtr[0]) & 0xffff);
467 if ((HubId == 0xc001) || (HubId == 0xc000)) {
477 <<
"subevent size = " << SubEvSize;
491 offset += (4 + SubEvSize * 4);
500 while (
static_cast<size_t>(offset) <
size) {
510 dataPtr = (Int_t*) (ptr + offset);
511 Int_t SubEvSize = (Int_t)((dataPtr[0] >> 16) & 0xffff);
512 Int_t HubId = (Int_t)((dataPtr[0]) & 0xffff);
515 if ((HubId == 0xc001) || (HubId == 0xc000)) {
524 offset += (4 + SubEvSize * 4);
527 else if (HubId == 0x5555) {
532 <<
"subevent size = " << SubEvSize;
541 else if (((HubId >> 8) & 0xFF) == 0x82) {
546 <<
"subevent size = " << SubEvSize;
557 uint16_t combiner_address = ((HubId >> 4) & 0xF) * 3 + (HubId & 0xF);
566 <<
"subevent size = " << SubEvSize <<
"\n"
567 <<
"This is not a valid Combiner Id!"
575 offset += (4 + SubEvSize * 4);
582 if (
size !=
static_cast<size_t>(offset)) {
583 LOG(warning) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTRBevent() warning:"
584 <<
"Number of processed bytes is not equal to the expected size. "
585 "This should not happen. ("
586 <<
size <<
" VS " << offset <<
")";
612 dataPtr = (Int_t*) (ptr + offset);
613 Int_t checkSize = (Int_t)((dataPtr[0] >> 16) & 0xffff);
614 Int_t triggerType = (Int_t)((dataPtr[0] >> 4) & 0xf);
616 if (checkSize == 2) {
622 <<
"trigger type = " << triggerType;
629 <<
"checkSize != 2 (" << checkSize <<
")\t"
630 <<
"trigger type = " << triggerType;
648 dataPtr = (Int_t*) (ptr + offset);
649 Int_t checkBytes = (Int_t)((dataPtr[0] >> 16) & 0xffff);
652 if (checkBytes == 0) {
665 <<
"checkBytes != 0 (" << checkBytes <<
")\t"
678 dataPtr = (Int_t*) (ptr + offset);
679 UInt_t TriggerNum = (UInt_t)(dataPtr[0]);
684 <<
"trigger num = " << TriggerNum;
696 uint16_t SubEventError = 0;
704 dataPtr = (Int_t*) (ptr + offset);
705 SubEventError = (uint16_t)((dataPtr[0] >> 16) & 0xffff);
712 while (
static_cast<size_t>(offset) <
size + 4) {
723 if (
size !=
static_cast<size_t>(offset - 4)) {
724 LOG(warning) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessSKIPsubevent() warning:"
725 <<
"Number of processed bytes is not equal to the expected size. "
726 "This should not happen.";
745 dataPtr = (Int_t*) (ptr + offset);
759 Short_t nInp = ((*dataPtr >> 16) & 0xf);
760 Short_t nTrigCh = ((*dataPtr >> 20) & 0x1f);
761 Short_t inclLastIdle = ((*dataPtr >> 25) & 0x1);
762 Short_t inclTrigInfo = ((*dataPtr >> 26) & 0x1);
763 Short_t inclTS = ((*dataPtr >> 27) & 0x1);
764 Short_t ETM = ((*dataPtr >> 28) & 0x3);
767 Short_t CTSinfo_size = nInp * 2 + nTrigCh * 2 + inclLastIdle * 2 + inclTrigInfo * 3 + inclTS;
770 case 1: CTSinfo_size += 1;
break;
771 case 2: CTSinfo_size += 4;
break;
773 LOG(debug) <<
"ETM == 3";
778 LOG(debug) <<
"CTS information size (extracted from the CTS header): " << CTSinfo_size;
782 while (offset - 8 < CTSinfo_size * 4) {
785 dataPtr = (Int_t*) (ptr + offset);
786 ULong_t MSidx = 102400UL * ((ULong_t)(*dataPtr) - 1);
792 <<
" MSidx=" << MSidx;
807 if (
size !=
static_cast<size_t>(offset - 4)) {
808 LOG(warning) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessCTSsubevent() warning:"
809 <<
"Number of processed bytes is not equal to the expected size. "
810 "This should not happen.";
831 while (
static_cast<size_t>(offset) < (
size - 2)) {
847 dataPtr = (Int_t*) (ptr + offset);
848 Int_t SubSubEvSize = (Int_t)((dataPtr[0] >> 16) & 0xffff);
853 if ((
static_cast<size_t>(offset) + SubSubEvSize * 4) >=
size) {
854 LOG(debug) <<
"Last DiRICH on HUB";
862 <<
"ILLEGAL SubSubEvent Id prev";
866 <<
"ILLEGAL SubSubEvent Id prev";
870 <<
"ILLEGAL SubSubEvent Id prev";
874 <<
"ILLEGAL SubSubEvent Id "
875 <<
"Offset:" <<
static_cast<size_t>(offset) <<
" Size:" <<
size;
879 <<
"ILLEGAL SubSubEvent Id next";
883 <<
"ILLEGAL SubSubEvent Id next";
887 <<
"ILLEGAL SubSubEvent Id next";
894 <<
"subsubevent size = " << SubSubEvSize <<
" | HUB Offset:" <<
static_cast<size_t>(offset)
899 LOG(warning) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTRBsubevent() warning:"
900 <<
"SubEvent out of bounds. This should not happen. (" <<
size <<
" VS "
933 std::cout <<
"Missing Correction" << std::endl;
944 if (
size !=
static_cast<size_t>(offset - 4)) {
945 LOG(warning) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTRBsubevent() warning:"
946 <<
"Number of processed bytes is not equal to the expected size. "
947 "This should not happen. ("
948 <<
size <<
" VS " << (offset - 4) <<
")"
961 Int_t
const hubOffset,
size_t const hubSize)
968 Int_t TdcWordCorrection_local = 0;
970 bool break_flag =
false;
972 for (
size_t iWord = 0; iWord <
size / 4; iWord++) {
988 TdcWordCorrection_local++;
999 if ((hubSize > 0) && (hubOffset + offset + iWord * 4 > hubSize)) {
1019 if (
fSkipMs == kTRUE)
return 0;
1024 if (!((!break_flag && ((
size) ==
static_cast<size_t>((WordCnt) *4)))
1026 LOG(warning) <<
"CbmMcbm2018UnpackerAlgoRich2020::ProcessTRBsubsubevent() warning:"
1027 <<
"Number of processed bytes is not equal to the expected size. "
1028 "This should not happen."
1029 <<
static_cast<size_t>(WordCnt * 4) <<
" " <<
size;
1035 return (WordCnt * 4 + offset);
1041 Int_t* tdcDataPtr = (Int_t*) ptr;
1042 Int_t tdcData = tdcDataPtr[0];
1043 Int_t tdcTimeDataMarker = (tdcData >> 31) & 0x1;
1046 bool errorInData =
false;
1051 UInt_t tdcMarker = (tdcData >> 29) & 0x7;
1052 if (tdcMarker == 0x4 || tdcMarker == 0x5) {
1060 std::cout <<
"wrong TDC Word!!" << std::endl;
1065 UInt_t tdcMarker = (tdcData >> 29) & 0x7;
1067 if (tdcMarker == 0x0) {
1073 <<
"ILLEGAL TRAILER Position";
1076 else if ((
size / 4 -
static_cast<size_t>(word)) > 1) {
1081 <<
"Trailer only at end of SubSubEvent!" <<
size / 4 <<
" " <<
static_cast<size_t>(word);
1092 uint16_t errorBits = (tdcData) &0xffff;
1103 <<
"UNKNOWN (TDC TRAILER not after header)";
1109 else if (tdcMarker == 0x1) {
1119 <<
"ILLEGAL HEADER Position";
1122 else if (!((((tdcData >> 8) & 0xFFFFFF) == 0x200096) || (((tdcData >> 8) & 0xFFFFFF) == 0x200095))) {
1126 <<
"ILLEGAL HEADER Value";
1132 uint8_t errorBits = (tdcData) &0xff;
1145 <<
"UNKNOWN (TDC HEADER not after trailer)";
1152 else if (tdcMarker == 0x2) {
1165 else if (tdcMarker == 0x3) {
1170 <<
"ILLEGAL EPOCH Position!";
1173 else if (((tdcData >> 28) & 0xF) != 0x6) {
1177 <<
"ILLEGAL EPOCH value :";
1192 if (tdcTimeDataMarker != 0x1) {
1206 LOG(error) <<
" >>> Skipping MicroTS due to error in data! <<<";
1215 Int_t channel = (tdcData >> 22) & 0x7f;
1216 Int_t fine = (tdcData >> 12) & 0x3ff;
1217 Int_t edge = (tdcData >> 11) & 0x1;
1218 Int_t coarse = (tdcData) &0x7ff;
1223 Double_t fullTime = (Double_t) epoch * 2048. * 5. + (Double_t) (coarse) *5. - (Double_t) (fine) *0.005;
1231 <<
"ch=" << channel <<
"\t"
1232 <<
"edge=" << edge <<
"\t"
1233 <<
"epoch=" << epoch <<
"\t"
1234 <<
"coarse=" << coarse <<
"\t"
1235 <<
"fine=" << fine <<
"\t"
1236 <<
"full=" << fullTime;
1280 Double_t fullTimeCorr = 0.;
1285 fullTimeCorr = dT - corr;
1324 Double_t correctedT1 = dT8 + corr1;
1325 Double_t correctedT2 = dT8 - corr1;
1333 <<
"\tdT8=" << dT8 <<
"\tcorr1=" << corr1 <<
"\tcorrectedT1=" << correctedT1
1334 <<
"\tcorrectedT2=" << correctedT2;
1354 if (channel == 0)
return;
1357 if ((subSubEvId == 0xc000) || (subSubEvId == 0xc001))
return;
1367 if ((subSubEvId == 0xc000) || (subSubEvId == 0xc001))
return;
1369 Bool_t reFound = kFALSE;
1371 std::vector<CbmMcbmRichEdge>::iterator reIter =
fRisingEdgesBuf.begin();
1374 if (((*reIter).fSubSubEventID == subSubEvId) && ((*reIter).fChannel == channel)) {
1375 Double_t reTime = (*reIter).fTime;
1377 Double_t ToT = time - reTime;
1384 LOG(debug4) <<
"Found pair for FPGA ID 0x" << std::hex << subSubEvId << std::dec <<
"\tch=" << channel
1391 TH1D*
h =
GetTotH1(subSubEvId, channel);
1392 if (
h !=
nullptr)
h->Fill(ToT);
1395 if (h2 !=
nullptr) h2->Fill(channel, ToT);
1414 if (reFound == kFALSE) {
1424 Int_t pixelUID = this->
GetPixelUID(fpgaID, channel);
1428 Double_t lastTime = 0.;
1430 if (
fDigiVect.size() < 1) {
fDigiVect.emplace_back(pixelUID, finalTime, tot - ToTcorr); }
1433 if (lastTime > finalTime) {
1434 for (
int i =
fDigiVect.size() - 1; i >= 0; i--) {
1436 if (lastTime <= finalTime) {
1445 fDigiVect.emplace_back(pixelUID, finalTime, tot - ToTcorr);
1448 LOG(debug4) <<
"CbmMcbm2018UnpackerAlgoRich2020::WriteOutputDigi fDigiVect.size=" <<
fDigiVect.size();
1460 LOG(debug4) <<
"CbmMcbm2018UnpackerAlgoRich2020::FinalizeTs: " <<
fRisingEdgesBuf.size()
1461 <<
" entries in fRisingEdgesBuf"
1465 LOG(debug4) <<
"Rising edges: "
1466 "----------------------------------------------------------";
1467 std::vector<CbmMcbmRichEdge>::iterator reIter =
fRisingEdgesBuf.begin();
1469 LOG(debug4) <<
"FPGA=0x" << std::hex << (*reIter).fSubSubEventID << std::dec <<
"\tch=" << (*reIter).fChannel;
1475 LOG(debug4) <<
"Falling edges: "
1476 "---------------------------------------------------------";
1479 LOG(debug4) <<
"FPGA=0x" << std::hex << (*feIter).fSubSubEventID << std::dec <<
"\tch=" << (*feIter).fChannel;
1484 LOG(debug4) <<
"---------------------------------------------------------";
1509 fhTdcErrors =
new TH2D(
"fhTdcErrors",
"Errors in TDC msgs;;", nTDCs, -0.5, nTDCs - 0.5, 9, -0.5, 8.5);
1510 fhTdcErrors->GetYaxis()->SetBinLabel(1,
"RingBuffOverw.");
1511 fhTdcErrors->GetYaxis()->SetBinLabel(2,
"noRefTime");
1512 fhTdcErrors->GetYaxis()->SetBinLabel(3,
"refTimePrecedes");
1513 fhTdcErrors->GetYaxis()->SetBinLabel(4,
"trigW/oRefTime");
1514 fhTdcErrors->GetYaxis()->SetBinLabel(5,
"markMisRefTime");
1515 fhTdcErrors->GetYaxis()->SetBinLabel(6,
"multiRefTime");
1516 fhTdcErrors->GetYaxis()->SetBinLabel(7,
"refTime<40ns");
1517 fhTdcErrors->GetYaxis()->SetBinLabel(8,
"noValidation");
1518 fhTdcErrors->GetYaxis()->SetBinLabel(9,
"trigger!=0x1");
1524 fhEventErrors =
new TH2D(
"fhEventErrors",
"Errors in Event/mts msgs;;", 1, -0.5, 0.5, 13, -0.5, 12.5);
1535 fhEventErrors->GetYaxis()->SetBinLabel(11,
"subEvBuffAlmFull");
1537 fhEventErrors->GetYaxis()->SetBinLabel(13,
"timingTrigErr");
1542 for (Int_t iTDC = 0; iTDC < nTDCs; iTDC++) {
1549 fhTdcErrors->GetXaxis()->SetBinLabel(iTDC + 1, Form(
"0x%4x", Addr));
1577 for (Int_t iCh = 0; iCh <= 32; iCh++) {
1595 TString canvasTitle;
1597 canvasName.Form(
"cToT2d_TDC_0x%4x", tdc);
1598 canvasTitle.Form(
"ToTs of TDC 0x%4x", tdc);
1599 c =
new TCanvas(canvasName, canvasTitle, w,
h);
1622 fhVectorSize =
new TH1I(
"fhVectorSize",
"Size of the vector VS TS index; TS index; Size [bytes]", 10000, 0., 10000.);
1624 new TH1I(
"fhVectorCapacity",
"Size of the vector VS TS index; TS index; Size [bytes]", 10000, 0., 10000.);
1629 fhEventSize =
new TH1I(
"fhEventSize",
"Size of the Event from TrbNet; Size [bytes]", 350, 0., 70000.);
1633 new TH2I(
"fhSubEventSize",
"fhSubEventSize; HubId ; Size [bytes]; Entries", 6, 0, 6, 10000, 0., 10000.);
1637 new TH2I(
"fhSubSubEventSize",
"fhSubSubEventSize; DiRICH ; Size [words]; Entries", 72, 0, 72, 510, 0., 510.);
1640 fhChnlSize =
new TH2I(
"fhChnlSize",
"fhChnlSize; channel; Size [words]; Entries", 33, 0, 33, 25, 0, 25.);
1651 TString name, title, subFolder;
1652 name.Form(
"ToT_tdc0x%x_ch%u", tdc, channel);
1653 title.Form(
"%s;ToT [ns];Entries", name.Data());
1654 subFolder.Form(
"ToT/tdc0x%x", tdc);
1655 h =
new TH1D(name, title, 100, -1., 49.);
1666 TString name, title, subFolder;
1667 name.Form(
"ToT_2d_tdc0x%x", tdc);
1668 title.Form(
"%s;channels;ToT [ns]", name.Data());
1669 subFolder.Form(
"ToT2d");
1670 h =
new TH2D(name, title, 33, 0, 32, 200, -1., 49.);
1679 const fles::MicrosliceView mv = ts.get_microslice(uMsCompIdx, uMsIdx);
1680 const fles::MicrosliceDescriptor& msDesc = mv.desc();
1681 const uint8_t* ptr = mv.content();
1682 const size_t size = msDesc.size;
1684 if (
size == 0)
return kTRUE;
1699 std::cout << std::endl <<
"SIZE: " << std::dec <<
size <<
"Byte" << std::endl;
1700 for (
size_t i = 0; i <
size; ++i) {
1703 uint8_t* tdcDataPtr = (uint8_t*) (ptr + i);
1705 if (wrdCnt == 0 && nblCnt == 0) { printf(
"%08d : ",
static_cast<int>(i)); }
1707 printf(
"%02x",
unsigned(*tdcDataPtr));
1709 if (nblCnt % 2 == 0) { printf(
" "); }
1710 if (nblCnt % 4 == 0) {
1779 if (((errbits >> 0) & 0x1) == 1)
fhEventErrors->Fill(0.0, 1.0);
1782 if (((errbits >> 1) & 0x1) == 1)
fhEventErrors->Fill(0.0, 2.0);
1785 if (((errbits >> 2) & 0x1) == 1)
fhEventErrors->Fill(0.0, 3.0);
1788 if (((errbits >> 3) & 0x1) == 1)
fhEventErrors->Fill(0.0, 4.0);
1791 if (((errbits >> 4) & 0x1) == 1)
fhEventErrors->Fill(0.0, 5.0);
1794 if (((errbits >> 5) & 0x1) == 1)
fhEventErrors->Fill(0.0, 6.0);
1797 if (((errbits >> 6) & 0x1) == 1)
fhEventErrors->Fill(0.0, 7.0);
1800 if (((errbits >> 7) & 0x1) == 1)
fhEventErrors->Fill(0.0, 8.0);
1803 if (((errbits >> 8) & 0x1) == 1)
fhEventErrors->Fill(0.0, 9.0);
1806 if (((errbits >> 9) & 0x1) == 1)
fhEventErrors->Fill(0.0, 10.0);
1809 if (((errbits >> 10) & 0x1) == 1)
fhEventErrors->Fill(0.0, 11.0);
1812 if (((errbits >> 11) & 0x1) == 1)
fhEventErrors->Fill(0.0, 12.0);
1857 for (Int_t i = 8; i < static_cast<Int_t>(
size - 4); i += 4) {
1862 bool problem =
false;
1864 if ((((Int_t*) (ptr + i - 4))[0] & 0xFFFF) == ((((Int_t*) (ptr + i))[0] >> 16) & 0xFFFF)) {
1865 if ((((Int_t*) (ptr + i + 4))[0] & 0xFFFF) == ((((Int_t*) (ptr + i + 4))[0] >> 16) & 0xFFFF)) {
1878 if (problem) i += 8;
ClassImp(CbmConverterManager)
static constexpr size_t size()
Int_t GetNaddresses(void) const
Double_t GetToTshift(Int_t tdc, Int_t ch) const
Int_t GetAddress(Int_t ind) const
Int_t GetAddressIdx(Int_t addr, bool bVerbose=true) const
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
TH1D * GetTotH1(Int_t fpgaID, Int_t channel)
Int_t ProcessCTSsubevent(size_t const size, uint8_t const *const ptr)
TrbNetState fTrbState
flag for an error in the datastream
std::map< Int_t, TH2D * > fhTot2dMap
std::vector< Int_t > fTDCAlignmentErrorPositions
Bool_t fbDoToTCorr
User setting: kTRUE activates ToT correction from Parameterfile.
CbmMcbm2018RichPar * fUnpackPar
Double_t fPrevLastCTSch2_fe_time
Int_t fTdcWordCorrectionGlobalCnt
virtual Bool_t InitContainers()
virtual Bool_t ReInitContainers()
void ProcessFallingEdge(Int_t subSubEvId, Int_t channel, Double_t time)
std::vector< CbmMcbmRichEdge > fFallingEdgesBuf
Exclude from ROOT dictionnary due to missing empty constructor!!
Int_t ProcessTRBevent(size_t const size, uint8_t const *const ptr)
Int_t ProcessTRBsubsubevent(size_t const size, uint8_t const *const ptr, Int_t const hubOffset, size_t const hubSize)
Double_t fLastCTSch2_re_time
Double_t fLastCTSch0_re_time
Bool_t fRawDataMode
Switch ON the filling of a additional set of histograms.
virtual ~CbmMcbm2018UnpackerAlgoRich2020()
TH2D * GetTotH2(Int_t fpgaID)
void ProcessTimestampWord(Int_t tdcData)
Bool_t DebugMs(const fles::Timeslice &ts, size_t uMsCompIdx, size_t uMsIdx)
CbmMcbm2018UnpackerAlgoRich2020()
Double_t fdTimeOffsetNs
User settings: Data correction parameters.
std::vector< CbmMcbmRichEdge > fRisingEdgesBuf
Int_t ProcessTRBeventHeader(size_t const size, uint8_t const *const ptr)
Double_t fPrevLastCTSch0_re_time
Double_t fLastCTSch2_fe_time
void ErrorMsg(uint16_t errbits, RichErrorType type, uint16_t tdcAddr=0)
Int_t ProcessTRBsubevent(size_t const size, uint8_t const *const ptr)
void findTDCAlignmentError(uint8_t const *const ptr, size_t const size)
Double_t fPrevLastCTSch2_re_time
Int_t Debug(const uint8_t *ptr, const size_t size)
void ProcessRisingEdge(Int_t subSubEvId, Int_t channel, Double_t time)
virtual Bool_t ProcessMs(const fles::Timeslice &ts, size_t uMsCompIdx, size_t uMsIdx)
Int_t GetPixelUID(Int_t fpgaID, Int_t ch) const
std::map< uint16_t, uint16_t > fMapFEE
Int_t ProcessSKIPsubevent(size_t const size, uint8_t const *const ptr)
Int_t ProcessTDCword(uint8_t const *const ptr, Int_t const word, size_t const size)
std::array< unsigned int, 33 > fChnlMsgCnt
Bool_t fbDebugMonitorMode
Switch ON the filling of a minimal set of histograms.
std::map< Int_t, std::map< Int_t, TH1D * > > fhTotMap
virtual TList * GetParList()
virtual Bool_t ProcessTs(const fles::Timeslice &ts)
void WriteOutputDigi(Int_t fpgaID, Int_t channel, Double_t time, Double_t tot, uint64_t MSidx)
Double_t fdCapacityIncFactor
Bool_t CreateHistograms()
Exclude from ROOT dictionnary due to missing empty constructor!!
std::vector< TCanvas * > fcTot2d
TArrayD fPrevLastCh0_re_time
Bool_t fbMonitorMode
Control flags.
Int_t fTdcWordCorrectionCnt
Double_t fdTsCoreSizeInNs
void AddHistoToVector(TNamed *pointer, std::string sFolder="")
std::vector< size_t > fvMsComponentsList
void AddCanvasToVector(TCanvas *pointer, std::string sFolder="")
std::vector< CbmRichDigi > fDigiVect
Double_t fdTsFullSizeInNs
Data class with information on a STS local track.
std::string GetHexRepresentation(size_t const size, uint8_t const *const ptr)
std::string GetWordHexRepr(uint8_t const *const ptr)
void SwapBytes(size_t const size, uint8_t const *ptr)