4 #pragma warning(disable:2259)
10 #pragma warning(disable:4996)
19 std::pair<DataObject*,IHistogram2D*>
Gaudi::createH2D(
const std::string & title,
int binsX,
double iminX,
double imaxX,
int binsY,
double iminY,
double imaxY) {
20 Histogram2D* p =
new Histogram2D(
new TH2D(title.c_str(),title.c_str(),binsX, iminX, imaxX, binsY, iminY, imaxY));
21 return std::pair<DataObject*,IHistogram2D*>(p,p);
24 std::pair<DataObject*,IHistogram2D*>
Gaudi::createH2D(
const std::string & title,
const Edges& eX,
const Edges& eY) {
25 Histogram2D* p =
new Histogram2D(
new TH2D(title.c_str(),title.c_str(),eX.size()-1,&eX.front(),eY.size()-1,&eY.front()));
26 return std::pair<DataObject*,IHistogram2D*>(p,p);
30 Histogram2D* p =
new Histogram2D(rep);
31 return std::pair<DataObject*,IHistogram2D*>(p,p);
34 std::pair<DataObject*,IHistogram2D*>
Gaudi::createH2D(
const IHistogram2D& hist) {
35 TH2D *h = getRepresentation<AIDA::IHistogram2D,TH2D>(hist);
36 Histogram2D *
n = h ?
new Histogram2D(
new TH2D(*h)) : 0;
37 return std::pair<DataObject*,IHistogram2D*>(
n,
n);
40 std::pair<DataObject*,IHistogram1D*>
41 Gaudi::slice1DX(
const std::string& nam,
const IHistogram2D& hist,
int first,
int last) {
42 TH2 *r = getRepresentation<IHistogram2D,TH2>(hist);
43 TH1D *t = r ? r->ProjectionX(
"_px",first,last,
"e") : 0;
44 if ( t ) t->SetName(nam.c_str());
45 Histogram1D* p = t ?
new Histogram1D(t) : 0;
46 return std::pair<DataObject*,IHistogram1D*>(p,p);
49 std::pair<DataObject*,IHistogram1D*>
50 Gaudi::slice1DY(
const std::string& nam,
const IHistogram2D& hist,
int first,
int last) {
51 TH2 *r = getRepresentation<IHistogram2D,TH2>(hist);
52 TH1D *t = r ? r->ProjectionY(
"_py",first,last,
"e") : 0;
53 if ( t ) t->SetName(nam.c_str());
54 Histogram1D* p = t ?
new Histogram1D(t) : 0;
55 return std::pair<DataObject*,IHistogram1D*>(p,p);
58 std::pair<DataObject*,IHistogram1D*>
59 Gaudi::project1DY(
const std::string& nam,
const IHistogram2D& hist,
int first,
int last) {
60 TH2 *r = getRepresentation<IHistogram2D,TH2>(hist);
61 TH1D *t = r ? r->ProjectionY(
"_px",first,last,
"e") : 0;
62 if ( t ) t->SetName(nam.c_str());
63 Histogram1D* p = t ?
new Histogram1D(t) : 0;
64 return std::pair<DataObject*,IHistogram1D*>(p,p);
67 std::pair<DataObject*,IProfile1D*>
68 Gaudi::profile1DX(
const std::string& nam,
const IHistogram2D& hist,
int first,
int last) {
69 TH2 *r = Gaudi::getRepresentation<IHistogram2D,TH2>(hist);
70 TProfile *t = r ? r->ProfileX(
"_pfx",first,last,
"e") : 0;
71 if ( t ) t->SetName(nam.c_str());
72 Profile1D* p = t ?
new Profile1D(t) : 0;
73 return std::pair<DataObject*,IProfile1D*>(p,p);
76 std::pair<DataObject*,IProfile1D*>
77 Gaudi::profile1DY(
const std::string& nam,
const IHistogram2D& hist,
int first,
int last) {
78 TH2 *r = getRepresentation<IHistogram2D,TH2>(hist);
79 TProfile *t = r ? r->ProfileY(
"_pfx",first,last,
"e") : 0;
80 if ( t ) t->SetName(nam.c_str());
81 Profile1D* p = t ?
new Profile1D(t) : 0;
82 return std::pair<DataObject*,IProfile1D*>(p,p);
89 if (className ==
"AIDA::IHistogram2D")
90 return (IHistogram2D*)
this;
91 else if (className ==
"AIDA::IHistogram")
92 return (IHistogram*)
this;
98 if (binHeight(indexX, indexY)<=0)
return 0;
99 double xx = binHeight(indexX, indexY)/binError(indexX, indexY);
100 return int(xx*xx+0.5);
105 TH2D* imp =
dynamic_cast<TH2D*
>(rep);
107 if ( m_rep )
delete m_rep;
109 m_xAxis.initialize(m_rep->GetXaxis(),
true);
110 m_yAxis.initialize(m_rep->GetYaxis(),
true);
111 const TArrayD* a = m_rep->GetSumw2();
112 if ( 0 == a || (a && a->GetSize()==0) ) m_rep->Sumw2();
113 setTitle(m_rep->GetTitle());
116 throw std::runtime_error(
"Cannot adopt native histogram representation.");
126 m_rep->SetDirectory(0);
131 adoptRepresentation(rep);
133 m_sumwx = m_sumwy = 0;
134 m_rep->SetDirectory(0);
138 m_rep->SetBinContent(rIndexX(i), rIndexY(j), height);
139 m_rep->SetBinError(rIndexX(i), rIndexY(j), error);
141 if (i >=0 && j >= 0) {
142 m_sumwx += centreX*height;
143 m_sumwy += centreY*height;
145 m_sumEntries += entries;
152 return Base::reset();
158 #pragma warning(push)
159 #pragma warning(disable:1572)
162 (weight==1.) ? m_rep->Fill(x,y) : m_rep->Fill(x,y,weight );
167 m_rep->SetEntries(m_sumEntries);
168 std::vector<double> stat(11);
169 stat[0] = sumBinHeights();
171 if(equivalentBinEntries() != 0)
172 stat[1] = (sumBinHeights() * sumBinHeights()) / equivalentBinEntries();
175 if(sumBinHeights() != 0) meanX = m_sumwx/ sumBinHeights();
176 stat[3] = (meanX*meanX + rmsX*rmsX) * sumBinHeights();
179 if(sumBinHeights() != 0) meanY = m_sumwy/ sumBinHeights();
180 stat[5] = (meanY*meanY + rmsY*rmsY) * sumBinHeights();
182 m_rep->PutStats(&stat.front());
189 const char* tit = h.title().c_str();
190 if (h.xAxis().isFixedBinning() && h.yAxis().isFixedBinning() )
191 m_rep =
new TH2D(tit,tit,
192 h.xAxis().bins(),h.xAxis().lowerEdge(),h.xAxis().upperEdge(),
193 h.yAxis().bins(),h.yAxis().lowerEdge(),h.yAxis().upperEdge() );
196 for (
int i =0;
i < h.xAxis().bins(); ++
i)
197 eX.push_back(h.xAxis().binLowerEdge(
i));
199 eX.push_back(h.xAxis().upperEdge() );
200 for (
int i =0;
i < h.yAxis().bins(); ++
i)
201 eY.push_back(h.yAxis().binLowerEdge(
i));
203 eY.push_back(h.yAxis().upperEdge() );
204 m_rep =
new TH2D(tit,tit,eX.size()-1,&eX.front(),eY.size()-1,&eY.front());
206 m_xAxis.initialize(m_rep->GetXaxis(),
true);
207 m_yAxis.initialize(m_rep->GetYaxis(),
true);
213 double sumw = h.sumBinHeights();
215 if (h.equivalentBinEntries() != 0)
216 sumw2 = ( sumw * sumw ) /h.equivalentBinEntries();
217 double sumwx = h.meanX()*h.sumBinHeights();
218 double sumwx2 = (h.meanX()*h.meanX() + h.rmsX()*h.rmsX() )*h.sumBinHeights();
219 double sumwy = h.meanY()*h.sumBinHeights();
220 double sumwy2 = (h.meanY()*h.meanY() + h.rmsY()*h.rmsY() )*h.sumBinHeights();
224 for (
int i=-2;
i < xAxis().bins(); ++
i) {
225 for (
int j=-2; j < yAxis().bins(); ++j) {
227 m_rep->SetBinContent(rIndexX(
i), rIndexY(j), h.binHeight(
i,j) );
228 m_rep->SetBinError(rIndexX(
i), rIndexY(j), h.binError(
i,j) );
230 if (
i >= 0 && j >= 0) {
231 sumwxy += h.binHeight(
i,j)*h.binMeanX(
i,j)*h.binMeanY(
i,j);
237 m_rep->SetEntries(h.allEntries());
239 std::vector<double> stat(11);
247 m_rep->PutStats(&stat.front());
int m_sumEntries
cache sumEntries (allEntries) when setting contents since Root can't compute by himself ...
std::pair< DataObject *, AIDA::IHistogram1D * > slice1DY(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D slice from 2D histogram.
virtual bool setTitle(const std::string &title)
Set the title of the object.
bool setRms(double rmsX, double rmsY)
Sets the rms of the histogram.
virtual int binEntries(int indexX, int indexY) const
The number of entries (ie the number of times fill was called for this bin).
std::pair< DataObject *, AIDA::IHistogram1D * > project1DY(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D projection in Y from 2D histogram.
virtual bool setBinContents(int binIndexX, int binIndexY, int entries, double height, double error, double centreX, double centreY)
Fast filling method for a given bin. It can be also the over/underflow bin.
std::vector< double > Edges
Histogram2D()
Standard Constructor.
void * cast(const std::string &className) const
Introspection method.
AIDA implementation for 2 D histograms using ROOT THD2.
std::pair< DataObject *, AIDA::IHistogram2D * > createH2D(const AIDA::IHistogram2D &hist)
Copy constructor.
std::pair< DataObject *, AIDA::IHistogram1D * > slice1DX(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D slice from 2D histogram.
std::pair< DataObject *, AIDA::IProfile1D * > profile1DX(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D profile in X from 2D histogram.
std::pair< DataObject *, AIDA::IProfile1D * > profile1DY(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D profile in Y from 2D histogram.
#define DECLARE_DATAOBJECT_FACTORY(x)
bool fill(double x, double y, double weight=1.)
Fill the Histogram2D with a value and the.
void copyFromAida(const IHistogram2D &h)
Create new histogram from any AIDA based histogram.
This is a number of static methods for bootstrapping the Gaudi framework.
virtual void adoptRepresentation(TObject *rep)
Adopt ROOT histogram representation.
IMPLEMENTATION * m_rep
Reference to underlying implementation.