]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/Base/AliUEHist.h
z-vtx binnning for MC
[u/mrichter/AliRoot.git] / PWGCF / Correlations / Base / AliUEHist.h
1 #ifndef AliUEHist_H
2 #define AliUEHist_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: AliUEHist.h 20164 2007-08-14 15:31:50Z morsch $ */
8
9 // encapsulate histogram and corrections for one underlying event histogram
10
11 #include "TObject.h"
12 #include "TString.h"
13
14 class AliCFContainer;
15 class TH1;
16 class TH1F;
17 class TH3;
18 class TH3F;
19 class TH1D;
20 class TH2;
21 class TH2D;
22 class TCollection;
23 class AliCFGridSparse;
24 class THnSparse;
25 class THnBase;
26
27 class AliUEHist : public TObject
28 {
29  public:
30   AliUEHist(const char* reqHist = "");
31   virtual ~AliUEHist();
32   
33   const UInt_t fkRegions;
34   enum Region { kToward = 0, kAway, kMin, kMax };
35   
36   static const Int_t fgkCFSteps;
37   enum CFStep { kCFStepAll = 0, kCFStepTriggered, kCFStepVertex, kCFStepAnaTopology, kCFStepTrackedOnlyPrim, kCFStepTracked, kCFStepReconstructed, kCFStepRealLeading, kCFStepBiasStudy, kCFStepBiasStudy2, kCFStepCorrected };
38   
39   const char* GetRegionTitle(Region region);
40   const char* GetStepTitle(CFStep step);
41   
42   AliCFContainer* GetTrackHist(Region region) { return fTrackHist[region]; }
43   AliCFContainer* GetEventHist() { return fEventHist; }
44   AliCFContainer* GetTrackHistEfficiency()     { return fTrackHistEfficiency; }
45   TH3F* GetMCRecoPtCorrelation() { return fFakePt; } 
46  
47   void SetTrackHist(Region region, AliCFContainer* hist) { fTrackHist[region] = hist; }
48   void SetEventHist(AliCFContainer* hist) { fEventHist = hist; }
49   void SetTrackHistEfficiency(AliCFContainer* hist) { fTrackHistEfficiency = hist; }
50   
51   void CopyReconstructedData(AliUEHist* from);
52   void DeepCopy(AliUEHist* from);
53   
54   TH1* GetUEHist(CFStep step, Region region, Float_t ptLeadMin = -1, Float_t ptLeadMax = -1, Int_t multBinBegin = 0, Int_t multBinEnd = -1, Int_t twoD = 0, Bool_t etaNorm = kTRUE, Int_t* normEvents = 0);
55   TH1* GetPtHist(CFStep step, Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd, Float_t phiMin, Float_t phiMax, Float_t etaMin, Float_t etaMax, Bool_t skipPhiNormalization = kFALSE);
56   TH2* GetSumOfRatios(AliUEHist* mixed, CFStep step, Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd, Bool_t etaNorm = kTRUE, Bool_t useVertexBins = kFALSE);
57   
58   void GetHistsZVtx(AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd, TH3** trackHist, TH1** eventHist);
59   void GetHistsZVtxMult(AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, THnBase** trackHist, TH2** eventHist);
60   
61   TH2* GetSumOfRatios2(AliUEHist* mixed, AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd);
62
63   TH1* GetTrackEfficiency(CFStep step1, CFStep step2, Int_t axis1, Int_t axis2 = -1, Int_t source = 1, Int_t axis3 = -1);
64   THnBase* GetTrackEfficiencyND(CFStep step1, CFStep step2);
65   TH1* GetEventEfficiency(CFStep step1, CFStep step2, Int_t axis1, Int_t axis2 = -1, Float_t ptLeadMin = -1, Float_t ptLeadMax = -1);
66   TH1* GetBias(CFStep step1, CFStep step2, Int_t region, const char* axis, Float_t leadPtMin = 0, Float_t leadPtMax = -1, Int_t weighting = 0);
67   
68   TH1D* GetTrackingEfficiency(Int_t axis);
69   TH2D* GetTrackingEfficiency();
70   TH2D* GetTrackingEfficiencyCentrality();
71   
72   TH2D* GetFakeRate();
73   TH1D* GetFakeRate(Int_t axis);
74
75   TH1D* GetTrackingContamination(Int_t axis);
76   TH2D* GetTrackingContamination();
77   TH2D* GetTrackingContaminationCentrality();
78   
79   TH1D* GetTrackingCorrection(Int_t axis);
80   TH2D* GetTrackingCorrection();
81   
82   TH1D* GetTrackingEfficiencyCorrection(Int_t axis);
83   TH2D* GetTrackingEfficiencyCorrection();
84   TH2D* GetTrackingEfficiencyCorrectionCentrality();
85   
86   TH2* GetCorrelatedContamination();
87
88   void ExtendTrackingEfficiency(Bool_t verbose = kFALSE);
89   
90   void Correct(AliUEHist* corrections);
91   void CorrectTracks(CFStep step1, CFStep step2, TH1* trackCorrection, Int_t var1, Int_t var2 = -1);
92   void CorrectTracks(CFStep step1, CFStep step2, Int_t region, TH1* trackCorrection, Int_t var1, Int_t var2 = -1);
93   void CorrectEvents(CFStep step1, CFStep step2, TH1* eventCorrection, Int_t var1, Int_t var2 = -1);
94   void CorrectCorrelatedContamination(CFStep step1, Int_t region, TH1* trackCorrection);
95   
96   void CondenseBin(THnSparse* grid, THnSparse* target, Int_t axis, Float_t targetValue, Float_t from, Float_t to);
97   void CondenseBin(CFStep step, Int_t trackAxis, Int_t eventAxis, Float_t targetValue, Float_t from = 0, Float_t to = -1, CFStep tmpStep = AliUEHist::kCFStepBiasStudy2);
98   
99   void SetCombineMinMax(Bool_t flag) { fCombineMinMax = flag; }
100   
101   void SetEtaRange(Float_t etaMin, Float_t etaMax) { fEtaMin = etaMin; fEtaMax = etaMax; }
102   void SetPtRange(Float_t ptMin, Float_t ptMax)    { fPtMin = ptMin; fPtMax = ptMax; }
103   void SetCentralityRange(Float_t min, Float_t max)    { fCentralityMin = min; fCentralityMax = max; }
104   void SetZVtxRange(Float_t min, Float_t max)          { fZVtxMin = min; fZVtxMax = max; }
105   
106   void SetContaminationEnhancement(TH1F* hist)    { fContaminationEnhancement = hist; }
107   
108   void SetHistogramType(const char* histogramType)  { fHistogramType = histogramType; }
109   
110   void CountEmptyBins(AliUEHist::CFStep step, Float_t ptLeadMin, Float_t ptLeadMax);
111   
112   void AdditionalDPhiCorrection(Int_t step);
113   
114   void SetBinLimits(AliCFGridSparse* grid);
115   void SetBinLimits(THnBase* grid);
116
117   void ResetBinLimits(AliCFGridSparse* grid);
118   void ResetBinLimits(THnBase* grid);
119   
120   void SetGetMultCache(Bool_t flag = kTRUE) { fGetMultCacheOn = flag; }
121   
122   AliUEHist(const AliUEHist &c);
123   AliUEHist& operator=(const AliUEHist& corr);
124   virtual void Copy(TObject& c) const;
125
126   virtual Long64_t Merge(TCollection* list);
127   void Scale(Double_t factor);
128   void Reset();
129   THnBase* ChangeToThn(THnBase* sparse);
130   
131 protected:
132   void SetStepNames(AliCFContainer* container);
133   void WeightHistogram(TH3* hist1, TH1* hist2);
134   void MultiplyHistograms(THnSparse* grid, THnSparse* target, TH1* histogram, Int_t var1, Int_t var2);
135
136   AliCFContainer* fTrackHist[4];      // container for track level distributions in four regions (toward, away, min, max) and at four analysis steps
137   AliCFContainer* fEventHist;         // container for event level distribution at four analysis steps
138   AliCFContainer* fTrackHistEfficiency; // container for tracking efficiency and contamination (all particles filled including leading one): axes: eta, pT, particle species
139   TH3F* fFakePt;
140  
141   Float_t fEtaMin;                    // eta min for projections
142   Float_t fEtaMax;                    // eta max for projections
143   Float_t fPtMin;                     // pT min for projections (for track pT, not pT,lead)
144   Float_t fPtMax;                     // pT max for projections (for track pT, not pT,lead)
145   Float_t fCentralityMin;             // centrality min for projections
146   Float_t fCentralityMax;             // centrality max for projections
147   Float_t fZVtxMin;                   // z vtx min for projections
148   Float_t fZVtxMax;                   // z vtx max for projections
149   
150   TH1F* fContaminationEnhancement;    // histogram that contains the underestimation of secondaries in the MC as function of pT
151   
152   Bool_t fCombineMinMax;              // flag to combine min and max to a general towards region
153   
154   AliCFContainer* fCache;             //! cache variable for GetTrackEfficiency
155   
156   Bool_t fGetMultCacheOn;             //! cache for GetHistsZVtxMult function active
157   THnBase* fGetMultCache;             //! cache for GetHistsZVtxMult function
158   
159   TString fHistogramType;             // what is stored in this histogram
160   
161   ClassDef(AliUEHist, 10) // underlying event histogram container
162 };
163
164 #endif