20#include "FairRootManager.h"
22#include "FairRunOnline.h"
23#include "FairRuntimeDb.h"
30#include "TPaveStats.h"
47 for (UInt_t uGdpb = 0; uGdpb <
fuNrOfGdpbs; ++uGdpb) {
56 LOG(info) <<
"Initializing mCBM Bmon 2019 monitor algo";
71 LOG(info) <<
"Init parameter containers for CbmMcbm2018MonitorAlgoBmon";
78 LOG(info) <<
"**********************************************";
79 LOG(info) <<
"ReInit parameter containers for CbmMcbm2018MonitorAlgoBmon";
126 LOG(info) <<
"GDPB Id of TOF " << i <<
" : " << std::hex <<
fUnpackPar->
GetGdpbId(i) << std::dec;
150 LOG(info) <<
"CbmMcbm2018MonitorAlgoBmon::AddMsComponentToList => Component " << component <<
" with detector ID 0x"
151 << std::hex << usDetectorId << std::dec <<
" added to list";
158 fdTsStartTime =
static_cast<Double_t
>(ts.descriptor(0, 0).idx);
170 <<
" Overlap MS, for a core duration of " <<
fdTsCoreSizeInNs <<
" ns and a full duration of "
176 LOG(info) <<
"In each TS " <<
fuNbMsLoop <<
" MS will be looped over";
196 std::sort( fvmHitsInMs.begin(), fvmHitsInMs.end() );
199 for( auto itHitIn = fvmHitsInMs.begin(); itHitIn < fvmHitsInMs.end(); ++itHitIn )
201 UInt_t uFebIdx = itHitIn->GetAsic() / fUnpackPar->GetNbAsicsPerFeb()
202 + ( itHitIn->GetDpb() * fUnpackPar->GetNbCrobsPerDpb() + itHitIn->GetCrob() )
203 * fUnpackPar->GetNbFebsPerCrob();
204 UInt_t uChanInFeb = itHitIn->GetChan()
205 + fUnpackPar->GetNbChanPerAsic() * (itHitIn->GetAsic() % fUnpackPar->GetNbAsicsPerFeb());
207 ULong64_t ulTimeInNs = static_cast< ULong64_t >( itHitIn->GetTs() * stsxyter::kdClockCycleNs - fdTimeOffsetNs );
209 fDigiVect.push_back( CbmTofDigi( fviFebAddress[ uFebIdx ], uChanInFeb, ulTimeInNs, itHitIn->GetAdc() ) );
210 } // for( auto itHitIn = fvmHitsInMs.begin(); itHitIn < fvmHitsInMs.end(); ++itHitIn )
237 auto msDescriptor = ts.descriptor(uMsCompIdx, uMsIdx);
239 const uint8_t* msContent =
reinterpret_cast<const uint8_t*
>(ts.content(uMsCompIdx, uMsIdx));
241 uint32_t uSize = msDescriptor.size;
245 <<
" has size: " << uSize;
256 LOG(info) <<
"---------------------------------------------------------------";
257 LOG(info) <<
"Component " << uMsCompIdx <<
" TS Idx " <<
fulCurrentTsIdx;
258 LOG(info) <<
"hi hv eqid flag si sv idx/start crc size offset";
259 LOG(info) << Form(
"%02x %02x %04x %04x %02x %02x %016lx %08x %08x %016lx",
260 static_cast<unsigned int>(msDescriptor.hdr_id),
static_cast<unsigned int>(msDescriptor.hdr_ver),
261 msDescriptor.eq_id, msDescriptor.flags,
static_cast<unsigned int>(msDescriptor.sys_id),
262 static_cast<unsigned int>(msDescriptor.sys_ver),
static_cast<unsigned long>(msDescriptor.idx),
263 msDescriptor.crc, msDescriptor.size,
static_cast<unsigned long>(msDescriptor.offset));
272 LOG(info) <<
"---------------------------------------------------------------";
283 LOG(warning) <<
"Could not find the gDPB index for AFCK id 0x" << std::hex <<
fuCurrDpbId << std::dec
284 <<
" in timeslice " <<
fulCurrentTsIdx <<
" in microslice " << uMsIdx <<
" component " << uMsCompIdx
286 <<
"If valid this index has to be added in the TOF "
287 "parameter file in the DbpIdArray field";
337 LOG(error) <<
"The input microslice buffer does NOT "
338 <<
"contain only complete nDPB messages!";
344 Int_t messageType = -111;
345 const uint64_t* pInBuff =
reinterpret_cast<const uint64_t*
>(msContent);
346 for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx++) {
348 uint64_t ulData =
static_cast<uint64_t
>(pInBuff[uIdx]);
368 <<
" set in parameters.";
370 switch (messageType) {
373 LOG(error) <<
"This event builder does not support 24b hit message!!!.";
425 LOG(debug2) << "This event builder does not support unmerged epoch messages!!!.";
427 } // if single chip epoch message
470 LOG(error) <<
"Message type " << std::hex << std::setw(2) << static_cast<uint16_t>(messageType)
471 <<
" not included in Get4 unpacker.";
513 mess.setGdpbEpEpochNb( ulEpochNr - 1 );
514 else mess.setGdpbEpEpochNb( gdpbv100::kuEpochCounterSz );
517 ProcessEpSupprBuffer();
519// -------------------------------------------------------------------------
520void CbmMcbm2018MonitorAlgoBmon::ProcessEpSupprBuffer()
522 Int_t iBufferSize = fvvmEpSupprBuffer[ fuCurrDpbIdx ].size();
524 if( 0 == iBufferSize )
527 LOG(debug) << "Now processing stored messages for for gDPB " << fuCurrDpbIdx << " with epoch number "
528 << (fvulCurrentEpoch[fuCurrDpbIdx] - 1);
532 std::stable_sort( fvvmEpSupprBuffer[ fuCurrDpbIdx ].begin(), fvvmEpSupprBuffer[ fuCurrDpbIdx ].begin() );
535 ULong64_t ulCurEpochGdpbGet4 = fvulCurrentEpochFull[ fuCurrDpbIdx ];
538 if( 0 == ulCurEpochGdpbGet4 )
542 ulCurEpochGdpbGet4 --;
544 Int_t messageType = -111;
545 for( Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++ )
547 messageType = fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ].getMessageType();
549 fuGet4Id = fUnpackPar->ElinkIdxToGet4Idx( fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ].getGdpbGenChipId() );
550 if( fuDiamondDpbIdx == fuCurrDpbIdx )
551 fuGet4Id = fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ].getGdpbGenChipId();
552 fuGet4Nr = (fuCurrDpbIdx * fuNrOfGet4PerGdpb) + fuGet4Id;
555 gdpbv100::FullMessage fullMess( fvvmEpSupprBuffer[ fuCurrDpbIdx ][ iMsgIdx ], ulCurEpochGdpbGet4 );
558 switch( messageType )
560 case gdpbv100::MSG_HIT:
562 ProcessHit( fullMess );
564 } // case gdpbv100::MSG_HIT:
565 case gdpbv100::MSG_SLOWC:
567 ProcessSlCtrl( fullMess );
569 } // case gdpbv100::MSG_SLOWC:
570 case gdpbv100::MSG_SYST:
572 ProcessSysMess( fullMess );
574 } // case gdpbv100::MSG_SYST:
575 case gdpbv100::MSG_EPOCH:
576 case gdpbv100::MSG_STAR_TRI_A:
577 case gdpbv100::MSG_STAR_TRI_B:
578 case gdpbv100::MSG_STAR_TRI_C:
579 case gdpbv100::MSG_STAR_TRI_D:
583 LOG(error) << "Message type " << std::hex
584 << std::setw(2) << static_cast<uint16_t>(messageType)
585 << " not included in Get4 unpacker.";
586 } // switch( mess.getMessageType() )
587 } // for( Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++ )
589 fvvmEpSupprBuffer[ fuCurrDpbIdx ].clear();
591// -------------------------------------------------------------------------
592void CbmMcbm2018MonitorAlgoBmon::ProcessHit( gdpbv100::FullMessage mess )
594 UInt_t uChannel = mess.getGdpbHitChanId();
595 UInt_t uTot = mess.getGdpbHit32Tot();
597 // In 32b mode the coarse counter is already computed back to 112 FTS bins
598 // => need to hide its contribution from the Finetime
599 // => FTS = Fullt TS modulo 112
600 UInt_t uFts = mess.getGdpbHitFullTs() % 112;
602 UInt_t uChannelNr = fuGet4Id * fuNrOfChannelsPerGet4 + uChannel;
603 UInt_t uChannelNrInFee = (fuGet4Id % fuNrOfGet4PerFee) * fuNrOfChannelsPerGet4 + uChannel;
604 UInt_t uFeeNr = (fuGet4Id / fuNrOfGet4PerFee);
605 UInt_t uFeeNrInSys = fuCurrDpbIdx * fuNrOfFeePerGdpb + uFeeNr;
606 UInt_t uRemappedChannelNr = uFeeNr * fuNrOfChannelsPerFee + fUnpackPar->Get4ChanToPadiChan( uChannelNrInFee );
607 UInt_t uGbtxNr = (uFeeNr / fUnpackPar->GetNrOfFeePerGbtx());
608 UInt_t uFeeInGbtx = (uFeeNr % fUnpackPar->GetNrOfFeePerGbtx());
609 UInt_t uGbtxNrInSys = fuCurrDpbIdx * fUnpackPar->GetNrOfGbtxPerGdpb() + uGbtxNr;
611 UInt_t uChanInSyst = fuCurrDpbIdx * fuNrOfChannelsPerGdpb + uChannelNr;
612 UInt_t uRemappedChannelNrInSys = fuCurrDpbIdx * fuNrOfChannelsPerGdpb
613 + uFeeNr * fuNrOfChannelsPerFee
614 + fUnpackPar->Get4ChanToPadiChan( uChannelNrInFee );
616 if( fuDiamondDpbIdx == fuCurrDpbIdx )
618 uRemappedChannelNr = uChannelNr;
619 uRemappedChannelNrInSys = fuCurrDpbIdx * fUnpackPar->GetNrOfChannelsPerGdpb() + uChannelNr;
620 } // if( fuDiamondDpbIdx == fuCurrDpbIdx )
622 ULong_t ulHitTime = mess.getMsgFullTime( mess.getExtendedEpoch() );
623 Double_t dHitTime = mess.GetFullTimeNs();
624 Double_t dHitTot = uTot; // in bins
627// -------------------------------------------------------------------------
628void CbmMcbm2018MonitorAlgoBmon::ProcessSlCtrl( gdpbv100::FullMessage mess )
631// -------------------------------------------------------------------------
632void CbmMcbm2018MonitorAlgoBmon::ProcessSysMess( gdpbv100::FullMessage mess )
634 switch( mess.getGdpbSysSubType() )
636 case gdpbv100::SYS_GET4_ERROR:
638 ProcessError( mess );
640 } // case gdpbv100::SYSMSG_GET4_EVENT
641 case gdpbv100::SYS_GDPB_UNKWN:
643 LOG(debug) << "Unknown GET4 message, data: " << std::hex << std::setw(8)
644 << mess.getGdpbSysUnkwData() << std::dec
645 <<" Full message: " << std::hex << std::setw(16)
646 << mess.getData() << std::dec;
648 } // case gdpbv100::SYS_GDPB_UNKWN:
649 case gdpbv100::SYS_GET4_SYNC_MISS:
651 if( mess.getGdpbSysFwErrResync() )
652 LOG(info) << Form( "GET4 Resynchronization: Get4:0x%04x ", mess.getGdpbGenChipId() ) << fuCurrDpbIdx;
653 else LOG(info) << "GET4 synchronization pulse missing in gDPB " << fuCurrDpbIdx;
655 } // case gdpbv100::SYS_GET4_SYNC_MISS:
656 case gdpbv100::SYS_PATTERN:
658 ProcessPattern( mess );
660 } // case gdpbv100::SYS_PATTERN:
663 LOG(info) << "Crazy system message, subtype " << mess.getGdpbSysSubType();
666 } // switch( mess.getGdpbSysSubType() )
668void CbmMcbm2018MonitorAlgoBmon::ProcessError( gdpbv100::FullMessage mess )
670 uint32_t uErrorType = mess.getGdpbSysErrData();
674 case gdpbv100::GET4_V2X_ERR_READ_INIT:
675 case gdpbv100::GET4_V2X_ERR_SYNC:
676 case gdpbv100::GET4_V2X_ERR_EP_CNT_SYNC:
677 case gdpbv100::GET4_V2X_ERR_EP:
678 case gdpbv100::GET4_V2X_ERR_FIFO_WRITE:
679 case gdpbv100::GET4_V2X_ERR_CHAN_STATE:
680 case gdpbv100::GET4_V2X_ERR_TOK_RING_ST:
681 case gdpbv100::GET4_V2X_ERR_TOKEN:
682 case gdpbv100::GET4_V2X_ERR_READOUT_ERR:
683 case gdpbv100::GET4_V2X_ERR_DLL_LOCK:
684 case gdpbv100::GET4_V2X_ERR_DLL_RESET:
687 case gdpbv100::GET4_V2X_ERR_SPI:
690 case gdpbv100::GET4_V2X_ERR_LOST_EVT:
691 case gdpbv100::GET4_V2X_ERR_TOT_OVERWRT:
692 case gdpbv100::GET4_V2X_ERR_TOT_RANGE:
693 case gdpbv100::GET4_V2X_ERR_EVT_DISCARD:
694 case gdpbv100::GET4_V2X_ERR_ADD_RIS_EDG:
695 case gdpbv100::GET4_V2X_ERR_UNPAIR_FALL:
696 case gdpbv100::GET4_V2X_ERR_SEQUENCE_ER:
699 case gdpbv100::GET4_V2X_ERR_EPOCH_OVERF:
701 case gdpbv100::GET4_V2X_ERR_UNKNOWN:
707 } // switch( uErrorType )
711void CbmMcbm2018MonitorAlgoBmon::ProcessPattern( gdpbv100::FullMessage mess )
713 uint16_t usType = mess.getGdpbSysPattType();
714 uint16_t usIndex = mess.getGdpbSysPattIndex();
715 uint32_t uPattern = mess.getGdpbSysPattPattern();
719 case gdpbv100::PATT_MISSMATCH:
721 LOG(debug) << Form( "Missmatch pattern message => Type %d, Index %2d, Pattern 0x%08X", usType, usIndex, uPattern );
724 } // case gdpbv100::PATT_MISSMATCH:
725 case gdpbv100::PATT_ENABLE:
727 LOG(debug2) << Form( "Enable pattern message => Type %d, Index %2d, Pattern 0x%08X", usType, usIndex, uPattern );
730 } // case gdpbv100::PATT_ENABLE:
731 case gdpbv100::PATT_RESYNC:
733 LOG(debug) << Form( "RESYNC pattern message => Type %d, Index %2d, Pattern 0x%08X", usType, usIndex, uPattern );
736 } // case gdpbv100::PATT_RESYNC:
739 LOG(debug) << "Crazy pattern message, subtype " << usType;
742 } // switch( usType )
746// -------------------------------------------------------------------------
750 std::string sFolder =
"MoniBmon";
752 LOG(info) <<
"create Histos for Bmon monitoring ";
755 uint32_t iNbBinsLog = 0;
758 double* dBinsLog = dBinsLogVector.data();
763 new TH1I(
"hDpbMap",
"Map of hits on Bmon detector; DPB; Hits Count []",
fuNrOfGdpbs, -0.5,
fuNrOfGdpbs - 0.5);
767 "Map of hits on Bmon detector vs time in run; Chan; "
768 "Time in run [s]; Hits Count []",
771 "Evolution of TOT in Bmon detector vs time in run; Time "
772 "in run [s]; TOT [ bin ]; Hits Count []",
777 "Map of hits on Bmon detector vs time in run; "
778 "Strip; Time in run [s]; Hits Count []",
782 new TH1I(Form(
"hDpbMapSpill%02u", uSpill),
783 Form(
"Map of hits on Bmon detector in current spill %02u; DPB; Hits Count []", uSpill),
fuNrOfGdpbs,
786 Form(
"Map of hits on Bmon detector in current spill %02u; Strip; "
791 fhHitsPerSpill =
new TH1I(
"hHitsPerSpill",
"Hit count per spill; Spill; Hits Count []", 2000, 0., 2000);
794 "Evolution of Hit & error msgs counts vs time in run; "
795 "Time in run [s]; Msgs Count []",
797 fhHitCntEvo =
new TH1I(
"hHitCntEvo",
"Evolution of Hit counts vs time in run; Time in run [s]; Hits Count []",
799 fhErrorCntEvo =
new TH1I(
"hErrorCntEvo",
"Evolution of Error counts vs time in run; Time in run [s]; Error Count []",
802 "Evolution of LostEvent counts vs time in run; "
803 "Time in run [s]; LostEvent Count []",
807 "Evolution of Error Fraction vs time in run; "
808 "Time in run [s]; Error Fract []",
811 "Evolution of LostEvent Fraction vs time in "
812 "run; Time in run [s]; LostEvent Fract []",
816 "Evolution of Hit & error msgs counts, per MS vs time in run; "
817 "Time in run [s]; Hits Count/MS []; MS",
820 "Evolution of Hit counts, per MS vs time in run; "
821 "Time in run [s]; Hits Count/MS []; MS",
824 "Evolution of Error counts, per MS vs time in "
825 "run; Time in run [s]; Error Count/MS []; MS",
828 "Evolution of LostEvent, per MS counts vs time in run; Time in "
829 "run [s]; LostEvent Count/MS []; MS",
833 "Evolution of Error Fraction, per MS vs time in run; Time in run "
834 "[s]; Error Fract/MS []; MS",
837 "Evolution of LostEvent Fraction, per MS vs time in run; Time in "
838 "run [s]; LostEvent Fract/MS []; MS",
841 fhChannelMapPulser =
new TH1I(
"fhChannelMapPulser",
"Map of pulser hits on Bmon detector; Chan; Hits Count []",
844 "Map of hits on Bmon detector vs time in run; "
845 "Chan; Time in run [s]; Hits Count []",
882 Form(
"Evolution of Messages counts vs time in run for channel "
883 "%02u; Time in run [s]; Messages Count []",
887 Form(
"Evolution of Hit counts per MS vs time in run for channel "
888 "%02u; Time in run [s]; Hits Count/MS []; MS",
893 Form(
"Evolution of Hit counts vs time in run for channel %02u; "
894 "Time in run [s]; Hits Count []",
898 Form(
"Evolution of Hit counts per MS vs time in run for channel "
899 "%02u; Time in run [s]; Hits Count/MS []; MS",
904 Form(
"Evolution of Error counts vs time in run for channel "
905 "%02u; Time in run [s]; Error Count []",
909 Form(
"Evolution of Error counts per MS vs time in run for "
910 "channel %02u; Time in run [s]; Error Count/MS []; MS",
915 Form(
"Evolution of LostEvent counts vs time in run for channel "
916 "%02u; Time in run [s]; LostEvent Count []",
920 Form(
"Evolution of LostEvent counts per MS vs time in run for "
921 "channel %02u; Time in run [s]; LostEvent Count/MS []; MS",
926 Form(
"Evolution of Error Fraction vs time in run for "
927 "channel %02u; Time in run [s]; Error Fract []",
931 Form(
"Evolution of Error Fraction, per MS vs time in run for "
932 "channel %02u; Time in run [s]; Error Fract/MS []; MS",
937 Form(
"Evolution of LostEvent Fraction vs time in run for "
938 "channel %02u; Time in run [s]; LostEvent Fract []",
942 new TH2I(Form(
"hEvtLostFractPerMsEvoChan%02u", uChan),
943 Form(
"Evolution of LostEvent Fraction, per MS vs time in run for channel "
944 "%02u; Time in run [s]; LostEvent Fract/MS []; MS",
974 fcHitMaps =
new TCanvas(
"cHitMaps",
"Hit maps", w,
h);
994 fcSummary =
new TCanvas(
"cSummary",
"Hit maps, Hit rate, Error fraction", w,
h);
1026 fcSummaryMap =
new TCanvas(
"cSummaryMap",
"Hit maps, Hit rate, Error fraction", w,
h);
1058 fcGenCntsPerMs =
new TCanvas(
"cGenCntsPerMs",
"Messages and hit cnt per MS, Error and Evt Loss Fract. per MS ", w,
h);
1094 fcSpillCounts =
new TCanvas(
"cSpillCounts",
"Counts per spill, last 5 spills including current one", w,
h);
1118 fcSpillCountsHori =
new TCanvas(
"cSpillCountsHori",
"Counts per spill, last 5 spills including current one", w,
h);
1142 new TCanvas(
"cSpillDpbCountsHori",
"Counts in DPB per spill, last 5 spills including current one", w,
h);
1152 TPaveStats* st = (TPaveStats*)
fvhDpbMapSpill[uSpill]->FindObject(
"stats");
1153 st->SetOptStat(110);
1167 Double_t dMsgCountChan;
1168 Double_t dFractErrorsInMsChan;
1169 Double_t dFractLostEvtInMsChan;
1170 UInt_t uCountHitsInMs = 0;
1171 UInt_t uCountErrorsInMs = 0;
1172 UInt_t uCountLostEvtInMs = 0;
1178 dFractErrorsInMsChan /= dMsgCountChan;
1179 dFractLostEvtInMsChan /= dMsgCountChan;
1197 Double_t dFractErrorsInMs = uCountErrorsInMs;
1198 Double_t dFractLostEvtInMs = uCountLostEvtInMs;
1199 dFractErrorsInMs /= (uCountHitsInMs + uCountErrorsInMs);
1200 dFractLostEvtInMs /= (uCountHitsInMs + uCountErrorsInMs);
1260 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.
Int_t GetNrOfGdpbs()
FIXME: replace with method returning the correspondign constants! see Star2019 parameter.
Int_t GetNrOfGet4PerFee()
Int_t GetNrOfFeesPerGdpb()
Int_t GetNrOfChannelsPerGet4()
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