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
46
50 void initialize() override final;
51
55 void beginRun() override final;
56
60 void event() override final;
61
65 void endRun() override final;
66
70 void terminate() override final;
71
72
73 private:
74
79 c_Gray = 0, // undefined
80 c_Green = 1, // good
81 c_Yellow = 2, // warning
82 c_Red = 3 // alarm
83 };
84
89
94
99
103 void updateEventT0Canvas();
104
109
113 void updateTimingCanvas();
114
121 bool sameHistDefinition(TH1* h1, TH1* h2);
122
127 const TH1F* makeDeadAndHotFractionsPlot();
128
133 void makePhotonYieldsAndBGRatePlots(const TH1F* activeFraction);
134
139
145 void setZAxisRange(const std::string& name, double scale);
146
153 void makeBGSubtractedTimingPlot(const std::string& name, const TH2F* trackHits, int slot);
154
159
164
171 void makeFlagFractPlot(const std::string& hname, TH1* histogram, TCanvas* canvas);
172
178 void setMiraBelleVariables(const std::string& variableName, const TH1* histogram);
179
187 int getAlarmState(double value, const std::vector<double>& alarmLevels, bool bigRed = true) const;
188
194 int getAlarmColor(unsigned alarmState) const
195 {
196 if (alarmState < m_alarmColors.size()) return m_alarmColors[alarmState];
197 return m_alarmColors[c_Gray];
198 }
199
205 int getOffcialAlarmStatus(unsigned alarmState) const
206 {
207 if (alarmState < m_officialStates.size()) return m_officialStates[alarmState];
208 return c_StatusDefault;
209 }
210
219 void setAlarmLines(const std::vector<double>& alarmLevels, double xmin, double xmax, std::vector<TLine*>& alarmLines,
220 bool bigRed = true);
221
225 void setAlarmLines();
226
232 std::pair<double, double> getDeadAndHotCuts(const TH1* h);
233
237 void setEpicsVariables();
238
243 void updateLimits();
244
249 void setIncludedBoardstacks(const std::vector<std::string>& excludedBoardstacks);
250
251 // module parameters
252
253 std::vector<int> m_asicWindowsBand = {215, 235};
254 std::vector<double> m_asicWindowsAlarmLevels = {0.002, 0.02};
255 std::vector<double> m_eventMonitorAlarmLevels = {1e-4, 2e-3};
256 std::vector<double> m_junkHitsAlarmLevels = {0.05, 0.25};
257 std::vector<double> m_deadChannelsAlarmLevels = {0.1, 0.35};
258 std::vector<double> m_backgroundAlarmLevels = {5.0, 10.0};
259 std::vector<double> m_photonYieldsAlarmLevels = {15.0, 25.0};
260 std::vector<std::string> m_excludedBoardstacks;
261 std::string m_pvPrefix;
262
263 std::vector<double> m_injectionBGAlarmLevels = {5, 10};
264 std::vector<double> m_timingAlarmLevels = {0.15, 0.30};
265 std::vector<double> m_eventT0MeanAlarmLevels = {8, 20};
266 std::vector<double> m_eventT0RmsAlarmLevels = {10, 20};
267 std::vector<double> m_offsetMeanAlarmLevels = {0.2, 0.5};
268 std::vector<double> m_offsetRmsAlarmLevels = {0.25, 0.50};
269
270 // alarms etc.
271
274 std::vector<bool> m_includedBoardstacks;
275 std::map<std::string, int> m_bsmap;
277 double m_averageRate = 0;
278
279 bool m_IsNullRun = false;
280 std::string m_runType;
281 double m_numEvents = 0;
282
283 // new histogram and canvases
284
285 TH1D* m_photonYields = nullptr;
286 TH1D* m_backgroundRates = nullptr;
287 TCanvas* m_c_photonYields = nullptr;
288 TCanvas* m_c_backgroundRates = nullptr;
289
290 TH1F* m_hotFraction = nullptr;
291 TH1F* m_deadFraction = nullptr;
292 TH1F* m_excludedFraction = nullptr;
293 TH1F* m_activeFraction = nullptr;
294 THStack* m_stack = nullptr;
295 TLegend* m_legend = nullptr;
296 TCanvas* m_c_deadAndHot = nullptr;
297
298 TH1F* m_junkFraction = nullptr;
299 TH1F* m_excludedBSHisto = nullptr;
300 TCanvas* m_c_junkFraction = nullptr;
301
302 std::vector<TH1F*> m_pmtHitRates;
303 std::vector<TCanvas*> m_c_pmtHitRates;
304
305 std::map<std::string, TCanvas*> m_c_injBGs;
306 std::map<std::string, TProfile*> m_profiles;
307 std::map<std::string, TH1D*> m_projections;
308
309 TH1D* m_skipProcFlagFract = nullptr;
310 TH1D* m_injVetoFlagFract = nullptr;
311 TCanvas* m_c_skipProcFlagFract = nullptr;
312 TCanvas* m_c_injVetoFlagFract = nullptr;
313
314 // graphic primitives
315
316 std::vector<TLine*> m_asicWindowsBandLines;
317 std::vector<TLine*> m_verticalLines;
318 std::vector<TLine*> m_junkHitsAlarmLines;
319 std::vector<TLine*> m_deadChannelsAlarmLines;
320 std::vector<TLine*> m_backgroundAlarmLines;
321 std::vector<TLine*> m_photonYieldsAlarmLines;
322 TLine* m_injBGCutLine = nullptr;
323
324 TPaveText* m_text1 = nullptr;
325 TPaveText* m_text2 = nullptr;
326 TPaveText* m_text3 = nullptr;
327 TPaveText* m_text4 = nullptr;
328
329 // MiraBelle
330
331 std::map<std::string, double> m_mirabelleVariables;
333
334 };
335
336} // end namespace Belle2
337
@ 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.
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 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.
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.
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
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
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::vector< TLine * > m_verticalLines
vertical lines splitting slots
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.
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
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.
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.
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.
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
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.