Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RDFHistoModels.cxx
Go to the documentation of this file.
1// Author: Enrico Guiraud, Danilo Piparo CERN 09/2017
2
3/*************************************************************************
4 * Copyright (C) 1995-2017, Rene Brun and Fons Rademakers. *
5 * All rights reserved. *
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. *
8 * For the list of contributors see $ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10
12#include <ROOT/TSeq.hxx>
13#include <TProfile.h>
14#include <TProfile2D.h>
15#include <cstddef>
16#include <vector>
17
18#include "TAxis.h"
19#include "TH1.h"
20#include "TH2.h"
21#include "TH3.h"
22#include "THn.h"
23#include "THnSparse.h"
24
25/**
26 * \class ROOT::RDF::TH1DModel
27 * \ingroup dataframe
28 * \brief A struct which stores some basic parameters of a TH1D
29 * \note It stores only basic settings such as name, title, bins, bin edges,
30 * but not others such as fSumw2.
31 *
32 * \class ROOT::RDF::TH2DModel
33 * \ingroup dataframe
34 * \brief A struct which stores some basic parameters of a TH2D
35 * \note It stores only basic settings such as name, title, bins, bin edges,
36 * but not others such as fSumw2.
37 *
38 * \class ROOT::RDF::TH3DModel
39 * \ingroup dataframe
40 * \brief A struct which stores some basic parameters of a TH3D
41 * \note It stores only basic settings such as name, title, bins, bin edges,
42 * but not others such as fSumw2.
43 *
44 * \class ROOT::RDF::THnDModel
45 * \ingroup dataframe
46 * \brief A struct which stores some basic parameters of a THnD
47 * \note It stores only basic settings such as name, title, bins, bin edges,
48 * but not others such as fSumw2.
49 *
50 * \class ROOT::RDF::THnSparseDModel
51 * \ingroup dataframe
52 * \brief A struct which stores some basic parameters of a THnSparseD
53 * \note It stores only basic settings such as name, title, bins, bin edges,
54 * but not others such as fSumw2.
55 *
56 * \class ROOT::RDF::TProfile1DModel
57 * \ingroup dataframe
58 * \brief A struct which stores some basic parameters of a TProfile
59 * \note It stores only basic settings such as name, title, bins, bin edges,
60 * but not others such as fSumw2.
61 *
62 * \class ROOT::RDF::TProfile2DModel
63 * \ingroup dataframe
64 * \brief A struct which stores some basic parameters of a TProfile2D
65 * \note It stores only basic settings such as name, title, bins, bin edges,
66 * but not others such as fSumw2.
67 */
68
69template <typename T>
70inline void FillVector(std::vector<double> &v, int size, T *a)
71{
72 v.reserve(size);
73 for (auto i : ROOT::TSeq<int>(size + 1))
74 v.push_back(a[i]);
75}
76
77template <>
78inline void FillVector<double>(std::vector<double> &v, int size, double *a)
79{
80 v.assign(a, a + (size_t)(size + 1));
81}
82
83inline void SetAxisProperties(const TAxis *axis, double &low, double &up, std::vector<double> &edges)
84{
85 // Check if this histo has fixed binning
86 // Same technique of "Int_t TAxis::FindBin(Double_t)"
87 if (!axis->GetXbins()->fN) {
88 low = axis->GetXmin();
89 up = axis->GetXmax();
90 } else {
91 // This histo has variable binning
92 const auto size = axis->GetNbins() + 1;
93 edges.reserve(size);
94 for (auto i : ROOT::TSeq<int>(1, size))
95 edges.push_back(axis->GetBinLowEdge(i));
96 edges.push_back(axis->GetBinUpEdge(size - 1));
97 }
98}
99
100namespace ROOT {
101
102namespace RDF {
103
104TH1DModel::TH1DModel(const ::TH1D &h) : fName(h.GetName()), fTitle(h.GetTitle()), fNbinsX(h.GetNbinsX())
105{
106 SetAxisProperties(h.GetXaxis(), fXLow, fXUp, fBinXEdges);
107}
108TH1DModel::TH1DModel(const char *name, const char *title, int nbinsx, double xlow, double xup)
109 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup)
110{
111}
112TH1DModel::TH1DModel(const char *name, const char *title, int nbinsx, const float *xbins)
113 : fName(name), fTitle(title), fNbinsX(nbinsx)
114{
116}
117TH1DModel::TH1DModel(const char *name, const char *title, int nbinsx, const double *xbins)
118 : fName(name), fTitle(title), fNbinsX(nbinsx)
119{
121}
122std::shared_ptr<::TH1D> TH1DModel::GetHistogram() const
123{
124 std::shared_ptr<::TH1D> h;
125 if (fBinXEdges.empty())
126 h = std::make_shared<::TH1D>(fName, fTitle, fNbinsX, fXLow, fXUp);
127 else
128 h = std::make_shared<::TH1D>(fName, fTitle, fNbinsX, fBinXEdges.data());
129
130 h->SetDirectory(nullptr); // object's lifetime is managed by the shared_ptr, detach it from ROOT's memory management
131 return h;
132}
133TH1DModel::~TH1DModel()
134{
135}
136
137TH2DModel::TH2DModel(const ::TH2D &h)
138 : fName(h.GetName()), fTitle(h.GetTitle()), fNbinsX(h.GetNbinsX()), fNbinsY(h.GetNbinsY())
139{
140 SetAxisProperties(h.GetXaxis(), fXLow, fXUp, fBinXEdges);
141 SetAxisProperties(h.GetYaxis(), fYLow, fYUp, fBinYEdges);
142}
143TH2DModel::TH2DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, int nbinsy, double ylow,
144 double yup)
145 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fNbinsY(nbinsy), fYLow(ylow), fYUp(yup)
146{
147}
148TH2DModel::TH2DModel(const char *name, const char *title, int nbinsx, const double *xbins, int nbinsy, double ylow,
149 double yup)
150 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy), fYLow(ylow), fYUp(yup)
151{
153}
154TH2DModel::TH2DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, int nbinsy,
155 const double *ybins)
156 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fNbinsY(nbinsy)
157{
159}
160TH2DModel::TH2DModel(const char *name, const char *title, int nbinsx, const double *xbins, int nbinsy,
161 const double *ybins)
162 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy)
163{
166}
167TH2DModel::TH2DModel(const char *name, const char *title, int nbinsx, const float *xbins, int nbinsy,
168 const float *ybins)
169 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy)
170{
173}
174std::shared_ptr<::TH2D> TH2DModel::GetHistogram() const
175{
176 auto xEdgesEmpty = fBinXEdges.empty();
177 auto yEdgesEmpty = fBinYEdges.empty();
178 std::shared_ptr<::TH2D> h;
180 h = std::make_shared<::TH2D>(fName, fTitle, fNbinsX, fXLow, fXUp, fNbinsY, fYLow, fYUp);
181 else if (!xEdgesEmpty && yEdgesEmpty)
182 h = std::make_shared<::TH2D>(fName, fTitle, fNbinsX, fBinXEdges.data(), fNbinsY, fYLow, fYUp);
183 else if (xEdgesEmpty && !yEdgesEmpty)
184 h = std::make_shared<::TH2D>(fName, fTitle, fNbinsX, fXLow, fXUp, fNbinsY, fBinYEdges.data());
185 else
186 h = std::make_shared<::TH2D>(fName, fTitle, fNbinsX, fBinXEdges.data(), fNbinsY, fBinYEdges.data());
187
188 h->SetDirectory(nullptr); // object's lifetime is managed by the shared_ptr, detach it from ROOT's memory management
189 return h;
190}
191TH2DModel::~TH2DModel()
192{
193}
194
195TH3DModel::TH3DModel(const ::TH3D &h)
196 : fName(h.GetName()), fTitle(h.GetTitle()), fNbinsX(h.GetNbinsX()), fNbinsY(h.GetNbinsY()), fNbinsZ(h.GetNbinsZ())
197{
198 SetAxisProperties(h.GetXaxis(), fXLow, fXUp, fBinXEdges);
199 SetAxisProperties(h.GetYaxis(), fYLow, fYUp, fBinYEdges);
200 SetAxisProperties(h.GetZaxis(), fZLow, fZUp, fBinZEdges);
201}
202TH3DModel::TH3DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, int nbinsy, double ylow,
203 double yup, int nbinsz, double zlow, double zup)
204 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fNbinsY(nbinsy), fYLow(ylow), fYUp(yup),
205 fNbinsZ(nbinsz), fZLow(zlow), fZUp(zup)
206{
207}
208TH3DModel::TH3DModel(const char *name, const char *title, int nbinsx, const double *xbins, int nbinsy,
209 const double *ybins, int nbinsz, const double *zbins)
210 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy), fNbinsZ(nbinsz)
211{
215}
216TH3DModel::TH3DModel(const char *name, const char *title, int nbinsx, const float *xbins, int nbinsy,
217 const float *ybins, int nbinsz, const float *zbins)
218 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy), fNbinsZ(nbinsz)
219{
223}
224std::shared_ptr<::TH3D> TH3DModel::GetHistogram() const
225{
226 std::shared_ptr<::TH3D> h;
227 if (fBinXEdges.empty() && fBinYEdges.empty() && fBinZEdges.empty())
228 h = std::make_shared<::TH3D>(fName, fTitle, fNbinsX, fXLow, fXUp, fNbinsY, fYLow, fYUp, fNbinsZ, fZLow, fZUp);
229 else
230 h = std::make_shared<::TH3D>(fName, fTitle, fNbinsX, fBinXEdges.data(), fNbinsY, fBinYEdges.data(), fNbinsZ,
231 fBinZEdges.data());
232
233 h->SetDirectory(nullptr);
234 return h;
235}
236TH3DModel::~TH3DModel()
237{
238}
239
240THnDModel::THnDModel(const ::THnD &h)
241 : fName(h.GetName()), fTitle(h.GetTitle()), fDim(h.GetNdimensions()), fNbins(fDim), fXmin(fDim), fXmax(fDim),
242 fBinEdges(fDim)
243{
244 for (int idim = 0; idim < fDim; ++idim) {
245 fNbins[idim] = h.GetAxis(idim)->GetNbins();
247 }
248}
249
250THnDModel::THnDModel(const char *name, const char *title, int dim, const int *nbins, const double *xmin,
251 const double *xmax)
252 : fName(name), fTitle(title), fDim(dim), fBinEdges(dim)
253{
254 fNbins.reserve(fDim);
255 fXmin.reserve(fDim);
256 fXmax.reserve(fDim);
257 for (int idim = 0; idim < fDim; ++idim) {
258 fNbins.push_back(nbins[idim]);
259 fXmin.push_back(xmin[idim]);
260 fXmax.push_back(xmax[idim]);
261 }
262}
263
264THnDModel::THnDModel(const char *name, const char *title, int dim, const std::vector<int> &nbins,
265 const std::vector<double> &xmin, const std::vector<double> &xmax)
266 : fName(name), fTitle(title), fDim(dim), fNbins(nbins), fXmin(xmin), fXmax(xmax), fBinEdges(dim)
267{
268}
269
270THnDModel::THnDModel(const char *name, const char *title, int dim, const int *nbins,
271 const std::vector<std::vector<double>> &xbins)
272 : fName(name), fTitle(title), fDim(dim), fXmin(dim, 0.), fXmax(dim, 64.), fBinEdges(xbins)
273{
274 fNbins.reserve(fDim);
275 for (int idim = 0; idim < fDim; ++idim) {
276 fNbins.push_back(nbins[idim]);
277 }
278}
279
280THnDModel::THnDModel(const char *name, const char *title, int dim, const std::vector<int> &nbins,
281 const std::vector<std::vector<double>> &xbins)
282 : fName(name), fTitle(title), fDim(dim), fNbins(nbins), fXmin(dim, 0.), fXmax(dim, 64.), fBinEdges(xbins)
283{
284}
285
286std::shared_ptr<::THnD> THnDModel::GetHistogram() const
287{
288 bool varbinning = false;
289 for (const auto &bins : fBinEdges) {
290 if (!bins.empty()) {
291 varbinning = true;
292 break;
293 }
294 }
295 std::shared_ptr<::THnD> h;
296 if (varbinning) {
297 h = std::make_shared<::THnD>(fName, fTitle, fDim, fNbins.data(), fBinEdges);
298 } else {
299 h = std::make_shared<::THnD>(fName, fTitle, fDim, fNbins.data(), fXmin.data(), fXmax.data());
300 }
301 return h;
302}
303THnDModel::~THnDModel() {}
304
305THnSparseDModel::THnSparseDModel(const ::THnSparseD &h)
306 : fName(h.GetName()),
307 fTitle(h.GetTitle()),
308 fDim(h.GetNdimensions()),
309 fNbins(fDim),
310 fXmin(fDim),
311 fXmax(fDim),
312 fBinEdges(fDim),
313 fChunkSize(h.GetChunkSize())
314{
315 for (int idim = 0; idim < fDim; ++idim) {
316 fNbins[idim] = h.GetAxis(idim)->GetNbins();
318 }
319}
320
321THnSparseDModel::THnSparseDModel(const char *name, const char *title, int dim, const int *nbins, const double *xmin,
322 const double *xmax, Int_t chunksize)
323 : fName(name), fTitle(title), fDim(dim), fBinEdges(dim), fChunkSize(chunksize)
324{
325 fNbins.reserve(fDim);
326 fXmin.reserve(fDim);
327 fXmax.reserve(fDim);
328 for (int idim = 0; idim < fDim; ++idim) {
329 fNbins.push_back(nbins[idim]);
330 fXmin.push_back(xmin[idim]);
331 fXmax.push_back(xmax[idim]);
332 }
333}
334
335THnSparseDModel::THnSparseDModel(const char *name, const char *title, int dim, const std::vector<int> &nbins,
336 const std::vector<double> &xmin, const std::vector<double> &xmax, Int_t chunksize)
337 : fName(name),
338 fTitle(title),
339 fDim(dim),
340 fNbins(nbins),
341 fXmin(xmin),
342 fXmax(xmax),
343 fBinEdges(dim),
344 fChunkSize(chunksize)
345{
346}
347
348THnSparseDModel::THnSparseDModel(const char *name, const char *title, int dim, const int *nbins,
349 const std::vector<std::vector<double>> &xbins, Int_t chunksize)
350 : fName(name), fTitle(title), fDim(dim), fXmin(dim, 0.), fXmax(dim, 64.), fBinEdges(xbins), fChunkSize(chunksize)
351{
352 fNbins.reserve(fDim);
353 for (int idim = 0; idim < fDim; ++idim) {
354 fNbins.push_back(nbins[idim]);
355 }
356}
357
358THnSparseDModel::THnSparseDModel(const char *name, const char *title, int dim, const std::vector<int> &nbins,
359 const std::vector<std::vector<double>> &xbins, Int_t chunksize)
360 : fName(name),
361 fTitle(title),
362 fDim(dim),
363 fNbins(nbins),
364 fXmin(dim, 0.),
365 fXmax(dim, 64.),
366 fBinEdges(xbins),
367 fChunkSize(chunksize)
368{
369}
370
371std::shared_ptr<::THnSparseD> THnSparseDModel::GetHistogram() const
372{
373 bool varbinning = false;
374 for (const auto &bins : fBinEdges) {
375 if (!bins.empty()) {
376 varbinning = true;
377 break;
378 }
379 }
380 std::shared_ptr<::THnSparseD> h;
381 if (varbinning) {
382 std::vector<TAxis> axes(fDim);
383 for (int idim = 0; idim < fDim; ++idim) {
384 axes[idim] = TAxis(fNbins[idim], fBinEdges[idim].data());
385 }
386 h = std::make_shared<::THnSparseD>(fName, fTitle, axes, fChunkSize);
387 } else {
388 h = std::make_shared<::THnSparseD>(fName, fTitle, fDim, fNbins.data(), fXmin.data(), fXmax.data(), fChunkSize);
389 }
390 return h;
391}
392THnSparseDModel::~THnSparseDModel() {}
393
394// Profiles
395
396TProfile1DModel::TProfile1DModel(const ::TProfile &h)
397 : fName(h.GetName()), fTitle(h.GetTitle()), fNbinsX(h.GetNbinsX()), fXLow(h.GetXaxis()->GetXmin()),
398 fXUp(h.GetXaxis()->GetXmax()), fYLow(h.GetYmin()), fYUp(h.GetYmax()), fOption(h.GetErrorOption())
399{
400 SetAxisProperties(h.GetXaxis(), fXLow, fXUp, fBinXEdges);
401}
402TProfile1DModel::TProfile1DModel(const char *name, const char *title, int nbinsx, double xlow, double xup,
403 const char *option)
404 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fOption(option)
405{
406}
407
408TProfile1DModel::TProfile1DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, double ylow,
409 double yup, const char *option)
410 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fYLow(ylow), fYUp(yup), fOption(option)
411{
412}
413
414TProfile1DModel::TProfile1DModel(const char *name, const char *title, int nbinsx, const float *xbins,
415 const char *option)
416 : fName(name), fTitle(title), fNbinsX(nbinsx), fOption(option)
417{
419}
420TProfile1DModel::TProfile1DModel(const char *name, const char *title, int nbinsx, const double *xbins,
421 const char *option)
422 : fName(name), fTitle(title), fNbinsX(nbinsx), fOption(option)
423{
425}
426TProfile1DModel::TProfile1DModel(const char *name, const char *title, int nbinsx, const double *xbins, double ylow,
427 double yup, const char *option)
428 : fName(name), fTitle(title), fNbinsX(nbinsx), fYLow(ylow), fYUp(yup), fOption(option)
429{
431}
432std::shared_ptr<::TProfile> TProfile1DModel::GetProfile() const
433{
434 std::shared_ptr<::TProfile> prof;
435
436 if (fBinXEdges.empty())
437 prof = std::make_shared<::TProfile>(fName, fTitle, fNbinsX, fXLow, fXUp, fYLow, fYUp, fOption);
438 else
439 prof = std::make_shared<::TProfile>(fName, fTitle, fNbinsX, fBinXEdges.data(), fYLow, fYUp, fOption);
440
441 prof->SetDirectory(nullptr); // lifetime is managed by the shared_ptr, detach from ROOT's memory management
442 return prof;
443}
444TProfile1DModel::~TProfile1DModel()
445{
446}
447
448TProfile2DModel::TProfile2DModel(const ::TProfile2D &h)
449 : fName(h.GetName()), fTitle(h.GetTitle()), fNbinsX(h.GetNbinsX()), fXLow(h.GetXaxis()->GetXmin()),
450 fXUp(h.GetXaxis()->GetXmax()), fNbinsY(h.GetNbinsY()), fYLow(h.GetYaxis()->GetXmin()),
451 fYUp(h.GetYaxis()->GetXmax()), fZLow(h.GetZmin()), fZUp(h.GetZmax()), fOption(h.GetErrorOption())
452{
453 SetAxisProperties(h.GetXaxis(), fXLow, fXUp, fBinXEdges);
454 SetAxisProperties(h.GetYaxis(), fYLow, fYUp, fBinYEdges);
455}
456TProfile2DModel::TProfile2DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, int nbinsy,
457 double ylow, double yup, const char *option)
458 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fNbinsY(nbinsy), fYLow(ylow), fYUp(yup),
459 fOption(option)
460{
461}
462
463TProfile2DModel::TProfile2DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, int nbinsy,
464 double ylow, double yup, double zlow, double zup, const char *option)
465 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fNbinsY(nbinsy), fYLow(ylow), fYUp(yup),
466 fZLow(zlow), fZUp(zup), fOption(option)
467{
468}
469
470TProfile2DModel::TProfile2DModel(const char *name, const char *title, int nbinsx, const double *xbins, int nbinsy,
471 double ylow, double yup, const char *option)
472 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy), fYLow(ylow), fYUp(yup), fOption(option)
473{
475}
476
477TProfile2DModel::TProfile2DModel(const char *name, const char *title, int nbinsx, double xlow, double xup, int nbinsy,
478 const double *ybins, const char *option)
479 : fName(name), fTitle(title), fNbinsX(nbinsx), fXLow(xlow), fXUp(xup), fNbinsY(nbinsy), fOption(option)
480{
482}
483
484TProfile2DModel::TProfile2DModel(const char *name, const char *title, int nbinsx, const double *xbins, int nbinsy,
485 const double *ybins, const char *option)
486 : fName(name), fTitle(title), fNbinsX(nbinsx), fNbinsY(nbinsy), fOption(option)
487{
490}
491
492std::shared_ptr<::TProfile2D> TProfile2DModel::GetProfile() const
493{
494 // In this method we decide how to build the profile based on the input given in the constructor of the model.
495 // There are 4 cases:
496 // 1. No custom binning for both the x and y axes: we return a profile with equally spaced binning
497 // 2./3. Custom binning only for x(y): we return a profile with custom binning for x(y) and equally spaced for y(x).
498 // 4. No custom binning: we return a profile with equally spaced bins on both axes
499 auto xEdgesEmpty = fBinXEdges.empty();
500 auto yEdgesEmpty = fBinYEdges.empty();
501 std::shared_ptr<::TProfile2D> prof;
502 if (xEdgesEmpty && yEdgesEmpty) {
503 prof = std::make_shared<::TProfile2D>(fName, fTitle, fNbinsX, fXLow, fXUp, fNbinsY, fYLow, fYUp, fZLow, fZUp,
504 fOption);
505 } else if (!xEdgesEmpty && yEdgesEmpty) {
506 prof = std::make_shared<::TProfile2D>(fName, fTitle, fNbinsX, fBinXEdges.data(), fNbinsY, fYLow, fYUp, fOption);
507 } else if (xEdgesEmpty && !yEdgesEmpty) {
508 prof = std::make_shared<::TProfile2D>(fName, fTitle, fNbinsX, fXLow, fXUp, fNbinsY, fBinYEdges.data(), fOption);
509 } else {
510 prof =
511 std::make_shared<::TProfile2D>(fName, fTitle, fNbinsX, fBinXEdges.data(), fNbinsY, fBinYEdges.data(), fOption);
512 }
513
514 prof->SetDirectory(
515 nullptr); // object's lifetime is managed by the shared_ptr, detach it from ROOT's memory management
516 return prof;
517}
518
519TProfile2DModel::~TProfile2DModel()
520{
521}
522
523} // ns RDF
524
525} // ns ROOT
void FillVector< double >(std::vector< double > &v, int size, double *a)
void FillVector(std::vector< double > &v, int size, T *a)
void SetAxisProperties(const TAxis *axis, double &low, double &up, std::vector< double > &edges)
#define a(i)
Definition RSha256.hxx:99
#define h(i)
Definition RSha256.hxx:106
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
char name[80]
Definition TGX11.cxx:110
float xmin
float xmax
A pseudo container class which is a generator of indices.
Definition TSeq.hxx:67
Class to manage histogram axis.
Definition TAxis.h:32
const TArrayD * GetXbins() const
Definition TAxis.h:138
Double_t GetXmax() const
Definition TAxis.h:142
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
Definition TAxis.cxx:521
Double_t GetXmin() const
Definition TAxis.h:141
Int_t GetNbins() const
Definition TAxis.h:127
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
Definition TAxis.cxx:531
std::vector< double > fBinXEdges
std::vector< double > fBinYEdges
std::vector< double > fBinXEdges
std::vector< double > fBinZEdges
std::vector< double > fBinYEdges
std::vector< double > fBinXEdges
std::vector< double > fXmax
std::vector< std::vector< double > > fBinEdges
std::vector< double > fXmin
std::vector< int > fNbins
std::vector< std::vector< double > > fBinEdges
std::vector< double > fXmin
std::vector< int > fNbins
std::vector< double > fXmax
std::vector< double > fBinXEdges
std::vector< double > fBinXEdges
std::vector< double > fBinYEdges