1 #ifndef ALIANALYSISTASKTRIGGEREDBF_CXX
\r
2 #define ALIANALYSISTASKTRIGGEREDBF_CXX
\r
4 // Analysis task for the TriggeredBF code
\r
5 // Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch
\r
8 #include "AliAnalysisTaskSE.h"
\r
9 #include "AliBalanceTriggered.h"
\r
15 class AliBalanceTriggered;
\r
16 class AliEventPoolManager;
\r
19 class AliAnalysisTaskTriggeredBF : public AliAnalysisTaskSE {
\r
21 AliAnalysisTaskTriggeredBF(const char *name = "AliAnalysisTaskTriggeredBF");
\r
22 virtual ~AliAnalysisTaskTriggeredBF();
\r
25 virtual void UserCreateOutputObjects();
\r
26 virtual void UserExec(Option_t *option);
\r
27 virtual void UserExecMix(Option_t*);
\r
28 virtual void FinishTaskOutput();
\r
29 virtual void Terminate(Option_t *);
\r
31 void SetAnalysisObject(AliBalanceTriggered *const analysis) {
\r
32 fBalance = analysis;
\r
34 void SetShufflingObject(AliBalanceTriggered *const analysisShuffled) {
\r
35 fRunShuffling = kTRUE;
\r
36 fShuffledBalance = analysisShuffled;
\r
38 void SetMixingObject(AliBalanceTriggered *const analysisMixed) {
\r
40 fMixedBalance = analysisMixed;
\r
42 void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }
\r
45 void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {
\r
51 //==============AOD analysis==============//
\r
52 void SetAODtrackCutBit(Int_t bit){
\r
53 nAODtrackCutBit = bit;
\r
56 void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){
\r
64 void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){
\r
69 void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){
\r
70 fTPCchi2Cut = maxTPCchi2;
\r
71 fNClustersTPCCut = minNClustersTPC;
\r
75 void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}
\r
76 const char* GetCentralityEstimator(void) {return fCentralityEstimator;}
\r
77 void SetCentralityPercentileRange(Double_t min, Double_t max) {
\r
78 fUseCentrality = kTRUE;
\r
79 fCentralityPercentileMin=min;
\r
80 fCentralityPercentileMax=max;
\r
82 void SetImpactParameterRange(Double_t min, Double_t max) {
\r
83 fUseCentrality = kTRUE;
\r
84 fImpactParameterMin=min;
\r
85 fImpactParameterMax=max;
\r
89 void SetMultiplicityRange(Int_t min, Int_t max) {
\r
90 fUseMultiplicity = kTRUE;
\r
91 fNumberOfAcceptedTracksMin = min;
\r
92 fNumberOfAcceptedTracksMax = max;}
\r
94 void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}
\r
98 Float_t IsEventAccepted(AliVEvent* event);
\r
99 TObjArray* GetAcceptedTracks(AliVEvent* event);
\r
100 TObjArray* GetShuffledTracks(TObjArray* tracks);
\r
102 AliBalanceTriggered *fBalance; //TriggeredBF object
\r
103 Bool_t fRunShuffling;//run shuffling or not
\r
104 AliBalanceTriggered *fShuffledBalance; //TriggeredBF object (shuffled)
\r
105 Bool_t fRunMixing;//run mixing or not
\r
106 Int_t fMixingTracks;
\r
107 AliBalanceTriggered *fMixedBalance; //TriggeredBF object (mixed)
\r
108 AliEventPoolManager* fPoolMgr; //! event pool manager
\r
111 TList *fList; //fList object
\r
112 TList *fListTriggeredBF; //fList object
\r
113 TList *fListTriggeredBFS; //fList object (shuffling)
\r
114 TList *fListTriggeredBFM; //fList object (mixing)
\r
115 TList *fHistListPIDQA; //! list of histograms
\r
117 TH1F *fHistEventStats; //event stats
\r
118 TH2F *fHistCentStats; //centrality stats
\r
119 TH1F *fHistTriggerStats; //trigger stats
\r
120 TH1F *fHistTrackStats; //Track filter bit stats
\r
121 TH1F *fHistVx; //x coordinate of the primary vertex
\r
122 TH1F *fHistVy; //y coordinate of the primary vertex
\r
123 TH1F *fHistVz; //z coordinate of the primary vertex
\r
131 TH1F *fHistPhiBefore;//
\r
132 TH1F *fHistPhiAfter;//
\r
134 TH2F *fHistRefTracks;//
\r
137 TString fCentralityEstimator; //"V0M","TRK","TKL","ZDC","FMD"
\r
138 Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)
\r
139 Double_t fCentralityPercentileMin;//centrality percentile min
\r
140 Double_t fCentralityPercentileMax;//centrality percentile max
\r
141 Double_t fImpactParameterMin;//impact parameter min (used for MC)
\r
142 Double_t fImpactParameterMax;//impact parameter max (used for MC)
\r
144 Bool_t fUseMultiplicity;//use the multiplicity cuts
\r
145 Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)
\r
146 Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)
\r
147 TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks
\r
149 Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection
\r
151 Double_t fVxMax;//vxmax
\r
152 Double_t fVyMax;//vymax
\r
153 Double_t fVzMax;//vzmax
\r
155 Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)
\r
157 Double_t fPtMin;//only used for AODs
\r
158 Double_t fPtMax;//only used for AODs
\r
159 Double_t fEtaMin;//only used for AODs
\r
160 Double_t fEtaMax;//only used for AODs
\r
162 Double_t fDCAxyCut;//only used for AODs
\r
163 Double_t fDCAzCut;//only used for AODs
\r
165 Double_t fTPCchi2Cut;//only used for AODs
\r
166 Int_t fNClustersTPCCut;//only used for AODs
\r
169 AliAnalysisTaskTriggeredBF(const AliAnalysisTaskTriggeredBF&); // not implemented
\r
170 AliAnalysisTaskTriggeredBF& operator=(const AliAnalysisTaskTriggeredBF&); // not implemented
\r
172 ClassDef(AliAnalysisTaskTriggeredBF, 1); // example of analysis
\r
175 // class used for io with AliBalance (taken from AliAnalysisTaskPhiCorrelations)
\r
176 class AliBFBasicParticle : public AliVParticle
\r
179 AliBFBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge)
\r
180 : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge)
\r
183 ~AliBFBasicParticle() {}
\r
186 virtual Double_t Px() const { AliFatal("Not implemented"); return 0; }
\r
187 virtual Double_t Py() const { AliFatal("Not implemented"); return 0; }
\r
188 virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; }
\r
189 virtual Double_t Pt() const { return fpT; }
\r
190 virtual Double_t P() const { AliFatal("Not implemented"); return 0; }
\r
191 virtual Bool_t PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
\r
193 virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; }
\r
194 virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; }
\r
195 virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; }
\r
196 virtual Bool_t XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
\r
198 virtual Double_t OneOverPt() const { AliFatal("Not implemented"); return 0; }
\r
199 virtual Double_t Phi() const { return fPhi; }
\r
200 virtual Double_t Theta() const { AliFatal("Not implemented"); return 0; }
\r
203 virtual Double_t E() const { AliFatal("Not implemented"); return 0; }
\r
204 virtual Double_t M() const { AliFatal("Not implemented"); return 0; }
\r
206 virtual Double_t Eta() const { return fEta; }
\r
207 virtual Double_t Y() const { AliFatal("Not implemented"); return 0; }
\r
209 virtual Short_t Charge() const { return fCharge; }
\r
210 virtual Short_t SetCharge(Short_t charge) { fCharge = charge; }
\r
211 virtual Int_t GetLabel() const { AliFatal("Not implemented"); return 0; }
\r
213 virtual Int_t PdgCode() const { AliFatal("Not implemented"); return 0; }
\r
214 virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; }
\r
217 Float_t fEta; // eta
\r
218 Float_t fPhi; // phi
\r
220 Short_t fCharge; // charge
\r
222 ClassDef( AliBFBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing
\r