]>
Commit | Line | Data |
---|---|---|
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 = "", const char* binning = 0); | |
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, Long64_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, Bool_t normalizePerTrigger = kTRUE, Int_t stepForMixed = -1); | |
62 | ||
63 | TH1* GetTriggersAsFunctionOfMultiplicity(AliUEHist::CFStep step, Float_t ptLeadMin, Float_t ptLeadMax); | |
64 | ||
65 | TH1* GetTrackEfficiency(CFStep step1, CFStep step2, Int_t axis1, Int_t axis2 = -1, Int_t source = 1, Int_t axis3 = -1); | |
66 | THnBase* GetTrackEfficiencyND(CFStep step1, CFStep step2); | |
67 | TH1* GetEventEfficiency(CFStep step1, CFStep step2, Int_t axis1, Int_t axis2 = -1, Float_t ptLeadMin = -1, Float_t ptLeadMax = -1); | |
68 | TH1* GetBias(CFStep step1, CFStep step2, Int_t region, const char* axis, Float_t leadPtMin = 0, Float_t leadPtMax = -1, Int_t weighting = 0); | |
69 | ||
70 | TH1D* GetTrackingEfficiency(Int_t axis); | |
71 | TH2D* GetTrackingEfficiency(); | |
72 | TH2D* GetTrackingEfficiencyCentrality(); | |
73 | ||
74 | TH2D* GetFakeRate(); | |
75 | TH1D* GetFakeRate(Int_t axis); | |
76 | ||
77 | TH1D* GetTrackingContamination(Int_t axis); | |
78 | TH2D* GetTrackingContamination(); | |
79 | TH2D* GetTrackingContaminationCentrality(); | |
80 | ||
81 | TH1D* GetTrackingCorrection(Int_t axis); | |
82 | TH2D* GetTrackingCorrection(); | |
83 | ||
84 | TH1D* GetTrackingEfficiencyCorrection(Int_t axis); | |
85 | TH2D* GetTrackingEfficiencyCorrection(); | |
86 | TH2D* GetTrackingEfficiencyCorrectionCentrality(); | |
87 | ||
88 | TH2* GetCorrelatedContamination(); | |
89 | ||
90 | void ExtendTrackingEfficiency(Bool_t verbose = kFALSE); | |
91 | ||
92 | void Correct(AliUEHist* corrections); | |
93 | void CorrectTracks(CFStep step1, CFStep step2, TH1* trackCorrection, Int_t var1, Int_t var2 = -1); | |
94 | void CorrectTracks(CFStep step1, CFStep step2, Int_t region, TH1* trackCorrection, Int_t var1, Int_t var2 = -1); | |
95 | void CorrectEvents(CFStep step1, CFStep step2, TH1* eventCorrection, Int_t var1, Int_t var2 = -1); | |
96 | void CorrectCorrelatedContamination(CFStep step1, Int_t region, TH1* trackCorrection); | |
97 | ||
98 | void CondenseBin(THnSparse* grid, THnSparse* target, Int_t axis, Float_t targetValue, Float_t from, Float_t to); | |
99 | 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); | |
100 | void SymmetrizepTBins(); | |
101 | ||
102 | void SetCombineMinMax(Bool_t flag) { fCombineMinMax = flag; } | |
103 | ||
104 | void SetEtaRange(Float_t etaMin, Float_t etaMax) { fEtaMin = etaMin; fEtaMax = etaMax; } | |
105 | void SetPtRange(Float_t ptMin, Float_t ptMax) { fPtMin = ptMin; fPtMax = ptMax; } | |
106 | void SetPartSpecies(Int_t species) { fPartSpecies = species;} | |
107 | void SetCentralityRange(Float_t min, Float_t max) { fCentralityMin = min; fCentralityMax = max; } | |
108 | void SetZVtxRange(Float_t min, Float_t max) { fZVtxMin = min; fZVtxMax = max; } | |
109 | void SetPt2Min(Float_t ptMin) { fPt2Min = ptMin; } | |
110 | ||
111 | Float_t GetTrackEtaCut() { return fTrackEtaCut; } | |
112 | void SetTrackEtaCut(Float_t value) { fTrackEtaCut = value; } | |
113 | void SetWeightPerEvent(Bool_t flag) { fWeightPerEvent = flag; } | |
114 | void SetSkipScaleMixedEvent(Bool_t flag) { fSkipScaleMixedEvent = flag; } | |
115 | ||
116 | void SetContaminationEnhancement(TH1F* hist) { fContaminationEnhancement = hist; } | |
117 | ||
118 | void SetHistogramType(const char* histogramType) { fHistogramType = histogramType; } | |
119 | ||
120 | void CountEmptyBins(AliUEHist::CFStep step, Float_t ptLeadMin, Float_t ptLeadMax); | |
121 | ||
122 | void AdditionalDPhiCorrection(Int_t step); | |
123 | ||
124 | void SetBinLimits(AliCFGridSparse* grid); | |
125 | void SetBinLimits(THnBase* grid); | |
126 | ||
127 | void ResetBinLimits(AliCFGridSparse* grid); | |
128 | void ResetBinLimits(THnBase* grid); | |
129 | ||
130 | void SetGetMultCache(Bool_t flag = kTRUE) { fGetMultCacheOn = flag; } | |
131 | ||
132 | AliUEHist(const AliUEHist &c); | |
133 | AliUEHist& operator=(const AliUEHist& corr); | |
134 | virtual void Copy(TObject& c) const; | |
135 | ||
136 | virtual Long64_t Merge(TCollection* list); | |
137 | void Scale(Double_t factor); | |
138 | void Reset(); | |
139 | THnBase* ChangeToThn(THnBase* sparse); | |
140 | ||
141 | static TString CombineBinning(TString defaultBinning, TString customBinning); | |
142 | ||
143 | protected: | |
144 | Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins); | |
145 | void SetStepNames(AliCFContainer* container); | |
146 | void WeightHistogram(TH3* hist1, TH1* hist2); | |
147 | void MultiplyHistograms(THnSparse* grid, THnSparse* target, TH1* histogram, Int_t var1, Int_t var2); | |
148 | ||
149 | AliCFContainer* fTrackHist[4]; // container for track level distributions in four regions (toward, away, min, max) and at all analysis steps | |
150 | AliCFContainer* fEventHist; // container for event level distribution at all analysis steps | |
151 | AliCFContainer* fTrackHistEfficiency; // container for tracking efficiency and contamination (all particles filled including leading one): axes: eta, pT, particle species | |
152 | TH3F* fFakePt; | |
153 | ||
154 | Float_t fEtaMin; // eta min for projections | |
155 | Float_t fEtaMax; // eta max for projections | |
156 | Float_t fPtMin; // pT min for projections (for track pT, not pT,lead) | |
157 | Float_t fPtMax; // pT max for projections (for track pT, not pT,lead) | |
158 | Int_t fPartSpecies; // Particle species for projections | |
159 | Float_t fCentralityMin; // centrality min for projections | |
160 | Float_t fCentralityMax; // centrality max for projections | |
161 | Float_t fZVtxMin; // z vtx min for projections | |
162 | Float_t fZVtxMax; // z vtx max for projections | |
163 | Float_t fPt2Min; // pT min for projections (for pT,2 (only 2+1 corr case)) | |
164 | ||
165 | TH1F* fContaminationEnhancement; // histogram that contains the underestimation of secondaries in the MC as function of pT | |
166 | ||
167 | Bool_t fCombineMinMax; // flag to combine min and max to a general towards region | |
168 | Float_t fTrackEtaCut; // cut used during production of histograms (needed for finite bin correction in GetSumOfRatios) | |
169 | Bool_t fWeightPerEvent; // weight with the number of trigger particles per event | |
170 | Bool_t fSkipScaleMixedEvent; // scale the mixed event with (0, 0) plus finite bin correction (default: kTRUE) | |
171 | ||
172 | AliCFContainer* fCache; //! cache variable for GetTrackEfficiency | |
173 | ||
174 | Bool_t fGetMultCacheOn; //! cache for GetHistsZVtxMult function active | |
175 | THnBase* fGetMultCache; //! cache for GetHistsZVtxMult function | |
176 | ||
177 | TString fHistogramType; // what is stored in this histogram | |
178 | ||
179 | ClassDef(AliUEHist, 15) // underlying event histogram container | |
180 | }; | |
181 | ||
182 | #endif |