1 #ifndef AliAnalysisTaskPhiCorrelations_H
2 #define AliAnalysisTaskPhiCorrelations_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 ////////////////////////////////////////////////////////////////////////
9 // Analysis class for Underlying Event studies w.r.t. leading track
11 // Look for correlations on the tranverse regions w.r.t
12 // the leading track in the event
14 // This class needs input AODs.
15 // The output is a list of analysis-specific containers.
17 // The AOD can be either connected to the InputEventHandler
18 // for a chain of AOD files
20 // to the OutputEventHandler
21 // for a chain of ESD files,
22 // in this case the class should be in the train after the jet-finder
25 // Jan Fiete Grosse-Oetringhaus
27 ////////////////////////////////////////////////////////////////////////
29 #include "AliAnalysisTask.h"
30 #include "AliUEHist.h"
32 #include "AliVParticle.h"
34 #include "THn.h" // in cxx file causes .../THn.h:257: error: conflicting declaration ‘typedef class THnT<float> THnF’
37 class AliAnalyseLeadingTrackUE;
38 class AliInputEventHandler;
40 class AliMCEventHandler;
41 class AliUEHistograms;
45 class AliEventPoolManager;
48 class AliAnalysisUtils;
52 class AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
55 AliAnalysisTaskPhiCorrelations(const char* name="AliAnalysisTaskPhiCorrelations");
56 virtual ~AliAnalysisTaskPhiCorrelations();
59 // Implementation of interace methods
60 virtual void ConnectInputData(Option_t *);
61 virtual void CreateOutputObjects();
62 virtual void Exec(Option_t *option);
65 // general configuration
66 virtual void SetDebugLevel( Int_t level ) { fDebug = level; }
67 virtual void SetMode(Int_t mode) { fMode = mode; }
68 virtual void SetReduceMemoryFootprint(Bool_t flag) { fReduceMemoryFootprint = flag; }
69 virtual void SetEventMixing(Bool_t flag) { fFillMixed = flag; }
70 virtual void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }
71 virtual void SetTwoTrackEfficiencyStudy(Bool_t flag) { fTwoTrackEfficiencyStudy = flag; }
72 virtual void SetTwoTrackEfficiencyCut(Float_t value = 0.02) { fTwoTrackEfficiencyCut = value; }
73 virtual void SetUseVtxAxis(Int_t flag) { fUseVtxAxis = flag; }
74 virtual void SetCourseCentralityBinning(Bool_t flag) { fCourseCentralityBinning = flag; }
75 virtual void SetSkipTrigger(Bool_t flag) { fSkipTrigger = flag; }
76 virtual void SetInjectedSignals(Bool_t flag) { fInjectedSignals = flag; }
79 void SetEfficiencyCorrectionTriggers(THnF* hist) { fEfficiencyCorrectionTriggers = hist; }
80 void SetEfficiencyCorrectionAssociated(THnF* hist) { fEfficiencyCorrectionAssociated = hist; }
83 void SetTracksInVertex( Int_t val ){ fnTracksVertex = val; }
84 void SetZVertex( Double_t val ) { fZVertex = val; }
87 void SetTrackEtaCut( Double_t val ) { fTrackEtaCut = val; }
88 void SetTrackEtaCutMin( Double_t val ) { fTrackEtaCutMin = val; }
89 void SetOnlyOneEtaSide(Int_t flag) { fOnlyOneEtaSide = flag; }
90 void SetPtMin(Double_t val) { fPtMin = val; }
91 void SetFilterBit( UInt_t val ) { fFilterBit = val; }
92 void SetDCAXYCut(TFormula* value) { fDCAXYCut = value; }
93 void SetTrackStatus(UInt_t status) { fTrackStatus = status; }
94 void SetCheckMotherPDG(Bool_t checkpdg) { fCheckMotherPDG = checkpdg; }
96 void SetEventSelectionBit( UInt_t val ) { fSelectBit = val; }
97 void SetUseChargeHadrons( Bool_t val ) { fUseChargeHadrons = val; }
98 void SetSelectParticleSpecies( Int_t trigger, Int_t associated ) { fParticleSpeciesTrigger = trigger; fParticleSpeciesAssociated = associated; }
99 void SetSelectCharge(Int_t selectCharge) { fSelectCharge = selectCharge; }
100 void SetSelectTriggerCharge(Int_t selectCharge) { fTriggerSelectCharge = selectCharge; }
101 void SetSelectAssociatedCharge(Int_t selectCharge) { fAssociatedSelectCharge = selectCharge; }
102 void SetTriggerRestrictEta(Float_t eta) { fTriggerRestrictEta = eta; }
103 void SetEtaOrdering(Bool_t flag) { fEtaOrdering = flag; }
104 void SetPairCuts(Bool_t conversions, Bool_t resonances) { fCutConversions = conversions; fCutResonances = resonances; }
105 void SetRejectResonanceDaughters(Int_t value) { fRejectResonanceDaughters = value; }
106 void SetCentralityMethod(const char* method) { fCentralityMethod = method; }
107 void SetFillpT(Bool_t flag) { fFillpT = flag; }
108 void SetStepsFillSkip(Bool_t step0, Bool_t step6) { fFillOnlyStep0 = step0; fSkipStep6 = step6; }
109 void SetRejectCentralityOutliers(Bool_t flag = kTRUE) { fRejectCentralityOutliers = flag; }
110 void SetRemoveWeakDecays(Bool_t flag = kTRUE) { fRemoveWeakDecays = flag; }
111 void SetRemoveDuplicates(Bool_t flag = kTRUE) { fRemoveDuplicates = flag; }
112 void SetSkipFastCluster(Bool_t flag = kTRUE) { fSkipFastCluster = flag; }
113 void SetWeightPerEvent(Bool_t flag = kTRUE) { fWeightPerEvent = flag; }
114 void SetCustomBinning(const char* binningStr) { fCustomBinning = binningStr; }
115 void SetPtOrder(Bool_t flag) { fPtOrder = flag; }
117 AliHelperPID* GetHelperPID() { return fHelperPID; }
118 void SetHelperPID(AliHelperPID* pid){ fHelperPID = pid; }
120 AliAnalysisUtils* GetAnalysisUtils() { return fAnalysisUtils; }
121 void SetAnalysisUtils(AliAnalysisUtils* utils){ fAnalysisUtils = utils; }
124 AliAnalysisTaskPhiCorrelations(const AliAnalysisTaskPhiCorrelations &det);
125 AliAnalysisTaskPhiCorrelations& operator=(const AliAnalysisTaskPhiCorrelations &det);
126 void AddSettingsTree(); // add list of settings to output list
128 void AnalyseCorrectionMode(); // main algorithm to get correction maps
129 void AnalyseDataMode(); // main algorithm to get raw distributions
130 void Initialize(); // initialize some common pointer
131 TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
132 void RemoveDuplicates(TObjArray* tracks);
133 void CleanUp(TObjArray* tracks, TObject* mcObj, Int_t maxLabel);
134 void SelectCharge(TObjArray* tracks);
136 // General configuration
137 Int_t fDebug; // Debug flag
138 Int_t fMode; // fMode = 0: data-like analysis
139 // fMode = 1: corrections analysis
140 Bool_t fReduceMemoryFootprint; // reduce memory consumption by writing less debug histograms
141 Bool_t fFillMixed; // enable event mixing (default: ON)
142 Int_t fMixingTracks; // size of track buffer for event mixing
143 Bool_t fTwoTrackEfficiencyStudy; // two-track efficiency study on
144 Float_t fTwoTrackEfficiencyCut; // enable two-track efficiency cut
145 Int_t fUseVtxAxis; // use z vtx as axis (needs 7-10 times more memory!)
146 Bool_t fCourseCentralityBinning; // less centrality bins
147 Bool_t fSkipTrigger; // skip trigger selection
148 Bool_t fInjectedSignals; // check header to skip injected signals in MC
150 // Pointers to external UE classes
151 AliHelperPID* fHelperPID; // points to class containing common analysis algorithms
152 AliAnalysisUtils* fAnalysisUtils; // points to class containing common analysis algorithms
153 AliAnalyseLeadingTrackUE* fAnalyseUE; //! points to class containing common analysis algorithms
154 AliUEHistograms* fHistos; //! points to class to handle histograms/containers
155 AliUEHistograms* fHistosMixed; //! points to class to handle mixed histograms/containers
157 THnF* fEfficiencyCorrectionTriggers; // if non-0 this efficiency correction is applied on the fly to the filling for trigger particles. The factor is multiplicative, i.e. should contain 1/efficiency. Axes: eta, pT, centrality, z-vtx
158 THnF* fEfficiencyCorrectionAssociated; // 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. Axes: eta, pT, centrality, z-vtx
160 // Handlers and events
161 AliAODEvent* fAOD; //! AOD Event
162 AliESDEvent* fESD; //! ESD Event
163 TClonesArray* fArrayMC; //! Array of MC particles
164 AliInputEventHandler* fInputHandler; //! Generic InputEventHandler
165 AliMCEvent* fMcEvent; //! MC event
166 AliMCEventHandler* fMcHandler; //! MCEventHandler
167 AliEventPoolManager* fPoolMgr; //! event pool manager
169 // Histogram settings
170 TList* fListOfHistos; // Output list of containers
173 Int_t fnTracksVertex; // QA tracks pointing to principal vertex
174 Double_t fZVertex; // Position of Vertex in Z direction
175 TString fCentralityMethod; // Method to determine centrality
178 Double_t fTrackEtaCut; // Maximum Eta cut on particles
179 Double_t fTrackEtaCutMin; // Minimum Eta cut on particles
180 Int_t fOnlyOneEtaSide; // decides that only trigger particle from one eta side are considered (0 = all; -1 = negative, 1 = positive)
181 Double_t fPtMin; // Min pT to start correlations
182 TFormula* fDCAXYCut; // additional pt dependent cut on DCA XY (only for AOD)
183 UInt_t fFilterBit; // Select tracks from an specific track cut
184 UInt_t fTrackStatus; // if non-0, the bits set in this variable are required for each track
185 UInt_t fSelectBit; // Select events according to AliAnalysisTaskJetServices bit maps
186 Bool_t fUseChargeHadrons; // Only use charge hadrons
187 Int_t fParticleSpeciesTrigger; // Select which particle to use for the trigger [ -1 (all, default) 0 (pions) 1 (kaons) 2 (protons) 3 (others) particles ]
188 Int_t fParticleSpeciesAssociated; // Select which particle to use for the associated [ -1 (all, default) 0 (pions) 1 (kaons) 2 (protons) 3 (others) particles ]
189 Bool_t fCheckMotherPDG; // Check the PDG code of mother for secondaries
191 Int_t fSelectCharge; // (un)like sign selection when building correlations: 0: no selection; 1: unlike sign; 2: like sign
192 Int_t fTriggerSelectCharge; // select charge of trigger particle: 1: positive; -1 negative
193 Int_t fAssociatedSelectCharge; // select charge of associated particle: 1: positive; -1 negative
194 Float_t fTriggerRestrictEta; // restrict eta range for trigger particle (default: -1 [off])
195 Bool_t fEtaOrdering; // eta ordering, see AliUEHistograms.h for documentation
196 Bool_t fCutConversions; // cut on conversions (inv mass)
197 Bool_t fCutResonances; // cut on resonances (inv mass)
198 Int_t fRejectResonanceDaughters; // reject all daughters of all resonance candidates (1: test method (cut at m_inv=0.9); 2: k0; 3: lambda)
199 Bool_t fFillOnlyStep0; // fill only step 0
200 Bool_t fSkipStep6; // skip step 6 when filling
201 Bool_t fRejectCentralityOutliers; // enable rejection of outliers in centrality vs no track correlation
202 Bool_t fRemoveWeakDecays; // remove secondaries from weak decays from tracks and particles
203 Bool_t fRemoveDuplicates; // remove particles with the same label (double reconstruction)
204 Bool_t fSkipFastCluster; // skip kFastOnly flagged events (only for data)
205 Bool_t fWeightPerEvent; // weight with the number of trigger particles per event
206 TString fCustomBinning; // supersedes default binning if set, see AliUEHist::GetBinning or AliUEHistograms::AliUEHistograms for syntax and examples
207 Bool_t fPtOrder; // apply pT,a < pt,t condition; default: kTRUE
209 Bool_t fFillpT; // fill sum pT instead of number density
211 ClassDef( AliAnalysisTaskPhiCorrelations, 34); // Analysis task for delta phi correlations
214 class AliDPhiBasicParticle : public AliVParticle
217 AliDPhiBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge)
218 : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge)
221 ~AliDPhiBasicParticle() {}
224 virtual Double_t Px() const { AliFatal("Not implemented"); return 0; }
225 virtual Double_t Py() const { AliFatal("Not implemented"); return 0; }
226 virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; }
227 virtual Double_t Pt() const { return fpT; }
228 virtual Double_t P() const { AliFatal("Not implemented"); return 0; }
229 virtual Bool_t PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
231 virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; }
232 virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; }
233 virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; }
234 virtual Bool_t XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
236 virtual Double_t OneOverPt() const { AliFatal("Not implemented"); return 0; }
237 virtual Double_t Phi() const { return fPhi; }
238 virtual Double_t Theta() const { AliFatal("Not implemented"); return 0; }
241 virtual Double_t E() const { AliFatal("Not implemented"); return 0; }
242 virtual Double_t M() const { AliFatal("Not implemented"); return 0; }
244 virtual Double_t Eta() const { return fEta; }
245 virtual Double_t Y() const { AliFatal("Not implemented"); return 0; }
247 virtual Short_t Charge() const { return fCharge; }
248 virtual Int_t GetLabel() const { AliFatal("Not implemented"); return 0; }
250 virtual Int_t PdgCode() const { AliFatal("Not implemented"); return 0; }
251 virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; }
253 virtual Bool_t IsEqual(const TObject* obj) const { return (obj->GetUniqueID() == GetUniqueID()); }
259 Short_t fCharge; // charge
261 ClassDef( AliDPhiBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing