7#include "MicrosliceDescriptor.hpp"
11#include <FairRunOnline.h>
14#include <RtypesCore.h>
18#include <THttpServer.h>
42 if (iter->first !=
nullptr) {
48 if (iter->first !=
nullptr) {
57 TString sHistName{
""};
69 for (uint32_t uFebIdx = 0; uFebIdx < uNbFebs; ++uFebIdx) {
75 fhDigisTimeInRun =
new TH1I(
"hMuchDigisTimeInRun",
"Digis Nb vs Time in Run; Time in run [s]; Digis Nb []", 10, 0, 1);
79 fhVectorSize =
new TH1I(
"fhMuchVectorSize",
"Size of the vector VS TS index; TS index; Size [bytes]", 10, 0, 10);
84 new TH1I(
"fhMuchVectorCapacity",
"Size of the vector VS TS index; TS index; Size [bytes]", 10000, 0., 10000.);
87 fhMsCntEvo =
new TH1I(
"fhMuchMsCntEvo",
"; MS index [s]; Counts []", 600, 0.0, 600.0);
91 new TH2I(
"fhMuchMsErrorsEvo",
"; MS index [s]; Error type []; Counts []", 600, 0.0, 600.0, 4, -0.5, 3.5);
95 sHistName =
"hMuchAllFebsHitRateEvo";
96 title =
"Hits per second & FEB; Time [s]; FEB []; Hits []";
102 sHistName =
"hMuchAllAsicsHitRateEvo";
103 title =
"Hits per second & ASIC; Time [s]; ASIC []; Hits []";
109 sHistName =
"hMuchFebAsicHitCounts";
110 title =
"Hits per FEB & ASIC; FEB []; ASIC in FEB[]; Hits []";
112 new TH2I(sHistName, title, uNbFebs, -0.5, uNbFebs - 0.5, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5);
115 sHistName =
"hMuchStatusMessType";
116 title =
"Nb of status message of each type for each DPB; ASIC; Status Type";
121 sHistName =
"hMuchRawHitRatioPerFeb";
122 title =
"Proportion of digis over raw hits in each FEB; FEB []; digis/raw [Prct]";
133 for (UInt_t uFebIdx = 0; uFebIdx < uNbFebs; ++uFebIdx) {
135 sHistName = Form(
"hMuchRawChRatio_%03d", uFebIdx);
136 title = Form(
"Proportion of raw hits in each channel of FEB %2d; Channel []; Share of FEB raw msg [Prct]", uFebIdx);
137 fvhRawChRatio.push_back(
new TProfile(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
138 sHistName = Form(
"hMuchHitChRatio_%03d", uFebIdx);
139 title = Form(
"Proportion of digis in each channel of FEB %2d; Channel []; Share of FEB digis [Prct]", uFebIdx);
140 fvhHitChRatio.push_back(
new TProfile(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
141 sHistName = Form(
"hMuchDupliChRatio_%03d", uFebIdx);
143 Form(
"Proportion of duplicates in each channel of FEB %2d; Channel []; Share of FEB duplicates [Prct]", uFebIdx);
144 fvhDupliChRatio.push_back(
new TProfile(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
145 sHistName = Form(
"hMuchRawHitRatioPerCh_%03d", uFebIdx);
146 title = Form(
"Proportion of digis over raw hits in each channel of FEB %2d; Channel []; digis/raw [Prct]", uFebIdx);
147 fvhRawHitRatioPerCh.push_back(
new TProfile(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
148 sHistName = Form(
"hMuchRawDupliRatioPerCh_%03d", uFebIdx);
150 Form(
"Proportion of duplicates over raw hits in each channel of FEB %2d; Channel []; dupli/raw [Prct]", uFebIdx);
151 fvhRawDupliRatioPerCh.push_back(
new TProfile(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
154 sHistName = Form(
"hMuchFebChanCntRaw_%03u", uFebIdx);
155 title = Form(
"Hits Count per channel, FEB #%03u; Channel; Hits []", uFebIdx);
156 fvhMuchFebChanCntRaw.push_back(
new TH1I(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
159 sHistName = Form(
"hMuchFebChanAdcRaw_%03u", uFebIdx);
160 title = Form(
"Raw Adc distribution per channel, FEB #%03u; Channel []; Adc "
163 fvhMuchFebChanAdcRaw.push_back(
new TH2I(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5,
167 sHistName = Form(
"hMuchFebChanAdcRawProfc_%03u", uFebIdx);
168 title = Form(
"Raw Adc prodile per channel, FEB #%03u; Channel []; Adc []", uFebIdx);
172 sHistName = Form(
"hMuchFebChanAdcCal_%03u", uFebIdx);
173 title = Form(
"Cal. Adc distribution per channel, FEB #%03u; Channel []; Adc [e-]; Hits []", uFebIdx);
175 new TH2I(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5, 50, 0., 100000.));
178 sHistName = Form(
"hMuchFebChanAdcCalProfc_%03u", uFebIdx);
179 title = Form(
"Cal. Adc prodile per channel, FEB #%03u; Channel []; Adc [e-]", uFebIdx);
183 sHistName = Form(
"hMuchFebChanRawTs_%03u", uFebIdx);
184 title = Form(
"Raw Timestamp distribution per channel, FEB #%03u; Channel "
185 "[]; Ts []; Hits []",
187 fvhMuchFebChanRawTs.push_back(
new TH2I(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5,
191 sHistName = Form(
"hMuchFebChanMissEvt_%03u", uFebIdx);
192 title = Form(
"Missed Event flags per channel, FEB #%03u; Channel []; Miss "
195 fvhMuchFebChanMissEvt.push_back(
new TH2I(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5, 2, -0.5, 1.5));
198 sHistName = Form(
"hMuchFebChanMissEvtEvo_%03u", uFebIdx);
199 title = Form(
"Missed Evt flags per second & channel in FEB #%03u; Time "
200 "[s]; Channel []; Missed Evt flags []",
203 new TH2I(sHistName, title, 600, 0, 600, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
207 sHistName = Form(
"hMuchFebAsicMissEvtEvo_%03u", uFebIdx);
208 title = Form(
"Missed Evt flags per second & StsXyter in FEB #%03u; Time "
209 "[s]; Asic []; Missed Evt flags []",
212 new TH2I(sHistName, title, 600, 0, 600, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5));
216 sHistName = Form(
"hMuchFebMissEvtEvo_%03u", uFebIdx);
217 title = Form(
"Missed Evt flags per second & channel in FEB #%03u; Time "
218 "[s]; Missed Evt flags []",
224 sHistName = Form(
"hMuchFebChanRateEvo_%03u", uFebIdx);
225 title = Form(
"Hits per second & channel in FEB #%03u; Time [s]; Channel []; Hits []", uFebIdx);
227 new TH2I(sHistName, title, 600, 0, 600, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
231 sHistName = Form(
"hMuchFebAsicRateEvo_%03u", uFebIdx);
232 title = Form(
"Hits per second & StsXyter in FEB #%03u; Time [s]; Asic []; Hits []", uFebIdx);
234 new TH2I(sHistName, title, 600, 0, 600, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5));
238 sHistName = Form(
"hMuchFebRateEvo_%03u", uFebIdx);
239 title = Form(
"Hits per second in FEB #%03u; Time [s]; Hits []", uFebIdx);
244 sHistName = Form(
"hMuchFebChanRateEvoLong_%03u", uFebIdx);
245 title = Form(
"Hits per second & channel in FEB #%03u; Time [min]; Channel []; Hits []", uFebIdx);
247 uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
250 sHistName = Form(
"hMuchFebAsicRateEvoLong_%03u", uFebIdx);
251 title = Form(
"Hits per second & StsXyter in FEB #%03u; Time [min]; Asic []; Hits []", uFebIdx);
253 uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5));
256 sHistName = Form(
"hMuchFebRateEvoLong_%03u", uFebIdx);
257 title = Form(
"Hits per second in FEB #%03u; Time [min]; Hits []", uFebIdx);
284 const Double_t w = 2 * 400;
285 const Double_t
h = 3 * 200;
290 for (UInt_t uFebIdx = 0; uFebIdx < uNbFebs; ++uFebIdx) {
293 new TCanvas(Form(
"cMuchSum_%03u", uFebIdx), Form(
"Summary plots for FEB %03u", uFebIdx), w,
h);
303 for (UInt_t uFebIdx = 0; uFebIdx <
fvcMuchSumm.size(); ++uFebIdx) {
360 TString sMsSizeName = Form(
"MuchMsSize_link_%02u", component);
361 TString sMsSizeTitle = Form(
"Size of MS for nDPB of link %02u; Ms Size [bytes]", component);
362 fvhMsSize[component] =
new TH1F(sMsSizeName.Data(), sMsSizeTitle.Data(), 30000, 0., 30000.);
363 fvhMsSize[component]->SetCanExtend(TH2::kAllAxes);
367 TString sMsSizeName = Form(
"MuchMsSizeTime_link_%02u", component);
368 TString sMsSizeTitle = Form(
"Size of MS vs time for gDPB of link %02u; Time[s] ; Ms Size [bytes]", component);
369 fvhMsSizeTime[component] =
new TProfile(sMsSizeName.Data(), sMsSizeTitle.Data(), 15000, 0., 300.);
400 for (UInt_t uFebIdx = 0; uFebIdx <
fvhRawChRatio.size(); ++uFebIdx) {
461 const UInt_t uNrOfDpbs = pUnpackPar->
GetNrOfDpbs();
465 TString sHistName{
""};
468 sHistName =
"hMuchPulserMessageType";
469 title =
"Nb of message for each type; Type";
479 sHistName =
"hMuchPulserMessageTypePerDpb";
480 title =
"Nb of message of each type for each DPB; DPB; Type";
490 sHistName =
"hMuchMessTypePerElink";
491 title =
"Nb of message of each type for each eLink; eLink; Type";
502 sHistName =
"hMuchHitsElinkPerDpb";
503 title =
"Nb of hit messages per eLink for each DPB; DPB; eLink; Hits nb []";
507 sHistName =
"hMuchDpbRawTsMsb";
508 title =
"MSB messages for each DPB; DPB; TsMsb; Count []";
509 fhMuchDpbRawTsMsb =
new TH2I(sHistName, title, uNrOfDpbs, 0, uNrOfDpbs, 10, 0, 10);
513 sHistName =
"hMuchDpbRawTsMsbSx";
514 title =
"MSB SX messages for each DPB; DPB; TsMsb & 0x1F; Count []";
519 sHistName =
"hMuchDpbRawTsMsbDpb";
520 title =
"MSB DPB messages for each DPB; DPB; TsMsb >> 5; Count []";
526 sHistName =
"hMuchRawHitRatioEvoPerFeb";
527 title =
"Proportion of digis over raw hits in each FEB; Time [s]; FEB []; digis/raw [Prct]";
528 fhRawHitRatioEvoPerFeb =
new TProfile2D(sHistName, title, 600, -0.5, 599.5, uNbFebs, -0.5, uNbFebs - 0.5);
530 for (uint32_t uFebIdx = 0; uFebIdx < uNbFebs; ++uFebIdx) {
531 sHistName = Form(
"hMuchChDupliAdc_%03d", uFebIdx);
532 title = Form(
"ADC in duplicate raw in each channel of FEB %2d; Channel []; ADC []", uFebIdx);
533 fvhChDupliAdc.push_back(
new TH2I(sHistName, title, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5, 32, -0.5, 31.5));
535 sHistName = Form(
"hMuchRawChRatioEvo_%03d", uFebIdx);
536 title = Form(
"Proportion of raw hits in each channel of FEB %2d; Time [s]; Channel []; Share of FEB raw msg [Prct]",
539 new TProfile2D(sHistName, title, 600, -0.5, 599.5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
540 sHistName = Form(
"hMuchHitChRatioEvo_%03d", uFebIdx);
542 Form(
"Proportion of digis in each channel of FEB %2d; Time [s]; Channel []; Share of FEB digis [Prct]", uFebIdx);
544 new TProfile2D(sHistName, title, 600, -0.5, 599.5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
545 sHistName = Form(
"hMuchDupliChRatioEvo_%03d", uFebIdx);
547 Form(
"Proportion of duplicates in each channel of FEB %2d; Time [s]; Channel []; Share of FEB duplicates [Prct]",
550 new TProfile2D(sHistName, title, 600, -0.5, 599.5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
551 sHistName = Form(
"hMuchRawHitRatioEvoPerCh_%03d", uFebIdx);
552 title = Form(
"Proportion of digis over raw hits in each channel of FEB %2d; Time [s]; Channel []; digis/raw [Prct]",
555 new TProfile2D(sHistName, title, 600, -0.5, 599.5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
556 sHistName = Form(
"hMuchRawDupliRatioEvoPerCh_%03d", uFebIdx);
558 Form(
"Proportion of duplicates over raw hits in each channel of FEB %2d; Time [s]; Channel []; dupli/raw [Prct]",
561 new TProfile2D(sHistName, title, 600, -0.5, 599.5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5));
573 for (UInt_t uAsicIdx = 0; uAsicIdx < uNbAsics; ++uAsicIdx) {
576 sHistName = Form(
"hMuchChanCntRaw_%03u", uAsicIdx);
577 title = Form(
"Hits Count per channel, Asic #%03u; Channel; Hits []", uAsicIdx);
578 fvhMuchChanCntRaw.push_back(
new TH1I(sHistName, title, uNbChanPerAsic, -0.5, uNbChanPerAsic - 0.5));
581 sHistName = Form(
"hMuchChanAdcRaw_%03u", uAsicIdx);
582 title = Form(
"Raw Adc distribution per channel, Asic #%03u; Channel []; Adc "
585 fvhMuchChanAdcRaw.push_back(
new TH2I(sHistName, title, uNbChanPerAsic, -0.5, uNbChanPerAsic - 0.5,
589 sHistName = Form(
"hMuchChanAdcRawProfc_%03u", uAsicIdx);
590 title = Form(
"Raw Adc prodile per channel, Asic #%03u; Channel []; Adc []", uAsicIdx);
591 fvhMuchChanAdcRawProf.push_back(
new TProfile(sHistName, title, uNbChanPerAsic, -0.5, uNbChanPerAsic - 0.5));
594 sHistName = Form(
"hMuchChanRawTs_%03u", uAsicIdx);
595 title = Form(
"Raw Timestamp distribution per channel, Asic #%03u; Channel "
596 "[]; Ts []; Hits []",
598 fvhMuchChanRawTs.push_back(
new TH2I(sHistName, title, uNbChanPerAsic, -0.5, uNbChanPerAsic - 0.5,
602 sHistName = Form(
"hMuchChanMissEvt_%03u", uAsicIdx);
603 title = Form(
"Missed Event flags per channel, Asic #%03u; Channel []; Miss "
606 fvhMuchChanMissEvt.push_back(
new TH2I(sHistName, title, uNbChanPerAsic, -0.5, uNbChanPerAsic - 0.5, 2, -0.5, 1.5));
659 const UInt_t& uChanInFeb,
const UShort_t& usRawAdc,
660 const Double_t& dCalAdc,
const UShort_t& usRawTs,
661 const bool& isHitMissedEvts)
675 const UShort_t& usRawAdc,
const UShort_t& usRawTs,
676 const bool& isHitMissedEvts)
688 const UInt_t& uAsicInFeb,
const UInt_t& uChanInFeb,
689 const Double_t& dAbsTimeSec,
const bool& isHitMissedEvts)
696 Double_t dTimeSinceStartSec = dAbsTimeSec -
fdStartTime;
705 if (isHitMissedEvts) {
710 const Double_t dTimeSinceStartMin = dTimeSinceStartSec / 60.0;
736 for (uint32_t uFebIdx = 0; uFebIdx < uNbFebs; ++uFebIdx) {
746 for (uint32_t uChan = 0; uChan < uNbChansPerFeb; ++uChan) {
765 dRatio = uNbDupliChan * 100.0 / uNbDupliFeb;
796 const uint16_t& usAdc)
872 const uint16_t msDescriptorFlags,
const uint32_t uSize)
874 if (18967040000 == MsStartTime || 18968320000 == MsStartTime) {
877 if (
static_cast<uint16_t
>(fles::MicrosliceFlags::CrcValid) != msDescriptorFlags) {
878 LOG(debug) <<
"STS unp "
879 <<
" TS " << std::setw(12) << NrProcessedTs <<
" MS " << std::setw(12) << MsStartTime <<
" MS flags 0x"
880 << std::setw(4) << std::hex << msDescriptorFlags << std::dec <<
" Size " << std::setw(8) << uSize
896 TFile* oldFile = gFile;
897 TDirectory* oldDir = gDirectory;
912 std::vector<std::pair<TNamed*, std::string>> vHistos =
GetHistoVector();
915 std::vector<std::pair<TCanvas*, std::string>> vCanvases =
GetCanvasVector();
918 THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
919 if (
nullptr != server) {
920 for (UInt_t uCanvas = 0; uCanvas < vCanvases.size(); ++uCanvas) {
921 server->Register(Form(
"/much/%s", vCanvases[uCanvas].second.data()), vCanvases[uCanvas].first);
923 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
924 server->Register(Form(
"/much/%s", vHistos[uHisto].second.data()), vHistos[uHisto].first);
939 std::vector<std::pair<TNamed*, std::string>> vHistos =
GetHistoVector();
942 std::vector<std::pair<TCanvas*, std::string>> vCanvases =
GetCanvasVector();
945 TFile* oldFile = gFile;
946 TDirectory* oldDir = gDirectory;
947 TFile* histoFile =
nullptr;
954 for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
956 TString sFolder = vHistos[uHisto].second.data();
957 if (
nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
958 gDirectory->cd(sFolder);
961 vHistos[uHisto].first->Write();
967 for (UInt_t uCanvas = 0; uCanvas < vCanvases.size(); ++uCanvas) {
969 TString sFolder = vCanvases[uCanvas].second.data();
970 if (
nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
971 gDirectory->cd(sFolder);
974 vCanvases[uCanvas].first->Write();
ClassImp(CbmConverterManager)
std::vector< std::vector< uint32_t > > fvvuNbDigisTsChan
Bool_t CreateMsComponentSizeHistos(UInt_t component)
void FillMuchChanMissEvt(UInt_t uAsicIdx, UShort_t usChan, bool missedEvtFlag)
void FillMuchMessTypePerDpb(UInt_t DpbIdx, uint16_t typeMess)
void FillMuchAllFebsHitRateEvo(Double_t dTimeSinceStartSec, UInt_t uFebIdx)
void PrintDebugInfo(const uint64_t MsStartTime, const size_t NrProcessedTs, const uint16_t msDescriptorFlags, const uint32_t uSize)
std::vector< TProfile * > fvhHitChRatio
void FillPerTimesliceCountersHistos(double_t dTsStartTime)
void FillMuchFebMissEvtEvo(UInt_t uFebIdx, Double_t dTimeSinceStartSec)
TProfile2D * fhRawHitRatioEvoPerFeb
void ProcessDebugInfo(const stsxyter::Message &Mess, const UInt_t &uCurrDpbIdx)
void FillMuchFebChanHitRateEvoLong(UInt_t uFebIdx, Double_t dTimeSinceStartMin, UInt_t uChanInFeb)
Bool_t CreateDebugHistograms(CbmMuchUnpackPar *pUnpackPar)
std::vector< std::pair< TNamed *, std::string > > GetHistoVector()
TH2 * fhMuchAllAsicsHitRateEvo
TH2 * fhMuchHitsElinkPerDpb
double_t dFirstTsStartTime
Rate evolution histos.
void FillMuchFebChanRawTs(UInt_t uFebIdx, UInt_t uChan, UShort_t usRawTs)
std::vector< std::pair< TCanvas *, std::string > > fvpAllCanvasPointers
Vector of pointers to histograms + optional folder name.
TH2 * fhMuchFebAsicHitCounts
std::vector< uint32_t > vNbMessType
TH2 * fhMuchMessTypePerDpb
std::vector< TProfile * > fvhRawChRatio
General "per Feb" histogram vectors.
TH1 * fhDigisTimeInRun
General histograms.
std::vector< std::pair< TNamed *, std::string > > fvpAllHistoPointers
static const UInt_t kiMaxNbFlibLinks
std::vector< TH2 * > fvhMuchChanRawTs
void FillMuchChanRawTs(UInt_t uAsicIdx, UShort_t usChan, UShort_t usRawTs)
void FillMuchAllAsicsHitRateEvo(Double_t dTimeSinceStartSec, UInt_t uAsicIdx)
Bool_t Init(CbmMuchUnpackPar *digiParSet)
Init all required parameter informations and histograms.
std::vector< TH1 * > fvhMuchFebChanCntRaw
std::vector< TH1 * > fvhMuchFebHitRateEvoLong
void FillMuchFebChanMissEvt(UInt_t uFebIdx, UInt_t uChan, bool missEvtFlag)
std::vector< TProfile2D * > fvhHitChRatioEvo
void FillMuchFebChanAdcRaw(UInt_t uFebIdx, UInt_t uChanInFeb, UShort_t usRawAdc)
std::vector< TH1 * > fvhMuchFebMissEvtEvo
std::vector< TH2 * > fvhMuchFebAsicHitRateEvo
std::vector< TProfile * > fvhRawDupliRatioPerCh
void FillDuplicateHitsAdc(const uint32_t &uFebIdx, const uint32_t &uChanInFeb, const uint16_t &usAdc)
TH1 * fvhMsSize[kiMaxNbFlibLinks]
std::vector< TH2 * > fvhMuchFebChanHitRateEvoLong
void FillMuchFebHitRateEvoLong(UInt_t uFebIdx, Double_t dTimeSinceStartMin)
void FillMuchFebAsicHitCounts(UInt_t uFebIdx, UInt_t uAsicInFeb)
std::vector< TH2 * > fvhMuchChanMissEvt
std::vector< TH1 * > fvhMuchFebHitRateEvo
std::vector< TProfile2D * > fvhRawDupliRatioEvoPerCh
std::vector< TProfile2D * > fvhRawChRatioEvo
void FillMuchMessTypePerElink(UInt_t ElinkIdx, uint16_t typeMess)
std::vector< TH2 * > fvhMuchFebChanHitRateEvo
std::vector< std::pair< TCanvas *, std::string > > GetCanvasVector()
void FillHitDebugMonitoringHistos(const UInt_t &uAsicIdx, const UShort_t &usChan, const UShort_t &usRawAdc, const UShort_t &usRawTs, const bool &isHitMissedEvts)
std::vector< TH2 * > fvhMuchFebAsicHitRateEvoLong
void AddCanvasToVector(TCanvas *pointer, std::string sFolder="")
virtual ~CbmMuchUnpackMonitor()
void FillHitMonitoringHistos(const UInt_t &uFebIdx, const UShort_t &usChan, const UInt_t &uChanInFeb, const UShort_t &usRawAdc, const Double_t &dCalAdc, const UShort_t &usRawTs, const bool &isHitMissedEvts)
std::vector< TCanvas * > fvcMuchSumm
Canvases.
void FillMuchFebChanAdcCalProf(UInt_t uFebIdx, UInt_t uChanInFeb, Double_t dCalAdc)
TH2 * fhMuchDpbRawTsMsbDpb
void FillHitEvoMonitoringHistos(const UInt_t &uFebIdx, const UInt_t &uAsicIdx, const UInt_t &uAsicInFeb, const UInt_t &uChanInFeb, const Double_t &dAbsTimeSec, const bool &isHitMissedEvts)
void FillMuchFebAsicMissEvtEvo(UInt_t uFebIdx, Double_t dTimeSinceStartSec, UInt_t uAsicInFeb)
std::vector< TH2 * > fvhChDupliAdc
std::vector< TProfile2D * > fvhRawHitRatioEvoPerCh
TH2 * fhMuchMessTypePerElink
void FillMuchFebAsicHitRateEvoLong(UInt_t uFebIdx, Double_t dTimeSinceStartMin, UInt_t uAsicInFeb)
void FillMuchFebChanCntRaw(UInt_t uFebIdx, UInt_t uChanInFeb)
Fill general "per Feb" histogram vectors.
std::vector< TH2 * > fvhMuchChanAdcRaw
std::vector< TH1 * > fvhMuchChanCntRaw
Debugging "per Asic" histogram vectors.
std::vector< TProfile2D * > fvhDupliChRatioEvo
std::vector< uint32_t > fvuNbRawTsFeb
Per timeslice counters to evaluate the eventual raw messages rejection per FEB.
void FillMuchFebChanAdcRawProf(UInt_t uFebIdx, UInt_t uChanInFeb, UShort_t usRawAdc)
TProfile * fvhMsSizeTime[kiMaxNbFlibLinks]
TH1 * fhMuchMessType
Debugging histograms.
Bool_t ResetMsComponentSizeHistos(UInt_t component)
void FillMuchFebHitRateEvo(UInt_t uFebIdx, Double_t dTimeSinceStartSec)
void FillMuchChanAdcRawProf(UInt_t uAsicIdx, UShort_t usChan, UShort_t usRawAdc)
void FillMuchFebChanHitRateEvo(UInt_t uFebIdx, Double_t dTimeSinceStartSec, UInt_t uChanInFeb)
TH2 * fhMuchStatusMessType
std::vector< TProfile * > fvhRawHitRatioPerCh
bool fDebugMode
Flag if debug mode is active or not.
std::vector< TProfile * > fvhMuchChanAdcRawProf
std::vector< std::vector< uint32_t > > fvvuNbRawTsChan
Per timeslice counters to evaluate the eventual raw messages rejection per [FEB, chan] pairs.
std::vector< TProfile * > fvhMuchFebChanAdcCalProf
void FillMuchFebAsicHitRateEvo(UInt_t uFebIdx, Double_t dTimeSinceStartSec, UInt_t uAsicInFeb)
std::vector< TH2 * > fvhMuchFebAsicMissEvtEvo
UInt_t fuLongHistoNbSeconds
void FillMuchChanCntRaw(UInt_t uAsicIdx, UShort_t usChan)
Fill debugging "per Asic" histogram vectors.
TH2 * fhMuchAllFebsHitRateEvo
void Finish()
Write all histograms and canvases to file.
std::vector< TH2 * > fvhMuchFebChanRawTs
Bool_t CreateHistograms(CbmMuchUnpackPar *pUnpackPar)
std::vector< TH2 * > fvhMuchFebChanMissEvtEvo
void FillMuchFebChanMissEvtEvo(UInt_t uFebIdx, Double_t dTimeSinceStartSec, UInt_t uChanInFeb)
TH2 * fhMuchDpbRawTsMsbSx
void FillMuchChanAdcRaw(UInt_t uAsicIdx, UShort_t usChan, UShort_t usRawAdc)
UInt_t fuLongHistoBinSizeSec
std::vector< uint32_t > fvuNbDigisTsFeb
void FillMuchFebChanAdcCal(UInt_t uFebIdx, UInt_t uChanInFeb, Double_t dCalAdc)
TProfile * fhRawHitRatioPerFeb
std::vector< TProfile * > fvhMuchFebChanAdcRawProf
Bool_t ResetDebugHistograms()
std::vector< TCanvas * > fvcMuchSmxErr
std::vector< TH2 * > fvhMuchFebChanMissEvt
std::vector< TH2 * > fvhMuchFebChanAdcRaw
uint32_t fNrElinksPerDpb
Number of elinks per dpb, extracted from the parset.
void AddHistoToVector(TNamed *pointer, std::string sFolder="")
std::vector< TH2 * > fvhMuchFebChanAdcCal
void FillMuchMessType(uint16_t typeMess)
Fill debugging histograms.
void FillMuchHitsElinkPerDpb(UInt_t DpbIdx, UInt_t ElinkIdx)
std::vector< TProfile * > fvhDupliChRatio
static constexpr UInt_t GetNbChanPerFeb()
static constexpr UInt_t GetNbAsicsPerFeb()
static constexpr UInt_t GetNbElinkPerDpb()
static constexpr UInt_t GetNbChanPerAsic()
Data class with information on a STS local track.
XPU_D uint16_t GetLinkIndex() const
For all data: Returns the (global) index of the eLink on which the message was received (n bit field)
XPU_D MessType GetMessType() const
Returns the message type, see enum MessType.
XPU_D uint16_t GetLinkIndexHitBinning() const
XPU_D bool IsMsErrorFlagOn() const
For End of MS data: Returns the MS error flag (1 bit field)
static constexpr uint32_t kuHitNbTsBins
static constexpr uint32_t kuHitNbAdcBins
Status/properties constants.