]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskBFPsi.h
6100b3d9d834e15991ed6f04a320f10ec0d79592
[u/mrichter/AliRoot.git] / PWGCF / EBYE / BalanceFunctions / AliAnalysisTaskBFPsi.h
1 #ifndef ALIANALYSISTASKBFPSI_H\r
2 #define ALIANALYSISTASKBFPSI_H\r
3 \r
4 // Analysis task for the BF vs Psi code\r
5 // Authors: Panos Cristakoglou@cern.ch\r
6 \r
7 class TList;\r
8 class TH1F;\r
9 class TH2F;\r
10 class TH3F; \r
11 class TF1;\r
12 class TH3D;\r
13 \r
14 class AliBalancePsi;\r
15 class AliESDtrackCuts;\r
16 class AliEventPoolManager;\r
17 \r
18 \r
19 #include "AliAnalysisTaskSE.h"\r
20 #include "AliBalancePsi.h"\r
21 \r
22 #include "AliPID.h"  \r
23 #include "AliPIDResponse.h"\r
24 #include "AliPIDCombined.h"\r
25  \r
26 //================================correction\r
27 #define kCENTRALITY 101  \r
28 //const Double_t centralityArrayForPbPb[kCENTRALITY+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.};\r
29 //const TString centralityArrayForPbPb_string[kCENTRALITY] = {"0-5","5-10","10-20","20-30","30-40","40-50","50-60","60-70","70-80"};\r
30 //================================correction\r
31 \r
32 class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {\r
33  public:\r
34   AliAnalysisTaskBFPsi(const char *name = "AliAnalysisTaskBFPsi");\r
35   virtual ~AliAnalysisTaskBFPsi(); \r
36    \r
37   virtual void   UserCreateOutputObjects();\r
38   virtual void   UserExec(Option_t *option);\r
39   virtual void   FinishTaskOutput();\r
40   virtual void   Terminate(Option_t *);\r
41 \r
42   //========================correction\r
43   virtual void   SetInputCorrection(TString filename, \r
44                                     Int_t nCentralityBins, \r
45                                     Double_t *centralityArrayForCorrections);\r
46   //========================correction\r
47 \r
48   void SetAnalysisObject(AliBalancePsi *const analysis) {\r
49     fBalance         = analysis;\r
50     }\r
51   void SetShufflingObject(AliBalancePsi *const analysisShuffled) {\r
52     fRunShuffling = kTRUE;\r
53     fShuffledBalance = analysisShuffled;\r
54   }\r
55   void SetMixingObject(AliBalancePsi *const analysisMixed) {\r
56     fRunMixing = kTRUE;\r
57     fMixedBalance = analysisMixed;\r
58   }\r
59   void SetMixingWithEventPlane(Bool_t bMixingWithEventPlane = kTRUE) { fRunMixingEventPlane = bMixingWithEventPlane; }\r
60   void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }\r
61   void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {\r
62     fESDtrackCuts = trackCuts;}\r
63   void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {\r
64     fVxMax = vx;\r
65     fVyMax = vy;\r
66     fVzMax = vz;\r
67   }\r
68 \r
69   //==============AOD analysis==============//\r
70   void SetAODtrackCutBit(Int_t bit){\r
71     nAODtrackCutBit = bit;\r
72   }\r
73 \r
74   void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){\r
75     fPtMin  = ptmin;  fPtMax  = ptmax;\r
76     fEtaMin = etamin; fEtaMax = etamax;\r
77   }\r
78 \r
79   void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){\r
80     fDCAxyCut  = DCAxy;\r
81     fDCAzCut = DCAz;\r
82   }\r
83 \r
84    void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){\r
85     fTPCchi2Cut      = maxTPCchi2;\r
86     fNClustersTPCCut = minNClustersTPC;\r
87   }\r
88 \r
89   //==============MC analysis==============//\r
90   void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax,\r
91                            Double_t etamin, Double_t etamax){\r
92     fPtMin  = ptmin; fPtMax  = ptmax;\r
93     fEtaMin = etamin; fEtaMax = etamax;\r
94   }\r
95   void UseFlowAfterBurner(TF1 *gDifferentialV2) {\r
96     fDifferentialV2 = gDifferentialV2;\r
97     fUseFlowAfterBurner = kTRUE;\r
98   }\r
99   void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}\r
100 \r
101   void SetPDGCode(Int_t gPdgCode) {\r
102     fUseMCPdgCode = kTRUE;\r
103     fPDGCodeToBeAnalyzed = gPdgCode;\r
104   }\r
105 \r
106   //Centrality\r
107   void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}\r
108   const char* GetCentralityEstimator(void)  const              {return fCentralityEstimator;}\r
109   void SetCentralityPercentileRange(Double_t min, Double_t max) { \r
110     fUseCentrality = kTRUE;\r
111     fCentralityPercentileMin=min;\r
112     fCentralityPercentileMax=max;\r
113   }\r
114   void SetImpactParameterRange(Double_t min, Double_t max) { \r
115     fUseCentrality = kTRUE;\r
116     fImpactParameterMin=min;\r
117     fImpactParameterMax=max;\r
118   }\r
119 \r
120   //multiplicity\r
121   void SetMultiplicityRange(Double_t min, Double_t max) {\r
122     fUseMultiplicity = kTRUE;\r
123     fNumberOfAcceptedTracksMin = min;\r
124     fNumberOfAcceptedTracksMax = max;}\r
125   \r
126   // additional event cuts (default = kFALSE)\r
127   void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}\r
128   void CheckFirstEventInChunk() {fCheckFirstEventInChunk = kTRUE;}\r
129   void CheckPileUp() {fCheckPileUp = kTRUE;}\r
130   \r
131   //Acceptance filter\r
132   void SetAcceptanceParameterization(TF1 *parameterization) {\r
133     fAcceptanceParameterization = parameterization;}\r
134 \r
135   //pid\r
136   enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)  \r
137   enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton };  \r
138 \r
139   void SetUseBayesianPID(Double_t gMinProbabilityValue) {\r
140     fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE;\r
141     fMinAcceptedPIDProbability = gMinProbabilityValue; }\r
142 \r
143   void SetUseNSigmaPID(Double_t gMaxNSigma) {\r
144     fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE;\r
145     fPIDNSigma = gMaxNSigma; }\r
146 \r
147   void SetParticleOfInterest(kParticleOfInterest poi) {\r
148     fParticleOfInterest = poi;}\r
149   void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) {\r
150     fPidDetectorConfig = detConfig;}\r
151     void SetEventClass(TString receivedEventClass){\r
152         fEventClass = receivedEventClass;\r
153     }\r
154 \r
155     // electron rejection\r
156     void SetElectronRejection(Double_t gMaxNSigma){\r
157       fElectronRejection = kTRUE;\r
158       fElectronRejectionNSigma = gMaxNSigma;\r
159     }\r
160 \r
161 \r
162  private:\r
163   Double_t    IsEventAccepted(AliVEvent* event);\r
164   Double_t    GetRefMultiOrCentrality(AliVEvent* event);\r
165   Double_t    GetEventPlane(AliVEvent* event);\r
166   //===============================correction\r
167   Double_t    GetTrackbyTrackCorrectionMatrix(Double_t vEta, \r
168                                               Double_t vPhi, \r
169                                               Double_t vPt, \r
170                                               Short_t vCharge, \r
171                                               Double_t gCentrality);\r
172   //===============================correction\r
173   TObjArray* GetAcceptedTracks(AliVEvent* event, Double_t gCentrality, Double_t gReactionPlane);\r
174   TObjArray* GetShuffledTracks(TObjArray* tracks, Double_t gCentrality);\r
175  \r
176   TClonesArray* fArrayMC; //! AOD object  //+++++++++++++++++++++\r
177   AliBalancePsi *fBalance; //BF object\r
178   Bool_t fRunShuffling;//run shuffling or not\r
179   AliBalancePsi *fShuffledBalance; //BF object (shuffled)\r
180   Bool_t fRunMixing;//run mixing or not\r
181   Bool_t fRunMixingEventPlane;//run mixing with Event Plane\r
182   Int_t  fMixingTracks;\r
183   AliBalancePsi *fMixedBalance; //TriggeredBF object (mixed)\r
184   AliEventPoolManager*     fPoolMgr;         //! event pool manager\r
185 \r
186   TList *fList; //fList object\r
187   TList *fListBF; //fList object\r
188   TList *fListBFS; //fList object\r
189   TList *fListBFM; //fList object\r
190   TList *fHistListPIDQA;  //! list of histograms\r
191 \r
192   TH2F *fHistEventStats; //event stats\r
193   TH2F *fHistCentStats; //centrality stats\r
194   TH2F *fHistCentStatsUsed; //centrality stats USED +++++++++++++++++++++++\r
195   TH1F *fHistTriggerStats; //trigger stats\r
196   TH1F *fHistTrackStats; //Track filter bit stats\r
197   TH1F *fHistVx; //x coordinate of the primary vertex\r
198   TH1F *fHistVy; //y coordinate of the primary vertex\r
199   TH2F *fHistVz; //z coordinate of the primary vertex\r
200 \r
201   TH2F *fHistEventPlane; //event plane distribution\r
202 \r
203   TH2F *fHistClus;//number of clusters (QA histogram)\r
204   TH2F *fHistDCA;//DCA  (QA histogram)\r
205   TH2F *fHistChi2;//track chi2 (QA histogram)\r
206   TH2F *fHistPt;//transverse momentum (QA histogram)\r
207   TH2F *fHistEta;//pseudorapidity (QA histogram)\r
208   TH2F *fHistRapidity;//rapidity (QA histogram)\r
209   TH2F *fHistPhi;//phi (QA histogram)\r
210   TH3F *fHistEtaPhiPos;//eta-phi pos particles (QA histogram)                    \r
211   TH3F *fHistEtaPhiNeg;//eta-phi neg particles (QA histogram)\r
212   TH2F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)\r
213   TH2F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)\r
214   TH2F *fHistPhiPos;//phi for positive particles (QA histogram)\r
215   TH2F *fHistPhiNeg;//phi for negative particles (QA histogram)\r
216   TH2F *fHistV0M;//V0 multiplicities (QA histogram)\r
217   TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)\r
218 \r
219   //============PID============//\r
220   TH2D *fHistdEdxVsPTPCbeforePID;//TPC dEdx vs momentum before PID cuts (QA histogram)\r
221   TH2D *fHistBetavsPTOFbeforePID;//beta vs momentum before PID cuts (QA histogram)\r
222   TH2D *fHistProbTPCvsPtbeforePID; //TPC probability vs pT before PID cuts (QA histogram)\r
223   TH2D *fHistProbTOFvsPtbeforePID;//TOF probability vs pT before PID cuts (QA histogram)\r
224   TH2D *fHistProbTPCTOFvsPtbeforePID;//TOF/TPC probability vs pT before PID cuts (QA histogram)\r
225   TH2D *fHistNSigmaTPCvsPtbeforePID;//TPC nsigma vs pT before PID cuts (QA histogram)\r
226   TH2D *fHistNSigmaTOFvsPtbeforePID;//TOF nsigma vs pT before PID cuts (QA histogram)\r
227   TH2D *fHistdEdxVsPTPCafterPID;//TPC dEdx vs momentum after PID cuts (QA histogram)\r
228   TH2D *fHistBetavsPTOFafterPID;//beta vs momentum after PID cuts (QA histogram)\r
229   TH2D *fHistProbTPCvsPtafterPID; //TPC probability vs pT after PID cuts (QA histogram)\r
230   TH2D *fHistProbTOFvsPtafterPID;//TOF probability vs pT after PID cuts (QA histogram)\r
231   TH2D *fHistProbTPCTOFvsPtafterPID;//TOF/TPC probability vs pT after PID cuts (QA histogram)\r
232   TH2D *fHistNSigmaTPCvsPtafterPID;//TPC nsigma vs pT after PID cuts (QA histogram)\r
233   TH2D *fHistNSigmaTOFvsPtafterPID;//TOF nsigma vs pT after PID cuts (QA histogram)\r
234   \r
235   TH3F *fHistCorrectionPlus[kCENTRALITY]; //====correction\r
236   TH3F *fHistCorrectionMinus[kCENTRALITY]; //===correction\r
237   Double_t fCentralityArrayForCorrections[kCENTRALITY];\r
238   Int_t fCentralityArrayBinsForCorrections;\r
239 \r
240   AliPIDResponse *fPIDResponse;     //! PID response object\r
241   AliPIDCombined       *fPIDCombined;     //! combined PID object\r
242   \r
243   kParticleOfInterest  fParticleOfInterest;//analyzed particle\r
244   kDetectorUsedForPID   fPidDetectorConfig;//used detector for PID\r
245 \r
246   Bool_t fUsePID; //flag to use PID \r
247   Bool_t fUsePIDnSigma;//flag to use nsigma method for PID\r
248   Bool_t fUsePIDPropabilities;//flag to use probability method for PID\r
249   Double_t fPIDNSigma;//nsigma cut for PID\r
250   Double_t fMinAcceptedPIDProbability;//probability cut for PID\r
251 \r
252   Bool_t   fElectronRejection;//flag to use electron rejection\r
253   Double_t fElectronRejectionNSigma;//nsigma cut for electron rejection\r
254 \r
255   //============PID============//\r
256 \r
257   AliESDtrackCuts *fESDtrackCuts; //ESD track cuts\r
258 \r
259   TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"\r
260   Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)\r
261   Double_t fCentralityPercentileMin;//centrality percentile min\r
262   Double_t fCentralityPercentileMax;//centrality percentile max\r
263   Double_t fImpactParameterMin;//impact parameter min (used for MC)\r
264   Double_t fImpactParameterMax;//impact parameter max (used for MC)\r
265 \r
266   Bool_t fUseMultiplicity;//use the multiplicity cuts\r
267   Double_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
268   Double_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
269   TH2F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks\r
270 \r
271   Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection\r
272   Bool_t fCheckFirstEventInChunk;//Usage of the "First Event in Chunk" check (not needed for new productions)\r
273   Bool_t fCheckPileUp;//Usage of the "Pile-Up" event check\r
274 \r
275   Double_t fVxMax;//vxmax\r
276   Double_t fVyMax;//vymax\r
277   Double_t fVzMax;//vzmax\r
278 \r
279   Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)\r
280 \r
281   Double_t fPtMin;//only used for AODs\r
282   Double_t fPtMax;//only used for AODs\r
283   Double_t fPtMinForCorrections;//only used for AODs\r
284   Double_t fPtMaxForCorrections;//only used for AODs\r
285   Double_t fPtBinForCorrections; //=================================correction\r
286   Double_t fEtaMin;//only used for AODs\r
287   Double_t fEtaMax;//only used for AODs\r
288   Double_t fEtaMinForCorrections;//only used for AODs\r
289   Double_t fEtaMaxForCorrections;//only used for AODs\r
290   Double_t fEtaBinForCorrections; //=================================correction\r
291   Double_t fPhiMin; //=================================correction \r
292   Double_t fPhiMax; //=================================correction\r
293   Double_t fPhiMinForCorrections;//only used for AODs\r
294   Double_t fPhiMaxForCorrections;//only used for AODs\r
295   Double_t fPhiBinForCorrections; //=================================correction\r
296 \r
297   Double_t fDCAxyCut;//only used for AODs\r
298   Double_t fDCAzCut;//only used for AODs\r
299 \r
300   Double_t fTPCchi2Cut;//only used for AODs\r
301   Int_t fNClustersTPCCut;//only used for AODs\r
302 \r
303   TF1 *fAcceptanceParameterization;//acceptance filter used for MC\r
304 \r
305   TF1 *fDifferentialV2;//pt-differential v2 (from real data)\r
306   Bool_t fUseFlowAfterBurner;//Usage of a flow after burner\r
307 \r
308   Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis\r
309   Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC\r
310   Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC\r
311   TString fEventClass; //Can be "EventPlane", "Centrality", "Multiplicity"\r
312   \r
313 \r
314   AliAnalysisTaskBFPsi(const AliAnalysisTaskBFPsi&); // not implemented\r
315   AliAnalysisTaskBFPsi& operator=(const AliAnalysisTaskBFPsi&); // not implemented\r
316   \r
317   ClassDef(AliAnalysisTaskBFPsi, 6); // example of analysis\r
318 };\r
319 \r
320 \r
321 \r
322 #endif\r