Belle II Software development
HistDelta Class Reference

Class to keep track of delta histograms. More...

#include <HistDelta.h>

Public Types

enum  EDeltaType {
  c_Disabled = 0 ,
  c_Entries = 1 ,
  c_Underflow = 2 ,
  c_Events = 3
}
 enum definition for delta algo Disabled: nothing Entries: use nr histogram entries Underflow: use entries in histogram underflow bin Events: use nr processed events from framework (but: unreliable for normalization as the number of events for this specific histogram may differ) More...
 

Public Member Functions

 HistDelta (EDeltaType t=c_Disabled, int p=0, unsigned int a=0)
 Constructor.
 
 ~HistDelta ()
 Destructor.
 
void set (EDeltaType t, int p, unsigned int a)
 Parameter setter.
 
void setNotUpdated (void)
 Set not-updated yet status.
 
void update (const TH1 *hist)
 Check if update of delta histogram is necessary.
 
void reset (void)
 Reset histogram and deltas, not the parameters.
 
TH1 * getDelta (unsigned int n=0, bool onlyIfUpdated=true) const
 Get Delta Histogram.
 

Public Attributes

EDeltaType m_type {c_Disabled}
 type of delta algo
 
int m_parameter {0}
 parameter depending on algo, e.g.
 
unsigned int m_amountDeltas {}
 amount of past histograms, at least 1
 
std::unique_ptr< TH1 > m_lastHist {nullptr}
 Pointer to last histogram state for check.
 
int m_lastValue {0}
 last value for comparison, depending on type
 
std::vector< std::unique_ptr< TH1 > > m_deltaHists
 vector of histograms (max m_amountDeltas)
 
bool m_updated {false}
 if any delta was updated in this event
 

Detailed Description

Class to keep track of delta histograms.

Definition at line 23 of file HistDelta.h.

Member Enumeration Documentation

◆ EDeltaType

enum EDeltaType

enum definition for delta algo Disabled: nothing Entries: use nr histogram entries Underflow: use entries in histogram underflow bin Events: use nr processed events from framework (but: unreliable for normalization as the number of events for this specific histogram may differ)

Definition at line 32 of file HistDelta.h.

32{ c_Disabled = 0, c_Entries = 1, c_Underflow = 2, c_Events = 3};

Constructor & Destructor Documentation

◆ HistDelta()

HistDelta ( EDeltaType t = c_Disabled,
int p = 0,
unsigned int a = 0 )
explicit

Constructor.

Parameters
ttype
pparameter for type
aamount of deletas in the past

Definition at line 15 of file HistDelta.cc.

15 : m_lastHist{nullptr}
16{
17 m_type = t;
18 m_parameter = p;
20 m_lastValue = 0; // implied
21}
EDeltaType m_type
type of delta algo
Definition HistDelta.h:33
std::unique_ptr< TH1 > m_lastHist
Pointer to last histogram state for check.
Definition HistDelta.h:36
int m_lastValue
last value for comparison, depending on type
Definition HistDelta.h:37
unsigned int m_amountDeltas
amount of past histograms, at least 1
Definition HistDelta.h:35
int m_parameter
parameter depending on algo, e.g.
Definition HistDelta.h:34

◆ ~HistDelta()

~HistDelta ( )

Destructor.

Definition at line 23 of file HistDelta.cc.

24{
25 m_lastHist = nullptr;
26 m_deltaHists.clear();
27}
std::vector< std::unique_ptr< TH1 > > m_deltaHists
vector of histograms (max m_amountDeltas)
Definition HistDelta.h:38

Member Function Documentation

◆ getDelta()

TH1 * getDelta ( unsigned int n = 0,
bool onlyIfUpdated = true ) const

Get Delta Histogram.

Parameters
nnumber of delta into the past, 0 is most recent one
onlyIfUpdatedreq only updated deltas, return nullptr otherwise
Returns
Found histogram or nullptr

Definition at line 106 of file HistDelta.cc.

107{
108 if (onlyIfUpdated && !m_updated) return nullptr;// not updated, but requested
109 if (n >= m_deltaHists.size()) return nullptr;
110 return m_deltaHists.at(n).get();
111}
bool m_updated
if any delta was updated in this event
Definition HistDelta.h:39

◆ reset()

void reset ( void )

Reset histogram and deltas, not the parameters.

Definition at line 99 of file HistDelta.cc.

100{
101 m_deltaHists.clear();
102 if (m_lastHist) m_lastHist->Reset();
103 m_lastValue = 0;
104}

◆ set()

void set ( EDeltaType t,
int p,
unsigned int a )

Parameter setter.

Parameters
ttype
pparameter for type
aamount of deltas in the past

Definition at line 29 of file HistDelta.cc.

30{
31 m_type = t;
32 m_parameter = p;
34 m_lastHist = nullptr;
35 m_lastValue = 0;
36 m_deltaHists.clear();
37}

◆ setNotUpdated()

void setNotUpdated ( void )
inline

Set not-updated yet status.

Definition at line 62 of file HistDelta.h.

62{m_updated = false;};

◆ update()

void update ( const TH1 * hist)

Check if update of delta histogram is necessary.

Parameters
histpointer to histogram

else { not (yet) enough data for update special case of initial sampling is not covered in this code -> leave it up to the user code e.g. if getDelta(0) returns a nullptr, the user code writer should decide if it is useful to use the basic histogram }

Definition at line 39 of file HistDelta.cc.

40{
41 m_updated = false;
42 if (currentHist == nullptr) return; // this won't make sense
43 gROOT->cd(); // make sure we dont accidentally write the histograms to a open file
44 // cover first update after start
45 if (m_lastHist == nullptr) {
46 m_lastHist = std::unique_ptr<TH1>(static_cast<TH1*>(currentHist->Clone()));
47 m_lastHist->SetName(TString(currentHist->GetName()) + "_last");
48 m_lastHist->Reset();
49 m_updated = true;
50 }
51 // now check if need to update m_deltaHists
52 bool need_update = false;
53 switch (m_type) {
54 case c_Entries:
55 // default case, look at the entries in the histogram
56 need_update = currentHist->GetEntries() - m_lastHist->GetEntries() >= m_parameter;
57 break;
58 case c_Underflow:
59 // here we misuse underflow as event counter in some histograms, e.g. PXD
60 need_update = currentHist->GetBinContent(0) - m_lastHist->GetBinContent(0) >= m_parameter;
61 break;
62 case c_Events:
63 // use event processed counter
65 if (need_update) m_lastValue = DQMHistAnalysisModule::getEventProcessed(); // update last value
66 break;
67 default:
68 // any unsupported types map to case 0(Disabled), and will disable delta for this hist
69 [[fallthrough]];
70 case c_Disabled:
71 break;
72 }
73
74 if (need_update) {
75 m_updated = true;
76 auto delta = static_cast<TH1*>(currentHist->Clone());
77 delta->SetName(TString(delta->GetName()) + "_delta");
78 delta->Add(m_lastHist.get(), -1.);
79
80 // we use this as a fifo, but cannot use queue as we need the random access
81 // maybe use deque?
82 m_deltaHists.emplace(m_deltaHists.begin(), delta);
83 if (m_deltaHists.size() > m_amountDeltas) {
84 // remove (and delete) last element
85 m_deltaHists.erase(m_deltaHists.begin() + m_deltaHists.size() - 1);
86 }
87 m_lastHist->Reset();
88 m_lastHist->Add(currentHist);
89 }
97}
static int getEventProcessed(void)
Get the number of processed events.

Member Data Documentation

◆ m_amountDeltas

unsigned int m_amountDeltas {}

amount of past histograms, at least 1

Definition at line 35 of file HistDelta.h.

35{};

◆ m_deltaHists

std::vector<std::unique_ptr<TH1> > m_deltaHists

vector of histograms (max m_amountDeltas)

Definition at line 38 of file HistDelta.h.

◆ m_lastHist

std::unique_ptr<TH1> m_lastHist {nullptr}

Pointer to last histogram state for check.

Definition at line 36 of file HistDelta.h.

36{nullptr};

◆ m_lastValue

int m_lastValue {0}

last value for comparison, depending on type

Definition at line 37 of file HistDelta.h.

37{0};

◆ m_parameter

int m_parameter {0}

parameter depending on algo, e.g.

nr of entries or events

Definition at line 34 of file HistDelta.h.

34{0};

◆ m_type

EDeltaType m_type {c_Disabled}

type of delta algo

Definition at line 33 of file HistDelta.h.

33{c_Disabled};

◆ m_updated

bool m_updated {false}

if any delta was updated in this event

Definition at line 39 of file HistDelta.h.

39{false};

The documentation for this class was generated from the following files: