]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/Base/AliUEHistograms.h
per event weighting
[u/mrichter/AliRoot.git] / PWGCF / Correlations / Base / AliUEHistograms.h
1 #ifndef AliUEHistograms_H
2 #define AliUEHistograms_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: AliUEHistograms.h 20164 2007-08-14 15:31:50Z morsch $ */
8
9 // encapsulates several AliUEHist objects for a full UE analysis plus additional control histograms
10
11 #include "TNamed.h"
12 #include "AliUEHist.h"
13 #include "TMath.h"
14 #include "THn.h" // in cxx file causes .../THn.h:257: error: conflicting declaration ‘typedef class THnT<float> THnF’
15
16
17 class AliVParticle;
18
19 class TList;
20 class TSeqCollection;
21 class TObjArray;
22 class TH1F;
23 class TH2F;
24 class TH3F;
25
26 class AliUEHistograms : public TNamed
27 {
28  public:
29   AliUEHistograms(const char* name = "AliUEHistograms", const char* histograms = "");
30   virtual ~AliUEHistograms();
31   
32   void Fill(Int_t eventType, Float_t zVtx, AliUEHist::CFStep step, AliVParticle* leading, TList* toward, TList* away, TList* min, TList* max);
33   void FillCorrelations(Double_t centrality, Float_t zVtx, AliUEHist::CFStep step, TObjArray* particles, TObjArray* mixed = 0, Float_t weight = 1, Bool_t firstTime = kTRUE, Bool_t twoTrackEfficiencyCut = kFALSE, Float_t bSign = 0, Float_t twoTrackEfficiencyCutValue = 0.02, Bool_t applyEfficiency = kFALSE);
34   void Fill(AliVParticle* leadingMC, AliVParticle* leadingReco);
35   void FillEvent(Int_t eventType, Int_t step);
36   void FillEvent(Double_t centrality, Int_t step);
37   void FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, TObjArray* fake, Int_t particleType, Double_t centrality = 0, Double_t zVtx = 0);
38   void FillFakePt(TObjArray* fake, Double_t centrality);
39  
40   void CopyReconstructedData(AliUEHistograms* from);
41   void DeepCopy(AliUEHistograms* from);
42   
43   AliUEHist* GetUEHist(Int_t id);
44   
45   AliUEHist* GetNumberDensitypT() { return fNumberDensitypT; }
46   AliUEHist* GetSumpT() { return fSumpT; }
47   AliUEHist* GetNumberDensityPhi() { return fNumberDensityPhi; }
48   
49   void SetNumberDensitypT(AliUEHist* obj) { fNumberDensitypT = obj; }
50   void SetSumpT(AliUEHist* obj) { fSumpT = obj; }
51   void SetNumberDensityPhi(AliUEHist* obj) { fNumberDensityPhi = obj; }
52   
53   void SetRunNumber(Long64_t runNumber) { fRunNumber = runNumber; }
54   
55   void SetEfficiencyCorrection(THnF* hist, Bool_t correctTriggers) { fEfficiencyCorrection = hist; fCorrectTriggers = correctTriggers; }
56   
57   TH2F* GetCorrelationpT()  { return fCorrelationpT; }
58   TH2F* GetCorrelationEta() { return fCorrelationEta; }
59   TH2F* GetCorrelationPhi() { return fCorrelationPhi; }
60   TH2F* GetCorrelationR()   { return fCorrelationR; }
61   TH2F* GetCorrelationLeading2Phi() { return fCorrelationLeading2Phi; }
62   TH2F* GetCorrelationMultiplicity() { return fCorrelationMultiplicity; }
63   
64   TH2F* GetEventCount()     { return fEventCount; }
65   TH3F* GetEventCountDifferential() { return fEventCountDifferential; }
66   TH1F* GetVertexContributors() { return fVertexContributors; }
67   TH1F* GetCentralityDistribution() { return fCentralityDistribution; }
68   Long64_t GetRunNumber() { return fRunNumber; }
69   Int_t GetMergeCount() { return fMergeCount; }
70   TH3F* GetTwoTrackDistance(Int_t i) { return fTwoTrackDistancePt[i]; }
71   
72   void Correct(AliUEHistograms* corrections);
73   
74   void SetEtaRange(Float_t etaMin, Float_t etaMax);
75   void SetPtRange(Float_t ptMin, Float_t ptMax);
76   void SetZVtxRange(Float_t min, Float_t max);
77   void SetContaminationEnhancement(TH1F* hist);
78   void SetCombineMinMax(Bool_t flag);
79   void SetTrackEtaCut(Float_t value);
80   void SetSelectCharge(Int_t selectCharge) { fSelectCharge = selectCharge; }
81   void SetSelectTriggerCharge(Int_t selectCharge) { fTriggerSelectCharge = selectCharge; }
82   void SetTriggerRestrictEta(Float_t eta) { fTriggerRestrictEta = eta; }
83   void SetEtaOrdering(Bool_t flag) { fEtaOrdering = flag; }
84   void SetPairCuts(Bool_t conversions, Bool_t resonances) { fCutConversions = conversions; fCutResonances = resonances; }
85   void SetOnlyOneEtaSide(Int_t flag)    { fOnlyOneEtaSide = flag; }
86   void SetWeightPerEvent(Bool_t flag)   { fWeightPerEvent = flag; }
87   
88   void ExtendTrackingEfficiency(Bool_t verbose = kFALSE);
89   void Reset();
90
91   AliUEHistograms(const AliUEHistograms &c);
92   AliUEHistograms& operator=(const AliUEHistograms& c);
93   virtual void Copy(TObject& c) const;
94
95   virtual Long64_t Merge(TCollection* list);
96   void Scale(Double_t factor);
97   
98 protected:
99   void FillRegion(AliUEHist::Region region, Float_t zVtx, AliUEHist::CFStep step, AliVParticle* leading, TList* list, Int_t multiplicity);
100   Int_t CountParticles(TList* list, Float_t ptMin);
101   void DeleteContainers();
102   Float_t GetInvMassSquared(Float_t pt1, Float_t eta1, Float_t phi1, Float_t pt2, Float_t eta2, Float_t phi2, Float_t m0_1, Float_t m0_2);
103   inline Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign);
104   
105   static const Int_t fgkUEHists; // number of histograms
106
107   AliUEHist* fNumberDensitypT;   // d^2N/dphideta vs pT,lead
108   AliUEHist* fSumpT;             // d^2 sum(pT)/dphideta vs pT,lead
109   AliUEHist* fNumberDensityPhi;  // d^2N/dphideta vs delta phi,lead (in pT,lead bins)
110   
111   TH2F* fCorrelationpT;         // pT,lead: true vs reco
112   TH2F* fCorrelationEta;        // #eta,lead; true vs reco
113   TH2F* fCorrelationPhi;        // #phi,lead; true vs reco
114   TH2F* fCorrelationR;          // R = sqrt(delta eta^2 + delta phi^2) (true vs reco) vs pT,lead,MC
115   TH2F* fCorrelationLeading2Phi;// delta phi (true vs reco) vs pT,lead,MC
116   TH2F* fCorrelationMultiplicity; // number of mc particls vs reco particles (for pT > 0.5 GeV/c)
117   TH3F* fYields;                // centrality vs pT vs eta
118   
119   TH2F* fEventCount;            // event count as function of step, (for pp: event type (plus additional step -1 for all events without vertex range even in MC)) (for PbPb: centrality)
120   TH3F* fEventCountDifferential;// event count as function of leading pT, step, event type
121   
122   TH1F* fVertexContributors;    // number of contributors to the vertex
123   TH1F* fCentralityDistribution; // distribution of the variable used for centrality selection
124   TH2F* fCentralityCorrelation;  // centrality vs multiplicity
125   
126   TH3F* fITSClusterMap;          // its cluster map vs centrality vs pT
127   
128   TH3F* fTwoTrackDistancePt[2];    // control histograms for two-track efficiency study: dphi*_min vs deta (0 = before cut, 1 = after cut)
129   TH2F* fControlConvResoncances; // control histograms for cuts on conversions and resonances
130   
131   THnF* fEfficiencyCorrection;   // if non-0 this efficiency correction is applied on the fly to the filling for associated particles. The factor is multiplicative, i.e. should contain 1/efficiency
132   Bool_t fCorrectTriggers;      // if true correct also trigger particles
133   
134   Int_t fSelectCharge;           // (un)like sign selection when building correlations: 0: no selection; 1: unlike sign; 2: like sign
135   Int_t fTriggerSelectCharge;    // select charge of trigger particle
136   Float_t fTriggerRestrictEta;   // restrict eta range for trigger particle (default: -1 [off])
137   Bool_t fEtaOrdering;           // activate eta ordering to prevent shape distortions. see FillCorrelation for the details
138   Bool_t fCutConversions;        // cut on conversions (inv mass)
139   Bool_t fCutResonances;         // cut on resonances (inv mass)
140   Int_t fOnlyOneEtaSide;       // decides that only trigger particle from one eta side are considered (0 = all; -1 = negative, 1 = positive)
141   Bool_t fWeightPerEvent;       // weight with the number of trigger particles per event
142   
143   Long64_t fRunNumber;           // run number that has been processed
144   
145   Int_t fMergeCount;            // counts how many objects have been merged together
146   
147   ClassDef(AliUEHistograms, 22)  // underlying event histogram container
148 };
149
150 Float_t AliUEHistograms::GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign)
151
152   //
153   // calculates dphistar
154   //
155   
156   Float_t dphistar = phi1 - phi2 - charge1 * bSign * TMath::ASin(0.075 * radius / pt1) + charge2 * bSign * TMath::ASin(0.075 * radius / pt2);
157   
158   static const Double_t kPi = TMath::Pi();
159   
160   // circularity
161 //   if (dphistar > 2 * kPi)
162 //     dphistar -= 2 * kPi;
163 //   if (dphistar < -2 * kPi)
164 //     dphistar += 2 * kPi;
165   
166   if (dphistar > kPi)
167     dphistar = kPi * 2 - dphistar;
168   if (dphistar < -kPi)
169     dphistar = -kPi * 2 - dphistar;
170   if (dphistar > kPi) // might look funny but is needed
171     dphistar = kPi * 2 - dphistar;
172   
173   return dphistar;
174 }
175
176 #endif