Belle II Software development
DQMHistAnalysisTOP.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#pragma once
10
11#include <dqm/core/DQMHistAnalysis.h>
12
13#include <TCanvas.h>
14#include <TH1.h>
15#include <TH2.h>
16#include <TLine.h>
17#include <TPaveText.h>
18#include <THStack.h>
19#include <TLegend.h>
20#include <vector>
21#include <string>
22#include <map>
23
24namespace Belle2 {
32
34
35 public:
36
41
45 void initialize() override final;
46
50 void beginRun() override final;
51
55 void event() override final;
56
60 void endRun() override final;
61
65 void terminate() override final;
66
67
68 private:
69
74 c_Gray = 0, // undefined
75 c_Green = 1, // good
76 c_Yellow = 2, // warning
77 c_Red = 3 // alarm
78 };
79
84
89
94
99
104
108 void updateEventT0Canvas();
109
114
118 void updateTimingCanvas();
119
126 static bool sameHistDefinition(TH1* h1, TH1* h2);
127
132 const TH1F* makeDeadAndHotFractionsPlot();
133
138 void makePhotonYieldsAndBGRatePlots(const TH1F* activeFraction);
139
144
150 static void setZAxisRange(const std::string& name, double scale);
151
158 static void makeBGSubtractedTimingPlot(const std::string& name, const TH2F* trackHits, int slot);
159
164
169
176 static void makeFlagFractPlot(const std::string& hname, TH1* histogram, TCanvas* canvas);
177
183 void setMiraBelleVariables(const std::string& variableName, const TH1* histogram);
184
192 int getAlarmState(double value, const std::vector<double>& alarmLevels, bool bigRed = true) const;
193
199 int getAlarmColor(unsigned alarmState) const
200 {
201 if (alarmState < m_alarmColors.size()) return m_alarmColors[alarmState];
202 return m_alarmColors[c_Gray];
203 }
204
210 int getOffcialAlarmStatus(unsigned alarmState) const
211 {
212 if (alarmState < m_officialStates.size()) return m_officialStates[alarmState];
213 return c_StatusDefault;
214 }
215
224 static void setAlarmLines(const std::vector<double>& alarmLevels, double xmin, double xmax, std::vector<TLine*>& alarmLines,
225 bool bigRed = true);
226
230 void setAlarmLines();
231
237 static std::pair<double, double> getDeadAndHotCuts(const TH1* h);
238
242 void setEpicsVariables();
243
248 void updateLimits();
249
254 void setIncludedBoardstacks(const std::vector<std::string>& excludedBoardstacks);
255
260 static void setGridX(const std::string& canvasName);
261
262 // module parameters
263
264 std::vector<int> m_asicWindowsBand = {215, 235};
265 std::vector<double> m_asicWindowsAlarmLevels = {0.002, 0.02};
266 std::vector<double> m_windowMedianAlarmLevels = {50, 100};
267 std::vector<double> m_eventMonitorAlarmLevels = {1e-4, 2e-3};
268 std::vector<double> m_unpackerErrAlarmLevels = {0.01, 0.10};
269 std::vector<double> m_junkHitsAlarmLevels = {0.05, 0.25};
270 std::vector<double> m_deadChannelsAlarmLevels = {0.1, 0.35};
271 std::vector<double> m_backgroundAlarmLevels = {5.0, 10.0};
272 std::vector<double> m_photonYieldsAlarmLevels = {15.0, 25.0};
273 std::vector<std::string> m_excludedBoardstacks;
274 std::string m_pvPrefix;
275
276 std::vector<double> m_injectionBGAlarmLevels = {5, 10};
277 std::vector<double> m_timingAlarmLevels = {0.15, 0.30};
278 std::vector<double> m_eventT0MeanAlarmLevels = {8, 20};
279 std::vector<double> m_eventT0RmsAlarmLevels = {10, 20};
280 std::vector<double> m_offsetMeanAlarmLevels = {0.2, 0.5};
281 std::vector<double> m_offsetRmsAlarmLevels = {0.25, 0.50};
282
283 // alarms etc.
284
287 std::vector<bool> m_includedBoardstacks;
288 std::map<std::string, int> m_bsmap;
290 double m_averageRate = 0;
291
292 bool m_IsNullRun = false;
293 std::string m_runType;
294 double m_numEvents = 0;
295
296 // new histogram and canvases
297
298 TH1D* m_evtMonitorFract = nullptr;
299 TCanvas* m_c_evtMonitorFract = nullptr;
300
301 TH1F* m_windowMedian = nullptr;
302 TCanvas* m_c_windowMedian = nullptr;
303
304 TH1D* m_photonYields = nullptr;
305 TH1D* m_backgroundRates = nullptr;
306 TCanvas* m_c_photonYields = nullptr;
307 TCanvas* m_c_backgroundRates = nullptr;
308
309 TH1F* m_hotFraction = nullptr;
310 TH1F* m_deadFraction = nullptr;
311 TH1F* m_excludedFraction = nullptr;
312 TH1F* m_activeFraction = nullptr;
313 THStack* m_stack = nullptr;
314 TLegend* m_legend = nullptr;
315 TCanvas* m_c_deadAndHot = nullptr;
316
317 TH1F* m_junkFraction = nullptr;
318 TH1F* m_excludedBSHisto = nullptr;
319 TCanvas* m_c_junkFraction = nullptr;
320
321 std::vector<TH1F*> m_pmtHitRates;
322 std::vector<TCanvas*> m_c_pmtHitRates;
323
324 std::map<std::string, TCanvas*> m_c_injBGs;
325 std::map<std::string, TProfile*> m_profiles;
326 std::map<std::string, TH1D*> m_projections;
327
328 TH1D* m_skipProcFlagFract = nullptr;
329 TH1D* m_injVetoFlagFract = nullptr;
330 TCanvas* m_c_skipProcFlagFract = nullptr;
331 TCanvas* m_c_injVetoFlagFract = nullptr;
332
333 // graphic primitives
334
335 std::vector<TLine*> m_asicWindowsBandLines;
336 std::vector<TLine*> m_junkHitsAlarmLines;
337 std::vector<TLine*> m_deadChannelsAlarmLines;
338 std::vector<TLine*> m_backgroundAlarmLines;
339 std::vector<TLine*> m_photonYieldsAlarmLines;
340 TLine* m_injBGCutLine = nullptr;
341
342 TPaveText* m_text1 = nullptr;
343 TPaveText* m_text2 = nullptr;
344 TPaveText* m_text3 = nullptr;
345 TPaveText* m_text4 = nullptr;
346
347 // MiraBelle
348
349 std::map<std::string, double> m_mirabelleVariables;
351
352 };
353
354} // end namespace Belle2
355
@ c_ColorWarning
Analysis result: Warning, there may be minor issues.
@ c_ColorError
Analysis result: Severe issue found.
@ c_ColorTooFew
Not enough entries/event to judge.
@ c_ColorGood
Analysis result: Good.
DQMHistAnalysisModule()
Constructor / Destructor.
@ c_StatusDefault
default for non-coloring
@ c_StatusTooFew
Not enough entries/event to judge.
@ c_StatusError
Analysis result: Severe issue found.
@ c_StatusWarning
Analysis result: Warning, there may be minor issues.
@ c_StatusGood
Analysis result: Good.
void updateEventMonitorCanvas()
Updates canvas of event desynchronization monitor w/ alarming.
TCanvas * m_c_evtMonitorFract
Canvas: fractions of de-synchronized hits.
std::vector< int > m_alarmColors
alarm colors (see base class)
TH1D * m_skipProcFlagFract
fraction of events w/ skip processing flag set vs.
std::vector< int > m_asicWindowsBand
lower and upper bin of a band denoting good windows
void updateWindowMedianCanvas()
Updates canvas of window_vs_slot median w/ alarming.
static void setZAxisRange(const std::string &name, double scale)
Sets z-axis range of 2D histograms.
TCanvas * m_c_photonYields
Canvas: photon yields per slot.
std::vector< double > m_offsetRmsAlarmLevels
alarm levels for r.m.s.
void initialize() override final
Initializer.
void makePMTHitRatesPlots()
Makes plots of the number of PMT hits per event.
TH1F * m_excludedFraction
fraction of dead and hot channels per slot in excluded boardstacks only
void updateEventT0Canvas()
Updates canvas of event T0 w/ alarming.
std::vector< double > m_deadChannelsAlarmLevels
alarm levels for the fraction of dead + hot channels
std::vector< double > m_asicWindowsAlarmLevels
alarm levels for fraction of windows outside the band
TPaveText * m_text2
text to be written to event desynchonization monitor
TCanvas * m_c_junkFraction
Canvas: fraction of junk hits per boardstack.
THStack * m_stack
stack for drawing dead, hot and active channel fractions
const TH1F * makeDeadAndHotFractionsPlot()
Makes a plot of dead and hot channel fractions per slot.
static void makeBGSubtractedTimingPlot(const std::string &name, const TH2F *trackHits, int slot)
Makes background subtracted time distribution plot.
void updateTimingCanvas()
Updates canvas of timing plot w/ alarming.
void updateUnpackerErrCanvas()
Updates canvas of unpacker errors w/ alarming.
TPaveText * m_text3
text to be written to background rates
std::vector< TLine * > m_deadChannelsAlarmLines
lines representing alarm levels
std::vector< TCanvas * > m_c_pmtHitRates
Canvases of PMT hits per event (index = slot - 1)
int m_alarmStateOverall
overall alarm state of histograms to be sent by EpicsPV
TPaveText * m_text1
text to be written to window_vs_slot
std::vector< TLine * > m_photonYieldsAlarmLines
lines representing alarm levels
static std::pair< double, double > getDeadAndHotCuts(const TH1 *h)
Returns cut levels for dead and hot channels.
std::vector< double > m_offsetMeanAlarmLevels
alarm levels for mean of bunch offset [ns]
std::vector< bool > m_includedBoardstacks
boardstacks included in alarming
TH1D * m_evtMonitorFract
fractions of de-synchronized hits
static bool sameHistDefinition(TH1 *h1, TH1 *h2)
Checks if histograms are defined in the same way (nbins, xmin, xmax)
TPaveText * m_text4
text to be written to number of good hits per event
std::string m_pvPrefix
Epics PV prefix.
TH1D * m_photonYields
photon yields per slot
TH1D * m_backgroundRates
background rates per slot
EAlarmStates
Alarm states enumerator.
TCanvas * m_c_windowMedian
Canvas: window_vs_slot medians.
MonitoringObject * m_monObj
MiraBelle monitoring object.
TCanvas * m_c_backgroundRates
Canvas: background rates per slot.
std::map< std::string, TCanvas * > m_c_injBGs
Canvases for projections of injection BG histograms.
std::vector< double > m_eventMonitorAlarmLevels
alarm levels for fraction of desynchronized digits
static void makeFlagFractPlot(const std::string &hname, TH1 *histogram, TCanvas *canvas)
Makes a plot of fraction of events with the flag is set.
void terminate() override final
This method is called at the end of the event processing.
std::map< std::string, double > m_mirabelleVariables
variables for MiraBelle
void setAlarmLines()
Sets all alarm lines.
TH1F * m_activeFraction
fraction of active channels per slot
int getAlarmColor(unsigned alarmState) const
Converts alarm state to color.
std::vector< double > m_eventT0MeanAlarmLevels
alarm levels for mean of event T0 [ns]
void event() override final
This method is called for each event.
void makeInjectionBGPlots()
Makes projections of injection BG plots.
static void setGridX(const std::string &canvasName)
Sets grid x on the canvas.
std::vector< double > m_photonYieldsAlarmLevels
alarm levels for the number of photons per track
TCanvas * m_c_skipProcFlagFract
Canvas: fraction of events w/ skip processing flag set vs.
TCanvas * m_c_injVetoFlagFract
Canvas: fraction of events w/ injection veto flag set vs.
std::vector< TLine * > m_junkHitsAlarmLines
lines representing alarm levels
void setIncludedBoardstacks(const std::vector< std::string > &excludedBoardstacks)
Sets flags for boardstacks to be included in alarming.
std::vector< double > m_injectionBGAlarmLevels
alarm levels for injection background (in % of events)
TH1F * m_deadFraction
fraction of dead channels per slot (included boardstacks only)
double m_averageRate
average BG rate (to pass to EpicsPV)
std::vector< int > m_officialStates
official alarm states
TH1F * m_hotFraction
fraction of hot channels per slot (included boardstacks only)
std::vector< std::string > m_excludedBoardstacks
list of boarstacks to be excluded from alarming
void makePhotonYieldsAndBGRatePlots(const TH1F *activeFraction)
Make plots of dead-and-hot-channel corrected photon yields and BG rates per slot.
TH1F * m_junkFraction
fraction of junk hits per boardstack
void endRun() override final
This method is called if the current run ends.
int getAlarmState(double value, const std::vector< double > &alarmLevels, bool bigRed=true) const
Returns alarm state.
TH1F * m_windowMedian
window_vs_slot medians
std::vector< double > m_eventT0RmsAlarmLevels
alarm levels for r.m.s.
std::vector< TLine * > m_asicWindowsBandLines
lines denoting a band of good windows
void makeJunkFractionPlot()
Makes a plot of fractions of junk hits per boardstack.
std::vector< double > m_windowMedianAlarmLevels
alarm levels for window_vs_slot medians
void beginRun() override final
Called when entering a new run.
TLegend * m_legend
legend for dead and hot channels
TCanvas * m_c_deadAndHot
Canvas: fractin of dead and hot channels.
std::vector< TLine * > m_backgroundAlarmLines
lines representing alarm levels
std::vector< double > m_unpackerErrAlarmLevels
alarm levels for the fraction of unpacker errors
void updateWindowVsSlotCanvas()
Updates canvas of window_vs_slot w/ alarming.
TH1D * m_injVetoFlagFract
fraction of events w/ injection veto flag set vs.
double m_numEvents
number of events processed with TOPDQM module
std::map< std::string, int > m_bsmap
a map of boardstack names to ID's
std::vector< double > m_backgroundAlarmLevels
alarm levels for background rates [MHz/PMT]
std::map< std::string, TH1D * > m_projections
projections of injection BG
void updateBunchOffsetCanvas()
Updates canvas of bunch offset w/ alarming.
void setEpicsVariables()
Calculates and sets epics variables.
std::vector< double > m_junkHitsAlarmLevels
alarm levels for the fraction of junk hits
bool m_IsNullRun
Run type flag for null runs.
void updateNGoodHitsCanvas()
Updates canvas of number of good hits per event w/ alarming (injection BG)
TLine * m_injBGCutLine
a line denoting the cut on the number of hits for injection BG counting
std::vector< double > m_timingAlarmLevels
alarm levels for time distribution (fraction of area difference)
int getOffcialAlarmStatus(unsigned alarmState) const
Converts alarm state to official status (see EStatus of the base class)
std::vector< TH1F * > m_pmtHitRates
histograms of PMT hits per event (index = slot - 1)
TH1F * m_excludedBSHisto
histogram to show excluded boardstacks on junk fraction plot
std::map< std::string, TProfile * > m_profiles
profiles of injection BG
void updateLimits()
Updates limits defined by module parameters using EpicsPVs.
void setMiraBelleVariables(const std::string &variableName, const TH1 *histogram)
Sets MiraBelle variables from the histogram with bins corresponding to slot numbers.
MonitoringObject is a basic object to hold data for the run-dependency monitoring Run summary TCanvas...
Abstract base class for different kinds of events.