]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGCF / EBYE / BalanceFunctions / AliAnalysisTaskTriggeredBF.h
1 #ifndef ALIANALYSISTASKTRIGGEREDBF_CXX\r
2 #define ALIANALYSISTASKTRIGGEREDBF_CXX\r
3 \r
4 // Analysis task for the TriggeredBF code\r
5 // Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch\r
6 \r
7 #include "AliLog.h"\r
8 #include "AliAnalysisTaskSE.h"\r
9 #include "AliBalanceTriggered.h"\r
10 #include "AliPIDResponse.h"\r
11 #include "AliPIDCombined.h"\r
12 \r
13 class TList;\r
14 class TH1F;\r
15 class TH2F;\r
16 \r
17 class AliBalanceTriggered;\r
18 class AliEventPoolManager;\r
19 \r
20 \r
21 class AliAnalysisTaskTriggeredBF : public AliAnalysisTaskSE {\r
22  public:\r
23   AliAnalysisTaskTriggeredBF(const char *name = "AliAnalysisTaskTriggeredBF");\r
24   virtual ~AliAnalysisTaskTriggeredBF(); \r
25   \r
26   \r
27   virtual void   UserCreateOutputObjects();\r
28   virtual void   UserExec(Option_t *option);\r
29   virtual void   UserExecMix(Option_t*);\r
30   virtual void   FinishTaskOutput();\r
31   virtual void   Terminate(Option_t *);\r
32 \r
33   void SetAnalysisObject(AliBalanceTriggered *const analysis) {\r
34     fBalance         = analysis;\r
35     }\r
36   void SetShufflingObject(AliBalanceTriggered *const analysisShuffled) {\r
37     fRunShuffling = kTRUE;\r
38     fShuffledBalance = analysisShuffled;\r
39   }\r
40   void SetMixingObject(AliBalanceTriggered *const analysisMixed) {\r
41     fRunMixing = kTRUE;\r
42     fMixedBalance = analysisMixed;\r
43   }\r
44   void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }\r
45 \r
46   void SetRunV0(Bool_t runV0 = kTRUE) { fRunV0 = runV0; }\r
47  \r
48   void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {\r
49     fVxMax = vx;\r
50     fVyMax = vy;\r
51     fVzMax = vz;\r
52   }\r
53 \r
54   //==============AOD analysis==============//\r
55   void SetAODtrackCutBit(Int_t bit){\r
56     nAODtrackCutBit = bit;\r
57   }\r
58 \r
59   void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){\r
60     fPtMin  = ptmin;  fPtMax  = ptmax;\r
61     fEtaMin = etamin; fEtaMax = etamax;\r
62 \r
63   }\r
64 \r
65   void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){\r
66     fDCAxyCut  = DCAxy;\r
67     fDCAzCut = DCAz;\r
68   }\r
69 \r
70    void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){\r
71     fTPCchi2Cut      = maxTPCchi2;\r
72     fNClustersTPCCut = minNClustersTPC;\r
73   }\r
74 \r
75   //Centrality\r
76   void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}\r
77   const char* GetCentralityEstimator(void)  const              {return fCentralityEstimator;}\r
78   void SetCentralityPercentileRange(Double_t min, Double_t max) { \r
79     fUseCentrality = kTRUE;\r
80     fCentralityPercentileMin=min;\r
81     fCentralityPercentileMax=max;\r
82   }\r
83   void SetImpactParameterRange(Double_t min, Double_t max) { \r
84     fUseCentrality = kTRUE;\r
85     fImpactParameterMin=min;\r
86     fImpactParameterMax=max;\r
87   }\r
88 \r
89   //multiplicity\r
90   void SetMultiplicityRange(Int_t min, Int_t max) {\r
91     fUseMultiplicity = kTRUE;\r
92     fNumberOfAcceptedTracksMin = min;\r
93     fNumberOfAcceptedTracksMax = max;}\r
94   \r
95   void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}\r
96   \r
97 \r
98  private:\r
99   Float_t    IsEventAccepted(AliVEvent* event);\r
100   TObjArray* GetAcceptedTracks(AliVEvent* event);\r
101   TObjArray* GetAcceptedV0s(AliVEvent* event);\r
102   TObjArray* GetShuffledTracks(TObjArray* tracks);\r
103 \r
104   AliBalanceTriggered *fBalance; //TriggeredBF object\r
105   Bool_t fRunShuffling;//run shuffling or not\r
106   AliBalanceTriggered *fShuffledBalance; //TriggeredBF object (shuffled)\r
107   Bool_t fRunMixing;//run mixing or not\r
108   Int_t  fMixingTracks;//number of tracks to mix\r
109   AliBalanceTriggered *fMixedBalance; //TriggeredBF object (mixed)\r
110   AliEventPoolManager*     fPoolMgr;         //! event pool manager\r
111   Bool_t fRunV0;\r
112 \r
113   AliPIDResponse       *fPIDResponse;     //! PID response object\r
114   AliPIDCombined       *fPIDCombined;     //! combined PID object\r
115 \r
116   TList *fList; //fList object\r
117   TList *fListTriggeredBF; //fList object\r
118   TList *fListTriggeredBFS; //fList object (shuffling)\r
119   TList *fListTriggeredBFM; //fList object (mixing)\r
120   TList *fHistListPIDQA;  //! list of histograms\r
121   TList *fHistListV0; // list of V0 histograms\r
122 \r
123   TH1F *fHistEventStats; //event stats\r
124   TH2F *fHistCentStats; //centrality stats\r
125   TH1F *fHistTriggerStats; //trigger stats\r
126   TH1F *fHistTrackStats; //Track filter bit stats\r
127   TH1F *fHistVx; //x coordinate of the primary vertex\r
128   TH1F *fHistVy; //y coordinate of the primary vertex\r
129   TH1F *fHistVz; //z coordinate of the primary vertex\r
130 \r
131   TH2F *fHistClus;//number of clusters (QA histogram)\r
132   TH2F *fHistDCA;//DCA  (QA histogram)\r
133   TH1F *fHistChi2;//track chi2 (QA histogram)\r
134   TH1F *fHistPt;//transverse momentum (QA histogram)\r
135   TH1F *fHistEta;//pseudorapidity (QA histogram)\r
136   TH1F *fHistPhi;//phi (QA histogram)\r
137   TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)\r
138   TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)\r
139   TH2F *fHistV0M;//V0 multiplicities (QA histogram)\r
140   TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)\r
141 \r
142   // V0 histograms\r
143   TH1F    *fHistV0MultiplicityBeforeTrigSel;             //! V0 multiplicity distribution\r
144   TH1F    *fHistV0MultiplicityForTrigEvt;                //! V0 multiplicity distribution\r
145   TH1F    *fHistV0MultiplicityForSelEvt;                 //! V0 multiplicity distribution\r
146   TH1F    *fHistV0MultiplicityForSelEvtNoTPCOnly;        //! V0 multiplicity distribution\r
147   TH1F    *fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup;//! V0 multiplicity distribution\r
148   \r
149   TH1F    *fHistMultiplicityBeforeTrigSel;              //! multiplicity distribution    \r
150   TH1F    *fHistMultiplicityForTrigEvt;                 //! multiplicity distribution\r
151   TH1F    *fHistMultiplicity;                           //! multiplicity distribution\r
152   TH1F    *fHistMultiplicityNoTPCOnly;                  //! multiplicity distribution\r
153   TH1F    *fHistMultiplicityNoTPCOnlyNoPileup;          //! multiplicity distribution\r
154 \r
155   //before selection\r
156   TH1F* fHistV0InvMassK0;                           // Invariant mass K0\r
157   TH1F* fHistV0InvMassLambda;                       // Invariant mass Lambda\r
158   TH1F* fHistV0InvMassAntiLambda;                   // Invariant mass AntiLambda\r
159   TH2F* fHistV0Armenteros;                          // Armenteros plot\r
160 \r
161   //after selection\r
162   TH1F* fHistV0SelInvMassK0;                           // Invariant mass K0\r
163   TH1F* fHistV0SelInvMassLambda;                       // Invariant mass Lambda\r
164   TH1F* fHistV0SelInvMassAntiLambda;                   // Invariant mass AntiLambda\r
165   TH2F* fHistV0SelArmenteros;                          // Armenteros plot\r
166  \r
167   TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"\r
168   Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)\r
169   Double_t fCentralityPercentileMin;//centrality percentile min\r
170   Double_t fCentralityPercentileMax;//centrality percentile max\r
171   Double_t fImpactParameterMin;//impact parameter min (used for MC)\r
172   Double_t fImpactParameterMax;//impact parameter max (used for MC)\r
173 \r
174   Bool_t fUseMultiplicity;//use the multiplicity cuts\r
175   Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
176   Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
177   TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks\r
178 \r
179   Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection\r
180 \r
181   Double_t fVxMax;//vxmax\r
182   Double_t fVyMax;//vymax\r
183   Double_t fVzMax;//vzmax\r
184 \r
185   Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)\r
186 \r
187   Double_t fPtMin;//only used for AODs\r
188   Double_t fPtMax;//only used for AODs\r
189   Double_t fEtaMin;//only used for AODs\r
190   Double_t fEtaMax;//only used for AODs\r
191 \r
192   Double_t fDCAxyCut;//only used for AODs\r
193   Double_t fDCAzCut;//only used for AODs\r
194 \r
195   Double_t fTPCchi2Cut;//only used for AODs\r
196   Int_t fNClustersTPCCut;//only used for AODs\r
197 \r
198  \r
199   AliAnalysisTaskTriggeredBF(const AliAnalysisTaskTriggeredBF&); // not implemented\r
200   AliAnalysisTaskTriggeredBF& operator=(const AliAnalysisTaskTriggeredBF&); // not implemented\r
201   \r
202   ClassDef(AliAnalysisTaskTriggeredBF, 1); // example of analysis\r
203 };\r
204 \r
205 // class used for io with AliBalance (taken from AliAnalysisTaskPhiCorrelations)\r
206 class AliBFBasicParticle : public AliVParticle\r
207\r
208   public:\r
209   AliBFBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge, Double_t correction)\r
210     : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge), fCorrection(correction)\r
211     {\r
212     }\r
213     ~AliBFBasicParticle() {}\r
214     \r
215     // kinematics\r
216     virtual Double_t Px() const { AliFatal("Not implemented"); return 0; }\r
217     virtual Double_t Py() const { AliFatal("Not implemented"); return 0; }\r
218     virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; }\r
219     virtual Double_t Pt() const { return fpT; }\r
220     virtual Double_t P() const { AliFatal("Not implemented"); return 0; }\r
221     virtual Bool_t   PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; }\r
222 \r
223     virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; }\r
224     virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; }\r
225     virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; }\r
226     virtual Bool_t   XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; }\r
227 \r
228     virtual Double_t OneOverPt()  const { AliFatal("Not implemented"); return 0; }\r
229     virtual Double_t Phi()        const { return fPhi; }\r
230     virtual Double_t Theta()      const { AliFatal("Not implemented"); return 0; }\r
231 \r
232 \r
233     virtual Double_t E()          const { AliFatal("Not implemented"); return 0; }\r
234     virtual Double_t M()          const { AliFatal("Not implemented"); return 0; }\r
235     \r
236     virtual Double_t Eta()        const { return fEta; }\r
237     virtual Double_t Y()          const { AliFatal("Not implemented"); return 0; }\r
238     \r
239     virtual Short_t Charge()      const { return fCharge; }\r
240     virtual Int_t   GetLabel()    const { AliFatal("Not implemented"); return 0; }\r
241 \r
242     virtual Double_t Correction()        const { return fCorrection; } //=============================correction\r
243     \r
244     // PID\r
245     virtual Int_t   PdgCode()     const { AliFatal("Not implemented"); return 0; }      \r
246     virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; }\r
247     \r
248   private:\r
249     Float_t fEta;      // eta\r
250     Float_t fPhi;      // phi\r
251     Float_t fpT;       // pT\r
252     Short_t fCharge;   // charge\r
253     Double_t fCorrection; //============================correction\r
254 \r
255     ClassDef( AliBFBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing\r
256 };\r
257 \r
258 #endif\r