13 #ifndef ROOT_TUnfoldBinning
14 #define ROOT_TUnfoldBinning
53 class TUnfoldBinning :
public TNamed {
56 TUnfoldBinning *parentNode;
58 TUnfoldBinning *childNode;
60 TUnfoldBinning *nextNode;
62 TUnfoldBinning *prevNode;
66 TObjArray *fAxisLabelList;
72 Int_t fDistributionSize;
78 TObject *fBinFactorFunction;
80 Double_t fBinFactorConstant;
87 TUnfoldBinning(
const char *name=0,Int_t nBins=0,
const char *binNames=0);
88 TUnfoldBinning(
const TAxis &axis,Int_t includeUnderflow,Int_t includeOverflow);
89 TUnfoldBinning *AddBinning
90 (TUnfoldBinning *binning);
91 TUnfoldBinning *AddBinning(
const char *name,Int_t nBins=0,
const char *binNames=0);
92 Bool_t AddAxis(
const char *name,Int_t nBins,
const Double_t *binBorders,
93 Bool_t hasUnderflow,Bool_t hasOverflow);
94 Bool_t AddAxis(
const char *name,Int_t nBins,Double_t xMin,Double_t xMax,
95 Bool_t hasUnderflow,Bool_t hasOverflow);
96 Bool_t AddAxis(
const TAxis &axis,Bool_t includeUnderflow,Bool_t includeOverflow);
97 virtual ~TUnfoldBinning(
void);
98 void PrintStream(std::ostream &out,Int_t indent=0,
int debug=0)
const;
99 void SetBinFactorFunction(Double_t normalisation,TF1 *userFunc=0);
103 inline TUnfoldBinning
const *GetChildNode(
void)
const {
return childNode; }
105 inline TUnfoldBinning
const *GetPrevNode(
void)
const {
return prevNode; }
107 inline TUnfoldBinning
const *GetNextNode(
void)
const {
return nextNode; }
109 inline TUnfoldBinning
const *GetParentNode(
void)
const {
return parentNode; }
110 TUnfoldBinning
const *FindNode(
char const *name)
const;
112 TUnfoldBinning
const *GetRootNode(
void)
const;
115 Int_t GetTH1xNumberOfBins(Bool_t originalAxisBinning=kTRUE,
const char *axisSteering=0)
const;
116 TH1 *CreateHistogram(
const char *histogramName,Bool_t originalAxisBinning=kFALSE,Int_t **binMap=0,
const char *histogramTitle=0,
const char *axisSteering=0)
const;
117 TH2D *CreateErrorMatrixHistogram(
const char *histogramName,Bool_t originalAxisBinning,Int_t **binMap=0,
const char *histogramTitle=0,
const char *axisSteering=0)
const;
118 static TH2D *CreateHistogramOfMigrations(TUnfoldBinning
const *xAxis,
119 TUnfoldBinning
const *yAxis,
120 char const *histogramName,
121 Bool_t originalXAxisBinning=kFALSE,
122 Bool_t originalYAxisBinning=kFALSE,
123 char const *histogramTitle=0);
124 TH1 *ExtractHistogram(
const char *histogramName,
const TH1 *globalBins,
const TH2 *globalBinsEmatrix=0,Bool_t originalAxisBinning=kTRUE,
const char *axisSteering=0)
const;
126 Int_t *CreateEmptyBinMap(
void)
const;
127 void SetBinMapEntry(Int_t *binMap,Int_t globalBin,Int_t destBin)
const;
128 Int_t FillBinMap1D(Int_t *binMap,
const char *axisSteering,
129 Int_t firstBinX)
const;
131 Int_t GetGlobalBinNumber(Double_t x)
const;
132 Int_t GetGlobalBinNumber(Double_t x,Double_t y)
const;
133 Int_t GetGlobalBinNumber(Double_t x,Double_t y,Double_t z)
const;
134 Int_t GetGlobalBinNumber(Double_t x0,Double_t x1,Double_t x2,Double_t x3)
const;
135 Int_t GetGlobalBinNumber(Double_t x0,Double_t x1,Double_t x2,Double_t x3,Double_t x4)
const;
136 Int_t GetGlobalBinNumber(Double_t x0,Double_t x1,Double_t x2,Double_t x3,Double_t x4,Double_t x5)
const;
137 Int_t GetGlobalBinNumber(
const Double_t *x,Int_t *isBelow=0,Int_t *isAbove=0)
const;
139 inline Int_t GetStartBin(
void)
const {
return fFirstBin; }
141 inline Int_t GetEndBin(
void)
const {
return fLastBin; }
142 virtual Bool_t IsBinFactorGlobal(
void)
const;
143 Double_t GetGlobalFactor(
void)
const;
146 TString GetBinName(Int_t iBin)
const;
147 Double_t GetBinSize(Int_t iBin)
const;
148 virtual Double_t GetBinFactor(Int_t iBin)
const;
149 void GetBinUnderflowOverflowStatus(Int_t iBin,Int_t *uStatus,Int_t *oStatus)
const;
150 Int_t GetBinNeighbours(Int_t globalBin,Int_t axis,
151 Int_t *prev,Double_t *distPrev,
152 Int_t *next,Double_t *distNext,
153 Bool_t isPeriodic=kFALSE)
const;
156 inline Int_t GetDistributionNumberOfBins(
void)
const {
return fDistributionSize; }
158 inline Int_t GetDistributionDimension(
void)
const {
return fAxisList->GetEntriesFast(); }
159 virtual Double_t GetDistributionAverageBinSize(Int_t axis,Bool_t includeUnderflow, Bool_t includeOverflow)
const;
161 inline TVectorD
const *GetDistributionBinning(Int_t axis)
const {
162 return (TVectorD
const *)fAxisList->At(axis); }
164 inline TString GetDistributionAxisLabel(Int_t axis)
const {
165 return ((TObjString
const *)fAxisLabelList->At(axis))->GetString(); }
167 virtual Double_t GetDistributionUnderflowBinWidth(Int_t axis)
const;
168 virtual Double_t GetDistributionOverflowBinWidth(Int_t axis)
const;
169 virtual Double_t GetDistributionBinCenter(Int_t axis,Int_t bin)
const;
170 Bool_t HasUnconnectedBins(
void)
const;
171 const TObjString *GetUnconnectedBinName(Int_t bin)
const;
173 Bool_t HasUnderflow(
int axis)
const {
return fHasUnderflow & (1<<axis); }
175 Bool_t HasOverflow(
int axis)
const {
return fHasOverflow & (1<<axis); }
176 void DecodeAxisSteering(
const char *axisSteering,
const char *options,
177 Int_t *isOptionGiven)
const;
180 TUnfoldBinning *GetRootNode(
void);
181 void Initialize(Int_t nBins);
182 Int_t UpdateFirstLastBin(Bool_t startWithRootNode=kTRUE);
183 TUnfoldBinning
const *ToAxisBins(Int_t globalBin,Int_t *axisBins)
const;
184 Int_t ToGlobalBin(Int_t
const *axisBins,Int_t *isBelow=0,Int_t *isAbove=0)
const;
185 TString BuildHistogramTitle(
const char *histogramName,
const char *histogramTitle,
186 Int_t
const *axisList)
const;
187 TString BuildHistogramTitle2D(
const char *histogramName,
const char *histogramTitle,
188 Int_t xAxis,
const TUnfoldBinning *yAxisBinning,Int_t yAxis)
const;
189 Int_t GetTHxxBinning(Int_t maxDim,Int_t *axisBins,Int_t *axisList,
const char *axisSteering)
const;
190 Int_t GetTHxxBinningSingleNode(Int_t maxDim,Int_t *axisBins,Int_t *axisList,
const char *axisSteering)
const;
191 Int_t GetTHxxBinsRecursive(
const char *axisSteering)
const;
192 const TUnfoldBinning *GetNonemptyNode(
void)
const;
193 Int_t *CreateBinMap(
const TH1 *hist,Int_t nDim,
const Int_t *axisList,
const char *axisSteering)
const;
194 Int_t FillBinMapRecursive(Int_t startBin,
const char *axisSteering,
195 Int_t *binMap)
const;
196 Int_t FillBinMapSingleNode(
const TH1 *hist,Int_t startBin,Int_t nDim,
const Int_t *axisList,
const char *axisSteering,Int_t *binMap)
const;
197 void SetBinFactor(Double_t normalisation,TObject *factors);
199 ClassDef(TUnfoldBinning, TUnfold_CLASS_VERSION)