ATLAS Offline Software
CaloSum.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef CALOEVENT_CALOSUM_H
6 #define CALOEVENT_CALOSUM_H
7 
9 #include "CaloGeoHelpers/CaloSampling.h"
10 
11 #include <utility>
12 #include <vector>
13 #include <map>
14 
15 class CaloCell;
16 
17 class CaloSum
18 {
19  public:
20 
22  enum CaloRegion
23  {
24  Central = 0x01,
25  EndCap = 0x02,
26  Forward = 0x04,
27  Em = 0x08,
28  Had = 0x10,
29  UnknownRegion = 0xff
30  };
31 
34  {
35  E = 0x01,
36  EDensity = 0x02,
37  EFraction = 0x04,
38  Et = 0x08,
39  EtFraction = 0x10,
40  UnknownType = 0xff
41  };
42 
44  typedef std::pair<CaloRegion,CaloSampling::CaloSample> key_t;
45 
47  typedef std::vector<double> data_t;
51  typedef data_t::const_iterator data_const_iter_t;
52 
54  typedef std::vector<data_t> bin_t;
58  typedef bin_t::const_iterator bin_const_iter_t;
59 
61  typedef std::map<key_t,bin_t> store_t;
65  typedef store_t::const_iterator store_const_iter_t;
66 
68  typedef std::pair<double,double> range_t;
70  typedef std::vector<range_t> range_cont_t;
72  typedef std::map<CaloRegion,range_cont_t> range_map_t;
73 
74  //
76  // Embedded Iterator //
78  //
79  // class CaloSumIterator
80  // {
81  // public:
82  // CaloSumIterator(store_t& theStore)
83  // : m_store(&theStore)
84  // , m_actual(theStore.begin())
85  // { };
86  //
87  // ~CaloSumIterator() { };
88  //
89  // positioning iterator
90  // CaloSumIterator begin() { m_actual = m_store->begin(); return *this; }
91  // CaloSumIterator end() { m_actual = m_store->end(); return *this; }
92  // CaloSumIterator next() { m_actual++; return *this; }
93  // CaloSumIterator prev() { m_actual--; return *this; }
94  //
95  // bi-directional iterator advancement
96  // CaloSumIterator operator++() { return this->next(); }
97  // CaloSumIterator operator++(int) { return this->next(); }
98  // CaloSumIterator operator--() { return this->prev(); }
99  // CaloSumIterator operator--(int) { return this->prev(); }
100  //
101  // comparators
102  // bool operator==(const CaloSumIterator& anOtherIter) const
103  // { return m_actual == anOtherIter.m_actual; }
104  // bool operator==(CaloSumIterator& anOtherIter)
105  // { return m_actual == anOtherIter.m_actual; }
106  // bool operator!=(const CaloSumIterator& anOtherIter ) const
107  // { return m_actual != anOtherIter.m_actual; }
108  // bool operator!=(CaloSumIterator& anOtherIter )
109  // { return m_actual != anOtherIter.m_actual; }
110  //
111  // data access
112  // store_const_iter_t& operator*() const { return m_actual; }
113  // store_const_iter_t& operator->() const { return m_actual; }
114  //
115  // private:
116  //
117  // const store_t* m_store;
118  // store_const_iter_t m_actual;
119  // };
120 
122  // typedef CaloSumIterator const_iterator;
124 
130  CaloSum();
131 
153  CaloSum(CaloVarType varType,
154  const CaloBinDescriptor<double>& theBins,
155  size_t numberOfSums = 1);
156 // /*! \brief Useful constructor
157 // *
158 // * \overload
159 // *
160 // * Constructor allows to give a list of regions.
161 // */
162  // CaloSum(CaloVarType varType,
163  // const CaloBinDescriptor<double>& theBins,
164  // const std::vector<CaloRegion>& theRegions,
165  // size_t numberOfSums = 1 );
167  virtual ~CaloSum();
168 
170  // Configuration //
172 
182  virtual bool setRegion(const CaloSum::CaloRegion& theRegion,
183  double etaLow, double etaHigh);
197  virtual bool setRegion(const CaloSum::CaloRegion& theRegion,
198  const std::vector<double>& etaLow,
199  const std::vector<double>& etaHigh);
200 
209  virtual CaloRegion getRegion(double theEta) const;
210 
221  virtual bool getRange(const CaloRegion& theRegion,
222  std::vector<double>& lowEtas,
223  std::vector<double>& highEtas) const;
225  virtual CaloVarType getVarType() const;
230  virtual size_t getNumberOfBins() const;
235  virtual size_t getNumberOfSums() const;
244  virtual bool getVariableRange(double& lowLimit,double& highLimit) const;
255  virtual bool getBinEdges(size_t theIndex,
256  double& lowEdge, double& highEdge) const;
264  virtual bool getBinCenter(size_t theIndex, double& binCenter) const;
266  virtual const CaloBinDescriptor<double>& getBinDescriptor() const;
267 
268 
270  // Data Accumulation //
272 
290  virtual bool add(const CaloCell* theCell,
291  double theBinnedVariable,
292  const std::vector<double>& theSummedVariables);
301  virtual bool add(const CaloCell* theCell,
302  double theBinnedVariable,
303  double theSummedVariable);
316  virtual bool add(const CaloSampling::CaloSample& theSampling,
317  double theEta,
318  double theBinnedVariable,
319  const std::vector<double>& theSummedVariables);
327  virtual bool add (const CaloSampling::CaloSample& theSampling,
328  double theEta,
329  double theBinnedVariable,
330  double theSummedVariable);
332  // Data Access //
334 
336  const_iterator begin() const;
338  const_iterator end() const;
343  static CaloRegion getRegion(const_iterator& theIterator) ;
349 
360  bool getSums(const_iterator& theIterator,
361  size_t theBinIndex,
362  std::vector<double>& theSums) const;
371  bool getSums(const_iterator& theIterator,
372  double theBinnedVariable,
373  std::vector<double>& theSums) const;
384  bool getSums(const CaloSum::CaloRegion& theRegion,
385  const CaloSampling::CaloSample& theSampling,
386  size_t theIndex,
387  std::vector<double>& theSums) const;
398  bool getSums(const CaloSum::CaloRegion& theRegion,
399  const CaloSampling::CaloSample& theSampling,
400  double theBinnedVariable,
401  std::vector<double>& theSums) const;
412  // bool getSums(const CaloSampling::CaloSample& theSampling,
413  // double theEta,
414  // size_t theIndex
415  // std::vector<double>& theSums) const;
426  // bool getSums(const CaloSampling::CaloSample& theSampling,
427  // double theEta,
428  // double theBinnedVariable,
429  // std::vector<double>& theSums) const;
430 
437  virtual bool contains(const CaloSum::CaloRegion& theRegion) const;
446  virtual bool contains(const CaloSampling::CaloSample& theSampling) const;
456  virtual bool contains(const CaloSum::CaloRegion& theRegion,
457  const CaloSampling::CaloSample& theSampling) const;
458 
459  protected:
460 
466  static key_t getKey(const CaloRegion& theRegion,
467  const CaloSampling::CaloSample& theSample) ;
475  key_t getKey(double theEta,
476  const CaloSampling::CaloSample& theSample) const;
477 
479  bool setUp();
480 
481  private:
482 
485 
488 
491 
494 
497 
500 };
501 
560 #endif
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
CaloSum::Central
@ Central
Central region indicator.
Definition: CaloSum.h:24
CaloSum::getNumberOfSums
virtual size_t getNumberOfSums() const
Returns number of sums in each bin.
Definition: CaloSum.cxx:178
CaloSum::data_t
std::vector< double > data_t
Data type for parallel running sums in a bin.
Definition: CaloSum.h:47
CaloBinDescriptor.h
CaloSum::m_regionRanges
range_map_t m_regionRanges
Store for region ranges.
Definition: CaloSum.h:496
CaloSum::data_const_iter_t
data_t::const_iterator data_const_iter_t
Data const iterator type.
Definition: CaloSum.h:51
CaloSum::E
@ E
Energy amplitude.
Definition: CaloSum.h:35
CaloSum::Forward
@ Forward
Forward region indicator.
Definition: CaloSum.h:26
CaloSum::EndCap
@ EndCap
Central region indicator.
Definition: CaloSum.h:25
CaloSum::CaloSum
CaloSum()
Default constructor.
Definition: CaloSum.cxx:18
CaloSum::key_t
std::pair< CaloRegion, CaloSampling::CaloSample > key_t
Key type for compressed storage.
Definition: CaloSum.h:44
CaloSum::UnknownType
@ UnknownType
Unknown variable type.
Definition: CaloSum.h:40
CaloSum::getBinCenter
virtual bool getBinCenter(size_t theIndex, double &binCenter) const
Returns bin center.
Definition: CaloSum.cxx:202
CaloSum
Container for binned sums of calorimeter variables.
Definition: CaloSum.h:18
CaloSum::getRange
virtual bool getRange(const CaloRegion &theRegion, std::vector< double > &lowEtas, std::vector< double > &highEtas) const
Returns eta range(s) for a given region.
Definition: CaloSum.cxx:143
CaloSum::store_iter_t
store_t::iterator store_iter_t
Store iterator type.
Definition: CaloSum.h:63
CaloSum::getSums
bool getSums(const_iterator &theIterator, size_t theBinIndex, std::vector< double > &theSums) const
Returns sums for a given iterator.
Definition: CaloSum.cxx:319
CaloSum::m_sumStore
store_t m_sumStore
Store for sums.
Definition: CaloSum.h:499
CaloSum::EtFraction
@ EtFraction
Transverse energy fraction.
Definition: CaloSum.h:39
CaloSum::end
const_iterator end() const
Store end iterator.
Definition: CaloSum.cxx:302
CaloSum::EFraction
@ EFraction
Energy fraction.
Definition: CaloSum.h:37
CaloSum::begin
const_iterator begin() const
Store begin iterator.
Definition: CaloSum.cxx:297
CaloSum::store_t
std::map< key_t, bin_t > store_t
Store data type.
Definition: CaloSum.h:61
CaloBinDescriptor< double >
CaloSum::EDensity
@ EDensity
Energy density.
Definition: CaloSum.h:36
CaloSum::range_t
std::pair< double, double > range_t
Range type.
Definition: CaloSum.h:68
CaloSum::getBinDescriptor
virtual const CaloBinDescriptor< double > & getBinDescriptor() const
Returns reference to complete bin descriptor.
Definition: CaloSum.cxx:216
CaloSum::bin_iter_t
bin_t::iterator bin_iter_t
Bin iterator type.
Definition: CaloSum.h:56
CaloSum::Em
@ Em
Electromagnetic calorimeter indicator.
Definition: CaloSum.h:27
CaloSum::bin_const_iter_t
bin_t::const_iterator bin_const_iter_t
Bin const iterator type.
Definition: CaloSum.h:58
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
CaloSum::setUp
bool setUp()
Set up defaults.
Definition: CaloSum.cxx:427
CaloSum::setRegion
virtual bool setRegion(const CaloSum::CaloRegion &theRegion, double etaLow, double etaHigh)
Configure regions.
Definition: CaloSum.cxx:54
CaloSum::getVariableRange
virtual bool getVariableRange(double &lowLimit, double &highLimit) const
Returs lower and upper limit of binned variable range.
Definition: CaloSum.cxx:186
CaloSum::UnknownRegion
@ UnknownRegion
Unknown region.
Definition: CaloSum.h:29
CaloSum::m_defaultRanges
bool m_defaultRanges
Process flow control: indicates default range overwrite.
Definition: CaloSum.h:484
CaloSum::range_cont_t
std::vector< range_t > range_cont_t
Range container type.
Definition: CaloSum.h:70
CaloSum::m_varType
CaloVarType m_varType
Binned variable type.
Definition: CaloSum.h:490
CaloSum::getBinEdges
virtual bool getBinEdges(size_t theIndex, double &lowEdge, double &highEdge) const
Returns bin edges for a given bin.
Definition: CaloSum.cxx:193
CaloSum::contains
virtual bool contains(const CaloSum::CaloRegion &theRegion) const
Returns sums for a given sampling, eta, and index.
Definition: CaloSum.cxx:389
CaloSum::bin_t
std::vector< data_t > bin_t
Bin type.
Definition: CaloSum.h:54
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
CaloSum::Et
@ Et
Transverse energy amplitude.
Definition: CaloSum.h:38
CaloSum::CaloVarType
CaloVarType
Binned variable type.
Definition: CaloSum.h:34
CaloSum::store_const_iter_t
store_t::const_iterator store_const_iter_t
Store const iterator type.
Definition: CaloSum.h:65
CaloSum::m_binDescriptor
CaloBinDescriptor< double > m_binDescriptor
Bin descriptor.
Definition: CaloSum.h:493
CaloSum::data_iter_t
data_t::iterator data_iter_t
Data iterator type.
Definition: CaloSum.h:49
CaloSum::Had
@ Had
Hadronic calorimeter indicator.
Definition: CaloSum.h:28
CaloSum::~CaloSum
virtual ~CaloSum()
Useful constructor.
CaloSum::range_map_t
std::map< CaloRegion, range_cont_t > range_map_t
Range map type.
Definition: CaloSum.h:72
CaloSum::add
virtual bool add(const CaloCell *theCell, double theBinnedVariable, const std::vector< double > &theSummedVariables)
Add to sums.
Definition: CaloSum.cxx:234
CaloSum::getVarType
virtual CaloVarType getVarType() const
Returns binned variable type.
Definition: CaloSum.cxx:119
CaloSum::getRegion
virtual CaloRegion getRegion(double theEta) const
Retrieve region for a given eta.
Definition: CaloSum.cxx:124
CaloSum::CaloRegion
CaloRegion
Region indicator implementation.
Definition: CaloSum.h:23
CaloSum::getNumberOfBins
virtual size_t getNumberOfBins() const
Returns number of bins.
Definition: CaloSum.cxx:173
CaloSum::getSampling
static CaloSampling::CaloSample getSampling(const_iterator &theIterator)
Returns sampling for a given iterator.
Definition: CaloSum.cxx:314
CaloSum::const_iterator
store_const_iter_t const_iterator
Store iterator type.
Definition: CaloSum.h:123
CaloSum::m_numberOfSums
size_t m_numberOfSums
Store size: number of sums.
Definition: CaloSum.h:487
CaloSum::getKey
static key_t getKey(const CaloRegion &theRegion, const CaloSampling::CaloSample &theSample)
Translate into key.
Definition: CaloSum.cxx:443