Belle II Software development
DQMHistAnalysis.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// File : DQMHistAnalysis.h
10// Description : Baseclass for histogram analysis module for DQM
11//-
12
13#pragma once
14
15#include <framework/core/Module.h>
16#include <dqm/core/MonitoringObject.h>
17#include <dqm/analysis/HistObject.h>
18#include <dqm/analysis/RefHistObject.h>
19#include <dqm/analysis/HistDelta.h>
20#include <TFile.h>
21#include <TH1.h>
22
23#include <string>
24#include <map>
25
26#ifdef _BELLE2_EPICS
27// EPICS
28#include "cadef.h"
29#endif
30
31namespace Belle2 {
41
42 public:
46 enum EStatus {
51 c_StatusError = 4
52 };
53
58 c_ColorTooFew = kGray,
59 c_ColorDefault = kWhite,
60 c_ColorGood = kGreen,
61 c_ColorWarning = kYellow,
62 c_ColorError = kRed
63 };
64
68 typedef std::map<std::string, HistObject> HistList;
72 typedef std::map<std::string, MonitoringObject> MonObjList;
73
77 typedef std::map<std::string, HistDelta> DeltaList;
78
82 typedef std::map<std::string, bool> CanvasUpdatedList;
83
87 typedef std::map<std::string, RefHistObject> RefList;
88
92 void clearlist(void);
93
94
95 private:
104
105 public:
110 private:
111
116
121
129 inline static int s_eventProcessed = 0;
130
134 inline static std::string s_runType = "";
135
140 static bool m_useEpics;
141
146 static bool m_epicsReadOnly;
147
151 static std::string m_PVPrefix;
152
153
154#ifdef _BELLE2_EPICS
156 static std::vector <chid> m_epicsChID;
158 std::map <std::string, chid> m_epicsNameToChID;
159#endif
160
168 int registerEpicsPVwithPrefix(std::string prefix, std::string pvname, std::string keyname = "");
169
170 public:
175 static /*const*/ HistList& getHistList() { return s_histList;};
176
181 static /*const*/ MonObjList& getMonObjList() { return s_monObjList;};
182
187 static const DeltaList& getDeltaList() { return s_deltaList;};
188
194
199 static /*const*/ RefList& getRefList() { return s_refList;};
200
205 static const std::string& getRunType(void) { return s_runType;};
206
211 static int getEventProcessed(void) { return s_eventProcessed;};
212
217 void setRunType(std::string& t) {s_runType = t;};
218
224
230 TCanvas* findCanvas(TString cname);
231
238 static TH1* findHist(const std::string& histname, bool onlyIfUpdated = false);
239
247 static TH1* findHist(const std::string& dirname,
248 const std::string& histname, bool onlyIfUpdated = false);
249
257 static TH1* findRefHist(const std::string& histname, int scaling = 0, const TH1* hist = nullptr);
258
267 static TH1* findRefHist(const std::string& dirname,
268 const std::string& histname, int scaling = 0, const TH1* hist = nullptr);
269
276 static TH1* scaleReference(int scaling, const TH1* hist, TH1* ref);
277
284 static TH1* findHistInFile(TFile* file, const std::string& histname);
285
292 TH1* findHistInCanvas(const std::string& hname, TCanvas** canvas = nullptr);
293
299 static MonitoringObject* findMonitoringObject(const std::string& objName);
300
307 double getSigma68(TH1* h) const;
308
309 public:
317 static bool addHist(const std::string& dirname,
318 const std::string& histname, TH1* h);
319
320 // /**
321 // * Add reference.
322 // * @param dirname The name of the directory.
323 // * @param histname The name of the histogram.
324 // * @param ref The TH1 pointer for the reference.
325 // */
326 // void addRef(const std::string& dirname,
327 // const std::string& histname, TH1* ref);
328
329
335 static MonitoringObject* getMonitoringObject(const std::string& name);
336
340 void clearCanvases(void);
341
345 static void initHistListBeforeEvent(void);
346
350 static void clearHistList(void);
351
355 static void clearRefList(void);
356
360 void resetDeltaList(void);
361
369 TH1* getDelta(const std::string& fullname, int n = 0, bool onlyIfUpdated = true);
370
379 TH1* getDelta(const std::string& dirname, const std::string& histname, int n = 0, bool onlyIfUpdated = true);
380
389 void addDeltaPar(const std::string& dirname, const std::string& histname, HistDelta::EDeltaType t, int p, unsigned int a = 1);
390
397 bool hasDeltaPar(const std::string& dirname, const std::string& histname);
398
404 void UpdateCanvas(std::string name, bool updated = true);
405
411 void UpdateCanvas(TCanvas* canvas, bool updated = true);
412
416 void ExtractRunType(std::vector <TH1*>& hs);
417
421 void ExtractEvent(std::vector <TH1*>& hs);
422
424
431 int registerEpicsPV(std::string pvname, std::string keyname = "");
432
439 int registerExternalEpicsPV(std::string pvname, std::string keyname = "");
440
446 void setEpicsPV(std::string keyname, double value);
447
453 void setEpicsPV(std::string keyname, int value);
454
460 void setEpicsStringPV(std::string keyname, std::string value);
461
467 void setEpicsPV(int index, double value);
468
474 void setEpicsPV(int index, int value);
475
481 void setEpicsStringPV(int index, std::string value);
482
488 double getEpicsPV(std::string keyname);
489
495 double getEpicsPV(int index);
496
503 std::string getEpicsStringPV(std::string keyname, bool& status);
504
511 std::string getEpicsStringPV(int index, bool& status);
512
518 int updateEpicsPVs(float timeout);
519
525 chid getEpicsPVChID(std::string keyname);
526
532 chid getEpicsPVChID(int index);
533
543 bool requestLimitsFromEpicsPVs(chid id, double& lowerAlarm, double& lowerWarn, double& upperWarn, double& upperAlarm);
544
554 bool requestLimitsFromEpicsPVs(std::string keyname, double& lowerAlarm, double& lowerWarn, double& upperWarn, double& upperAlarm);
555
565 bool requestLimitsFromEpicsPVs(int index, double& lowerAlarm, double& lowerWarn, double& upperWarn, double& upperAlarm);
566
571 void setUseEpics(bool flag) {m_useEpics = flag;};
572
577 void setUseEpicsReadOnly(bool flag) {m_epicsReadOnly = flag;};
578
583 bool getUseEpics(void) {return m_useEpics;};
584
590
594 void cleanupEpicsPVs(void);
595
600 std::string& getPVPrefix(void) {return m_PVPrefix;};
601
606 void setPVPrefix(std::string& prefix) { m_PVPrefix = prefix;};
607
615 EStatus makeStatus(bool enough, bool warn_flag, bool error_flag);
616
622 void colorizeCanvas(TCanvas* canvas, EStatus status);
623
630
634 void checkPVStatus(void);
635
641 void printPVStatus(chid pv, bool onlyError = true);
642
649 void CheckEpicsError(int state, const std::string& message, const std::string& name);
650
657 void CheckEpicsError(int state, const std::string& message, chid id);
658
659
660 // Public functions
661 public:
662
665 virtual ~DQMHistAnalysisModule() {};
666
673 std::vector <std::string> StringSplit(const std::string& s, const char delim);
674
675 // Data members
676 private:
677 };
679} // end namespace Belle2
680
The base class for the histogram analysis module.
static MonObjList s_monObjList
The list of MonitoringObjects.
TCanvas * findCanvas(TString cname)
Find canvas by name.
void printPVStatus(chid pv, bool onlyError=true)
check the status of a PVs and report if disconnected or not found
bool hasDeltaPar(const std::string &dirname, const std::string &histname)
Check if Delta histogram parameters exist for histogram.
void setPVPrefix(std::string &prefix)
set global Prefix for EPICS PVs
std::map< std::string, HistObject > HistList
The type of list of histograms.
static MonitoringObject * getMonitoringObject(const std::string &name)
Get MonitoringObject with given name (new object is created if non-existing)
std::map< std::string, MonitoringObject > MonObjList
The type of list of MonitoringObjects.
static const CanvasUpdatedList & getCanvasUpdatedList()
Get the list of the canvas update status.
void addDeltaPar(const std::string &dirname, const std::string &histname, HistDelta::EDeltaType t, int p, unsigned int a=1)
Add Delta histogram parameters.
static TH1 * findHistInFile(TFile *file, const std::string &histname)
Find histogram in specific TFile (e.g.
EStatusColor getStatusColor(EStatus status)
Return color for canvas state.
void colorizeCanvas(TCanvas *canvas, EStatus status)
Helper function for Canvas colorization.
static TH1 * scaleReference(int scaling, const TH1 *hist, TH1 *ref)
Using the original and reference, create scaled version.
static TH1 * findHist(const std::string &histname, bool onlyIfUpdated=false)
Get histogram from list (no other search).
static MonitoringObject * findMonitoringObject(const std::string &objName)
Find MonitoringObject.
void clearlist(void)
Clear all static global lists.
double getSigma68(TH1 *h) const
Helper function to compute half of the central interval covering 68% of a distribution.
EStatusColor
Status colors of histogram/canvas (corresponding to status)
@ 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.
@ c_ColorDefault
default for non-coloring
double getEpicsPV(std::string keyname)
Read value from a EPICS PV.
static int s_eventProcessed
Number of Events processed to fill histograms.
std::map< std::string, bool > CanvasUpdatedList
The type of list of canvas updated status.
std::string getEpicsStringPV(std::string keyname, bool &status)
Read value from a EPICS PV.
int registerExternalEpicsPV(std::string pvname, std::string keyname="")
Register a PV with its name and a key name.
static HistList s_histList
The list of Histograms.
bool getUseEpicsReadOnly(void)
Getter EPICS flag in read only mode.
static const std::string & getRunType(void)
Get the Run Type.
static RefList s_refList
The list of references.
static std::string s_runType
The Run type.
void setUseEpics(bool flag)
Setter for EPICS usage.
static void clearHistList(void)
Clears the list of histograms.
TH1 * getDelta(const std::string &fullname, int n=0, bool onlyIfUpdated=true)
Get Delta histogram.
std::vector< std::string > StringSplit(const std::string &s, const char delim)
Helper function for string token split.
static void clearRefList(void)
Clears the list of ref histograms.
void setRunType(std::string &t)
Set the Run Type.
std::map< std::string, HistDelta > DeltaList
The type of list of delta settings and histograms.
static RefList & getRefList()
Get the list of the reference histograms.
static TH1 * findRefHist(const std::string &histname, int scaling=0, const TH1 *hist=nullptr)
Get referencehistogram from list (no other search).
void setEpicsPV(std::string keyname, double value)
Write value to a EPICS PV.
void setUseEpicsReadOnly(bool flag)
Setter EPICS flag in read only mode.
static DeltaList s_deltaList
The list of Delta Histograms and settings.
DQMHistAnalysisModule()
Constructor / Destructor.
void checkPVStatus(void)
Check the status of all PVs and report if disconnected or not found.
std::map< std::string, RefHistObject > RefList
The type of list of references.
void setEventProcessed(int e)
Set the number of processed events.
static bool m_epicsReadOnly
Flag if to use EPICS in ReadOnly mode (for reading limits) do not set by yourself,...
std::string & getPVPrefix(void)
get global Prefix for EPICS PVs
EStatus
Status flag of histogram/canvas.
@ 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.
static bool addHist(const std::string &dirname, const std::string &histname, TH1 *h)
Add histogram.
bool getUseEpics(void)
Getter for EPICS usage.
void ExtractRunType(std::vector< TH1 * > &hs)
Extract Run Type from histogram title, called from input module.
void CheckEpicsError(int state, const std::string &message, const std::string &name)
check the return status and check PV in case of error
TH1 * findHistInCanvas(const std::string &hname, TCanvas **canvas=nullptr)
Find histogram in corresponding canvas.
static std::string m_PVPrefix
The Prefix for EPICS PVs.
static HistList & getHistList()
Get the list of the histograms.
void cleanupEpicsPVs(void)
Unsubscribe from EPICS PVs on terminate.
void clearCanvases(void)
Clear content of all Canvases.
static int getEventProcessed(void)
Get the number of processed events.
EStatus makeStatus(bool enough, bool warn_flag, bool error_flag)
Helper function to judge the status for coloring and EPICS.
static bool m_useEpics
Flag if to use EPICS do not set by yourself, use EpicsEnable module to set.
static void initHistListBeforeEvent(void)
Reset the list of histograms.
static MonObjList & getMonObjList()
Get the list of MonitoringObjects.
void ExtractEvent(std::vector< TH1 * > &hs)
Extract event processed from daq histogram, called from input module.
int registerEpicsPV(std::string pvname, std::string keyname="")
EPICS related Functions.
static const DeltaList & getDeltaList()
Get the list of the delta histograms.
void UpdateCanvas(std::string name, bool updated=true)
Mark canvas as updated (or not)
void resetDeltaList(void)
Reset Delta.
chid getEpicsPVChID(std::string keyname)
Get EPICS PV Channel Id.
bool requestLimitsFromEpicsPVs(chid id, double &lowerAlarm, double &lowerWarn, double &upperWarn, double &upperAlarm)
Get Alarm Limits from EPICS PV.
int registerEpicsPVwithPrefix(std::string prefix, std::string pvname, std::string keyname="")
Register a PV with its name and a key name.
void setEpicsStringPV(std::string keyname, std::string value)
Write string to a EPICS PV.
int updateEpicsPVs(float timeout)
Update all EPICS PV (flush to network)
static CanvasUpdatedList s_canvasUpdatedList
The list of canvas updated status.
EDeltaType
enum definition for delta algo Disabled: nothing Entries: use nr histogram entries Underflow: use ent...
Definition: HistDelta.h:32
Base class for Modules.
Definition: Module.h:72
MonitoringObject is a basic object to hold data for the run-dependency monitoring Run summary TCanvas...
Abstract base class for different kinds of events.