5 #pragma warning(disable:2259)
11 #pragma warning(disable:4996)
18 std::pair<DataObject*,AIDA::IHistogram1D*>
Gaudi::createH1D(
const std::string& title,
int nBins,
double xlow,
double xup) {
19 Histogram1D* p =
new Histogram1D(
new TH1D(title.c_str(),title.c_str(),nBins,xlow,xup));
20 return std::pair<DataObject*,AIDA::IHistogram1D*>(p,p);
23 std::pair<DataObject*,AIDA::IHistogram1D*>
Gaudi::createH1D(
const std::string& title,
const Edges& e) {
24 Histogram1D* p =
new Histogram1D(
new TH1D(title.c_str(),title.c_str(),e.size()-1,&e.front()));
25 return std::pair<DataObject*,AIDA::IHistogram1D*>(p,p);
28 std::pair<DataObject*,AIDA::IHistogram1D*>
Gaudi::createH1D(
const AIDA::IHistogram1D& hist) {
29 TH1D *h = getRepresentation<AIDA::IHistogram1D,TH1D>(hist);
30 Histogram1D *
n = h ?
new Histogram1D(
new TH1D(*h)) : 0;
31 return std::pair<DataObject*,AIDA::IHistogram1D*>(
n,
n);
35 if (className ==
"AIDA::IHistogram1D")
36 return const_cast<AIDA::IHistogram1D*
>((AIDA::IHistogram1D*)
this);
37 if (className ==
"AIDA::IHistogram")
38 return const_cast<AIDA::IHistogram*
>((AIDA::IHistogram*)
this);
43 if (binHeight(index)<=0)
return 0;
44 double xx = binHeight(index)/binError(index);
45 return int(xx*xx+0.5);
50 TH1D* imp =
dynamic_cast<TH1D*
>(rep);
52 if ( m_rep )
delete m_rep;
56 throw std::runtime_error(
"Cannot adopt native histogram representation.");
67 init(m_rep->GetTitle());
72 m_classType =
"IHistogram1D";
73 if ( initialize_axis ) {
74 m_axis.initialize(m_rep->GetXaxis(),
false);
76 const TArrayD* a = m_rep->GetSumw2();
77 if ( 0 == a || (a && a->GetSize()==0) ) m_rep->Sumw2();
79 m_rep->SetDirectory(0);
87 for(
int i=1, n=m_rep->GetNbinsX();
i<=
n; ++
i) {
88 m_sumwx += m_rep->GetBinContent(
i)*m_rep->GetBinCenter(
i);
89 m_sumEntries += (int)m_rep->GetBinContent(
i);
101 Gaudi::Generic1D<AIDA::IHistogram1D,TH1D>::adoptRepresentation(rep);
103 init(m_rep->GetTitle());
109 m_rep->SetBinContent(rIndex(i),height);
110 m_rep->SetBinError(rIndex(i),error);
112 if (i != AIDA::IAxis::UNDERFLOW_BIN && i != AIDA::IAxis::OVERFLOW_BIN )
113 m_sumwx += centre*height;
114 m_sumEntries += entries;
121 #pragma warning(push)
122 #pragma warning(disable:1572)
125 m_rep->SetEntries(m_sumEntries);
126 std::vector<double> stat(11);
128 stat[0] = sumBinHeights();
130 if (equivalentBinEntries() != 0)
131 stat[1] = ( sumBinHeights() * sumBinHeights() ) / equivalentBinEntries();
134 if ( sumBinHeights() != 0 ) mean = m_sumwx/ sumBinHeights();
135 stat[3] = ( mean*mean + rms*rms )* sumBinHeights();
136 m_rep->PutStats(&stat.front());
142 m_rep->SetEntries(allEntries);
144 std::vector<double> stat(11);
146 stat[0] = sumBinHeights();
149 if (eqBinEntries != 0)
150 stat[1] = ( sumBinHeights() * sumBinHeights() ) / eqBinEntries;
152 stat[2] = mean*sumBinHeights();
154 stat[3] = ( mean*mean + rms*rms )* sumBinHeights();
155 m_rep->PutStats(&stat.front());
160 (weight == 1.) ? m_rep->Fill(x) : m_rep->Fill(x,weight);
166 std::string tit = h.title()+
"Copy";
168 if (h.axis().isFixedBinning() ) {
169 m_rep =
new TH1D(tit.c_str(),tit.c_str(),h.axis().bins(),h.axis().lowerEdge(),h.axis().upperEdge());
173 for (
int i =0;
i < h.axis().bins(); ++
i) {
174 e.push_back(h.axis().binLowerEdge(
i));
177 e.push_back(h.axis().upperEdge() );
178 m_rep =
new TH1D(tit.c_str(),tit.c_str(),e.size()-1,&e.front());
180 m_axis.initialize(m_rep->GetXaxis(),
false);
185 double sumw = h.sumBinHeights();
188 if (h.equivalentBinEntries() != 0)
189 sumw2 = ( sumw * sumw ) /h.equivalentBinEntries();
191 double sumwx = h.mean()*h.sumBinHeights();
192 double sumwx2 = (h.mean()*h.mean() + h.rms()*h.rms() )*h.sumBinHeights();
195 for (
int i=-2;
i < axis().bins(); ++
i) {
197 m_rep->SetBinContent(rIndex(
i),h.binHeight(
i) );
198 m_rep->SetBinError(rIndex(
i),h.binError(
i) );
202 m_rep->SetEntries(h.allEntries());
204 std::vector<double> stat(11);
209 m_rep->PutStats(&stat.front());
222 for (
int j = 0; j < size; j++) {
223 std::string key, value;
225 annotation().addItem (key, value);
226 if (
"Title" == key) {
230 double lowerEdge, upperEdge, binHeight, binError;
231 int isFixedBinning, bins;
232 s >> isFixedBinning >> bins;
234 if ( m_rep )
delete m_rep;
235 if ( isFixedBinning ) {
236 s >> lowerEdge >> upperEdge;
237 m_rep =
new TH1D(title.c_str(),title.c_str(),bins,lowerEdge,upperEdge);
241 for (
int i = 0;
i <= bins; ++
i )
242 s >> *(
double*)&edges[
i];
243 m_rep =
new TH1D(title.c_str(),title.c_str(),edges.size()-1,&edges.front());
245 m_axis.initialize(m_rep->GetXaxis(),
true);
250 for (
int i = 0;
i <= bins + 1; ++
i ) {
251 s >> binHeight >> binError;
252 m_rep->SetBinContent(
i, binHeight );
253 m_rep->SetBinError(
i, binError );
257 m_rep->SetEntries( allEntries );
259 s >> stats[0] >> stats[1] >> stats[2] >> stats[3];
260 m_rep->PutStats( stats );
266 s << static_cast<int>( annotation().size() );
267 for (
int i = 0;
i < annotation().size();
i++) {
268 s << annotation().key(
i);
269 s << annotation().value(
i);
271 const AIDA::IAxis & axis( this->axis() );
272 const int isFixedBinning = axis.isFixedBinning();
273 const int bins = axis.bins();
274 s << isFixedBinning << bins;
275 if ( isFixedBinning ) {
276 s << axis.lowerEdge();
279 for (
int i = 0;
i < bins; ++
i )
280 s << axis.binLowerEdge(
i);
282 s << axis.upperEdge();
283 for (
int i = 0;
i <= bins + 1; ++
i )
284 s << m_rep->GetBinContent(
i) << m_rep->GetBinError(
i );
286 s << m_rep->GetEntries();
288 m_rep->GetStats( stats );
289 s << stats[0] << stats[1] << stats[2] << stats[3];
293 typedef Gaudi::Histogram1D
H1D;