10Axis::Axis(TAxis * base,
int rebin,
int rebinShift,
int min,
int max)
11 : TObject(), fBaseAxis(base), fRebin(rebin), fRebinStart(rebinShift + 1), fBinMin(min), fBinMax(max)
36 Printf(
"Base Axis is not set !!!");
40 Printf(
"%*cname=%s nbins=%d rebin=%d rebinShift=%d step=%.2f range=[%d,%d] rangeBase=[%d,%d]...", spaces,
' ',
44 if (opt.Contains(
"baseOnly")) {
47 if (opt.Contains(
"ranges") &&
fChildren.size() == 0) {
50 int binMax = (binMin +
fRebin) - 1;
51 Printf(
"%*cbin=%d [%.2f,%.2f]", spaces + 2,
' ', iBin + 1,
fBaseAxis->GetBinLowEdge(binMin),
56 child->Print(option, spaces + 2);
67 Printf(
"Error: Out of range of in rangeBase: binMax=%d > baseBinMax=%d", axis->
GetBinMaxBase(),
fBinMax);
68 Printf(
" Base axis:");
70 Printf(
" New axis :");
93 Printf(
"Adding range rebin=%d nBins=%d ...", rebin, nBins);
94 int rebinShift = (
fBinMin % rebin) - 1;
95 int minFromBase = (
fBinMin / rebin) + 1;
99 return AddChild(rebin, rebinShift, minFromBase, nBins,
"ranges");
101 Printf(
"Adding range rebin=%d nBins=%d ...", rebin, nBins);
106 nBinsBase += c->GetRebin() * (c->GetBinMax() - c->GetBinMin() + 1);
109 int rebinShift = nBinsBase % rebin;
110 int min = ((nBinsBase - rebinShift) / rebin) + 1;
111 int max = min + nBins - 1;
116 return AddChild(rebin, rebinShift, min, max,
"ranges");
125 Printf(
"Checking ranage validity ...");
130 Printf(
"Error: No ranges defined !!!");
137 int binFirst = child->GetBinMinBase() +
fBinMin;
138 int binLast = child->GetBinMaxBase() +
fBinMin;
145 if (bin == binFirst) {
152 child->Print(
"ranges");
153 Printf(
"Invalid bin range: %d != %d in axis below", bin, binFirst);
170 bins[count++] =
fBaseAxis->GetBinLowEdge(child->GetBinMinBase());
173 for (
int iBin = child->GetBinMin(); iBin <= child->GetBinMax(); iBin++) {
174 bins[count++] =
fBaseAxis->GetBinUpEdge(iBin * child->GetRebin() + child->GetRebinShift());
180 axis->Set(count - 1, bins);
int GetBinMaxBase() const
Returns base maximum.
int fRebinStart
rebin start
TAxis * fBaseAxis
Base axis.
int GetBinMinBase() const
Returns base minimum.
void AddChild(Axis *axis)
Add axis child.
int fNBins
Total number of bins.
virtual void Print(Option_t *option="") const
Print function.
void SetBinMin(int min)
Sets bin minimum.
Axis * AddRange(int rebin, int nBins=-1)
Add range.
std::vector< Axis * > fChildren
list of children axis
int GetRebinShift() const
Returns rebin shift.
Axis(TAxis *base=nullptr, int rebin=1, int rebinShift=0, int min=1, int max=-1)
void SetBinMax(int max)
Sets bin maximum.
void FillAxis(TAxis *axis)
Fill axis.
void SetRebinShift(int rebinShift)
Sets rebin shift.
bool IsRangeValid()
Checks if range is valid.