]>
Commit | Line | Data |
---|---|---|
c0b10ad4 | 1 | |
2 | #ifndef ALICFUNFOLDING_H | |
3 | #define ALICFUNFOLDING_H | |
4 | ||
5 | //--------------------------------------------------------------------// | |
6 | // // | |
7 | // AliCFUnfolding Class // | |
fb494025 | 8 | // Class to handle general unfolding procedure using bayesian method // |
c0b10ad4 | 9 | // // |
10 | // Author : renaud.vernet@cern.ch // | |
11 | //--------------------------------------------------------------------// | |
12 | ||
13 | #include "TNamed.h" | |
14 | #include "THnSparse.h" | |
a9500e70 | 15 | #include "AliLog.h" |
c0b10ad4 | 16 | |
85b6bda9 | 17 | class TF1; |
769f5114 | 18 | class TRandom3; |
85b6bda9 | 19 | |
c0b10ad4 | 20 | class AliCFUnfolding : public TNamed { |
21 | ||
22 | public : | |
a9500e70 | 23 | |
c0b10ad4 | 24 | AliCFUnfolding(); |
25 | AliCFUnfolding(const Char_t* name, const Char_t* title, const Int_t nVar, | |
a9500e70 | 26 | const THnSparse* response, const THnSparse* efficiency, const THnSparse* measured, const THnSparse* prior=0x0, |
27 | Double_t maxConvergencePerDOF = 1.e-06, UInt_t randomSeed = 0, | |
28 | Int_t maxNumIterations = 10); | |
c0b10ad4 | 29 | ~AliCFUnfolding(); |
a9500e70 | 30 | void UnsetCorrelatedErrors() {AliError("===================> DEPRECATED <=====================");} |
31 | void SetUseCorrelatedErrors() {AliError("===================> DEPRECATED <=====================");} | |
32 | void SetMaxNumberOfIterations(Int_t n = 10) { | |
33 | AliError("===================> DEPRECATED : should be set in constructor <====================="); | |
34 | AliError("===================> DEPRECATED : will be removed soon <====================="); | |
35 | fMaxNumIterations = n; | |
769f5114 | 36 | } |
769f5114 | 37 | |
85b6bda9 | 38 | void UseSmoothing(TF1* fcn=0x0, Option_t* opt="iremn") { // if fcn=0x0 then smooth using neighbouring bins |
39 | fUseSmoothing=kTRUE; // this function must NOT be used if fNVariables > 3 | |
40 | fSmoothFunction=fcn; // the option "opt" is used if "fcn" is specified | |
41 | fSmoothOption=opt; | |
42 | } | |
43 | ||
c0b10ad4 | 44 | void Unfold(); |
45 | ||
5a575436 | 46 | const THnSparse* GetResponse() const {return fResponseOrig;} |
47 | const THnSparse* GetEfficiency() const {return fEfficiencyOrig;} | |
48 | const THnSparse* GetMeasured() const {return fMeasuredOrig;} | |
49 | const THnSparse* GetOriginalPrior() const {return fPriorOrig;} | |
50 | THnSparse* GetInverseResponse() const {return fInverseResponse;} | |
51 | THnSparse* GetPrior() const {return fPrior;} | |
52 | THnSparse* GetUnfolded() const {return fUnfoldedFinal;} | |
53 | THnSparse* GetEstMeasured() const {return fMeasuredEstimate;} | |
54 | THnSparse* GetConditional() const {return fConditional;} | |
55 | TF1* GetSmoothFunction() const {return fSmoothFunction;} | |
56 | THnSparse* GetDeltaUnfoldedProfile() const {return fDeltaUnfoldedP;} | |
57 | Int_t GetDOF(); // Returns number of degrees of freedom | |
c0b10ad4 | 58 | |
7036630f | 59 | static Short_t SmoothUsingNeighbours(THnSparse*); // smoothes the unfolded spectrum using the neighbouring cells |
60 | ||
c0b10ad4 | 61 | private : |
67f40e08 | 62 | AliCFUnfolding(const AliCFUnfolding& c); |
63 | AliCFUnfolding& operator= (const AliCFUnfolding& c); | |
c0b10ad4 | 64 | |
5a575436 | 65 | // |
c0b10ad4 | 66 | // user-related settings |
5a575436 | 67 | // |
68 | const THnSparse *fResponseOrig; // Response matrix : dimensions must be 2N = 2 x (number of variables) | |
69 | // dimensions 0 -> N-1 must be filled with reconstructed values | |
70 | // dimensions N -> 2N-1 must be filled with generated values | |
71 | const THnSparse *fPriorOrig; // This is the assumed generated distribution : dimensions must be N = number of variables | |
72 | // it will be used at the first step | |
73 | // then will be updated automatically at each iteration | |
74 | const THnSparse *fEfficiencyOrig; // Efficiency map : dimensions must be N = number of variables (modified) | |
75 | // this map must be filled only with "true" values of the variables (should not do "bin smearing") | |
76 | const THnSparse *fMeasuredOrig; // Measured spectrum to be unfolded : dimensions must be N = number of variables (modified) | |
77 | ||
78 | Int_t fMaxNumIterations; // Maximum number of iterations to be performed | |
79 | Int_t fNVariables; // Number of variables used in analysis spectra (pt, y, ...) | |
80 | Bool_t fUseSmoothing; // Smooth the unfolded sectrum at each iteration; default is kFALSE | |
81 | TF1 *fSmoothFunction; // Function used to smooth the unfolded spectrum | |
82 | Option_t *fSmoothOption; // Option to use during the fit (with fSmoothFunction) ; default is "iremn" | |
83 | ||
84 | // | |
c0b10ad4 | 85 | // internal settings |
5a575436 | 86 | // |
87 | Double_t fMaxConvergence; // Convergence criterion in case of correlated error calculation | |
88 | Int_t fNRandomIterations; // Number of random distributed measured spectra | |
89 | THnSparse *fResponse; // Copy of the original response matrix (modified) | |
90 | THnSparse *fPrior; // Copy of the original prior spectrum (modified) | |
91 | THnSparse *fEfficiency; // Copy of original efficiency (modified) | |
92 | THnSparse *fMeasured; // Copy of the original measureed spectrum (modified) | |
93 | THnSparse *fInverseResponse; // Inverse response matrix | |
94 | THnSparse *fMeasuredEstimate; // Estimation of the measured (M) spectrum given the a priori (T) distribution | |
95 | THnSparse *fConditional; // Matrix holding the conditional probabilities P(M|T) | |
96 | THnSparse *fUnfolded; // Unfolded spectrum (modified before and during error calculation) | |
97 | THnSparse *fUnfoldedFinal; // Final unfolded spectrum | |
98 | Int_t *fCoordinates2N; // Coordinates in 2N (measured,true) space | |
99 | Int_t *fCoordinatesN_M; // Coordinates in measured space | |
100 | Int_t *fCoordinatesN_T; // Coordinates in true space | |
769f5114 | 101 | |
102 | ||
103 | /* correlated error calculation */ | |
5a575436 | 104 | THnSparse *fRandomResponse; // Randomized distribution for each bin of the response matrix to calculate correlated errors |
105 | THnSparse *fRandomEfficiency; // Randomized distribution for each bin of the efficiency spectrum to calculate correlated errors | |
106 | THnSparse *fRandomMeasured; // Randomized distribution for each bin of the measured spectrum to calculate correlated errors | |
769f5114 | 107 | TRandom3 *fRandom3; // Object to get random number following Poisson distribution |
a9500e70 | 108 | THnSparse *fDeltaUnfoldedP; // Profile of the delta-unfolded distribution |
109 | THnSparse *fDeltaUnfoldedN; // Entries of the delta-unfolded distribution (count for each bin) | |
110 | Short_t fNCalcCorrErrors; // Book-keeping to prevend infinite loop | |
769f5114 | 111 | UInt_t fRandomSeed; // Random seed |
112 | ||
c0b10ad4 | 113 | |
114 | // functions | |
85b6bda9 | 115 | void Init(); // initialisation of the internal settings |
116 | void GetCoordinates(); // gets a cell coordinates in Measured and True space | |
117 | void CreateConditional(); // creates the conditional matrix from the response matrix | |
118 | void CreateEstMeasured(); // creates the measured spectrum estimation from the conditional matrix and the prior distribution | |
119 | void CreateInvResponse(); // creates the inverse response function (Bayes Theorem) from the conditional matrix and the prior distribution | |
120 | void CreateUnfolded(); // creates the unfolded spectrum from the inverse response matrix and the measured distribution | |
121 | void CreateFlatPrior(); // creates a flat a priori distribution in case the one given in the constructor is null | |
122 | Double_t GetChi2(); // returns the chi2 between unfolded and prior spectra | |
123 | Short_t Smooth(); // function calling smoothing methods | |
85b6bda9 | 124 | Short_t SmoothUsingFunction(); // smoothes the unfolded spectrum using a fit function |
c0b10ad4 | 125 | |
769f5114 | 126 | /* correlated error calculation */ |
127 | Double_t GetConvergence(); // Returns convergence criterion | |
128 | void CalculateCorrelatedErrors(); // Calculates correlated errors for the final unfolded spectrum | |
769f5114 | 129 | void CreateRandomizedDist(); // Create randomized dist from measured distribution |
130 | void FillDeltaUnfoldedProfile(); // Fills the fDeltaUnfoldedP profile | |
131 | void SetMaxConvergencePerDOF (Double_t val); | |
132 | ||
133 | ClassDef(AliCFUnfolding,1); | |
c0b10ad4 | 134 | }; |
135 | ||
136 | #endif |