2 #ifndef ALICFUNFOLDING_H
3 #define ALICFUNFOLDING_H
5 //--------------------------------------------------------------------//
7 // AliCFUnfolding Class //
8 // Class to handle general unfolding procedure //
9 // For the moment only bayesian unfolding is supported //
10 // The next steps are to add chi2 minimisation and weighting methods //
12 // Author : renaud.vernet@cern.ch //
13 //--------------------------------------------------------------------//
16 #include "THnSparse.h"
18 class AliCFUnfolding : public TNamed {
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);
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(Bool_t b=kTRUE) {fUseSmoothing=b;}
34 THnSparse* GetResponse() const {return fResponse;}
35 THnSparse* GetInverseResponse() const {return fInverseResponse;}
36 THnSparse* GetPrior() const {return fPrior;}
37 THnSparse* GetOriginalPrior() const {return fOriginalPrior;}
38 THnSparse* GetEfficiency() const {return fEfficiency;}
39 THnSparse* GetUnfolded() const {return fUnfolded;}
43 // user-related settings
44 THnSparse *fResponse; // Response matrix : dimensions must be 2N = 2 x (number of variables)
45 // first N dimensions must be filled with reconstructed values
46 // last N dimensions must be filled with generated values
47 THnSparse *fPrior; // This is the assumed generated distribution : dimensions must be N = number of variables
48 // it will be used at the first step
49 // then will be updated automatically at each iteration
50 THnSparse *fOriginalPrior; // This is the original prior distribution : will not be modified
51 THnSparse *fEfficiency; // Efficiency map : dimensions must be N = number of variables
52 // this map must be filled only with "true" values of the variables (should not include resolution effects)
53 THnSparse *fMeasured; // Measured spectrum to be unfolded : dimensions must be N = number of variables
54 Int_t fMaxNumIterations; // Maximum number of iterations to be performed
55 Int_t fNVariables; // Number of variables used in analysis spectra (pt, y, ...)
56 Double_t fMaxChi2; // Maximum Chi2 between unfolded and prior distributions.
57 Bool_t fUseSmoothing; // Smooth the unfolded sectrum at each iteration
60 THnSparse *fInverseResponse; // Inverse response matrix
61 THnSparse *fMeasuredEstimate; // Estimation of the measured (M) spectrum given the a priori (T) distribution
62 THnSparse *fConditional; // Matrix holding the conditional probabilities P(M|T)
63 THnSparse *fProjResponseInT; // Projection of the response matrix on TRUE axis
64 THnSparse *fUnfolded; // Unfolded spectrum
65 Int_t *fCoordinates2N; // Coordinates in 2N (measured,true) space
66 Int_t *fCoordinatesN_M; // Coordinates in measured space
67 Int_t *fCoordinatesN_T; // Coordinates in true space
71 void Init(); // initialisation of the internal settings
72 void GetCoordinates(); // gets a cell coordinates in Measured and True space
73 void CreateConditional(); // creates the conditional matrix from the response matrix
74 void CreateEstMeasured(); // creates the measured spectrum estimation from the conditional matrix and the prior distribution
75 void CreateInvResponse(); // creates the inverse response function (Bayes Theorem) from the conditional matrix and the prior distribution
76 void CreateUnfolded(); // creates the unfolded spectrum from the inverse response matrix and the measured distribution
77 void CreateFlatPrior(); // creates a flat a priori distribution in case the one given in the constructor is null
78 Double_t GetChi2(); // returns the chi2 between unfolded and prior spectra
79 void Smooth(); // smooth the unfolded spectrum using the neighbouring cells
81 ClassDef(AliCFUnfolding,0);