]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/Base/AliUEHist.h
update from markus
[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 = "", 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, Int_t *trigger = NULL);
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