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.

The class owns the histograms. It keeps track of necessary updates which are depending on underlying histogram changes and conditions like entries, undeflow entries, events, to determine the delta update. It can stored several delta histograms (time series).

Definition at line 27 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 36 of file HistDelta.h.

36{ 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:37
std::unique_ptr< TH1 > m_lastHist
Pointer to last histogram state for check.
Definition HistDelta.h:40
int m_lastValue
last value for comparison, depending on type
Definition HistDelta.h:41
unsigned int m_amountDeltas
amount of past histograms, at least 1
Definition HistDelta.h:39
int m_parameter
parameter depending on algo, e.g.
Definition HistDelta.h:38

◆ ~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:42

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;// request beyond the number of existing deltas
110 return m_deltaHists.at(n).get();
111}
bool m_updated
if any delta was updated in this event
Definition HistDelta.h:43

◆ 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 66 of file HistDelta.h.

66{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 an 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 39 of file HistDelta.h.

39{};

◆ m_deltaHists

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

vector of histograms (max m_amountDeltas)

Definition at line 42 of file HistDelta.h.

◆ m_lastHist

std::unique_ptr<TH1> m_lastHist {nullptr}

Pointer to last histogram state for check.

Definition at line 40 of file HistDelta.h.

40{nullptr};

◆ m_lastValue

int m_lastValue {0}

last value for comparison, depending on type

Definition at line 41 of file HistDelta.h.

41{0};

◆ m_parameter

int m_parameter {0}

parameter depending on algo, e.g.

nr of entries or events

Definition at line 38 of file HistDelta.h.

38{0};

◆ m_type

EDeltaType m_type {c_Disabled}

type of delta algo

Definition at line 37 of file HistDelta.h.

37{c_Disabled};

◆ m_updated

bool m_updated {false}

if any delta was updated in this event

Definition at line 43 of file HistDelta.h.

43{false};

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