CbmRoot
Loading...
Searching...
No Matches
CbmTofUnpackMonitor.h
Go to the documentation of this file.
1/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
5#ifndef CbmTofUnpackMonitor_H
6#define CbmTofUnpackMonitor_H
7
8#include "CbmBmonDigi.h"
9#include "CbmMcbm2018TofPar.h"
10
11#include <Rtypes.h>
12#include <TH1.h>
13#include <TH2.h>
14#include <TProfile.h>
15#include <TProfile2D.h>
16
17#include <array>
18#include <cstdint>
19#include <vector>
20
21class TCanvas;
22
24 public:
26
27 virtual ~CbmTofUnpackMonitor();
28
30 Bool_t Init(CbmMcbm2018TofPar* digiParSet);
31
34 void DrawCanvases();
35
38 void DrawBmonCanvases();
39
43
46 void DrawCanvasesQFactors(Bool_t bBmon = kTRUE);
47
48 Bool_t CreateMsComponentSizeHistos(UInt_t component);
49 Bool_t ResetMsComponentSizeHistos(UInt_t component);
50
52 void Finish();
53
54 void SetHistoFileName(TString nameIn) { fHistoFileName = nameIn; }
55
56 inline void SetPulserTotLimits(UInt_t uMin, UInt_t uMax)
57 {
58 fuMinTotPulser = uMin;
59 fuMaxTotPulser = uMax;
60 }
61 inline void SetSpillThreshold(UInt_t uCntLimit) { fuOffSpillCountLimit = uCntLimit; }
62 inline void SetSpillThresholdNonPulser(UInt_t uCntLimit) { fuOffSpillCountLimitNonPulser = uCntLimit; }
63 inline void SetSpillCheckInterval(Double_t dIntervalSec) { fdSpillCheckInterval = dIntervalSec; }
64 void SetBmonChannelMap(std::vector<uint32_t> vChanMapIn);
65
66 void SetLongDurationLimits(UInt_t uDurationSeconds, UInt_t uBinSize)
67 {
68 //fbLongHistoEnable = kTRUE;
69 fuLongHistoNbSeconds = uDurationSeconds;
70 fuLongHistoBinSizeSec = uBinSize;
71 }
72
73 void AddHistoToVector(TNamed* pointer, std::string sFolder = "")
74 {
75 fvpAllHistoPointers.push_back(std::pair<TNamed*, std::string>(pointer, sFolder));
76 }
77 std::vector<std::pair<TNamed*, std::string>> GetHistoVector() { return fvpAllHistoPointers; }
78
79 void AddCanvasToVector(TCanvas* pointer, std::string sFolder = "")
80 {
81 fvpAllCanvasPointers.push_back(std::pair<TCanvas*, std::string>(pointer, sFolder));
82 }
83 std::vector<std::pair<TCanvas*, std::string>> GetCanvasVector() { return fvpAllCanvasPointers; }
84
86
88 void FillMsSize(UInt_t uMsComp, UInt_t uSize) { fvhMsSize[uMsComp]->Fill(uSize); }
89 void FillMsSizeTime(UInt_t uMsComp, Double_t dTime, UInt_t uSize) { fvhMsSizeTime[uMsComp]->Fill(dTime, uSize); }
90
91
93 // void FillMsCntEvo(ULong64_t MsIdx) { fhMsCntEvo->Fill(MsIdx * 1e-9); }
94 void FillHitMonitoringHistos(const double_t& dMsTime, const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id,
95 const uint32_t& uRawCh, const uint32_t& uRemapCh, const uint32_t& uTot);
96 void FillEpochMonitoringHistos(const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id, const bool& bSyncFlag,
97 const bool& bDataLoss, const bool& bEpochLoss, const bool& bMissmMatch);
98 void FillScmMonitoringHistos(const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id, const uint32_t& uCh,
99 const uint32_t& uEdge, const uint32_t& uType);
100 void FillSysMonitoringHistos(const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id, const uint32_t& uType);
101 void FillErrMonitoringHistos(const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id, const uint32_t& uCh,
102 const uint32_t& uType);
103
105 void CheckBmonSpillLimits(const double_t& dMsTime);
106 void FillHitBmonMonitoringHistos(const double_t& dMsTime, const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id,
107 const uint32_t& uTot);
108
109 void FillErrBmonMonitoringHistos(const double_t& dMsTime, const uint32_t& uCurrCompIdx, const uint32_t& uGet4Id,
110 const bool& bErrEvtLost);
111
113 void SetBmonMode(bool value) { fBmonMode = value; }
114
116 bool GetBmonMode() { return fBmonMode; }
117
119 void FillHitBmonMicroSpillHistos(const double_t& dMsTime, const double_t& dTime);
122
124 void FillHitBmonQfactorHistos(const double_t& dMsTime, const double_t& dTime);
126 void FinalizeTsBmonQfactorHistos(uint64_t uTsTimeNs, std::vector<CbmBmonDigi>* vDigis);
127
129 void SetBmonMicroSpillMode(bool value) { fBmonMicroSpillMode = value; }
130
133
135 void SetBmonScvdMode(bool value) { fBmonScvdMode = value; }
136
139
141 void SetBmonQFactorMode(bool value)
142 {
143 fBmonQfactorsMode = value;
144 if (fBmonQfactorsMode) {
145 fBmonMicroSpillMode = false;
146 fBmonScvdMode = false;
147 }
148 }
149
152
154 void SetTofQFactorMode(bool value) { fTofQfactorsMode = value; }
155
158
160 void SetInternalHttpMode(bool value) { fbInternalHttp = value; }
161
164
166 void SetHistosStartTime(double_t value) { fdStartTime = value; }
167
169 double_t GetHistosStartTime() { return fdStartTime; }
170
171 private:
172 TString fHistoFileName = "data/mon.tof.root";
173
177 UInt_t fuNbOfComps = 0;
178 UInt_t fuNbOfGet4PerComp = 0;
181 UInt_t fuNbOfGet4InSyst = 0;
182
184 Double_t fdStartTime = -1.0;
185 UInt_t fuHistoryHistoSize = 3600;
186 double_t dFirstTsStartTime = 0;
187 //Bool_t fbLongHistoEnable;
188 UInt_t fuLongHistoNbSeconds = 3600;
191
193 bool fBmonMode = false;
194 bool fBmonScvdMode = false;
196 bool fBmonQfactorsMode = false;
197 bool fTofQfactorsMode = false;
198 bool fbInternalHttp = true;
199
201 static const UInt_t kuMaxNbFlibLinks = 32;
202 static const UInt_t kuBytesPerMessage = 8;
203 static const UInt_t kuNbChanBmon = 16;
204 static const UInt_t kuNbChanBmonScvd = 20;
205 static const UInt_t kuNbSpillPlots = 5;
206
208 UInt_t fuMinTotPulser = 185;
209 UInt_t fuMaxTotPulser = 189;
212 Double_t fdSpillCheckInterval = 1.0;
216 static constexpr UInt_t kuBmonChanMap[kuNbChanBmon] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
218 static constexpr UInt_t kuBmonChanMapScvd[kuNbChanBmonScvd] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
219 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
221 UInt_t fuNbChanBmon = 0;
222 std::vector<UInt_t> fuBmonChanMap = {};
223
227
230 TH2* fhGet4MessType = nullptr;
231 TH2* fhGet4EpochFlags = nullptr;
232 TH2* fhGet4ScmType = nullptr;
233 TH2* fhGet4SysMessType = nullptr;
234 TH2* fhGet4ErrorsType = nullptr;
236 std::vector<TH2*> fvhCompGet4MessType = {};
237 std::vector<TH2*> fvhCompGet4ChScm = {};
238 std::vector<TH2*> fvhCompGet4ChErrors = {};
240 std::vector<TH1*> fvhCompRawChCount = {};
241 std::vector<TH2*> fvhCompRawChRate = {};
242 std::vector<TH2*> fvhCompRawChTot = {};
244 std::vector<TH1*> fvhCompRemapChCount = {};
245 std::vector<TH2*> fvhCompRemapChRate = {};
246 std::vector<TH2*> fvhCompRemapChTot = {};
248 TH1* fhPulserChCounts = nullptr;
249 TH2* fhPulserChEvo = nullptr;
250
253 std::vector<UInt_t> fvuBmonHitCntChanMs = {};
254 std::vector<UInt_t> fvuBmonErrorCntChanMs = {};
255 std::vector<UInt_t> fvuBmonEvtLostCntChanMs = {};
256 std::vector<TH1*> fvhBmonMsgCntEvoChan = {};
257 std::vector<TH2*> fvhBmonMsgCntPerMsEvoChan = {};
258 std::vector<TH1*> fvhBmonHitCntEvoChan = {};
259 std::vector<TH2*> fvhBmonHitCntPerMsEvoChan = {};
260 std::vector<TH1*> fvhBmonErrorCntEvoChan = {};
261 std::vector<TH2*> fvhBmonErrorCntPerMsEvoChan = {};
262 std::vector<TH1*> fvhBmonEvtLostCntEvoChan = {};
263 std::vector<TH2*> fvhBmonEvtLostCntPerMsEvoChan = {};
264 std::vector<TProfile*> fvhBmonErrorFractEvoChan = {};
265 std::vector<TH2*> fvhBmonErrorFractPerMsEvoChan = {};
266 std::vector<TProfile*> fvhBmonEvtLostFractEvoChan = {};
267 std::vector<TH2*> fvhBmonEvtLostFractPerMsEvoChan = {};
269 TH1* fhBmonCompMapAll = nullptr;
270 TH2* fhBmonCompGet4 = nullptr;
271 TH1* fhBmonGet4Map = nullptr;
272 TH2* fhBmonGet4MapEvo = nullptr;
273 TH1* fhBmonChannelMapAll = nullptr;
274 TH2* fhBmonChannelTotAll = nullptr;
275 TH2* fhBmonHitMapEvoAll = nullptr;
276 TH2* fhBmonHitTotEvoAll = nullptr;
277 TH1* fhBmonChanHitMapAll = nullptr;
280 TH1* fhBmonCompMap = nullptr;
281 TH1* fhBmonChannelMap = nullptr;
282 TH2* fhBmonHitMapEvo = nullptr;
283 TH2* fhBmonHitTotEvo = nullptr;
284 TH1* fhBmonChanHitMap = nullptr;
285 TH2* fhBmonChanHitMapEvo = nullptr;
287 std::vector<TH1*> fvhBmonCompMapSpill = {};
288 std::vector<TH1*> fvhBmonChannelMapSpill = {};
289 TH1* fhBmonHitsPerSpill = nullptr;
291 TH1* fhBmonMsgCntEvo = nullptr;
292 TH1* fhBmonHitCntEvo = nullptr;
293 TH1* fhBmonErrorCntEvo = nullptr;
294 TH1* fhBmonLostEvtCntEvo = nullptr;
295 TProfile* fhBmonErrorFractEvo = nullptr;
296 TProfile* fhBmonLostEvtFractEvo = nullptr;
298 TH2* fhBmonMsgCntPerMsEvo = nullptr;
299 TH2* fhBmonHitCntPerMsEvo = nullptr;
306 TH2* fhBmonHitMapEvoPulser = nullptr;
307
309 double_t fdBmonMicrospillsTsLengthSec = 0.128; // 128 ms
311 uint32_t fuNbTsMicrospills = 0;
312 std::unique_ptr<double[]> fArrHitCounts;
313 std::unique_ptr<double[]> fArrErrCounts;
314 TH1* fhBmonMicrospillsDistHits = nullptr; // Only internal, not for users
315 TH1* fhBmonMicrospillsDistErrs = nullptr; // Only internal, not for users
326
330 uint32_t fuQFactorMaxNbTs = 400;
331 std::vector<double_t> fvdQfactorBinSizesNs = {20, 200, 1.28e3, 10.24e3, 25.6e3, 102.4e3, 204.8e3}; // 7 values
333 std::vector<double_t> fvdQfactorIntegrationNs = {2.56e6}; // 1 value
334 std::vector<uint32_t> fvuNbHistoCyclesPerTS = {};
335 std::vector<uint32_t> fvuQfactorIdxHistoCycleinTS = {};
337 std::vector<double_t> fvdQfactorHistMax = {2000., 400., 40., 20., 20., 20., 20.};
338 uint16_t fuQfactorNbPlots = 0;
339 std::vector<std::vector<uint32_t>> fvuQfactorNbBinsHisto;
340 std::vector<uint32_t> fvuQfactorNbHistoCyclesPerTS;
341 std::vector<std::vector<TH1*>> fvhBmonQfactHisto;
342 std::vector<std::vector<TH1*>> fvhBmonQfactQval;
343 std::vector<std::vector<TH1*>> fvhBmonQfactMean;
347 double_t ExtractQFactor(TH1* pHistoIn);
348 double_t ExtractMean(TH1* pHistoIn);
349
350
353 TCanvas* fcSummaryGet4s = nullptr;
354 std::vector<TCanvas*> fvcSumComp = {};
356 TCanvas* fcBmonSummary = nullptr;
357 TCanvas* fcBmonSummaryMap = nullptr;
358 TCanvas* fcBmonHitMaps = nullptr;
359 TCanvas* fcBmonGenCntsPerMs = nullptr;
360 TCanvas* fcBmonSpillCounts = nullptr;
361 TCanvas* fcBmonSpillCountsHori = nullptr;
362 TCanvas* fcBmonSpillCompCountsHori = nullptr;
364 TCanvas* fcBmonMicrospillsBinCnts = nullptr;
365 TCanvas* fcBmonMicrospillsRatios = nullptr;
366 TCanvas* fcBmonMicrospillsFraction = nullptr;
368 TCanvas* fcBmonQFactorVal = nullptr;
369 TCanvas* fcBmonQFactorMean = nullptr;
370 TCanvas* fcBmonQFactorBinCntDist = nullptr;
371
376 Double_t fdStartTimeSpill = -1.0;
377 Double_t fdBmonLastInterTime = -1.0;
380
392 std::vector<std::pair<TNamed*, std::string>>
394 std::vector<std::pair<TCanvas*, std::string>>
396
399
400 ClassDef(CbmTofUnpackMonitor, 1)
401};
402
403#endif
bool Bool_t
Bool_t fbSpillOn
Spill detection.
void SetHistosStartTime(double_t value)
Set start time for evolution histos.
std::vector< TH1 * > fvhBmonChannelMapSpill
TH1 * fvhMsSize[kuMaxNbFlibLinks]
MS size histograms.
void CheckBmonSpillLimits(const double_t &dMsTime)
Fill BMon histograms.
std::vector< TH1 * > fvhBmonCompMapSpill
---> No Pulser cut + Spill detection
std::vector< std::pair< TNamed *, std::string > > fvpAllHistoPointers
TProfile * fvhMsSizeTime[kuMaxNbFlibLinks]
std::vector< TH1 * > fvhBmonErrorCntEvoChan
void FinalizeTsBmonQfactorHistos(uint64_t uTsTimeNs, std::vector< CbmBmonDigi > *vDigis)
Finalize Microspill histograms.
std::vector< TH1 * > fvhBmonEvtLostCntEvoChan
Bool_t ResetMsComponentSizeHistos(UInt_t component)
static const UInt_t kuNbChanBmon
Bool_t ResetHistogramsQFactors(Bool_t bResetTime)
void SetBmonMicroSpillMode(bool value)
Activate the BMon mode.
CbmMcbm2018TofPar * fUnpackPar
Settings from parameter file.
void AddHistoToVector(TNamed *pointer, std::string sFolder="")
static const UInt_t kuNbChanBmonScvd
std::vector< std::pair< TCanvas *, std::string > > GetCanvasVector()
static constexpr UInt_t kuBmonChanMap[kuNbChanBmon]
std::vector< std::vector< uint32_t > > fvuQfactorNbBinsHisto
std::vector< double_t > fvdQfactorHistMax
Dimension: same as BinSizes vector!!
std::vector< TH1 * > fvhBmonHitCntEvoChan
std::vector< TH1 * > fvhCompRemapChCount
---> Per remapped (PADI) channel in Component
std::vector< uint32_t > fvuQfactorIdxHistoCycleinTS
void FillSysMonitoringHistos(const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const uint32_t &uType)
std::vector< double_t > fvdQfactorIntegrationNs
Hint: keep fractions of TS size + multiples of bin size and above 10 us.
void FillHitMonitoringHistos(const double_t &dMsTime, const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const uint32_t &uRawCh, const uint32_t &uRemapCh, const uint32_t &uTot)
Fill general histograms.
Bool_t CreateHistogramsQFactors(Bool_t bBmon=kTRUE)
std::vector< std::vector< TH1 * > > fvhBmonQfactHisto
void AddCanvasToVector(TCanvas *pointer, std::string sFolder="")
Bool_t ResetHistogramsMicroSpills(Bool_t bResetTime)
bool GetBmonMicroSpillMode()
Read the Bmon mode.
static constexpr UInt_t kuBmonChanMapScvd[kuNbChanBmonScvd]
2024 mapping: +4 channels scvd added
void SetBmonMode(bool value)
Activate the BMon mode.
TCanvas * fcBmonQFactorVal
---> BMon Q-Factors monitoring
std::vector< TH2 * > fvhBmonQfactBinCountDistributionEvo
std::vector< std::pair< TNamed *, std::string > > GetHistoVector()
static const UInt_t kuBytesPerMessage
bool GetBmonQFactorMode()
Read the Bmon QFactor mode.
void FillEpochMonitoringHistos(const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const bool &bSyncFlag, const bool &bDataLoss, const bool &bEpochLoss, const bool &bMissmMatch)
void FillScmMonitoringHistos(const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const uint32_t &uCh, const uint32_t &uEdge, const uint32_t &uType)
std::vector< uint32_t > fvuNbHistoCyclesPerTS
std::vector< TH2 * > fvhCompGet4MessType
---> Per GET4 in Component
bool GetBmonScvdMode()
Read the BMon mode.
void FillErrMonitoringHistos(const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const uint32_t &uCh, const uint32_t &uType)
bool GetInternalHttpMode()
Read the Bmon mode.
TH1 * fhBmonCompMapAll
---> Channels maps without cuts
std::vector< TH1 * > fvhBmonMsgCntEvoChan
void FillMsSizeTime(UInt_t uMsComp, Double_t dTime, UInt_t uSize)
void SetSpillCheckInterval(Double_t dIntervalSec)
std::vector< TH2 * > fvhBmonErrorCntPerMsEvoChan
void SetLongDurationLimits(UInt_t uDurationSeconds, UInt_t uBinSize)
Bool_t CreateMsComponentSizeHistos(UInt_t component)
void FillHitBmonMonitoringHistos(const double_t &dMsTime, const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const uint32_t &uTot)
std::vector< UInt_t > fuBmonChanMap
std::unique_ptr< double[]> fArrErrCounts
std::vector< double_t > fvdQfactorBinSizesNs
void FinalizeTsBmonMicroSpillHistos()
Finalize BMon Microspill histograms.
Double_t fdStartTime
Total/maximum number of Get4 in system.
Bool_t ResetBmonHistograms(Bool_t bResetTime)
std::vector< UInt_t > fvuBmonErrorCntChanMs
std::vector< TH2 * > fvhBmonErrorFractPerMsEvoChan
double_t ExtractQFactor(TH1 *pHistoIn)
Q-Factor helper methods.
std::vector< TCanvas * > fvcSumComp
void SetBmonQFactorMode(bool value)
Activate the Bmon QFactor mode.
std::vector< TH2 * > fvhBmonMsgCntPerMsEvoChan
std::vector< TH2 * > fvhCompRawChRate
UInt_t fuNbOfComps
Readout chain dimensions and mapping.
double_t GetHistosStartTime()
Set start time for evolution histos.
std::vector< TH2 * > fvhCompRawChTot
TH1 * fhBmonCompMap
---> No Pulser cut
std::vector< UInt_t > fvuBmonEvtLostCntChanMs
TCanvas * fcBmonMicrospillsBinCnts
---> BMon Microspills monitoring
std::vector< TH2 * > fvhCompRemapChRate
void FillErrBmonMonitoringHistos(const double_t &dMsTime, const uint32_t &uCurrCompIdx, const uint32_t &uGet4Id, const bool &bErrEvtLost)
std::vector< TH2 * > fvhCompGet4ChErrors
UInt_t fuNbChanBmon
Runtime values.
static const UInt_t kuNbSpillPlots
std::unique_ptr< double[]> fArrHitCounts
std::vector< TH2 * > fvhCompGet4ChScm
UInt_t fuNbOfGet4PerComp
Total number of Components in the system.
std::vector< uint32_t > fvuQfactorNbHistoCyclesPerTS
void SetSpillThresholdNonPulser(UInt_t uCntLimit)
std::vector< TH2 * > fvhCompRemapChTot
TCanvas * fcBmonSummary
---> BMon
TH1 * fhBmonMsgCntEvo
---> Global Rate
bool fBmonMode
Flag if debug mode is active or not.
std::vector< TH1 * > fvhBmonQfactBinCountDistribution
bool GetTofQFactorMode()
Read the Tof QFactor mode.
void SetBmonChannelMap(std::vector< uint32_t > vChanMapIn)
std::vector< TH2 * > fvhBmonEvtLostCntPerMsEvoChan
static const UInt_t kuMaxNbFlibLinks
---> Constants
void FillMsSize(UInt_t uMsComp, UInt_t uSize)
Fill Ms Component Size Histos.
std::vector< TH1 * > fvhCompRawChCount
---> Per raw channel in Component
void FillHitBmonQfactorHistos(const double_t &dMsTime, const double_t &dTime)
Fill Microspill histograms.
std::vector< TH2 * > fvhBmonEvtLostFractPerMsEvoChan
void SetHistoFileName(TString nameIn)
CbmTofUnpackMonitor operator=(const CbmTofUnpackMonitor &)
std::vector< TProfile * > fvhBmonErrorFractEvoChan
Bool_t Init(CbmMcbm2018TofPar *digiParSet)
Init all required parameter informations and histograms.
void SetSpillThreshold(UInt_t uCntLimit)
std::vector< std::pair< TCanvas *, std::string > > fvpAllCanvasPointers
Vector of pointers to histograms + optional folder name.
UInt_t fuMinTotPulser
---> User settings: Data correction parameters
std::vector< TH2 * > fvhBmonHitCntPerMsEvoChan
TH2 * fhBmonMsgCntPerMsEvo
---> Global Rate per MS
UInt_t fuNbOfChannelsPerComp
Number of channels per Get4, constant.
void SetBmonScvdMode(bool value)
Activate the BMon sCVD mode.
void SetPulserTotLimits(UInt_t uMin, UInt_t uMax)
std::vector< TProfile * > fvhBmonEvtLostFractEvoChan
TH1 * fhBmonChannelMapPulser
---> Pulser
void SetTofQFactorMode(bool value)
Activate the Tof QFactor mode.
bool GetBmonMode()
Read the BMon mode.
void FillHitBmonMicroSpillHistos(const double_t &dMsTime, const double_t &dTime)
Fill BMon Microspill histograms.
void DrawCanvasesQFactors(Bool_t bBmon=kTRUE)
UInt_t fuNbOfChannelsPerGet4
Max number of Get4 per component.
void Finish()
Write all histograms and canvases to file.
double_t ExtractMean(TH1 *pHistoIn)
UInt_t fuNbOfGet4InSyst
Number of channels per Component, recalculated.
void SetInternalHttpMode(bool value)
Activate/de-activate the internal histo serve mode.
std::vector< UInt_t > fvuBmonHitCntChanMs
double_t fdBmonMicrospillsTsLengthSec
BMon micro-spills monitoring histograms.
CbmTofUnpackMonitor(const CbmTofUnpackMonitor &)
Vector of pointers to canvases + optional folder name.
std::vector< std::vector< TH1 * > > fvhBmonQfactQval
TH1 * fhPulserChCounts
---> Pulser
std::vector< std::vector< TH1 * > > fvhBmonQfactMean