]> git.uio.no Git - u/mrichter/AliRoot.git/blob - CORRFW/AliCFUnfolding.h
protection for ProdVtxRange2D added
[u/mrichter/AliRoot.git] / CORRFW / AliCFUnfolding.h
1
2 #ifndef ALICFUNFOLDING_H
3 #define ALICFUNFOLDING_H
4
5 //--------------------------------------------------------------------//
6 //                                                                    //
7 // AliCFUnfolding Class                                               //
8 // Class to handle general unfolding procedure using bayesian method  //
9 //                                                                    //
10 // Author : renaud.vernet@cern.ch                                     //
11 //--------------------------------------------------------------------//
12
13 #include "TNamed.h"
14 #include "THnSparse.h"
15
16 class TF1;
17
18 class AliCFUnfolding : public TNamed {
19
20  public :
21   AliCFUnfolding();
22   AliCFUnfolding(const Char_t* name, const Char_t* title, const Int_t nVar, 
23                  const THnSparse* response, const THnSparse* efficiency, const THnSparse* measured, const THnSparse* prior=0x0);
24   AliCFUnfolding(const AliCFUnfolding& c);
25   AliCFUnfolding& operator= (const AliCFUnfolding& c);
26   ~AliCFUnfolding();
27
28   void SetMaxNumberOfIterations(Int_t n)  {fMaxNumIterations=n;}
29   void SetMaxChi2(Double_t val)           {fMaxChi2=val;}
30   void SetMaxChi2PerDOF(Double_t val);
31   void UseSmoothing(TF1* fcn=0x0, Option_t* opt="iremn") { // if fcn=0x0 then smooth using neighbouring bins 
32     fUseSmoothing=kTRUE;                                   // this function must NOT be used if fNVariables > 3
33     fSmoothFunction=fcn;                                   // the option "opt" is used if "fcn" is specified
34     fSmoothOption=opt;
35   } 
36                                                                                                 
37   void Unfold();
38
39   THnSparse* GetResponse()        const {return fResponse;}
40   THnSparse* GetInverseResponse() const {return fInverseResponse;}
41   THnSparse* GetPrior()           const {return fPrior;}
42   THnSparse* GetOriginalPrior()   const {return fOriginalPrior;}
43   THnSparse* GetEfficiency()      const {return fEfficiency;}
44   THnSparse* GetUnfolded()        const {return fUnfolded;}
45   THnSparse* GetEstMeasured()     const {return fMeasuredEstimate;}
46   THnSparse* GetMeasured()        const {return fMeasured;}
47   THnSparse* GetConditional()     const {return fConditional;}
48   TF1*       GetSmoothFunction()  const {return fSmoothFunction;}
49
50  private :
51   
52   // user-related settings
53   THnSparse     *fResponse;           // Response matrix : dimensions must be 2N = 2 x (number of variables)
54                                       // dimensions 0 ->  N-1 must be filled with reconstructed values
55                                       // dimensions N -> 2N-1 must be filled with generated values
56   THnSparse     *fPrior;              // This is the assumed generated distribution : dimensions must be N = number of variables
57                                       // it will be used at the first step 
58                                       // then will be updated automatically at each iteration
59   THnSparse     *fEfficiency;         // Efficiency map : dimensions must be N = number of variables
60                                       // this map must be filled only with "true" values of the variables (should not include resolution effects)
61   THnSparse     *fMeasured;           // Measured spectrum to be unfolded : dimensions must be N = number of variables
62   Int_t          fMaxNumIterations;   // Maximum  number of iterations to be performed
63   Int_t          fNVariables;         // Number of variables used in analysis spectra (pt, y, ...)
64   Double_t       fMaxChi2;            // Maximum Chi2 between unfolded and prior distributions. 
65   Bool_t         fUseSmoothing;       // Smooth the unfolded sectrum at each iteration
66   TF1           *fSmoothFunction;     // Function used to smooth the unfolded spectrum
67   Option_t      *fSmoothOption;       // Option to use during the fit (with fSmoothFunction) ; default is "iremn"
68
69   // internal settings
70   THnSparse     *fOriginalPrior;     // This is the original prior distribution : will not be modified
71   THnSparse     *fInverseResponse;   // Inverse response matrix
72   THnSparse     *fMeasuredEstimate;  // Estimation of the measured (M) spectrum given the a priori (T) distribution
73   THnSparse     *fConditional;       // Matrix holding the conditional probabilities P(M|T)
74   THnSparse     *fProjResponseInT;   // Projection of the response matrix on TRUE axis
75   THnSparse     *fUnfolded;          // Unfolded spectrum
76   Int_t         *fCoordinates2N;     // Coordinates in 2N (measured,true) space
77   Int_t         *fCoordinatesN_M;    // Coordinates in measured space
78   Int_t         *fCoordinatesN_T;    // Coordinates in true space
79   
80
81   // functions
82   void     Init();                  // initialisation of the internal settings
83   void     GetCoordinates();        // gets a cell coordinates in Measured and True space
84   void     CreateConditional();     // creates the conditional matrix from the response matrix
85   void     CreateEstMeasured();     // creates the measured spectrum estimation from the conditional matrix and the prior distribution
86   void     CreateInvResponse();     // creates the inverse response function (Bayes Theorem) from the conditional matrix and the prior distribution
87   void     CreateUnfolded();        // creates the unfolded spectrum from the inverse response matrix and the measured distribution
88   void     CreateFlatPrior();       // creates a flat a priori distribution in case the one given in the constructor is null
89   Double_t GetChi2();               // returns the chi2 between unfolded and prior spectra
90   Short_t  Smooth();                // function calling smoothing methods
91   Short_t  SmoothUsingNeighbours(); // smoothes the unfolded spectrum using the neighbouring cells
92   Short_t  SmoothUsingFunction();   // smoothes the unfolded spectrum using a fit function
93
94   ClassDef(AliCFUnfolding,0);
95 };
96
97 #endif