19#include "FairRootManager.h"
21#include "FairRunOnline.h"
22#include "FairRuntimeDb.h"
27#include "TPaveStats.h"
45 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
54 LOG(info) <<
"Initializing mCBM Bmon 2019 monitor algo";
69 LOG(info) <<
"Init parameter containers for CbmMcbm2018MonitorAlgoBmon";
76 LOG(info) <<
"**********************************************";
77 LOG(info) <<
"ReInit parameter containers for CbmMcbm2018MonitorAlgoBmon";
124 LOG(info) <<
"GDPB Id of TOF " << i <<
" : " << std::hex <<
fUnpackPar->GetGdpbId(i) << std::dec;
148 LOG(info) <<
"CbmMcbm2018MonitorAlgoBmon::AddMsComponentToList => Component " << component <<
" with detector ID 0x"
149 << std::hex << usDetectorId << std::dec <<
" added to list";
156 fdTsStartTime =
static_cast<Double_t
>(ts.descriptor(0, 0).idx);
168 <<
" Overlap MS, for a core duration of " <<
fdTsCoreSizeInNs <<
" ns and a full duration of "
174 LOG(info) <<
"In each TS " <<
fuNbMsLoop <<
" MS will be looped over";
194 std::sort( fvmHitsInMs.begin(), fvmHitsInMs.end() );
197 for( auto itHitIn = fvmHitsInMs.begin(); itHitIn < fvmHitsInMs.end(); ++itHitIn )
199 UInt_t uFebIdx = itHitIn->GetAsic() / fUnpackPar->GetNbAsicsPerFeb()
200 + ( itHitIn->GetDpb() * fUnpackPar->GetNbCrobsPerDpb() + itHitIn->GetCrob() )
201 * fUnpackPar->GetNbFebsPerCrob();
202 UInt_t uChanInFeb = itHitIn->GetChan()
203 + fUnpackPar->GetNbChanPerAsic() * (itHitIn->GetAsic() % fUnpackPar->GetNbAsicsPerFeb());
205 ULong64_t ulTimeInNs = static_cast< ULong64_t >( itHitIn->GetTs() * stsxyter::kdClockCycleNs - fdTimeOffsetNs );
207 fDigiVect.push_back( CbmTofDigi( fviFebAddress[ uFebIdx ], uChanInFeb, ulTimeInNs, itHitIn->GetAdc() ) );
208 } // for( auto itHitIn = fvmHitsInMs.begin(); itHitIn < fvmHitsInMs.end(); ++itHitIn )
235 auto msDescriptor = ts.descriptor(uMsCompIdx, uMsIdx);
237 const uint8_t* msContent =
reinterpret_cast<const uint8_t*
>(ts.content(uMsCompIdx, uMsIdx));
239 uint32_t uSize = msDescriptor.size;
243 <<
" has size: " << uSize;
254 LOG(info) <<
"---------------------------------------------------------------";
255 LOG(info) <<
"Component " << uMsCompIdx <<
" TS Idx " <<
fulCurrentTsIdx;
256 LOG(info) <<
"hi hv eqid flag si sv idx/start crc size offset";
257 LOG(info) << Form(
"%02x %02x %04x %04x %02x %02x %016lx %08x %08x %016lx",
258 static_cast<unsigned int>(msDescriptor.hdr_id),
static_cast<unsigned int>(msDescriptor.hdr_ver),
259 msDescriptor.eq_id, msDescriptor.flags,
static_cast<unsigned int>(msDescriptor.sys_id),
260 static_cast<unsigned int>(msDescriptor.sys_ver),
static_cast<unsigned long>(msDescriptor.idx),
261 msDescriptor.crc, msDescriptor.size,
static_cast<unsigned long>(msDescriptor.offset));
270 LOG(info) <<
"---------------------------------------------------------------";
281 LOG(warning) <<
"Could not find the gDPB index for AFCK id 0x" << std::hex <<
fuCurrDpbId << std::dec
282 <<
" in timeslice " <<
fulCurrentTsIdx <<
" in microslice " << uMsIdx <<
" component " << uMsCompIdx
284 <<
"If valid this index has to be added in the TOF "
285 "parameter file in the DbpIdArray field";
335 LOG(error) <<
"The input microslice buffer does NOT "
336 <<
"contain only complete nDPB messages!";
342 Int_t messageType = -111;
343 const uint64_t* pInBuff =
reinterpret_cast<const uint64_t*
>(msContent);
344 for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx++) {
346 uint64_t ulData =
static_cast<uint64_t
>(pInBuff[uIdx]);
366 <<
" set in parameters.";
368 switch (messageType) {
371 LOG(error) <<
"This event builder does not support 24b hit message!!!.";
423 LOG(debug2) << "This event builder does not support unmerged epoch messages!!!.";
425 } // if single chip epoch message
468 LOG(error) <<
"Message type " << std::hex << std::setw(2) << static_cast<uint16_t>(messageType)
469 <<
" not included in Get4 unpacker.";
511 mess.setGdpbEpEpochNb( ulEpochNr - 1 );
512 else mess.setGdpbEpEpochNb( gdpbv100::kuEpochCounterSz );
515 ProcessEpSupprBuffer();
517// -------------------------------------------------------------------------
518void CbmMcbm2018MonitorAlgoBmon::ProcessEpSupprBuffer()
520 Int_t iBufferSize = fvvmEpSupprBuffer[ fuCurrDpbIdx ].size();
522 if( 0 == iBufferSize )
525 LOG(debug) << "Now processing stored messages for for gDPB " << fuCurrDpbIdx << " with epoch number "
526 << (fvulCurrentEpoch[fuCurrDpbIdx] - 1);
530 std::stable_sort( fvvmEpSupprBuffer[ fuCurrDpbIdx ].begin(), fvvmEpSupprBuffer[ fuCurrDpbIdx ].begin() );
533 ULong64_t ulCurEpochGdpbGet4 = fvulCurrentEpochFull[ fuCurrDpbIdx ];
536 if( 0 == ulCurEpochGdpbGet4 )
540 ulCurEpochGdpbGet4 --;
542 Int_t messageType = -111;
543 for( Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++ )
545 messageType = fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ].getMessageType();
547 fuGet4Id = fUnpackPar->ElinkIdxToGet4Idx( fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ].getGdpbGenChipId() );
548 if( fuDiamondDpbIdx == fuCurrDpbIdx )
549 fuGet4Id = fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ].getGdpbGenChipId();
550 fuGet4Nr = (fuCurrDpbIdx * fuNrOfGet4PerGdpb) + fuGet4Id;
553 gdpbv100::FullMessage fullMess( fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ], ulCurEpochGdpbGet4 );
556 switch( messageType )
558 case gdpbv100::MSG_HIT:
560 ProcessHit( fullMess );
562 } // case gdpbv100::MSG_HIT:
563 case gdpbv100::MSG_SLOWC:
565 ProcessSlCtrl( fullMess );
567 } // case gdpbv100::MSG_SLOWC:
568 case gdpbv100::MSG_SYST:
570 ProcessSysMess( fullMess );
572 } // case gdpbv100::MSG_SYST:
573 case gdpbv100::MSG_EPOCH:
574 case gdpbv100::MSG_STAR_TRI_A:
575 case gdpbv100::MSG_STAR_TRI_B:
576 case gdpbv100::MSG_STAR_TRI_C:
577 case gdpbv100::MSG_STAR_TRI_D:
581 LOG(error) << "Message type " << std::hex
582 << std::setw(2) << static_cast<uint16_t>(messageType)
583 << " not included in Get4 unpacker.";
584 } // switch( mess.getMessageType() )
585 } // for( Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++ )
587 fvvmEpSupprBuffer[ fuCurrDpbIdx ].clear();
589// -------------------------------------------------------------------------
590void CbmMcbm2018MonitorAlgoBmon::ProcessHit( gdpbv100::FullMessage mess )
592 UInt_t uChannel = mess.getGdpbHitChanId();
593 UInt_t uTot = mess.getGdpbHit32Tot();
595 // In 32b mode the coarse counter is already computed back to 112 FTS bins
596 // => need to hide its contribution from the Finetime
597 // => FTS = Fullt TS modulo 112
598 UInt_t uFts = mess.getGdpbHitFullTs() % 112;
600 UInt_t uChannelNr = fuGet4Id * fuNrOfChannelsPerGet4 + uChannel;
601 UInt_t uChannelNrInFee = (fuGet4Id % fuNrOfGet4PerFee) * fuNrOfChannelsPerGet4 + uChannel;
602 UInt_t uFeeNr = (fuGet4Id / fuNrOfGet4PerFee);
603 UInt_t uFeeNrInSys = fuCurrDpbIdx * fuNrOfFeePerGdpb + uFeeNr;
604 UInt_t uRemappedChannelNr = uFeeNr * fuNrOfChannelsPerFee + fUnpackPar->Get4ChanToPadiChan( uChannelNrInFee );
605 UInt_t uGbtxNr = (uFeeNr / fUnpackPar->GetNrOfFeePerGbtx());
606 UInt_t uFeeInGbtx = (uFeeNr % fUnpackPar->GetNrOfFeePerGbtx());
607 UInt_t uGbtxNrInSys = fuCurrDpbIdx * fUnpackPar->GetNrOfGbtxPerGdpb() + uGbtxNr;
609 UInt_t uChanInSyst = fuCurrDpbIdx * fuNrOfChannelsPerGdpb + uChannelNr;
610 UInt_t uRemappedChannelNrInSys = fuCurrDpbIdx * fuNrOfChannelsPerGdpb
611 + uFeeNr * fuNrOfChannelsPerFee
612 + fUnpackPar->Get4ChanToPadiChan( uChannelNrInFee );
614 if( fuDiamondDpbIdx == fuCurrDpbIdx )
616 uRemappedChannelNr = uChannelNr;
617 uRemappedChannelNrInSys = fuCurrDpbIdx * fUnpackPar->GetNrOfChannelsPerGdpb() + uChannelNr;
618 } // if( fuDiamondDpbIdx == fuCurrDpbIdx )
620 ULong_t ulHitTime = mess.getMsgFullTime( mess.getExtendedEpoch() );
621 Double_t dHitTime = mess.GetFullTimeNs();
622 Double_t dHitTot = uTot; // in bins
625// -------------------------------------------------------------------------
626void CbmMcbm2018MonitorAlgoBmon::ProcessSlCtrl( gdpbv100::FullMessage mess )
629// -------------------------------------------------------------------------
630void CbmMcbm2018MonitorAlgoBmon::ProcessSysMess( gdpbv100::FullMessage mess )
632 switch( mess.getGdpbSysSubType() )
634 case gdpbv100::SYS_GET4_ERROR:
636 ProcessError( mess );
638 } // case gdpbv100::SYSMSG_GET4_EVENT
639 case gdpbv100::SYS_GDPB_UNKWN:
641 LOG(debug) << "Unknown GET4 message, data: " << std::hex << std::setw(8)
642 << mess.getGdpbSysUnkwData() << std::dec
643 <<" Full message: " << std::hex << std::setw(16)
644 << mess.getData() << std::dec;
646 } // case gdpbv100::SYS_GDPB_UNKWN:
647 case gdpbv100::SYS_GET4_SYNC_MISS:
649 if( mess.getGdpbSysFwErrResync() )
650 LOG(info) << Form( "GET4 Resynchronization: Get4:0x%04x ", mess.getGdpbGenChipId() ) << fuCurrDpbIdx;
651 else LOG(info) << "GET4 synchronization pulse missing in gDPB " << fuCurrDpbIdx;
653 } // case gdpbv100::SYS_GET4_SYNC_MISS:
654 case gdpbv100::SYS_PATTERN:
656 ProcessPattern( mess );
658 } // case gdpbv100::SYS_PATTERN:
661 LOG(info) << "Crazy system message, subtype " << mess.getGdpbSysSubType();
664 } // switch( mess.getGdpbSysSubType() )
666void CbmMcbm2018MonitorAlgoBmon::ProcessError( gdpbv100::FullMessage mess )
668 uint32_t uErrorType = mess.getGdpbSysErrData();
672 case gdpbv100::GET4_V2X_ERR_READ_INIT:
673 case gdpbv100::GET4_V2X_ERR_SYNC:
674 case gdpbv100::GET4_V2X_ERR_EP_CNT_SYNC:
675 case gdpbv100::GET4_V2X_ERR_EP:
676 case gdpbv100::GET4_V2X_ERR_FIFO_WRITE:
677 case gdpbv100::GET4_V2X_ERR_CHAN_STATE:
678 case gdpbv100::GET4_V2X_ERR_TOK_RING_ST:
679 case gdpbv100::GET4_V2X_ERR_TOKEN:
680 case gdpbv100::GET4_V2X_ERR_READOUT_ERR:
681 case gdpbv100::GET4_V2X_ERR_DLL_LOCK:
682 case gdpbv100::GET4_V2X_ERR_DLL_RESET:
685 case gdpbv100::GET4_V2X_ERR_SPI:
688 case gdpbv100::GET4_V2X_ERR_LOST_EVT:
689 case gdpbv100::GET4_V2X_ERR_TOT_OVERWRT:
690 case gdpbv100::GET4_V2X_ERR_TOT_RANGE:
691 case gdpbv100::GET4_V2X_ERR_EVT_DISCARD:
692 case gdpbv100::GET4_V2X_ERR_ADD_RIS_EDG:
693 case gdpbv100::GET4_V2X_ERR_UNPAIR_FALL:
694 case gdpbv100::GET4_V2X_ERR_SEQUENCE_ER:
697 case gdpbv100::GET4_V2X_ERR_EPOCH_OVERF:
699 case gdpbv100::GET4_V2X_ERR_UNKNOWN:
705 } // switch( uErrorType )
709void CbmMcbm2018MonitorAlgoBmon::ProcessPattern( gdpbv100::FullMessage mess )
711 uint16_t usType = mess.getGdpbSysPattType();
712 uint16_t usIndex = mess.getGdpbSysPattIndex();
713 uint32_t uPattern = mess.getGdpbSysPattPattern();
717 case gdpbv100::PATT_MISSMATCH:
719 LOG(debug) << Form( "Missmatch pattern message => Type %d, Index %2d, Pattern 0x%08X", usType, usIndex, uPattern );
722 } // case gdpbv100::PATT_MISSMATCH:
723 case gdpbv100::PATT_ENABLE:
725 LOG(debug2) << Form( "Enable pattern message => Type %d, Index %2d, Pattern 0x%08X", usType, usIndex, uPattern );
728 } // case gdpbv100::PATT_ENABLE:
729 case gdpbv100::PATT_RESYNC:
731 LOG(debug) << Form( "RESYNC pattern message => Type %d, Index %2d, Pattern 0x%08X", usType, usIndex, uPattern );
734 } // case gdpbv100::PATT_RESYNC:
737 LOG(debug) << "Crazy pattern message, subtype " << usType;
740 } // switch( usType )
744// -------------------------------------------------------------------------
748 std::string sFolder =
"MoniBmon";
750 LOG(info) <<
"create Histos for Bmon monitoring ";
753 uint32_t iNbBinsLog = 0;
756 double* dBinsLog = dBinsLogVector.data();
761 new TH1I(
"hDpbMap",
"Map of hits on Bmon detector; DPB; Hits Count []",
fuNrOfGdpbs, -0.5,
fuNrOfGdpbs - 0.5);
765 "Map of hits on Bmon detector vs time in run; Chan; "
766 "Time in run [s]; Hits Count []",
769 "Evolution of TOT in Bmon detector vs time in run; Time "
770 "in run [s]; TOT [ bin ]; Hits Count []",
775 "Map of hits on Bmon detector vs time in run; "
776 "Strip; Time in run [s]; Hits Count []",
780 new TH1I(Form(
"hDpbMapSpill%02u", uSpill),
781 Form(
"Map of hits on Bmon detector in current spill %02u; DPB; Hits Count []", uSpill),
fuNrOfGdpbs,
784 Form(
"Map of hits on Bmon detector in current spill %02u; Strip; "
789 fhHitsPerSpill =
new TH1I(
"hHitsPerSpill",
"Hit count per spill; Spill; Hits Count []", 2000, 0., 2000);
792 "Evolution of Hit & error msgs counts vs time in run; "
793 "Time in run [s]; Msgs Count []",
795 fhHitCntEvo =
new TH1I(
"hHitCntEvo",
"Evolution of Hit counts vs time in run; Time in run [s]; Hits Count []",
797 fhErrorCntEvo =
new TH1I(
"hErrorCntEvo",
"Evolution of Error counts vs time in run; Time in run [s]; Error Count []",
800 "Evolution of LostEvent counts vs time in run; "
801 "Time in run [s]; LostEvent Count []",
805 "Evolution of Error Fraction vs time in run; "
806 "Time in run [s]; Error Fract []",
809 "Evolution of LostEvent Fraction vs time in "
810 "run; Time in run [s]; LostEvent Fract []",
814 "Evolution of Hit & error msgs counts, per MS vs time in run; "
815 "Time in run [s]; Hits Count/MS []; MS",
818 "Evolution of Hit counts, per MS vs time in run; "
819 "Time in run [s]; Hits Count/MS []; MS",
822 "Evolution of Error counts, per MS vs time in "
823 "run; Time in run [s]; Error Count/MS []; MS",
826 "Evolution of LostEvent, per MS counts vs time in run; Time in "
827 "run [s]; LostEvent Count/MS []; MS",
831 "Evolution of Error Fraction, per MS vs time in run; Time in run "
832 "[s]; Error Fract/MS []; MS",
835 "Evolution of LostEvent Fraction, per MS vs time in run; Time in "
836 "run [s]; LostEvent Fract/MS []; MS",
839 fhChannelMapPulser =
new TH1I(
"fhChannelMapPulser",
"Map of pulser hits on Bmon detector; Chan; Hits Count []",
842 "Map of hits on Bmon detector vs time in run; "
843 "Chan; Time in run [s]; Hits Count []",
880 Form(
"Evolution of Messages counts vs time in run for channel "
881 "%02u; Time in run [s]; Messages Count []",
885 Form(
"Evolution of Hit counts per MS vs time in run for channel "
886 "%02u; Time in run [s]; Hits Count/MS []; MS",
891 Form(
"Evolution of Hit counts vs time in run for channel %02u; "
892 "Time in run [s]; Hits Count []",
896 Form(
"Evolution of Hit counts per MS vs time in run for channel "
897 "%02u; Time in run [s]; Hits Count/MS []; MS",
902 Form(
"Evolution of Error counts vs time in run for channel "
903 "%02u; Time in run [s]; Error Count []",
907 Form(
"Evolution of Error counts per MS vs time in run for "
908 "channel %02u; Time in run [s]; Error Count/MS []; MS",
913 Form(
"Evolution of LostEvent counts vs time in run for channel "
914 "%02u; Time in run [s]; LostEvent Count []",
918 Form(
"Evolution of LostEvent counts per MS vs time in run for "
919 "channel %02u; Time in run [s]; LostEvent Count/MS []; MS",
924 Form(
"Evolution of Error Fraction vs time in run for "
925 "channel %02u; Time in run [s]; Error Fract []",
929 Form(
"Evolution of Error Fraction, per MS vs time in run for "
930 "channel %02u; Time in run [s]; Error Fract/MS []; MS",
935 Form(
"Evolution of LostEvent Fraction vs time in run for "
936 "channel %02u; Time in run [s]; LostEvent Fract []",
940 new TH2I(Form(
"hEvtLostFractPerMsEvoChan%02u", uChan),
941 Form(
"Evolution of LostEvent Fraction, per MS vs time in run for channel "
942 "%02u; Time in run [s]; LostEvent Fract/MS []; MS",
972 fcHitMaps =
new TCanvas(
"cHitMaps",
"Hit maps", w,
h);
992 fcSummary =
new TCanvas(
"cSummary",
"Hit maps, Hit rate, Error fraction", w,
h);
1024 fcSummaryMap =
new TCanvas(
"cSummaryMap",
"Hit maps, Hit rate, Error fraction", w,
h);
1056 fcGenCntsPerMs =
new TCanvas(
"cGenCntsPerMs",
"Messages and hit cnt per MS, Error and Evt Loss Fract. per MS ", w,
h);
1092 fcSpillCounts =
new TCanvas(
"cSpillCounts",
"Counts per spill, last 5 spills including current one", w,
h);
1116 fcSpillCountsHori =
new TCanvas(
"cSpillCountsHori",
"Counts per spill, last 5 spills including current one", w,
h);
1140 new TCanvas(
"cSpillDpbCountsHori",
"Counts in DPB per spill, last 5 spills including current one", w,
h);
1150 TPaveStats* st = (TPaveStats*)
fvhDpbMapSpill[uSpill]->FindObject(
"stats");
1151 st->SetOptStat(110);
1165 Double_t dMsgCountChan;
1166 Double_t dFractErrorsInMsChan;
1167 Double_t dFractLostEvtInMsChan;
1168 UInt_t uCountHitsInMs = 0;
1169 UInt_t uCountErrorsInMs = 0;
1170 UInt_t uCountLostEvtInMs = 0;
1176 dFractErrorsInMsChan /= dMsgCountChan;
1177 dFractLostEvtInMsChan /= dMsgCountChan;
1195 Double_t dFractErrorsInMs = uCountErrorsInMs;
1196 Double_t dFractLostEvtInMs = uCountLostEvtInMs;
1197 dFractErrorsInMs /= (uCountHitsInMs + uCountErrorsInMs);
1198 dFractLostEvtInMs /= (uCountHitsInMs + uCountErrorsInMs);
1258 if (kTRUE == bResetTime) {
UInt_t fuNrOfChannelsPerFee
Number of channels in each GET4.
TH2 * fhLostEvtFractPerMsEvo
Bool_t fbSpillOn
All hits (time in bins, TOT in bins, asic, channel) in last MS, sorted with "<" operator.
UInt_t fuNrOfFeePerGdpb
gDPB ID to index map
UInt_t fuOffSpillCountLimitNonPulser
UInt_t fuNrOfGet4PerFee
Number of FEBs per GDPB.
Bool_t ResetHistograms(Bool_t bResetTime=kTRUE)
CbmMcbm2018MonitorAlgoBmon()
Double_t fdStartTime
Epoch + Epoch Cycle.
UInt_t fuCurrentEquipmentId
UInt_t fuNrOfGet4
Number of channels in each FEE.
Bool_t ReInitContainers()
Double_t fdSpillCheckInterval
std::vector< TH2 * > fvhErrorCntPerMsEvoChan
std::vector< TH1 * > fvhChannelMapSpill
std::vector< gdpbv100::FullMessage > fvmHitsInMs
[DPB]
ULong64_t fulCurrentMsIdx
ULong64_t fulCurrentTsIdx
std::vector< TH2 * > fvhErrorFractPerMsEvoChan
UInt_t fuCurrDpbIdx
Temp holder until Current equipment ID is properly filled in MS.
std::vector< ULong64_t > fvulCurrentEpochCycle
Current epoch index, per DPB.
std::vector< UInt_t > fvuErrorCntChanMs
std::vector< TH2 * > fvhHitCntPerMsEvoChan
std::vector< TProfile * > fvhEvtLostFractEvoChan
std::vector< TH1 * > fvhHitCntEvoChan
TCanvas * fcSpillCountsHori
std::map< UInt_t, UInt_t > fGdpbIdIndexMap
Total number of GDPBs in the system.
UInt_t fuCurrentSpillPlot
std::vector< TH2 * > fvhEvtLostCntPerMsEvoChan
UInt_t fuCurrDpbId
Current equipment ID, tells from which DPB the current MS is originating.
CbmMcbm2018TofPar * fUnpackPar
Settings from parameter file.
TProfile * fhLostEvtFractEvo
TH1 * fhChannelMapPulser
Pulser.
UInt_t fuOffSpillCountLimit
std::vector< UInt_t > fvuHitCntChanMs
std::vector< TH2 * > fvhEvtLostFractPerMsEvoChan
std::vector< Bool_t > fvbMaskedComponents
Switch ON the filling of a additional set of histograms.
std::vector< TH1 * > fvhEvtLostCntEvoChan
TCanvas * fcSummary
Canvases.
TProfile * fhErrorFractEvo
UInt_t fuMinTotPulser
Number of channels per GDPB.
TCanvas * fcSpillDpbCountsHori
Double_t fdTsStopTimeCore
Time in ns of current TS from the index of the first MS first component.
UInt_t fuNrOfGdpbs
Readout chain dimensions and mapping.
std::vector< TProfile * > fvhErrorFractEvoChan
Double_t fdMsTime
End Time in ns of current TS Core from the index of the first MS first component.
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
UInt_t fuDiamChanMap[kuNbChanDiamond]
std::vector< std::vector< gdpbv100::Message > > fvvmEpSupprBuffer
Buffers.
Bool_t CreateHistograms()
TH1 * fhMsgCntEvo
Global Rate.
static const UInt_t kuBytesPerMessage
Bool_t ProcessTs(const fles::Timeslice &ts)
std::vector< ULong64_t > fvulCurrentEpochFull
Epoch cycle from the Ms Start message and Epoch counter flip.
UInt_t fuNrOfChannelsPerGet4
Number of GET4s per FEE.
UInt_t fuHistoryHistoSize
Histograms related variables.
TH2 * fhErrorFractPerMsEvo
UInt_t fuNrOfChannelsPerGdpb
Number of GET4s per GDPB.
std::vector< TH1 * > fvhDpbMapSpill
UInt_t fuGet4Nr
running number (0 to fuNrOfGet4PerGdpb) of the Get4 chip of a unique GDPB for current message
std::vector< ULong64_t > fvulCurrentEpoch
Data format control: Current time references for each GDPB: merged epoch marker, epoch cycle,...
TH2 * fhLostEvtCntPerMsEvo
Double_t fdStartTimeSpill
std::vector< TH1 * > fvhMsgCntEvoChan
std::vector< TH2 * > fvhMsgCntPerMsEvoChan
UInt_t fuNrOfGet4PerGdpb
Total number of Get4 chips in the system.
UInt_t fuGet4Id
Bin size in s for the plots with date as X axis.
Bool_t fbMonitorMode
Control flags.
std::vector< UInt_t > fvuEvtLostCntChanMs
std::vector< TH1 * > fvhErrorCntEvoChan
Bool_t ProcessMs(const fles::Timeslice &ts, size_t uMsCompIdx, size_t uMsIdx)
~CbmMcbm2018MonitorAlgoBmon()
static const UInt_t kuNbSpillPlots
Channels map.
static const UInt_t kuNbChanDiamond
UInt_t fuNonPulserCountsLastInter
TH1 * fhDpbMap
Map from electronics channel to Diamond strip.
UInt_t fuMsIndex
Start Time in ns of current MS from its index field in header.
Double_t fdTsCoreSizeInNs
void AddHistoToVector(TNamed *pointer, std::string sFolder="")
std::vector< size_t > fvMsComponentsList
void AddCanvasToVector(TCanvas *pointer, std::string sFolder="")
Double_t fdTsFullSizeInNs
Data class with information on a STS local track.
uint16_t getGdpbHitIs24b() const
uint16_t getGdpbHit32Tot() const
uint16_t getGdpbSysSubType() const
bool isStarTrigger() const
Returns true is message type is MSG_STAR_TRI_A, _B, _C, _D (STAR Trigger message)
uint16_t getGdpbGenChipId() const
uint8_t getMessageType() const
Returns the message type. Valid for all message types. 4 bit.
uint16_t getGdpbSysErrData() const
const uint32_t kuChipIdMergedEpoch