The Gaudi Framework  v36r0 (4abb4d13)
Histogram.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
13 #include <Gaudi/Accumulators.h>
14 #include <Gaudi/MonitoringHub.h>
15 #include <ROOT/RHist.hxx>
16 
17 #include <boost/format.hpp>
18 #include <boost/histogram/algorithm/sum.hpp>
19 #include <boost/histogram/fwd.hpp>
20 #include <gsl/span>
21 
22 #include <nlohmann/json.hpp>
23 
24 #include <array>
25 #include <cmath>
26 #include <type_traits>
27 #include <utility>
28 
30 
34  struct ExtractWeight {
35  template <typename Arithmetic>
36  constexpr decltype( auto ) operator()( const std::pair<Arithmetic, Arithmetic>& v ) const noexcept {
37  return v.second;
38  }
39  };
40 
44  struct WeightedProduct {
45  template <typename Arithmetic>
46  constexpr decltype( auto ) operator()( const std::pair<Arithmetic, Arithmetic>& v ) const noexcept {
47  return v.first * v.second;
48  }
49  };
50 
54  struct WeightedSquare {
55  template <typename Arithmetic>
56  constexpr decltype( auto ) operator()( const std::pair<Arithmetic, Arithmetic>& v ) const noexcept {
57  return v.first * v.first * v.second;
58  }
59  };
60 
67  template <atomicity Atomicity, typename Arithmetic>
69  : GenericAccumulator<std::pair<Arithmetic, Arithmetic>, Arithmetic, Atomicity, ExtractWeight> {
71  using Base::Base;
72  using Base::operator+=;
74  WeightedCountAccumulator operator+=( const Arithmetic weight ) {
75  *this += {Arithmetic{}, weight};
76  return *this;
77  }
78  Arithmetic nEntries() const { return this->value(); }
79  };
80 
87  template <atomicity Atomicity, typename Arithmetic>
89  : GenericAccumulator<std::pair<Arithmetic, Arithmetic>, Arithmetic, Atomicity, WeightedProduct> {
90  using GenericAccumulator<std::pair<Arithmetic, Arithmetic>, Arithmetic, Atomicity,
92  Arithmetic sum() const { return this->value(); }
93  };
94 
100  template <atomicity Atomicity, typename Arithmetic = double>
102  : GenericAccumulator<std::pair<Arithmetic, Arithmetic>, Arithmetic, Atomicity, WeightedSquare> {
103  using GenericAccumulator<std::pair<Arithmetic, Arithmetic>, Arithmetic, Atomicity,
105  Arithmetic sum2() const { return this->value(); };
106  };
107 
113  template <atomicity Atomicity, typename Arithmetic>
116 
122  template <atomicity Atomicity, typename Arithmetic>
125 
129  template <typename Arithmetic>
130  struct Axis {
131  Axis( unsigned int _nBins, Arithmetic _minValue, Arithmetic _maxValue, const std::string& _title = "" )
132  : nBins( _nBins )
133  , minValue( _minValue )
134  , maxValue( _maxValue )
135  , title( _title )
136  , ratio( _nBins / ( _maxValue - _minValue ) ){};
138  unsigned int nBins;
140  Arithmetic minValue, maxValue;
147  Arithmetic ratio;
148  };
149 
151  template <typename Arithmetic>
152  void to_json( nlohmann::json& j, const Axis<Arithmetic>& axis ) {
153  j = nlohmann::json{
154  {"nBins", axis.nBins}, {"minValue", axis.minValue}, {"maxValue", axis.maxValue}, {"title", axis.title}};
155  }
156 
158  template <typename Arithmetic, unsigned int ND, unsigned int NIndex = ND>
159  struct HistoInputType : std::array<Arithmetic, ND> {
160  // allow construction from set of values
161  template <class... ARGS>
162  HistoInputType( ARGS... args ) : std::array<Arithmetic, ND>{static_cast<Arithmetic>( args )...} {}
163  // The change on NIndex == 1 allow to have simpler syntax in that case, that is no tuple of one item
165  using AxisArithmeticType = Arithmetic;
166  unsigned int computeIndex( const std::array<Axis<Arithmetic>, NIndex>& axis ) const {
167  unsigned int index = 0;
168  for ( unsigned int dim = 0; dim < NIndex; dim++ ) {
169  // compute local index for a given dimension
170  int localIndex = std::floor( ( ( *this )[dim] - axis[dim].minValue ) * axis[dim].ratio ) + 1;
171  localIndex = ( localIndex < 0 )
172  ? 0
173  : ( ( (unsigned int)localIndex > axis[dim].nBins ) ? axis[dim].nBins + 1
174  : (unsigned int)( localIndex ) );
175  // compute global index. Bins are stored in a row first manner
176  index = ( dim > 0 ? ( axis[dim - 1].nBins + 2 ) : 0 ) * index + localIndex;
177  }
178  return index;
179  }
180  auto forInternalCounter() { return this->operator[]( ND - 1 ); }
181  };
182 
185  template <typename Arithmetic>
186  class HistoInputType<Arithmetic, 1> {
187  public:
189  using AxisArithmeticType = Arithmetic;
190  HistoInputType( Arithmetic a ) : value( a ) {}
191  unsigned int computeIndex( const std::array<Axis<Arithmetic>, 1>& axis ) const {
192  int index = std::floor( ( value - axis[0].minValue ) * axis[0].ratio ) + 1;
193  return index < 0 ? 0 : ( (unsigned int)index > axis[0].nBins ? axis[0].nBins + 1 : (unsigned int)index );
194  }
195  Arithmetic& operator[]( int ) { return value; }
196  operator Arithmetic() const { return value; }
197  auto forInternalCounter() { return value; }
198 
199  private:
200  Arithmetic value;
201  };
202 
204  template <typename Arithmetic, unsigned int ND, unsigned int NIndex = ND>
205  struct WeightedHistoInputType : std::pair<HistoInputType<Arithmetic, ND, NIndex>, Arithmetic> {
206  // The change on NIndex == 1 allow to have simpler syntax in that case, that is no tuple of one item
208  using AxisArithmeticType = Arithmetic;
210  unsigned int computeIndex( const std::array<Axis<Arithmetic>, NIndex>& axis ) const {
211  return this->first.computeIndex( axis );
212  }
213  auto forInternalCounter() { return std::pair( this->first.forInternalCounter(), this->second ); }
214  };
215 
230  template <atomicity Atomicity, typename InputType, typename Arithmetic, typename ND,
231  template <atomicity Ato, typename Arith> typename BaseAccumulatorT>
233  template <atomicity, typename, typename, typename, template <atomicity, typename> typename>
235 
236  public:
237  using BaseAccumulator = BaseAccumulatorT<Atomicity, Arithmetic>;
238  using AxisArithmeticType = typename InputType::AxisArithmeticType;
239  template <std::size_t... Is>
241  : m_axis{{*( axis.begin() + Is )...}}
244  reset();
245  }
246  template <atomicity ato>
251  reset();
252  }
254  accumulator( v.computeIndex( m_axis ) ) += v.forInternalCounter();
255  return *this;
256  }
257  void reset() {
258  for ( unsigned int index = 0; index < m_totNBins; index++ ) accumulator( index ).reset();
259  }
260  template <atomicity ato>
262  assert( m_totNBins == other.m_totNBins );
263  for ( unsigned int index = 0; index < m_totNBins; index++ ) {
264  accumulator( index ).mergeAndReset( std::move( other.accumulator( index ) ) );
265  }
266  }
267  auto operator[]( typename InputType::ValueType v ) {
269  }
270 
271  protected:
272  auto& axis() const { return m_axis; }
273  auto nBins( unsigned int i ) const { return m_axis[i].nBins; }
274  auto minValue( unsigned int i ) const { return m_axis[i].minValue; }
275  auto maxValue( unsigned int i ) const { return m_axis[i].maxValue; }
276  auto ratio( unsigned int i ) const { return m_axis[i].ratio; }
277  auto binValue( unsigned int i ) const { return accumulator( i ).value(); }
278  auto nEntries( unsigned int i ) const { return accumulator( i ).nEntries(); }
279  auto totNBins() const { return m_totNBins; }
280 
281  private:
282  BaseAccumulator& accumulator( unsigned int index ) const {
283  assert( index < m_totNBins );
284  return m_value[index];
285  }
286  unsigned int computeTotNBins() const {
287  unsigned int nTotBins = 1;
288  for ( unsigned int i = 0; i < ND::value; i++ ) { nTotBins *= ( m_axis[i].nBins + 2 ); }
289  return nTotBins;
290  }
294  unsigned int m_totNBins;
297  };
298 
304  template <atomicity Atomicity, typename Arithmetic, typename ND>
306  unsigned long, ND, IntegralAccumulator>;
307 
313  template <atomicity Atomicity, typename Arithmetic, typename ND>
317 
323  template <atomicity Atomicity, typename Arithmetic, typename ND>
327 
333  template <atomicity Atomicity, typename Arithmetic, typename ND>
336  Arithmetic, ND, WeightedSigmaAccumulator>;
337 
391  template <unsigned int ND, atomicity Atomicity, typename Arithmetic, const char* Type,
392  template <atomicity, typename, typename> typename Accumulator>
394  : public BufferableCounter<Atomicity, Accumulator, Arithmetic, std::integral_constant<int, ND>> {
395  public:
397  template <typename OWNER>
398  HistogramingCounterBase( OWNER* owner, std::string const& name, std::string const& title,
400  : Parent( owner, name, std::string( Type ) + ":" + typeid( Arithmetic ).name(), axis,
401  std::make_index_sequence<ND>{} )
402  , m_title( title ) {}
403  template <typename OWNER>
404  HistogramingCounterBase( OWNER* owner, std::string const& name, std::string const& title, Axis<Arithmetic> axis )
405  : HistogramingCounterBase( owner, name, title, {axis} ) {}
406  using Parent::print;
407  template <typename stream>
408  stream& printImpl( stream& o, bool /*tableFormat*/ ) const {
409  o << ND << "D Histogram with config ";
410  for ( unsigned int i = 0; i < ND; i++ ) {
411  o << this->nBins( i ) << " " << this->minValue( i ) << " " << this->maxValue( i ) << " ";
412  }
413  return o;
414  }
415  std::ostream& print( std::ostream& o, bool tableFormat = false ) const override {
416  return printImpl( o, tableFormat );
417  }
418  MsgStream& print( MsgStream& o, bool tableFormat = false ) const override { return printImpl( o, tableFormat ); }
419  nlohmann::json toJSON() const override {
420  // get all bin values and compute total nbEntries
421  using Acc = Accumulator<Atomicity, Arithmetic, std::integral_constant<int, ND>>;
423  bins.reserve( this->totNBins() );
424  unsigned int totNEntries{0};
425  for ( unsigned int i = 0; i < this->totNBins(); i++ ) {
426  bins.push_back( this->binValue( i ) );
427  totNEntries += this->nEntries( i );
428  }
429  // build json
430  return {{"type", std::string( Type ) + ":" + typeid( Arithmetic ).name()},
431  {"title", m_title},
432  {"dimension", ND},
433  {"empty", totNEntries == Arithmetic{}},
434  {"nEntries", totNEntries},
435  {"axis", this->axis()},
436  {"bins", bins}};
437  }
438 
439  private:
441  };
442 
443  namespace {
444  static const char histogramString[] = "histogram:Histogram";
445  static const char weightedHistogramString[] = "histogram:WeightedHistogram";
446  static const char profilehistogramString[] = "histogram:ProfileHistogram";
447  static const char weightedProfilehistogramString[] = "histogram:WeightedProfileHistogram";
448  } // namespace
450  template <unsigned int ND, atomicity Atomicity = atomicity::full, typename Arithmetic = double>
452 
454  template <unsigned int ND, atomicity Atomicity = atomicity::full, typename Arithmetic = double>
457 
459  template <unsigned int ND, atomicity Atomicity = atomicity::full, typename Arithmetic = double>
462 
464  template <unsigned int ND, atomicity Atomicity = atomicity::full, typename Arithmetic = double>
465  using WeightedProfileHistogram = HistogramingCounterBase<ND, Atomicity, Arithmetic, weightedProfilehistogramString,
467 
468 } // namespace Gaudi::Accumulators
Gaudi::Accumulators::Axis::minValue
Arithmetic minValue
min and max values on this axis
Definition: Histogram.h:140
Gaudi::Accumulators::ExtractWeight
A functor to extract weight, take a pair (valueTuple, weight) as input.
Definition: Histogram.h:34
std::floor
T floor(T... args)
Gaudi::Accumulators::HistogramingAccumulatorInternal::nBins
auto nBins(unsigned int i) const
Definition: Histogram.h:273
Gaudi::Accumulators::WeightedSquareAccumulator
WeightedSquareAccumulator.
Definition: Histogram.h:102
Gaudi::Accumulators::HistogramingCounterBase::HistogramingCounterBase
HistogramingCounterBase(OWNER *owner, std::string const &name, std::string const &title, std::initializer_list< Axis< Arithmetic >> axis)
Definition: Histogram.h:398
Write.stream
stream
Definition: Write.py:31
std::string
STL class.
GaudiPython.HistoUtils.nEntries
nEntries
Definition: HistoUtils.py:921
Gaudi::Accumulators::WeightedHistoInputType::forInternalCounter
auto forInternalCounter()
Definition: Histogram.h:213
std::move
T move(T... args)
Gaudi::Accumulators::HistogramingAccumulatorInternal::accumulator
BaseAccumulator & accumulator(unsigned int index) const
Definition: Histogram.h:282
Gaudi::Accumulators::WeightedCountAccumulator::nEntries
Arithmetic nEntries() const
Definition: Histogram.h:78
MonitoringHub.h
Gaudi::Accumulators::HistogramingAccumulatorInternal::mergeAndReset
void mergeAndReset(HistogramingAccumulatorInternal< ato, InputType, Arithmetic, ND, BaseAccumulatorT > &&other)
Definition: Histogram.h:261
std::pair
std::vector::reserve
T reserve(T... args)
Gaudi::Accumulators::HistogramingAccumulatorInternal::AxisArithmeticType
typename InputType::AxisArithmeticType AxisArithmeticType
Definition: Histogram.h:238
Gaudi::Accumulators::HistoInputType< Arithmetic, 1 >::value
Arithmetic value
Definition: Histogram.h:200
Gaudi::Accumulators::Axis::maxValue
Arithmetic maxValue
Definition: Histogram.h:140
Gaudi::Accumulators::Axis::nBins
unsigned int nBins
number of bins for this Axis
Definition: Histogram.h:136
Properties.long
long
(c) Copyright 1998-2020 CERN for the benefit of the LHCb and ATLAS collaborations # # This software i...
Definition: Properties.py:15
Gaudi::Accumulators::HistogramingAccumulatorInternal::binValue
auto binValue(unsigned int i) const
Definition: Histogram.h:277
std::vector
STL class.
Gaudi::Accumulators::HistogramingCounterBase
A base counter dealing with Histograms.
Definition: Histogram.h:394
Gaudi::Accumulators::IntegralAccumulator
IntegralAccumulator.
Definition: Accumulators.h:598
Gaudi::Accumulators::WeightedSumAccumulator::sum
Arithmetic sum() const
Definition: Histogram.h:92
Gaudi::Accumulators::HistogramingAccumulatorInternal::ratio
auto ratio(unsigned int i) const
Definition: Histogram.h:276
Gaudi::Accumulators::HistogramingAccumulatorInternal::operator+=
HistogramingAccumulatorInternal & operator+=(InputType v)
Definition: Histogram.h:253
Gaudi::Accumulators::AveragingAccumulatorBase
AveragingAccumulatorBase.
Definition: Accumulators.h:709
jsonFromLHCbLog.json
dictionary json
Definition: jsonFromLHCbLog.py:86
Gaudi::Accumulators::WeightedSumAccumulator
WeightedSumAccumulator.
Definition: Histogram.h:89
Gaudi::Accumulators::HistogramingCounterBase::m_title
std::string const m_title
Definition: Histogram.h:440
Gaudi::Accumulators::Axis
Definition of an Histogram Axis.
Definition: Histogram.h:130
Gaudi::Accumulators::HistoInputType::HistoInputType
HistoInputType(ARGS... args)
Definition: Histogram.h:162
std::vector::push_back
T push_back(T... args)
Gaudi::Accumulators::HistoInputType::computeIndex
unsigned int computeIndex(const std::array< Axis< Arithmetic >, NIndex > &axis) const
Definition: Histogram.h:166
Gaudi::Accumulators::WeightedHistoInputType::computeIndex
unsigned int computeIndex(const std::array< Axis< Arithmetic >, NIndex > &axis) const
Definition: Histogram.h:210
Gaudi::Accumulators::HistoInputType
small class used as InputType for regular Histograms
Definition: Histogram.h:159
Gaudi::Accumulators::HistoInputType< Arithmetic, 1 >::AxisArithmeticType
Arithmetic AxisArithmeticType
Definition: Histogram.h:189
TimingHistograms.name
name
Definition: TimingHistograms.py:23
Gaudi::Accumulators::HistogramingAccumulatorInternal::BaseAccumulator
BaseAccumulatorT< Atomicity, Arithmetic > BaseAccumulator
Definition: Histogram.h:237
Gaudi::Accumulators::HistogramingCounterBase::toJSON
nlohmann::json toJSON() const override
Basic JSON export for Gaudi::Monitoring::Hub support.
Definition: Histogram.h:419
std::ostream
STL class.
Gaudi::Accumulators::HistogramingAccumulatorInternal::totNBins
auto totNBins() const
Definition: Histogram.h:279
Gaudi::Accumulators::HistogramingAccumulatorInternal::operator[]
auto operator[](typename InputType::ValueType v)
Definition: Histogram.h:267
Gaudi::Accumulators::WeightedHistoInputType
small class used as InputType for weighted Histograms
Definition: Histogram.h:205
Gaudi::Accumulators::HistogramingCounterBase::printImpl
stream & printImpl(stream &o, bool) const
Definition: Histogram.h:408
Gaudi::Accumulators::GenericAccumulator< std::pair< Arithmetic, Arithmetic >, Arithmetic, Atomicity, WeightedProduct >::GenericAccumulator
friend class GenericAccumulator
Definition: Accumulators.h:437
std::array
STL class.
Gaudi::Accumulators::HistogramingAccumulatorInternal::maxValue
auto maxValue(unsigned int i) const
Definition: Histogram.h:275
Gaudi::Accumulators::HistogramingCounterBase::print
std::ostream & print(std::ostream &o, bool tableFormat=false) const override
prints the counter to a stream
Definition: Histogram.h:415
Gaudi::Accumulators::HistoInputType::forInternalCounter
auto forInternalCounter()
Definition: Histogram.h:180
Gaudi::Accumulators::HistogramingAccumulatorInternal::axis
auto & axis() const
Definition: Histogram.h:272
Gaudi::Accumulators::HistogramingAccumulatorInternal::nEntries
auto nEntries(unsigned int i) const
Definition: Histogram.h:278
Gaudi::Accumulators::HistogramingAccumulatorInternal::reset
void reset()
Definition: Histogram.h:257
Gaudi::Accumulators::HistogramingAccumulatorInternal::HistogramingAccumulatorInternal
HistogramingAccumulatorInternal(std::initializer_list< Axis< AxisArithmeticType >> axis, std::index_sequence< Is... >)
Definition: Histogram.h:240
Gaudi::Accumulators::HistoInputType< Arithmetic, 1 >::forInternalCounter
auto forInternalCounter()
Definition: Histogram.h:197
Gaudi::Accumulators::GenericAccumulator
Generic Accumulator, templated by.
Definition: Accumulators.h:435
Gaudi::Accumulators::HistogramingAccumulatorInternal::minValue
auto minValue(unsigned int i) const
Definition: Histogram.h:274
MsgStream
Definition: MsgStream.h:34
Gaudi::Accumulators::HistogramingAccumulatorInternal::HistogramingAccumulatorInternal
HistogramingAccumulatorInternal(construct_empty_t, const HistogramingAccumulatorInternal< ato, InputType, Arithmetic, ND, BaseAccumulatorT > &other)
Definition: Histogram.h:247
Gaudi::Accumulators::to_json
void to_json(nlohmann::json &j, const Axis< Arithmetic > &axis)
automatic conversion of the Axis type to json
Definition: Histogram.h:152
Gaudi::Accumulators::GenericAccumulator< std::pair< Arithmetic, Arithmetic >, Arithmetic, Atomicity, ExtractWeight >::value
OutputType value() const
Definition: Accumulators.h:461
Gaudi::Accumulators::WeightedProduct
A Product functor, take a pair (value, weight) as input.
Definition: Histogram.h:44
Gaudi::Accumulators::BufferableCounter
An empty ancester of all counters that provides a buffer method that returns a buffer on itself Also ...
Definition: Accumulators.h:867
Gaudi::Accumulators::Axis::Axis
Axis(unsigned int _nBins, Arithmetic _minValue, Arithmetic _maxValue, const std::string &_title="")
Definition: Histogram.h:131
HistoDumpEx.v
v
Definition: HistoDumpEx.py:27
Gaudi::Accumulators::HistogramingAccumulatorInternal
Internal Accumulator class dealing with Histograming.
Definition: Histogram.h:232
Accumulators.h
Gaudi::Accumulators::HistoInputType< Arithmetic, 1 >::computeIndex
unsigned int computeIndex(const std::array< Axis< Arithmetic >, 1 > &axis) const
Definition: Histogram.h:191
Gaudi::Accumulators
Definition: Histogram.h:29
Gaudi::Accumulators::HistoInputType< Arithmetic, 1 >::HistoInputType
HistoInputType(Arithmetic a)
Definition: Histogram.h:190
Gaudi::Accumulators::HistoInputType::AxisArithmeticType
Arithmetic AxisArithmeticType
Definition: Histogram.h:165
Containers::array
struct GAUDI_API array
Parametrisation class for redirection array - like implementation.
Definition: KeyedObjectManager.h:37
gaudirun.args
args
Definition: gaudirun.py:319
Gaudi::Accumulators::HistogramingAccumulatorInternal::m_value
std::unique_ptr< BaseAccumulator[]> m_value
Histogram content.
Definition: Histogram.h:296
Tuples::Type
Type
Definition: TupleObj.h:89
std
STL namespace.
Gaudi::Accumulators::WeightedSquare
A WeightedSquare functor, take a pair (value, weight) as input.
Definition: Histogram.h:54
Gaudi::Accumulators::HistogramingAccumulatorInternal::m_totNBins
unsigned int m_totNBins
total number of bins in this histogram, under and overflow included
Definition: Histogram.h:294
Gaudi::Accumulators::SigmaAccumulatorBase
SigmaAccumulatorBase.
Definition: Accumulators.h:738
Gaudi::Accumulators::Buffer
Buffer is a non atomic Accumulator which, when it goes out-of-scope, updates the underlying thread-sa...
Definition: Accumulators.h:806
Gaudi::Accumulators::atomicity
atomicity
Defines atomicity of the accumulators.
Definition: Accumulators.h:237
Gaudi::Accumulators::HistogramingCounterBase::HistogramingCounterBase
HistogramingCounterBase(OWNER *owner, std::string const &name, std::string const &title, Axis< Arithmetic > axis)
Definition: Histogram.h:404
Gaudi::Accumulators::Axis::ratio
Arithmetic ratio
precomputed ratio to convert a value into bin number equal to nBins/(maxValue-minValue)
Definition: Histogram.h:147
Gaudi::Accumulators::construct_empty_t
constant used to disambiguate construction of an empty Accumulator versus the copy constructor.
Definition: Accumulators.h:410
Gaudi::Accumulators::WeightedCountAccumulator
WeightedCountAccumulator.
Definition: Histogram.h:69
std::size_t
Gaudi::Accumulators::WeightedHistoInputType::AxisArithmeticType
Arithmetic AxisArithmeticType
Definition: Histogram.h:208
Gaudi::Accumulators::PrintableCounter::print
virtual std::ostream & print(std::ostream &, bool tableFormat=false) const =0
prints the counter to a stream
Gaudi::Accumulators::HistogramingAccumulatorInternal::m_axis
std::array< Axis< AxisArithmeticType >, ND::value > m_axis
set of Axis of this Histogram
Definition: Histogram.h:292
std::unique_ptr< BaseAccumulator[]>
Gaudi::Accumulators::WeightedSquareAccumulator::sum2
Arithmetic sum2() const
Definition: Histogram.h:105
Gaudi::Accumulators::WeightedCountAccumulator::operator+=
WeightedCountAccumulator operator+=(const Arithmetic weight)
Definition: Histogram.h:74
Gaudi::Accumulators::Axis::title
std::string title
title of this axis
Definition: Histogram.h:142
std::array< Arithmetic, ND >::operator[]
Arithmetic operator[](Arithmetic ... args)
Gaudi::Accumulators::HistogramingAccumulatorInternal::computeTotNBins
unsigned int computeTotNBins() const
Definition: Histogram.h:286
Gaudi::Accumulators::HistoInputType< Arithmetic, 1 >::operator[]
Arithmetic & operator[](int)
Definition: Histogram.h:195
Gaudi::Accumulators::HistogramingCounterBase::print
MsgStream & print(MsgStream &o, bool tableFormat=false) const override
Definition: Histogram.h:418
std::initializer_list