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)