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);
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];
virtual void adoptRepresentation(TObject *rep)
Adopt ROOT histogram representation.
virtual int binEntries(int index) const
Number of entries in the corresponding bin (ie the number of times fill was called for this bin)...
virtual void adoptRepresentation(TObject *rep)
Adopt ROOT histogram representation.
virtual bool setStatistics(int allEntries, double eqBinEntries, double mean, double rms)
set histogram statistics
std::pair< DataObject *, AIDA::IHistogram1D * > createH1D(const AIDA::IHistogram1D &hist)
Copy constructor.
The stream buffer is a small object collecting object data.
StreamBuffer & serialize(StreamBuffer &s)
Serialization mechanism, Serialize the object for reading.
std::vector< double > Edges
void init(const std::string &title, bool initialize_axis=true)
AIDA implementation for 1 D histograms using ROOT THD1.
virtual void * cast(const std::string &cl) const
Manual cast by class name.
IMPLEMENTATION * m_rep
Reference to underlying implementation.
void copyFromAida(const AIDA::IHistogram1D &h)
Create new histogram from any AIDA based histogram.
bool setRms(double rms)
Update histogram RMS.
#define DECLARE_DATAOBJECT_FACTORY(x)
virtual bool reset()
need to overwrite reset to reset the sums
virtual bool setBinContents(int i, int entries, double height, double error, double centre)
set bin content (entries and centre are not used )
This is a number of static methods for bootstrapping the Gaudi framework.
Histogram1D()
Standard constructor.
virtual bool fill(double x, double weight)
Fill the Profile1D with a value and the corresponding weight.