ATLAS Offline Software
Flex1DHisto.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // //
8 // Header file for class Flex1DHisto //
9 // //
10 // Description: Templated 1D histo class, providing most //
11 // work for the 1D lightweight classes. //
12 // Basically just extends FlexErrArray with //
13 // a value-oriented rather than bin-oriented //
14 // interface (xmin,xmax & under/overflow). //
15 // //
16 // Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
17 // Initial version: March 2009 //
18 // //
20 
21 #ifndef FLEX1DHISTO_H
22 #define FLEX1DHISTO_H
23 
24 #include "FlexErrArray.h"
25 #include "LWBinUtils.h"
26 #ifndef NDEBUG
27 #include <iostream>
28 #endif
29 
30 #ifdef LW_DEBUG_HEAVY_USERS
31 #include "LWHistTraceUtils.h"
32 #include <map>
33 #include <iostream>
34 #endif
35 
36 template <class T>
37 class Flex1DHisto {
38 public:
39 
40  static Flex1DHisto * create(unsigned nbins, const double& xmin, const double& xmax);
41  template <class TFloat>
42  static Flex1DHisto * create(unsigned nbins, const TFloat* xbins );
43  static void destroy(Flex1DHisto *);
44 
45  double getXMin() const { return m_xmin; }
46  double getXMax() const { return m_xmax; }
47 
48  void fill(const double& x);
49  void fill(const double& x, const double& w);
50  unsigned getNBins() const { return m_nbinsPlus1-1; }
51  const float * getVarBins() const { return m_varBins; }
52  float * getVarBins() { return m_varBins; }
53 
54  //Bin numbers in the next methods are in 0..m_nbins+1 (i.e. with
55  //over/underflow bins):
56  unsigned valueToBin(const double& x) const;
57  double getBinContent(unsigned bin) const;
58  double getBinError(unsigned bin) const;
59  void getBinContentAndError(unsigned bin, double& cont, double& err ) const;
60  void setBinContent(unsigned bin, const double& );
61  void setBinError(unsigned bin, const double& );
62  void setBinContentAndError(unsigned bin, const double& cont, const double& err );
63 
64  void setEntries(unsigned);
65  unsigned getEntries() const;//Count of fill(..) and setBinContent(..) calls.
66  double getSumW() const;//Total Sum of weights from fill(..) calls.
67  double getSumW2() const;//Total Sum of squares of weights from fill(..) calls.
68  double getSumWX() const;//Total Sum of weight*X from fill(..) calls.
69  double getSumWX2() const;//Total Sum of weight*X*X from fill(..) calls.
70  void setSums( const double& sumW,const double&sumW2,const double& sumWX,const double& sumWX2 );
71 
72  bool holdsSeparateSumW2Info() const;
73  void copyContents(T*cont, double*err=0) const;//Won't copy errors if err==0.
74  double getBinCenter(int bin) const;
75 
76  double Integral() const;
77 
79  bool getNextActiveBin(unsigned& bin, double& content, double& error);
80 
81  void scaleContentsAndErrors( const double& fact );
82 
83 #ifdef LW_DEBUG_HEAVY_USERS
84  std::map<std::pair<void*,void*>,unsigned long> m_callmap;
85  void countCall(const std::pair<void*,void*>&addresses);
86  void produceReport(const char*histname);
87 #endif
88 
89 private:
90 
91  //NB: Actual number of allocated bins is nbins+2 (over/underflow bins)
92  //extraAllocSize indicates the size of the memory immediately
93  //following the object which will be used for supergroups indices.
94  static unsigned extraAllocSize(unsigned nbins) { return FlexErrArray<T>::extraAllocSize(nbins+2); }
95  Flex1DHisto( unsigned nbins, const double& xmin, const double& xmax );
96  template <class TFloat>
97  Flex1DHisto( unsigned nbins, const TFloat* xbins );//xbins has nbins+1 entries
99 
100  // Illegal to copy/assign a Flex1DHisto:
103 
104  //Speedup:
105  double m_invDelta;
106  //Statistics:
107  double m_sumW;
108  double m_sumW2;
109  double m_sumWX;
110  double m_sumWX2;
111  unsigned m_nEntries;
112 
113  //nbins:
114  unsigned m_nbinsPlus1;
115 
116  //Range:
117  double m_xmin;
118  double m_xmax;
119  float * m_varBins;//null if constant bin-width, otherwise m_nbinsPlus1 entries (first and last are xmin and xmax)
120  //Array:
121  FlexErrArray<T> m_flexArray;//Must be the last!
122 
123 };
124 
125 #include "Flex1DHisto.icc"
126 
127 #endif
Flex1DHisto::fill
void fill(const double &x)
Flex1DHisto::m_flexArray
FlexErrArray< T > m_flexArray
Definition: Flex1DHisto.h:121
Flex1DHisto.icc
Flex1DHisto::fill
void fill(const double &x, const double &w)
Flex1DHisto::getVarBins
const float * getVarBins() const
Definition: Flex1DHisto.h:51
Flex1DHisto::resetActiveBinLoop
void resetActiveBinLoop()
Flex1DHisto::extraAllocSize
static unsigned extraAllocSize(unsigned nbins)
Definition: Flex1DHisto.h:94
Flex1DHisto::setSums
void setSums(const double &sumW, const double &sumW2, const double &sumWX, const double &sumWX2)
bin
Definition: BinsDiffFromStripMedian.h:43
Flex1DHisto::create
static Flex1DHisto * create(unsigned nbins, const TFloat *xbins)
Flex1DHisto::m_nbinsPlus1
unsigned m_nbinsPlus1
Definition: Flex1DHisto.h:114
Flex1DHisto::setEntries
void setEntries(unsigned)
Flex1DHisto::m_xmin
double m_xmin
Definition: Flex1DHisto.h:117
x
#define x
Flex1DHisto::m_sumWX
double m_sumWX
Definition: Flex1DHisto.h:109
Flex1DHisto::setBinContent
void setBinContent(unsigned bin, const double &)
Flex1DHisto::valueToBin
unsigned valueToBin(const double &x) const
Flex1DHisto::getVarBins
float * getVarBins()
Definition: Flex1DHisto.h:52
Flex1DHisto::holdsSeparateSumW2Info
bool holdsSeparateSumW2Info() const
LWHistTraceUtils.h
Flex1DHisto::m_xmax
double m_xmax
Definition: Flex1DHisto.h:118
Flex1DHisto::getBinContent
double getBinContent(unsigned bin) const
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
grepfile.content
string content
Definition: grepfile.py:56
FlexErrArray.h
PixelAthClusterMonAlgCfg.histname
histname
Definition: PixelAthClusterMonAlgCfg.py:106
FlexErrArray::extraAllocSize
static unsigned extraAllocSize(unsigned nbins)
Definition: FlexErrArray.h:38
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
xmin
double xmin
Definition: listroot.cxx:60
Flex1DHisto
Definition: Flex1DHisto.h:37
Flex1DHisto::Flex1DHisto
Flex1DHisto(unsigned nbins, const TFloat *xbins)
Flex1DHisto::getXMax
double getXMax() const
Definition: Flex1DHisto.h:46
Flex1DHisto::destroy
static void destroy(Flex1DHisto *)
Flex1DHisto::getXMin
double getXMin() const
Definition: Flex1DHisto.h:45
Flex1DHisto::getSumW
double getSumW() const
Flex1DHisto::setBinContentAndError
void setBinContentAndError(unsigned bin, const double &cont, const double &err)
Flex1DHisto::~Flex1DHisto
~Flex1DHisto()
Flex1DHisto::operator=
Flex1DHisto & operator=(const Flex1DHisto &)
Flex1DHisto::Flex1DHisto
Flex1DHisto(unsigned nbins, const double &xmin, const double &xmax)
Flex1DHisto::getNBins
unsigned getNBins() const
Definition: Flex1DHisto.h:50
Flex1DHisto::setBinError
void setBinError(unsigned bin, const double &)
Flex1DHisto::getSumW2
double getSumW2() const
Flex1DHisto::Integral
double Integral() const
Flex1DHisto::m_sumW2
double m_sumW2
Definition: Flex1DHisto.h:108
LArCellBinning.xbins
int xbins
Definition: LArCellBinning.py:163
Flex1DHisto::m_invDelta
double m_invDelta
Definition: Flex1DHisto.h:105
Flex1DHisto::m_sumWX2
double m_sumWX2
Definition: Flex1DHisto.h:110
Flex1DHisto::getSumWX
double getSumWX() const
Flex1DHisto::getNextActiveBin
bool getNextActiveBin(unsigned &bin, double &content, double &error)
Flex1DHisto::create
static Flex1DHisto * create(unsigned nbins, const double &xmin, const double &xmax)
Flex1DHisto::scaleContentsAndErrors
void scaleContentsAndErrors(const double &fact)
Flex1DHisto::getBinError
double getBinError(unsigned bin) const
xmax
double xmax
Definition: listroot.cxx:61
LWBinUtils.h
Flex1DHisto::getEntries
unsigned getEntries() const
Flex1DHisto::getSumWX2
double getSumWX2() const
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
Flex1DHisto::m_sumW
double m_sumW
Definition: Flex1DHisto.h:107
Flex1DHisto::m_varBins
float * m_varBins
Definition: Flex1DHisto.h:119
Flex1DHisto::Flex1DHisto
Flex1DHisto(const Flex1DHisto &)
FlexErrArray
Definition: FlexErrArray.h:34
error
Definition: IImpactPoint3dEstimator.h:70
Flex1DHisto::m_nEntries
unsigned m_nEntries
Definition: Flex1DHisto.h:111
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
Flex1DHisto::getBinCenter
double getBinCenter(int bin) const
Flex1DHisto::getBinContentAndError
void getBinContentAndError(unsigned bin, double &cont, double &err) const
Flex1DHisto::copyContents
void copyContents(T *cont, double *err=0) const