ATLAS Offline Software
Flex2DHisto.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // //
8 // Header file for class Flex2DHisto //
9 // //
10 // Description: Templated 2D histo class, providing most //
11 // work for the 2D lightweight classes. //
12 // //
13 // Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
14 // Initial version: March 2009 //
15 // //
17 
18 #ifndef FLEX2DHISTO_H
19 #define FLEX2DHISTO_H
20 
21 #include "FlexErrArray.h"
22 #include "LWBinUtils.h"
23 #ifndef NDEBUG
24 #include <iostream>
25 #endif
26 
27 #ifdef LW_DEBUG_HEAVY_USERS
28 #include "LWHistTraceUtils.h"
29 #include <map>
30 #include <iostream>
31 #endif
32 
33 template <class T>
34 class Flex2DHisto {
35 public:
36 
37  static Flex2DHisto * create(unsigned nbinsx, const double& xmin, const double& xmax,
38  unsigned nbinsy, const double& ymin, const double& ymax);
39  template <class TFloat>
40  static Flex2DHisto * create(unsigned nbinsx, const TFloat*xbins,
41  unsigned nbinsy, const double& ymin, const double& ymax);
42  template <class TFloat>
43  static Flex2DHisto * create(unsigned nbinsx, const double& xmin, const double& xmax,
44  unsigned nbinsy, const TFloat* ybins);
45  template <class TFloat>
46  static Flex2DHisto * create(unsigned nbinsx, const TFloat* xbins,
47  unsigned nbinsy, const TFloat* ybins);
48 
49  static void destroy(Flex2DHisto *);
50 
51  double getXMin() const { return m_xmin; }
52  double getXMax() const { return m_xmax; }
53  double getYMin() const { return m_ymin; }
54  double getYMax() const { return m_ymax; }
55 
56  void fill(const double& x, const double& y);
57  void fill(const double& x, const double& y, const double& w);
58  unsigned getNBinsX() const { return m_nbinsxPlus1-1; }
59  unsigned getNBinsY() const { return m_nbinsyPlus1-1; }
60  const float * getVarBinsX() const { return m_varBinsX; }
61  const float * getVarBinsY() const { return m_varBinsY; }
62 
63  //Bin numbers in the next methods are in 0..m_nbins+1 (i.e. with
64  //over/underflow bins):
65  unsigned valueToXBin(const double& x) const;
66  unsigned valueToYBin(const double& y) const;
67  double getBinContent(unsigned binx, unsigned biny) const;
68  double getBinError(unsigned binx, unsigned biny) const;
69  void getBinContentAndError(unsigned binx, unsigned biny, double& cont, double& err ) const;
70  void setBinContent(unsigned binx, unsigned biny, const double& );
71  void setBinError(unsigned binx, unsigned biny, const double& );
72  void setBinContentAndError(unsigned binx, unsigned biny, const double& cont, const double& err );
73 
74  void setEntries(unsigned);
75  unsigned getEntries() const;//Count of fill(..) and setBinContent(..) calls.
76  double getSumW() const;//Total Sum of weights from fill(..) calls.
77  double getSumW2() const;//Total Sum of squares of weights from fill(..) calls.
78  double getSumWX() const;//Total Sum of weight*X from fill(..) calls.
79  double getSumWX2() const;//Total Sum of weight*X*X from fill(..) calls.
80  double getSumWY() const;//Total Sum of weight*Y from fill(..) calls.
81  double getSumWY2() const;//Total Sum of weight*Y*Y from fill(..) calls.
82  double getSumWXY() const;//Total Sum of weight*X*Y from fill(..) calls.
83  void setSums( const double& sumW, const double&sumW2,const double& sumWX, const double& sumWX2,
84  const double& sumWY, const double& sumWY2,const double& sumWXY );
85 
86  bool holdsSeparateSumW2Info() const;
87  void copyContents(T*cont, double*err=0) const;//Won't copy errors if err==0.
88  double getBinCenterX(int bin) const;
89  double getBinCenterY(int bin) const;
90 
91  double Integral() const;
92 
94  bool getNextActiveBin(unsigned& binx, unsigned& biny, double& content, double& error);
95 
96  void scaleContentsAndErrors( const double& fact );
97 
98 #ifdef LW_DEBUG_HEAVY_USERS
99  std::map<std::pair<void*,void*>,unsigned long> m_callmap;
100  void countCall(const std::pair<void*,void*>&addresses);
101  void produceReport(const char*histname);
102 #endif
103 
104 private:
105  //NB: Actual number of allocated bins is (nbins+2)**2 (over/underflow bins)
106  //extraAllocSize indicates the size of the memory immediately
107  //following the object which will be used for supergroups indices.
108  static unsigned extraAllocSize(unsigned nbinsx,unsigned nbinsy) { return FlexErrArray<T>::extraAllocSize((nbinsx+2)*(nbinsy+2)); }
109  Flex2DHisto( unsigned nbinsx, const double& xmin, const double& xmax,
110  unsigned nbinsy, const double& ymin, const double& ymax );
111  template <class TFloat>
112  Flex2DHisto( unsigned nbinsx, const TFloat* xbins,
113  unsigned nbinsy, const double& ymin, const double& ymax );
114  template <class TFloat>
115  Flex2DHisto( unsigned nbinsx, const double& xmin, const double& xmax,
116  unsigned nbinsy, const TFloat* ybins );
117  template <class TFloat>
118  Flex2DHisto( unsigned nbinsx, const TFloat* xbins,
119  unsigned nbinsy, const TFloat* ybins );
121 
122  // Illegal to copy/assign a Flex2DHisto:
125 
126  unsigned internal_bin(unsigned binx, unsigned biny) const
127  {
128  return LWBinUtils::internal_bin(binx,biny,m_nbinsxPlus2);
129  }
130 
131  //Speedup:
132  double m_invDeltaX;
133  double m_invDeltaY;
134 
135  //Statistics:
136  double m_sumW;
137  double m_sumW2;
138  double m_sumWX;
139  double m_sumWX2;
140  double m_sumWY;
141  double m_sumWY2;
142  double m_sumWXY;
143  unsigned m_nEntries;
144 
145  //nbins:
146  const unsigned m_nbinsxPlus1;
147  const unsigned m_nbinsyPlus1;
148  const unsigned m_nbinsxPlus2;
149 
150  //Ranges:
151  double m_xmin;
152  double m_xmax;
153  double m_ymin;
154  double m_ymax;
155  float * m_varBinsX;//null if constant bin-width, otherwise m_nbinsPlus1 entries (first and last are xmin and xmax)
156  float * m_varBinsY;//null if constant bin-width, otherwise m_nbinsPlus1 entries (first and last are ymin and ymax)
157 
158  //Array:
159  FlexErrArray<T> m_flexArray;//Must be the last
160 
161 };
162 
163 #include "Flex2DHisto.icc"
164 
165 #endif
Flex2DHisto::m_varBinsX
float * m_varBinsX
Definition: Flex2DHisto.h:155
Flex2DHisto::holdsSeparateSumW2Info
bool holdsSeparateSumW2Info() const
Flex2DHisto::create
static Flex2DHisto * create(unsigned nbinsx, const TFloat *xbins, unsigned nbinsy, const TFloat *ybins)
Flex2DHisto::valueToXBin
unsigned valueToXBin(const double &x) const
Flex2DHisto::getYMax
double getYMax() const
Definition: Flex2DHisto.h:54
Flex2DHisto::m_sumWX
double m_sumWX
Definition: Flex2DHisto.h:138
Flex2DHisto::getBinContent
double getBinContent(unsigned binx, unsigned biny) const
Flex2DHisto::valueToYBin
unsigned valueToYBin(const double &y) const
ymin
double ymin
Definition: listroot.cxx:63
Flex2DHisto::m_sumW
double m_sumW
Definition: Flex2DHisto.h:136
Flex2DHisto::getSumWY
double getSumWY() const
Flex2DHisto::m_sumWX2
double m_sumWX2
Definition: Flex2DHisto.h:139
Flex2DHisto::operator=
Flex2DHisto & operator=(const Flex2DHisto &)
Flex2DHisto::m_invDeltaX
double m_invDeltaX
Definition: Flex2DHisto.h:132
Flex2DHisto::getBinCenterX
double getBinCenterX(int bin) const
Flex2DHisto
Definition: Flex2DHisto.h:34
Flex2DHisto::Flex2DHisto
Flex2DHisto(unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const double &ymin, const double &ymax)
Flex2DHisto::getEntries
unsigned getEntries() const
Flex2DHisto::m_ymin
double m_ymin
Definition: Flex2DHisto.h:153
Flex2DHisto::Integral
double Integral() const
Flex2DHisto::m_xmin
double m_xmin
Definition: Flex2DHisto.h:151
Flex2DHisto::fill
void fill(const double &x, const double &y, const double &w)
Flex2DHisto::getSumWXY
double getSumWXY() const
Flex2DHisto::~Flex2DHisto
~Flex2DHisto()
PixelAthClusterMonAlgCfg.ybins
ybins
Definition: PixelAthClusterMonAlgCfg.py:163
bin
Definition: BinsDiffFromStripMedian.h:43
Flex2DHisto::m_ymax
double m_ymax
Definition: Flex2DHisto.h:154
Flex2DHisto::setBinError
void setBinError(unsigned binx, unsigned biny, const double &)
x
#define x
Flex2DHisto::setBinContent
void setBinContent(unsigned binx, unsigned biny, const double &)
Flex2DHisto::m_flexArray
FlexErrArray< T > m_flexArray
Definition: Flex2DHisto.h:159
Flex2DHisto::fill
void fill(const double &x, const double &y)
Flex2DHisto::m_nbinsxPlus1
const unsigned m_nbinsxPlus1
Definition: Flex2DHisto.h:146
LWHistTraceUtils.h
grepfile.content
string content
Definition: grepfile.py:56
Flex2DHisto::Flex2DHisto
Flex2DHisto(unsigned nbinsx, const TFloat *xbins, unsigned nbinsy, const double &ymin, const double &ymax)
FlexErrArray.h
Flex2DHisto::getBinCenterY
double getBinCenterY(int bin) const
Flex2DHisto::m_sumWXY
double m_sumWXY
Definition: Flex2DHisto.h:142
PixelAthClusterMonAlgCfg.histname
histname
Definition: PixelAthClusterMonAlgCfg.py:106
FlexErrArray::extraAllocSize
static unsigned extraAllocSize(unsigned nbins)
Definition: FlexErrArray.h:38
Flex2DHisto::create
static Flex2DHisto * create(unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const double &ymin, const double &ymax)
Flex2DHisto::setBinContentAndError
void setBinContentAndError(unsigned binx, unsigned biny, const double &cont, const double &err)
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
xmin
double xmin
Definition: listroot.cxx:60
Flex2DHisto::getSumWY2
double getSumWY2() const
Flex2DHisto::destroy
static void destroy(Flex2DHisto *)
Flex2DHisto::internal_bin
unsigned internal_bin(unsigned binx, unsigned biny) const
Definition: Flex2DHisto.h:126
Flex2DHisto::getSumW
double getSumW() const
Flex2DHisto::getXMax
double getXMax() const
Definition: Flex2DHisto.h:52
Flex2DHisto::setSums
void setSums(const double &sumW, const double &sumW2, const double &sumWX, const double &sumWX2, const double &sumWY, const double &sumWY2, const double &sumWXY)
Flex2DHisto::m_sumWY
double m_sumWY
Definition: Flex2DHisto.h:140
Flex2DHisto::extraAllocSize
static unsigned extraAllocSize(unsigned nbinsx, unsigned nbinsy)
Definition: Flex2DHisto.h:108
Flex2DHisto::create
static Flex2DHisto * create(unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const TFloat *ybins)
Flex2DHisto::getYMin
double getYMin() const
Definition: Flex2DHisto.h:53
Flex2DHisto::getXMin
double getXMin() const
Definition: Flex2DHisto.h:51
Flex2DHisto::getSumWX2
double getSumWX2() const
Flex2DHisto::setEntries
void setEntries(unsigned)
Flex2DHisto::m_sumW2
double m_sumW2
Definition: Flex2DHisto.h:137
LArCellBinning.xbins
int xbins
Definition: LArCellBinning.py:163
Flex2DHisto::getNBinsX
unsigned getNBinsX() const
Definition: Flex2DHisto.h:58
y
#define y
Flex2DHisto::m_invDeltaY
double m_invDeltaY
Definition: Flex2DHisto.h:133
Flex2DHisto::getVarBinsX
const float * getVarBinsX() const
Definition: Flex2DHisto.h:60
Flex2DHisto::Flex2DHisto
Flex2DHisto(unsigned nbinsx, const TFloat *xbins, unsigned nbinsy, const TFloat *ybins)
Flex2DHisto::getNextActiveBin
bool getNextActiveBin(unsigned &binx, unsigned &biny, double &content, double &error)
Flex2DHisto::getBinError
double getBinError(unsigned binx, unsigned biny) const
Flex2DHisto::m_varBinsY
float * m_varBinsY
Definition: Flex2DHisto.h:156
xmax
double xmax
Definition: listroot.cxx:61
Flex2DHisto::getNBinsY
unsigned getNBinsY() const
Definition: Flex2DHisto.h:59
Flex2DHisto::Flex2DHisto
Flex2DHisto(unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const TFloat *ybins)
LWBinUtils.h
Flex2DHisto::resetActiveBinLoop
void resetActiveBinLoop()
Flex2DHisto::getSumW2
double getSumW2() const
Flex2DHisto::copyContents
void copyContents(T *cont, double *err=0) const
Flex2DHisto::getSumWX
double getSumWX() const
Flex2DHisto::m_nbinsxPlus2
const unsigned m_nbinsxPlus2
Definition: Flex2DHisto.h:148
Flex2DHisto::Flex2DHisto
Flex2DHisto(const Flex2DHisto &)
Flex2DHisto.icc
Flex2DHisto::m_xmax
double m_xmax
Definition: Flex2DHisto.h:152
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
FlexErrArray
Definition: FlexErrArray.h:34
error
Definition: IImpactPoint3dEstimator.h:70
Flex2DHisto::m_sumWY2
double m_sumWY2
Definition: Flex2DHisto.h:141
Flex2DHisto::getBinContentAndError
void getBinContentAndError(unsigned binx, unsigned biny, double &cont, double &err) const
Flex2DHisto::m_nEntries
unsigned m_nEntries
Definition: Flex2DHisto.h:143
Flex2DHisto::getVarBinsY
const float * getVarBinsY() const
Definition: Flex2DHisto.h:61
Flex2DHisto::scaleContentsAndErrors
void scaleContentsAndErrors(const double &fact)
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
LWBinUtils::internal_bin
static unsigned internal_bin(unsigned binx, unsigned biny, unsigned nbinsxPlus2)
Definition: LWBinUtils.h:95
Flex2DHisto::m_nbinsyPlus1
const unsigned m_nbinsyPlus1
Definition: Flex2DHisto.h:147
ymax
double ymax
Definition: listroot.cxx:64
Flex2DHisto::create
static Flex2DHisto * create(unsigned nbinsx, const TFloat *xbins, unsigned nbinsy, const double &ymin, const double &ymax)