4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 /* $Id: AliUEHist.h 20164 2007-08-14 15:31:50Z morsch $ */
9 // encapsulate histogram and corrections for one underlying event histogram
23 class AliCFGridSparse;
27 class AliUEHist : public TObject
30 AliUEHist(const char* reqHist = "");
33 const UInt_t fkRegions;
34 enum Region { kToward = 0, kAway, kMin, kMax };
36 static const Int_t fgkCFSteps;
37 enum CFStep { kCFStepAll = 0, kCFStepTriggered, kCFStepVertex, kCFStepAnaTopology, kCFStepTrackedOnlyPrim, kCFStepTracked, kCFStepReconstructed, kCFStepRealLeading, kCFStepBiasStudy, kCFStepBiasStudy2, kCFStepCorrected };
39 const char* GetRegionTitle(Region region);
40 const char* GetStepTitle(CFStep step);
42 AliCFContainer* GetTrackHist(Region region) { return fTrackHist[region]; }
43 AliCFContainer* GetEventHist() { return fEventHist; }
44 AliCFContainer* GetTrackHistEfficiency() { return fTrackHistEfficiency; }
45 TH3F* GetMCRecoPtCorrelation() { return fFakePt; }
47 void SetTrackHist(Region region, AliCFContainer* hist) { fTrackHist[region] = hist; }
48 void SetEventHist(AliCFContainer* hist) { fEventHist = hist; }
49 void SetTrackHistEfficiency(AliCFContainer* hist) { fTrackHistEfficiency = hist; }
51 void CopyReconstructedData(AliUEHist* from);
52 void DeepCopy(AliUEHist* from);
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);
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);
61 TH2* GetSumOfRatios2(AliUEHist* mixed, AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd);
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);
68 TH1D* GetTrackingEfficiency(Int_t axis);
69 TH2D* GetTrackingEfficiency();
70 TH2D* GetTrackingEfficiencyCentrality();
73 TH1D* GetFakeRate(Int_t axis);
75 TH1D* GetTrackingContamination(Int_t axis);
76 TH2D* GetTrackingContamination();
77 TH2D* GetTrackingContaminationCentrality();
79 TH1D* GetTrackingCorrection(Int_t axis);
80 TH2D* GetTrackingCorrection();
82 TH1D* GetTrackingEfficiencyCorrection(Int_t axis);
83 TH2D* GetTrackingEfficiencyCorrection();
84 TH2D* GetTrackingEfficiencyCorrectionCentrality();
86 TH2* GetCorrelatedContamination();
88 void ExtendTrackingEfficiency(Bool_t verbose = kFALSE);
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);
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);
99 void SetCombineMinMax(Bool_t flag) { fCombineMinMax = flag; }
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; }
106 void SetContaminationEnhancement(TH1F* hist) { fContaminationEnhancement = hist; }
108 void SetHistogramType(const char* histogramType) { fHistogramType = histogramType; }
110 void CountEmptyBins(AliUEHist::CFStep step, Float_t ptLeadMin, Float_t ptLeadMax);
112 void AdditionalDPhiCorrection(Int_t step);
114 void SetBinLimits(AliCFGridSparse* grid);
115 void SetBinLimits(THnBase* grid);
117 void ResetBinLimits(AliCFGridSparse* grid);
118 void ResetBinLimits(THnBase* grid);
120 void SetGetMultCache(Bool_t flag = kTRUE) { fGetMultCacheOn = flag; }
122 AliUEHist(const AliUEHist &c);
123 AliUEHist& operator=(const AliUEHist& corr);
124 virtual void Copy(TObject& c) const;
126 virtual Long64_t Merge(TCollection* list);
127 void Scale(Double_t factor);
129 THnBase* ChangeToThn(THnBase* sparse);
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);
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
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
150 TH1F* fContaminationEnhancement; // histogram that contains the underestimation of secondaries in the MC as function of pT
152 Bool_t fCombineMinMax; // flag to combine min and max to a general towards region
154 AliCFContainer* fCache; //! cache variable for GetTrackEfficiency
156 Bool_t fGetMultCacheOn; //! cache for GetHistsZVtxMult function active
157 THnBase* fGetMultCache; //! cache for GetHistsZVtxMult function
159 TString fHistogramType; // what is stored in this histogram
161 ClassDef(AliUEHist, 10) // underlying event histogram container