]> git.uio.no Git - u/mrichter/AliRoot.git/blame - CORRFW/AliCFUnfolding.h
AliTPCcalibDB.cxx AliTPCcalibDB.h - Adding AliFatal in case of missing critical calib...
[u/mrichter/AliRoot.git] / CORRFW / AliCFUnfolding.h
CommitLineData
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"
15
85b6bda9 16class TF1;
17
c0b10ad4 18class 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);
85b6bda9 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
c0b10ad4 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;}
85b6bda9 45 THnSparse* GetEstMeasured() const {return fMeasuredEstimate;}
85f9f9e1 46 THnSparse* GetMeasured() const {return fMeasured;}
85b6bda9 47 THnSparse* GetConditional() const {return fConditional;}
48 TF1* GetSmoothFunction() const {return fSmoothFunction;}
c0b10ad4 49
50 private :
51
52 // user-related settings
53 THnSparse *fResponse; // Response matrix : dimensions must be 2N = 2 x (number of variables)
85b6bda9 54 // dimensions 0 -> N-1 must be filled with reconstructed values
55 // dimensions N -> 2N-1 must be filled with generated values
c0b10ad4 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
c0b10ad4 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
85b6bda9 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"
c0b10ad4 68
69 // internal settings
85b6bda9 70 THnSparse *fOriginalPrior; // This is the original prior distribution : will not be modified
c0b10ad4 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
85b6bda9 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
c0b10ad4 93
94 ClassDef(AliCFUnfolding,0);
95};
96
97#endif