57db7c7906a7abfa6c94bdb95f70bbf1d8863a6b
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / AliMultiplicityCorrection.h
1 #ifndef ALIMULTIPLICITYCORRECTION_H
2 #define ALIMULTIPLICITYCORRECTION_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 #include <TCollection.h>
10 #include <TNamed.h>
11
12 //
13 // class that contains the correction matrix and the functions for
14 // correction the multiplicity spectrum
15 //
16
17 class TH1;
18 class TH2;
19 class TH1F;
20 class TH2F;
21 class TH3F;
22
23 class AliMultiplicityCorrection : public TNamed {
24   public:
25     AliMultiplicityCorrection();
26     AliMultiplicityCorrection(const Char_t* name, const Char_t* title);
27     virtual ~AliMultiplicityCorrection();
28
29     virtual Long64_t Merge(TCollection* list);
30
31     void FillMeasured(Float_t vtx, Int_t measured05, Int_t measured10, Int_t measured15, Int_t measured20);
32     void FillGenerated(Float_t vtx, Int_t generated05, Int_t generated10, Int_t generated15, Int_t generated20, Int_t generatedAll);
33
34     void FillCorrection(Float_t vtx, Int_t generated05, Int_t generated10, Int_t generated15, Int_t generated20, Int_t generatedAll, Int_t measured05, Int_t measured10, Int_t measured15, Int_t measured20);
35
36     Bool_t LoadHistograms(const Char_t* dir);
37     void SaveHistograms();
38     void DrawHistograms();
39     void DrawComparison(const char* name, Int_t mcID, Int_t esdCorrId, Bool_t normalizeESD = kTRUE);
40
41     void ApplyMinuitFit(Int_t inputRange, Bool_t fullPhaseSpace, Bool_t check = kFALSE);
42     void ApplyMinuitFitAll();
43
44     void ApplyBayesianMethod(Int_t inputRange, Bool_t fullPhaseSpace);
45
46     void ApplyGaussianMethod(Int_t inputRange, Bool_t fullPhaseSpace);
47
48     TH2F* GetMultiplicityESD(Int_t i) { return fMultiplicityESD[i]; }
49     TH2F* GetMultiplicityMC(Int_t i) { return fMultiplicityMC[i]; }
50     TH3F* GetCorrelation(Int_t i) { return fCorrelation[i]; }
51
52     void SetMultiplicityESD(Int_t i, TH2F* hist) { fMultiplicityESD[i] = hist; }
53     void SetMultiplicityMC(Int_t i, TH2F* hist) { fMultiplicityMC[i] = hist; }
54     void SetCorrelation(Int_t i, TH3F* hist) { fCorrelation[i] = hist; }
55
56     TH1F* GetMultiplicityESDCorrected(Int_t i) { return fMultiplicityESDCorrected[i]; }
57
58     static void NormalizeToBinWidth(TH1* hist);
59     static void NormalizeToBinWidth(TH2* hist);
60
61   protected:
62     enum { kESDHists = 4, kMCHists = 5, kCorrHists = 8 };
63
64     static const Int_t fgMaxParams; // number of fit params
65
66     static Double_t RegularizationPol0(Double_t *params);
67     static Double_t RegularizationPol1(Double_t *params);
68     static Double_t RegularizationTotalCurvature(Double_t *params);
69
70     static void MinuitFitFunction(Int_t&, Double_t*, Double_t& chi2, Double_t *params, Int_t);
71
72     void SetupCurrentHists(Int_t inputRange, Bool_t fullPhaseSpace);
73
74     static TH1* fCurrentESD;         // static variable to be accessed by MINUIT
75     static TH1* fCurrentCorrelation; // static variable to be accessed by MINUIT
76
77     TH2F* fMultiplicityESD[kESDHists]; // multiplicity histogram: vtx vs multiplicity; array: |eta| < 0.5, 1, 1.5, 2 (0..3)
78     TH2F* fMultiplicityMC[kMCHists];   // multiplicity histogram: vtx vs multiplicity; array: |eta| < 0.5, 1, 1.5, 2, inf (0..4)
79
80     TH3F* fCorrelation[kCorrHists];    // vtx vs. (gene multiplicity) vs. (meas multiplicity); array: |eta| < 0.5, 1, 1.5, 2 (0..3 and 4..7), the first corrects to the eta range itself, the second to full phase space
81     TH1F* fMultiplicityESDCorrected[kCorrHists]; // corrected histograms
82
83  private:
84     AliMultiplicityCorrection(const AliMultiplicityCorrection&);
85     AliMultiplicityCorrection& operator=(const AliMultiplicityCorrection&);
86
87   ClassDef(AliMultiplicityCorrection, 1);
88 };
89
90 #endif