Gaudi::Histogram3D Class Reference

AIDA implementation for 2 D histograms using ROOT THD2. More...

Inheritance diagram for Gaudi::Histogram3D:
Collaboration diagram for Gaudi::Histogram3D:

Public Member Functions

 Histogram3D ()
 Standard Constructor. More...
 
 Histogram3D (TH3D *rep)
 Standard Constructor. More...
 
 ~Histogram3D () override=default
 Destructor. More...
 
bool fill (double x, double y, double z, double weight) override
 Fill bin content. More...
 
virtual bool setBinContents (int i, int j, int k, int entries, double height, double error, double centreX, double centreY, double centreZ)
 Fast filling method for a given bin. It can be also the over/underflow bin. More...
 
virtual bool setRms (double rmsX, double rmsY, double rmsZ)
 Sets the rms of the histogram. More...
 
bool reset () override
 
void * cast (const std::string &className) const override
 Introspection method. More...
 
void copyFromAida (const AIDA::IHistogram3D &h)
 Create new histogram from any AIDA based histogram. More...
 
const CLIDclID () const override
 Retrieve reference to class defininition identifier. More...
 
- Public Member Functions inherited from DataObject
 DataObject ()
 Standard Constructor. More...
 
 DataObject (const DataObject &rhs)
 Copy Constructor. More...
 
DataObjectoperator= (const DataObject &rhs)
 Assignment Operator. More...
 
 DataObject (DataObject &&rhs)
 Move Constructor. More...
 
DataObjectoperator= (DataObject &&rhs)
 Move Assignment Operator. More...
 
virtual ~DataObject ()
 Standard Destructor. More...
 
virtual unsigned long addRef ()
 Add reference to object. More...
 
virtual unsigned long release ()
 release reference to object More...
 
const std::stringname () const
 Retreive DataObject name. It is the name when registered in the store. More...
 
virtual StatusCode update ()
 Provide empty placeholder for internal object reconfiguration callback. More...
 
void setRegistry (IRegistry *pRegistry)
 Set pointer to Registry. More...
 
IRegistryregistry () const
 Get pointer to Registry. More...
 
LinkManagerlinkMgr () const
 Retrieve Link manager. More...
 
unsigned char version () const
 Retrieve version number of this object representation. More...
 
void setVersion (unsigned char vsn)
 Set version number of this object representation. More...
 
unsigned long refCount () const
 Return the refcount. More...
 
virtual std::ostreamfillStream (std::ostream &s) const
 Fill the output stream (ASCII) More...
 
- Public Member Functions inherited from Gaudi::Generic3D< INTERFACE, IMPLEMENTATION >
 Generic3D ()=default
 Default constructor. More...
 
 ~Generic3D () override=default
 Destructor. More...
 
TObject * representation () const override
 ROOT object implementation. More...
 
void adoptRepresentation (TObject *rep) override
 Adopt ROOT histogram representation. More...
 
int dimension () const override
 Get the Histogram's dimension. More...
 
std::string title () const override
 Get the title of the object. More...
 
bool setTitle (const std::string &title) override
 Set the title of the object. More...
 
std::string name () const
 object name More...
 
bool setName (const std::string &newName)
 Sets the name of the object. More...
 
AIDA::IAnnotation & annotation () override
 Access annotation object. More...
 
const AIDA::IAnnotation & annotation () const override
 Access annotation object (cons) More...
 
int entries () const override
 Get the number or all the entries. More...
 
int allEntries () const override
 Get the number or all the entries, both in range and underflow/overflow bins of the IProfile. More...
 
double sumBinHeights () const override
 Get the sum of in range bin heights in the IProfile. More...
 
double sumAllBinHeights () const override
 Get the sum of all the bins heights (including underflow and overflow bin). More...
 
double sumExtraBinHeights () const override
 Get the sum of the underflow and overflow bin height. More...
 
double minBinHeight () const override
 Get the minimum height of the in-range bins. More...
 
double maxBinHeight () const override
 Get the maximum height of the in-range bins. More...
 
int rIndexX (int index) const
 
int rIndexY (int index) const
 
int rIndexZ (int index) const
 
double binMeanX (int indexX, int, int) const override
 The weighted mean along the x axis of a given bin. More...
 
double binMeanY (int, int indexY, int) const override
 The weighted mean along the y axis of a given bin. More...
 
double binMeanZ (int, int, int indexZ) const override
 The weighted mean along the z axis of a given bin. More...
 
int binEntries (int indexX, int indexY, int indexZ) const override
 Number of entries in the corresponding bin (ie the number of times fill was calle d for this bin). More...
 
int binEntriesX (int index) const override
 Sum of all the entries of the bins along a given x bin. More...
 
int binEntriesY (int index) const override
 Sum of all the entries of the bins along a given y bin. More...
 
int binEntriesZ (int index) const override
 Sum of all the entries of the bins along a given z bin. More...
 
double binHeight (int indexX, int indexY, int indexZ) const
 Total height of the corresponding bin (ie the sum of the weights in this bin). More...
 
double binHeightX (int index) const override
 Sum of all the heights of the bins along a given x bin. More...
 
double binHeightY (int index) const override
 Sum of all the heights of the bins along a given y bin. More...
 
double binHeightZ (int index) const override
 Sum of all the heights of the bins along a given z bin. More...
 
double binError (int indexX, int indexY, int indexZ) const override
 The error of a given bin. More...
 
double meanX () const override
 The mean of the IHistogram3D along the x axis. More...
 
double meanY () const override
 The mean of the IHistogram3D along the y axis. More...
 
double meanZ () const override
 The mean of the IHistogram3D along the z axis. More...
 
double rmsX () const override
 The RMS of the IHistogram3D along the x axis. More...
 
double rmsY () const override
 The RMS of the IHistogram3D along the y axis. More...
 
double rmsZ () const override
 The RMS of the IHistogram3D along the z axis. More...
 
const AIDA::IAxis & xAxis () const override
 Get the x axis of the IHistogram3D. More...
 
const AIDA::IAxis & yAxis () const override
 Get the y axis of the IHistogram3D. More...
 
const AIDA::IAxis & zAxis () const override
 Get the z axis of the IHistogram3D. More...
 
int coordToIndexX (double coord) const override
 Get the bin number corresponding to a given coordinate along the x axis. More...
 
int coordToIndexY (double coord) const override
 Get the bin number corresponding to a given coordinate along the y axis. More...
 
int coordToIndexZ (double coord) const override
 Get the bin number corresponding to a given coordinate along the z axis. More...
 
double equivalentBinEntries () const override
 Number of equivalent entries, i.e. SUM[ weight ] ^ 2 / SUM[ weight^2 ] More...
 
bool scale (double scaleFactor) override
 Scale the weights and the errors of all the IHistogram's bins (in-range and out-of-range ones) by a given scale factor. More...
 
bool add (const INTERFACE &hist) override
 Add to this Histogram3D the contents of another IHistogram3D. More...
 
int extraEntries () const override
 
std::ostreamprint (std::ostream &s) const override
 Print (ASCII) the histogram into the output stream. More...
 
std::ostreamwrite (std::ostream &s) const override
 Write (ASCII) the histogram table into the output stream. More...
 
int write (const char *file_name) const override
 Write (ASCII) the histogram table into a file. More...
 
template<>
void adoptRepresentation (TObject *rep)
 Adopt ROOT histogram representation. More...
 
- Public Member Functions inherited from Gaudi::HistogramBase
virtual ~HistogramBase ()=default
 

Static Public Member Functions

static const CLIDclassID ()
 
- Static Public Member Functions inherited from DataObject
static const CLIDclassID ()
 Retrieve reference to class definition structure (static access) More...
 

Protected Attributes

double m_sumwx = 0
 
double m_sumwy = 0
 
double m_sumwz = 0
 
- Protected Attributes inherited from Gaudi::Generic3D< INTERFACE, IMPLEMENTATION >
Gaudi::Axis m_xAxis
 
Gaudi::Axis m_yAxis
 
Gaudi::Axis m_zAxis
 
AIDA::Annotation m_annotation
 Object annotations. More...
 
std::unique_ptr< IMPLEMENTATION > m_rep
 Reference to underlying implementation. More...
 
std::string m_classType
 
int m_sumEntries = 0
 

Additional Inherited Members

- Public Types inherited from Gaudi::Generic3D< INTERFACE, IMPLEMENTATION >
typedef Generic3D< INTERFACE, IMPLEMENTATION > Base
 
- Protected Member Functions inherited from Gaudi::Generic3D< INTERFACE, IMPLEMENTATION >
 Generic3D (IMPLEMENTATION *p)
 constructor More...
 

Detailed Description

AIDA implementation for 2 D histograms using ROOT THD2.

Author
M.Frank

Definition at line 27 of file H3D.cpp.

Constructor & Destructor Documentation

Gaudi::Histogram3D::Histogram3D ( )

Standard Constructor.

Definition at line 94 of file H3D.cpp.

95 : Base( new TH3D() )
96 {
97  setTitle("");
98  m_rep->Sumw2();
99  m_sumwx = 0;
100  m_sumwy = 0;
101  m_sumwz = 0;
102  m_rep->SetDirectory(nullptr);
103 }
double m_sumwx
Definition: H3D.cpp:53
double m_sumwy
Definition: H3D.cpp:54
bool setTitle(const std::string &title) override
Set the title of the object.
Definition: Generic3D.h:231
Generic3D< INTERFACE, IMPLEMENTATION > Base
Definition: Generic3D.h:39
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
double m_sumwz
Definition: H3D.cpp:55
Gaudi::Histogram3D::Histogram3D ( TH3D *  rep)

Standard Constructor.

Definition at line 105 of file H3D.cpp.

105  {
106  adoptRepresentation(rep);
107  m_sumwx = 0;
108  m_sumwy = 0;
109  m_sumwz = 0;
110  m_rep->SetDirectory(nullptr);
111 }
double m_sumwx
Definition: H3D.cpp:53
double m_sumwy
Definition: H3D.cpp:54
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
double m_sumwz
Definition: H3D.cpp:55
Gaudi::Histogram3D::~Histogram3D ( )
overridedefault

Destructor.

Member Function Documentation

void * Gaudi::Histogram3D::cast ( const std::string className) const
override

Introspection method.

Definition at line 141 of file H3D.cpp.

141  {
142  if (className == "AIDA::IHistogram3D") {
143  return (AIDA::IHistogram3D*)this;
144  }
145  else if (className == "AIDA::IHistogram") {
146  return (AIDA::IHistogram*)this;
147  }
148  return nullptr;
149 }
static const CLID& Gaudi::Histogram3D::classID ( )
inlinestatic

Definition at line 49 of file H3D.cpp.

49 { return CLID_H3D; }
const CLID& Gaudi::Histogram3D::clID ( ) const
inlineoverridevirtual

Retrieve reference to class defininition identifier.

Reimplemented from DataObject.

Definition at line 48 of file H3D.cpp.

48 { return classID(); }
static const CLID & classID()
Definition: H3D.cpp:49
void Gaudi::Histogram3D::copyFromAida ( const AIDA::IHistogram3D &  h)

Create new histogram from any AIDA based histogram.

Definition at line 184 of file H3D.cpp.

184  {
185  // implement here the copy
186  const char* tit = h.title().c_str();
187  if (h.xAxis().isFixedBinning() && h.yAxis().isFixedBinning() && h.zAxis().isFixedBinning() ) {
188  m_rep.reset( new TH3D(tit,tit,
189  h.xAxis().bins(), h.xAxis().lowerEdge(), h.xAxis().upperEdge(),
190  h.yAxis().bins(), h.yAxis().lowerEdge(), h.yAxis().upperEdge(),
191  h.zAxis().bins(), h.zAxis().lowerEdge(), h.zAxis().upperEdge() ) );
192  }
193  else {
194  Edges eX, eY, eZ;
195  for (int i =0; i < h.xAxis().bins(); ++i)
196  eX.push_back(h.xAxis().binLowerEdge(i));
197  // add also upperedges at the end
198  eX.push_back(h.xAxis().upperEdge() );
199  for (int i =0; i < h.yAxis().bins(); ++i)
200  eY.push_back(h.yAxis().binLowerEdge(i));
201  // add also upperedges at the end
202  eY.push_back(h.yAxis().upperEdge() );
203  for (int i =0; i < h.zAxis().bins(); ++i)
204  eZ.push_back(h.zAxis().binLowerEdge(i));
205  // add also upperedges at the end
206  eZ.push_back(h.zAxis().upperEdge() );
207  m_rep.reset( new TH3D(tit,tit,eX.size()-1,&eX.front(),eY.size()-1,&eY.front(),eZ.size()-1,&eZ.front()) );
208  }
209  m_xAxis.initialize(m_rep->GetXaxis(),true);
210  m_yAxis.initialize(m_rep->GetYaxis(),true);
211  m_zAxis.initialize(m_rep->GetZaxis(),true);
212  const TArrayD* a = m_rep->GetSumw2();
213  if ( !a || (a && a->GetSize()==0) ) m_rep->Sumw2();
214  m_sumEntries = 0;
215  m_sumwx = 0;
216  m_sumwy = 0;
217  m_sumwz = 0;
218 
219  // statistics
220  double sumw = h.sumBinHeights();
221  double sumw2 = 0;
222  if (h.equivalentBinEntries() != 0)
223  sumw2 = ( sumw * sumw ) /h.equivalentBinEntries();
224  double sumwx = h.meanX()*h.sumBinHeights();
225  double sumwx2 = (h.meanX()*h.meanX() + h.rmsX()*h.rmsX() )*h.sumBinHeights();
226  double sumwy = h.meanY()*h.sumBinHeights();
227  double sumwy2 = (h.meanY()*h.meanY() + h.rmsY()*h.rmsY() )*h.sumBinHeights();
228  double sumwz = h.meanZ()*h.sumBinHeights();
229  double sumwz2 = (h.meanZ()*h.meanZ() + h.rmsZ()*h.rmsZ() )*h.sumBinHeights();
230  double sumwxy = 0;
231  double sumwxz = 0;
232  double sumwyz = 0;
233 
234  // copy the contents in (AIDA underflow/overflow are -2,-1)
235  for (int i=-2; i < xAxis().bins(); ++i) {
236  for (int j=-2; j < yAxis().bins(); ++j) {
237  for (int k=-2; k < zAxis().bins(); ++k) {
238  m_rep->SetBinContent(rIndexX(i), rIndexY(j), rIndexZ(k), h.binHeight(i,j,k) );
239  m_rep->SetBinError(rIndexX(i), rIndexY(j), rIndexZ(k), h.binError(i,j,k) );
240  // calculate statistics
241  if ( i >= 0 && j >= 0 && k >= 0) {
242  sumwxy += h.binHeight(i,j,k)*h.binMeanX(i,j,k)*h.binMeanY(i,j,k);
243  sumwxz += h.binHeight(i,j,k)*h.binMeanX(i,j,k)*h.binMeanZ(i,j,k);
244  sumwyz += h.binHeight(i,j,k)*h.binMeanY(i,j,k)*h.binMeanZ(i,j,k);
245  }
246  }
247  }
248  }
249  // need to do set entries after setting contents otherwise root will recalulate them
250  // taking into account how many time SetBinContents() has been called
251  m_rep->SetEntries(h.allEntries());
252 
253  // fill stat vector
254  std::vector<double> stat(11);
255  stat[0] = sumw;
256  stat[1] = sumw2;
257  stat[2] = sumwx;
258  stat[3] = sumwx2;
259  stat[4] = sumwy;
260  stat[5] = sumwy2;
261  stat[6] = sumwxy;
262  stat[7] = sumwz;
263  stat[8] = sumwz2;
264  stat[9] = sumwxz;
265  stat[10] = sumwyz;
266  m_rep->PutStats(&stat.front());
267 }
int rIndexZ(int index) const
Definition: Generic3D.h:85
int rIndexX(int index) const
Definition: Generic3D.h:83
Gaudi::Axis m_xAxis
Definition: Generic3D.h:217
Gaudi::Axis m_yAxis
Definition: Generic3D.h:218
const AIDA::IAxis & yAxis() const override
Get the y axis of the IHistogram3D.
Definition: Generic3D.h:176
std::vector< double > Edges
Definition: GaudiPI.h:19
const AIDA::IAxis & zAxis() const override
Get the z axis of the IHistogram3D.
Definition: Generic3D.h:178
double m_sumwx
Definition: H3D.cpp:53
double m_sumwy
Definition: H3D.cpp:54
T push_back(T...args)
T reset(T...args)
Gaudi::Axis m_zAxis
Definition: Generic3D.h:219
int rIndexY(int index) const
Definition: Generic3D.h:84
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
void initialize(TAxis *itaxi, bool)
Definition: Axis.h:71
const AIDA::IAxis & xAxis() const override
Get the x axis of the IHistogram3D.
Definition: Generic3D.h:174
double m_sumwz
Definition: H3D.cpp:55
bool Gaudi::Histogram3D::fill ( double  x,
double  y,
double  z,
double  weight 
)
override

Fill bin content.

Definition at line 136 of file H3D.cpp.

136  {
137  m_rep->Fill ( x , y, z, weight );
138  return true;
139 }
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
bool Gaudi::Histogram3D::reset ( )
override

Definition at line 127 of file H3D.cpp.

127  {
128  m_sumwx = 0;
129  m_sumwy = 0;
130  m_sumwz = 0;
131  m_sumEntries = 0;
132  m_rep->Reset ( );
133  return true;
134 }
double m_sumwx
Definition: H3D.cpp:53
double m_sumwy
Definition: H3D.cpp:54
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
double m_sumwz
Definition: H3D.cpp:55
bool Gaudi::Histogram3D::setBinContents ( int  i,
int  j,
int  k,
int  entries,
double  height,
double  error,
double  centreX,
double  centreY,
double  centreZ 
)
virtual

Fast filling method for a given bin. It can be also the over/underflow bin.

Definition at line 114 of file H3D.cpp.

114  {
115  m_rep->SetBinContent(rIndexX(i), rIndexY(j), rIndexZ(k), height);
116  m_rep->SetBinError(rIndexX(i), rIndexY(j), rIndexZ(k), error);
117  // accumulate sum bin centers
118  if (i >=0 && j >= 0 && k >= 0) {
119  m_sumwx += centreX*height;
120  m_sumwy += centreY*height;
121  m_sumwz += centreZ*height;
122  }
124  return true;
125 }
int rIndexZ(int index) const
Definition: Generic3D.h:85
int rIndexX(int index) const
Definition: Generic3D.h:83
int entries() const override
Get the number or all the entries.
Definition: Generic3D.h:247
double m_sumwx
Definition: H3D.cpp:53
double m_sumwy
Definition: H3D.cpp:54
int rIndexY(int index) const
Definition: Generic3D.h:84
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
double m_sumwz
Definition: H3D.cpp:55
bool Gaudi::Histogram3D::setRms ( double  rmsX,
double  rmsY,
double  rmsZ 
)
virtual

Sets the rms of the histogram.

Definition at line 157 of file H3D.cpp.

157  {
158  m_rep->SetEntries(m_sumEntries);
159  std::vector<double> stat(11);
160  // sum weights
161  stat[0] = sumBinHeights();
162  stat[1] = 0;
163  if (equivalentBinEntries() != 0)
164  stat[1] = ( sumBinHeights() * sumBinHeights() ) / equivalentBinEntries();
165  stat[2] = m_sumwx;
166  double meanX = 0;
167  if ( sumBinHeights() != 0 ) meanX = m_sumwx/ sumBinHeights();
168  stat[3] = ( meanX*meanX + rmsX*rmsX )* sumBinHeights();
169  stat[4] = m_sumwy;
170  double meanY = 0;
171  if ( sumBinHeights() != 0 ) meanY = m_sumwy/ sumBinHeights();
172  stat[5] = ( meanY*meanY + rmsY*rmsY )* sumBinHeights();
173  stat[6] = 0;
174  stat[7] = m_sumwz;
175  double meanZ = 0;
176  if ( sumBinHeights() != 0 ) meanZ = m_sumwz/ sumBinHeights();
177  stat[8] = ( meanZ*meanZ + rmsZ*rmsZ )* sumBinHeights();
178  // do not need to use sumwxy sumwxz and sumwyz
179 
180  m_rep->PutStats(&stat.front());
181  return true;
182 }
double meanZ() const override
The mean of the IHistogram3D along the z axis.
Definition: Generic3D.h:166
double m_sumwx
Definition: H3D.cpp:53
double rmsZ() const override
The RMS of the IHistogram3D along the z axis.
Definition: Generic3D.h:172
double m_sumwy
Definition: H3D.cpp:54
double sumBinHeights() const override
Get the sum of in range bin heights in the IProfile.
Definition: Generic3D.h:267
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
Definition: Generic3D.h:223
double rmsY() const override
The RMS of the IHistogram3D along the y axis.
Definition: Generic3D.h:170
double rmsX() const override
The RMS of the IHistogram3D along the x axis.
Definition: Generic3D.h:168
double meanY() const override
The mean of the IHistogram3D along the y axis.
Definition: Generic3D.h:164
double equivalentBinEntries() const override
Number of equivalent entries, i.e. SUM[ weight ] ^ 2 / SUM[ weight^2 ]
Definition: Generic3D.h:277
double meanX() const override
The mean of the IHistogram3D along the x axis.
Definition: Generic3D.h:161
double m_sumwz
Definition: H3D.cpp:55

Member Data Documentation

double Gaudi::Histogram3D::m_sumwx = 0
protected

Definition at line 53 of file H3D.cpp.

double Gaudi::Histogram3D::m_sumwy = 0
protected

Definition at line 54 of file H3D.cpp.

double Gaudi::Histogram3D::m_sumwz = 0
protected

Definition at line 55 of file H3D.cpp.


The documentation for this class was generated from the following file: