4 #pragma warning(disable:2259) 10 #pragma warning(disable:4996) 25 TH3D* imp =
dynamic_cast<TH3D*
>(rep);
28 m_xAxis.initialize(m_rep->GetXaxis(),
true);
29 m_yAxis.initialize(m_rep->GetYaxis(),
true);
30 m_zAxis.initialize(m_rep->GetZaxis(),
true);
31 const TArrayD* a = m_rep->GetSumw2();
32 if ( !a || (a && a->GetSize()==0) ) m_rep->Sumw2();
33 setTitle(m_rep->GetTitle());
39 Gaudi::createH3D(
const std::string& title,
int nBinsX,
double xlow,
double xup,
int nBinsY,
double ylow,
double yup,
int nBinsZ,
double zlow,
double zup) {
40 auto p =
new Histogram3D(
new TH3D(title.
c_str(),title.
c_str(),nBinsX,xlow,xup,nBinsY,ylow,yup,nBinsZ,zlow,zup));
47 auto p =
new Histogram3D(
new TH3D(title.
c_str(),title.
c_str(),eX.size()-1,&eX.front(), eY.size()-1,&eY.front(), eZ.size()-1,&eZ.front()));
52 TH3D *
h = getRepresentation<AIDA::IHistogram3D,TH3D>(hist);
65 m_rep->SetDirectory(
nullptr);
73 m_rep->SetDirectory(
nullptr);
81 if (i >=0 && j >= 0 && k >= 0) {
100 m_rep->Fill ( x , y, z, weight );
105 if (className ==
"AIDA::IHistogram3D") {
106 return (AIDA::IHistogram3D*)
this;
108 else if (className ==
"AIDA::IHistogram") {
109 return (AIDA::IHistogram*)
this;
117 #pragma warning(push) 118 #pragma warning(disable:1572) 149 const char* tit = h.title().c_str();
150 if (h.xAxis().isFixedBinning() && h.yAxis().isFixedBinning() && h.zAxis().isFixedBinning() ) {
152 h.xAxis().bins(), h.xAxis().lowerEdge(), h.xAxis().upperEdge(),
153 h.yAxis().bins(), h.yAxis().lowerEdge(), h.yAxis().upperEdge(),
154 h.zAxis().bins(), h.zAxis().lowerEdge(), h.zAxis().upperEdge() ) );
158 for (
int i =0; i < h.xAxis().bins(); ++i)
161 eX.push_back(h.xAxis().upperEdge() );
162 for (
int i =0; i < h.yAxis().bins(); ++i)
163 eY.push_back(h.yAxis().binLowerEdge(i));
165 eY.push_back(h.yAxis().upperEdge() );
166 for (
int i =0; i < h.zAxis().bins(); ++i)
167 eZ.push_back(h.zAxis().binLowerEdge(i));
169 eZ.push_back(h.zAxis().upperEdge() );
170 m_rep.
reset(
new TH3D(tit,tit,eX.size()-1,&eX.front(),eY.size()-1,&eY.front(),eZ.size()-1,&eZ.front()) );
175 const TArrayD* a =
m_rep->GetSumw2();
176 if ( !a || (a && a->GetSize()==0) )
m_rep->Sumw2();
183 double sumw = h.sumBinHeights();
185 if (h.equivalentBinEntries() != 0)
186 sumw2 = ( sumw * sumw ) /h.equivalentBinEntries();
187 double sumwx = h.meanX()*h.sumBinHeights();
188 double sumwx2 = (h.meanX()*h.meanX() + h.rmsX()*h.rmsX() )*h.sumBinHeights();
189 double sumwy = h.meanY()*h.sumBinHeights();
190 double sumwy2 = (h.meanY()*h.meanY() + h.rmsY()*h.rmsY() )*h.sumBinHeights();
191 double sumwz = h.meanZ()*h.sumBinHeights();
192 double sumwz2 = (h.meanZ()*h.meanZ() + h.rmsZ()*h.rmsZ() )*h.sumBinHeights();
198 for (
int i=-2; i <
xAxis().bins(); ++i) {
199 for (
int j=-2; j <
yAxis().bins(); ++j) {
200 for (
int k=-2; k <
zAxis().bins(); ++k) {
204 if ( i >= 0 && j >= 0 && k >= 0) {
205 sumwxy += h.binHeight(i,j,k)*h.binMeanX(i,j,k)*h.binMeanY(i,j,k);
206 sumwxz += h.binHeight(i,j,k)*h.binMeanX(i,j,k)*h.binMeanZ(i,j,k);
207 sumwyz += h.binHeight(i,j,k)*h.binMeanY(i,j,k)*h.binMeanZ(i,j,k);
214 m_rep->SetEntries(h.allEntries());
int rIndexZ(int index) const
int rIndexX(int index) const
double meanZ() const override
The mean of the IHistogram3D along the z axis.
int entries() const override
Get the number or all the entries.
const AIDA::IAxis & yAxis() const override
Get the y axis of the IHistogram3D.
std::vector< double > Edges
const AIDA::IAxis & zAxis() const override
Get the z axis of the IHistogram3D.
double rmsZ() const override
The RMS of the IHistogram3D along the z axis.
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.
Histogram3D()
Standard Constructor.
AIDA implementation for 3 D histograms using ROOT THD2.
double sumBinHeights() const override
Get the sum of in range bin heights in the IProfile.
bool setTitle(const std::string &title) override
Set the title of the object.
bool fill(double x, double y, double z, double weight) override
Fill bin content.
int rIndexY(int index) const
void copyFromAida(const AIDA::IHistogram3D &h)
Create new histogram from any AIDA based histogram.
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
void initialize(TAxis *itaxi, bool)
std::pair< DataObject *, AIDA::IHistogram3D * > createH3D(const AIDA::IHistogram3D &hist)
Copy constructor.
const AIDA::IAxis & xAxis() const override
Get the x axis of the IHistogram3D.
virtual bool setRms(double rmsX, double rmsY, double rmsZ)
Sets the rms of the histogram.
double rmsY() const override
The RMS of the IHistogram3D along the y axis.
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
double rmsX() const override
The RMS of the IHistogram3D along the x axis.
double meanY() const override
The mean of the IHistogram3D along the y axis.
void * cast(const std::string &className) const override
Introspection method.
double equivalentBinEntries() const override
Number of equivalent entries, i.e. SUM[ weight ] ^ 2 / SUM[ weight^2 ]
Helper functions to set/get the application return code.
double meanX() const override
The mean of the IHistogram3D along the x axis.
Common AIDA implementation stuff for histograms and profiles using ROOT implementations.