Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
HistogramFiller.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef AthenaMonitoringKernel_HistogramFiller_h
6 #define AthenaMonitoringKernel_HistogramFiller_h
7 
8 #include <functional>
9 #include <memory>
10 #include <mutex>
11 #include <vector>
13 
17 
18 class TProfile;
19 class TProfile2D;
20 
21 namespace Monitored {
22 
23  // Forward declare generic histogram filler (see HistogramFillerUtils.h)
24  namespace detail {
25  template<typename H, typename W, typename M, typename ...Ms>
26  void doFill(H* hist, W weight, size_t i, const M& m1, const Ms&... m);
27  template<typename W>
28  void doFill(TProfile*, W, size_t, const double&, const char* const&);
29  template<typename W>
30  void doFill(TProfile*, W, size_t, const char* const&, const char* const&);
31  template<typename W>
32  void doFill(TProfile2D*, W, size_t, const double&, const double&, const char* const&);
33  template<typename W>
34  void doFill(TProfile2D*, W, size_t, const char* const&, const char* const&, const char* const&);
35  template<typename W>
36  void doFill(TProfile2D*, W, size_t, const char* const&, const double&, const char* const&);
37  template<typename W>
38  void doFill(TProfile2D*, W, size_t, const double&, const char* const&, const char* const&);
39  }
40 
45  public:
51  HistogramFiller(const HistogramDef& histDef, std::shared_ptr<IHistogramProvider> histogramProvider)
52  : m_histDef(new HistogramDef(histDef)),
53  m_histogramProvider(std::move(histogramProvider)) {}
60  : m_histDef(hf.m_histDef),
62 
66  virtual ~HistogramFiller() {}
67 
68 
72  struct VariablesPack {
74  VariablesPack( const std::initializer_list<const Monitored::IMonitoredVariable*>& v)
75  :var( v ) {}
76 
80  size_t size () const {
81  return var.size() - std::count( var.begin(), var.end(), nullptr );
82  }
83 
87  inline void reset() {
88  std::fill( var.begin(), var.end(), nullptr );
89  cut = nullptr;
90  weight = nullptr;
91  }
92 
96  inline void set( unsigned index, const IMonitoredVariable* ptr ) {
97  if ( ATH_UNLIKELY( var.size() <= index ) ) {
98  var.resize(index+1);
99  }
100  var[index] = ptr;
101  }
102 
106  std::vector<std::string> names() const {
107  std::vector<std::string> r;
108  for ( const auto* v: var )
109  if ( v != nullptr )
110  r.push_back( v->name() );
111  return r;
112  }
113 
114  std::vector<const Monitored::IMonitoredVariable*> var = { nullptr, nullptr, nullptr, nullptr };
117  };
118 
123  virtual unsigned fill( const VariablesPack& ) const = 0;
124 
128  void touch() const {
129  histogram<void>();
130  }
131 
132 
133  const std::vector<std::string>& histogramVariablesNames() const {
134  return m_histDef->name;
135  }
136 
137  const std::string& histogramWeightName() const {
138  return m_histDef->weight;
139  }
140 
141  const std::string& histogramCutMaskName() const {
142  return m_histDef->cutMask;
143  }
144 
145  const std::unique_lock<std::mutex> getLock() const {
146  return std::unique_lock(m_lock);
147  }
148 
149  protected:
150  template <class H>
151  H* histogram() const {
152  return static_cast<H*>(m_histogramProvider->histogram());
153  }
154 
155  // convenience function to provide a function that interprets the cutmask
156  std::pair<size_t, std::function<bool(size_t)>> getCutMaskFunc(const Monitored::IMonitoredVariable* mask ) const {
157  std::function<bool(size_t)> cutMaskValue = [] (size_t){ return true; }; // default is true
158  size_t maskSize = 1;
159  if ( mask != nullptr ) {
160  maskSize = mask->size();
161  if (maskSize == 1) {
162  if (!mask->get(0)) {
163  // globally fails cut; zero first argument is a signal that one can abort
164  return std::make_pair(0, [](size_t){ return false; });
165  // otherwise, default cutMaskValue is sufficient
166  }
167  } else {
168  return std::make_pair(maskSize, [mask](size_t i){ return static_cast<bool>(mask->get(i)); });
169  }
170  }
171  return std::make_pair(maskSize, cutMaskValue);
172  }
173 
184  template<class H, typename W, typename C, typename ...Ms>
185  unsigned fill(W weight, C cut, const Ms&... m) const {
186  auto hist = this->histogram<H>();
187 
188  size_t i = 0;
189  for (; i < std::max({m.size()...}); ++i ) {
190  if ( cut(i) ) {
191  detail::doFill(hist, weight, i, m...);
192  }
193  }
194  return i;
195  }
196 
197  std::shared_ptr<HistogramDef> m_histDef;
198  std::shared_ptr<IHistogramProvider> m_histogramProvider;
200 
201  private:
203  };
204 }
205 #endif /* AthenaMonitoringKernel_HistogramFiller_HistogramFiller_h */
beamspotman.r
def r
Definition: beamspotman.py:676
IHistogramProvider.h
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
Monitored::HistogramFiller::histogramVariablesNames
const std::vector< std::string > & histogramVariablesNames() const
Definition: HistogramFiller.h:133
Monitored::HistogramFiller::histogram
H * histogram() const
Definition: HistogramFiller.h:151
Monitored::HistogramFiller::m_histDef
std::shared_ptr< HistogramDef > m_histDef
Definition: HistogramFiller.h:197
IMonitoredVariable.h
Monitored::HistogramFiller::histogramWeightName
const std::string & histogramWeightName() const
Definition: HistogramFiller.h:137
Monitored::HistogramFiller::m_histogramProvider
std::shared_ptr< IHistogramProvider > m_histogramProvider
Definition: HistogramFiller.h:198
index
Definition: index.py:1
JetTiledMap::W
@ W
Definition: TiledEtaPhiMap.h:44
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
HistogramDef.h
plotmaker.hist
hist
Definition: plotmaker.py:148
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
Monitored::HistogramFiller::VariablesPack::cut
const Monitored::IMonitoredVariable * cut
pointer to cut mask variable, typically absent
Definition: HistogramFiller.h:116
Monitored::HistogramFiller::getLock
const std::unique_lock< std::mutex > getLock() const
Definition: HistogramFiller.h:145
Monitored::HistogramFiller::fill
unsigned fill(W weight, C cut, const Ms &... m) const
Fill histogram from IMonitoredVariable.
Definition: HistogramFiller.h:185
detail
Definition: extract_histogram_tag.cxx:14
ATH_UNLIKELY
#define ATH_UNLIKELY(x)
Definition: AthUnlikelyMacros.h:17
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
Monitored::HistogramDef
the internal class used to keep parsed Filler properties
Definition: HistogramDef.h:15
Monitored::HistogramFiller::HistogramFiller
HistogramFiller(const HistogramFiller &hf)
Copy constructor.
Definition: HistogramFiller.h:59
Monitored::HistogramFiller::VariablesPack::set
void set(unsigned index, const IMonitoredVariable *ptr)
sets monitored variable at the index (may need to reszie vector of variables)
Definition: HistogramFiller.h:96
Monitored::HistogramFiller::VariablesPack::VariablesPack
VariablesPack()
Definition: HistogramFiller.h:73
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:189
AthUnlikelyMacros.h
Monitored::HistogramFiller::VariablesPack::weight
const Monitored::IMonitoredVariable * weight
pointer to weight variable, typically absent
Definition: HistogramFiller.h:115
Monitored::HistogramFiller::VariablesPack
helper class to pass variables to fillers
Definition: HistogramFiller.h:72
Monitored::detail::doFill
void doFill(H *hist, W weight, size_t i, const M &m1, const Ms &... m)
Perform (arbitrary dimension) histogram fill with weight.
Definition: HistogramFillerUtils.h:164
Monitored::IMonitoredVariable
Definition: IMonitoredVariable.h:14
H
#define H(x, y, z)
Definition: MD5.cxx:114
ROBbits::maskSize
const uint32_t maskSize
Definition: TrigMonROBData.cxx:17
python.changerun.m1
m1
Definition: changerun.py:32
lumiFormat.i
int i
Definition: lumiFormat.py:85
python.TrigEgammaMonitorHelper.TProfile
def TProfile(*args, **kwargs)
Definition: TrigEgammaMonitorHelper.py:81
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
Monitored::HistogramFiller::histogramCutMaskName
const std::string & histogramCutMaskName() const
Definition: HistogramFiller.h:141
Monitored::HistogramFiller::VariablesPack::size
size_t size() const
number of variables in the pack ( not counting the weight and mask )
Definition: HistogramFiller.h:80
BindingsTest.cut
cut
This script demonstrates how to call a C++ class from Python Also how to use PyROOT is shown.
Definition: BindingsTest.py:13
Monitored::HistogramFiller::fill
virtual unsigned fill(const VariablesPack &) const =0
Method that actually fills the ROOT object.
Monitored::HistogramFiller::VariablesPack::names
std::vector< std::string > names() const
names of all variables stored
Definition: HistogramFiller.h:106
fill
void fill(H5::Group &out_file, size_t iterations)
Definition: test-hdf5-writer.cxx:95
Monitored::HistogramFiller::m_lock
std::mutex m_lock
Definition: HistogramFiller.h:199
Monitored::HistogramFiller
Base class for all histogram fillers.
Definition: HistogramFiller.h:44
Monitored::HistogramFiller::operator=
HistogramFiller & operator=(HistogramFiller const &)=delete
python.PyAthena.v
v
Definition: PyAthena.py:154
Monitored::HistogramFiller::VariablesPack::var
std::vector< const Monitored::IMonitoredVariable * > var
storage for variables, default size of 4, serves all histograming uses
Definition: HistogramFiller.h:114
DeMoScan.index
string index
Definition: DeMoScan.py:364
Monitored::HistogramFiller::touch
void touch() const
Ensure histogram exists.
Definition: HistogramFiller.h:128
Monitored::HistogramFiller::VariablesPack::reset
void reset()
removes all monitored variables
Definition: HistogramFiller.h:87
Monitored::HistogramFiller::VariablesPack::VariablesPack
VariablesPack(const std::initializer_list< const Monitored::IMonitoredVariable * > &v)
Definition: HistogramFiller.h:74
Monitored::HistogramFiller::getCutMaskFunc
std::pair< size_t, std::function< bool(size_t)> > getCutMaskFunc(const Monitored::IMonitoredVariable *mask) const
Definition: HistogramFiller.h:156
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
Monitored::HistogramFiller::HistogramFiller
HistogramFiller(const HistogramDef &histDef, std::shared_ptr< IHistogramProvider > histogramProvider)
Default constructor.
Definition: HistogramFiller.h:51
Monitored::HistogramFiller::~HistogramFiller
virtual ~HistogramFiller()
Virtual destructor.
Definition: HistogramFiller.h:66