]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskBFPsi.h
changes for 2D centrality QA (Alis R. Manso)
[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 TF1;\r
11 \r
12 class AliBalancePsi;\r
13 class AliESDtrackCuts;\r
14 class AliEventPoolManager;\r
15 \r
16 \r
17 #include "AliAnalysisTaskSE.h"\r
18 #include "AliBalancePsi.h"\r
19 \r
20 #include "AliPID.h"  \r
21 #include "AliPIDResponse.h"\r
22 #include "AliPIDCombined.h"\r
23  \r
24 \r
25 class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {\r
26  public:\r
27   AliAnalysisTaskBFPsi(const char *name = "AliAnalysisTaskBFPsi");\r
28   virtual ~AliAnalysisTaskBFPsi(); \r
29   \r
30   \r
31   virtual void   UserCreateOutputObjects();\r
32   virtual void   UserExec(Option_t *option);\r
33   virtual void   FinishTaskOutput();\r
34   virtual void   Terminate(Option_t *);\r
35 \r
36   void SetAnalysisObject(AliBalancePsi *const analysis) {\r
37     fBalance         = analysis;\r
38     }\r
39   void SetShufflingObject(AliBalancePsi *const analysisShuffled) {\r
40     fRunShuffling = kTRUE;\r
41     fShuffledBalance = analysisShuffled;\r
42   }\r
43   void SetMixingObject(AliBalancePsi *const analysisMixed) {\r
44     fRunMixing = kTRUE;\r
45     fMixedBalance = analysisMixed;\r
46   }\r
47   void SetMixingWithEventPlane(Bool_t bMixingWithEventPlane = kTRUE) { fRunMixingEventPlane = bMixingWithEventPlane; }\r
48   void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }\r
49   void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {\r
50     fESDtrackCuts = trackCuts;}\r
51   void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {\r
52     fVxMax = vx;\r
53     fVyMax = vy;\r
54     fVzMax = vz;\r
55   }\r
56 \r
57   //==============AOD analysis==============//\r
58   void SetAODtrackCutBit(Int_t bit){\r
59     nAODtrackCutBit = bit;\r
60   }\r
61 \r
62   void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){\r
63     fPtMin  = ptmin;  fPtMax  = ptmax;\r
64     fEtaMin = etamin; fEtaMax = etamax;\r
65   }\r
66 \r
67   void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){\r
68     fDCAxyCut  = DCAxy;\r
69     fDCAzCut = DCAz;\r
70   }\r
71 \r
72    void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){\r
73     fTPCchi2Cut      = maxTPCchi2;\r
74     fNClustersTPCCut = minNClustersTPC;\r
75   }\r
76 \r
77   //==============MC analysis==============//\r
78   void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax,\r
79                            Double_t etamin, Double_t etamax){\r
80     fPtMin  = ptmin; fPtMax  = ptmax;\r
81     fEtaMin = etamin; fEtaMax = etamax;\r
82   }\r
83   void UseFlowAfterBurner(TF1 *gDifferentialV2) {\r
84     fDifferentialV2 = gDifferentialV2;\r
85     fUseFlowAfterBurner = kTRUE;\r
86   }\r
87   void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}\r
88 \r
89   void SetPDGCode(Int_t gPdgCode) {\r
90     fUseMCPdgCode = kTRUE;\r
91     fPDGCodeToBeAnalyzed = gPdgCode;\r
92   }\r
93 \r
94   //Centrality\r
95   void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}\r
96   const char* GetCentralityEstimator(void)  const              {return fCentralityEstimator;}\r
97   void SetCentralityPercentileRange(Double_t min, Double_t max) { \r
98     fUseCentrality = kTRUE;\r
99     fCentralityPercentileMin=min;\r
100     fCentralityPercentileMax=max;\r
101   }\r
102   void SetImpactParameterRange(Double_t min, Double_t max) { \r
103     fUseCentrality = kTRUE;\r
104     fImpactParameterMin=min;\r
105     fImpactParameterMax=max;\r
106   }\r
107 \r
108   //multiplicity\r
109   void SetMultiplicityRange(Int_t min, Int_t max) {\r
110     fUseMultiplicity = kTRUE;\r
111     fNumberOfAcceptedTracksMin = min;\r
112     fNumberOfAcceptedTracksMax = max;}\r
113   \r
114   void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}\r
115   \r
116   //Acceptance filter\r
117   void SetAcceptanceParameterization(TF1 *parameterization) {\r
118     fAcceptanceParameterization = parameterization;}\r
119 \r
120   //pid\r
121   enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)  \r
122   enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton };  \r
123 \r
124   void SetUseBayesianPID(Double_t gMinProbabilityValue) {\r
125     fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE;\r
126     fMinAcceptedPIDProbability = gMinProbabilityValue; }\r
127 \r
128   void SetUseNSigmaPID(Double_t gMaxNSigma) {\r
129     fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE;\r
130     fPIDNSigma = gMaxNSigma; }\r
131 \r
132   void SetParticleOfInterest(kParticleOfInterest poi) {\r
133     fParticleOfInterest = poi;}\r
134   void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) {\r
135     fPidDetectorConfig = detConfig;}\r
136 \r
137  private:\r
138   Double_t    IsEventAccepted(AliVEvent* event);\r
139   Double_t    GetEventPlane(AliVEvent* event);\r
140   TObjArray* GetAcceptedTracks(AliVEvent* event, Double_t fCentrality, Double_t gReactionPlane);\r
141   TObjArray* GetShuffledTracks(TObjArray* tracks);\r
142 \r
143   AliBalancePsi *fBalance; //BF object\r
144   Bool_t fRunShuffling;//run shuffling or not\r
145   AliBalancePsi *fShuffledBalance; //BF object (shuffled)\r
146   Bool_t fRunMixing;//run mixing or not\r
147   Bool_t fRunMixingEventPlane;//run mixing with Event Plane\r
148   Int_t  fMixingTracks;\r
149   AliBalancePsi *fMixedBalance; //TriggeredBF object (mixed)\r
150   AliEventPoolManager*     fPoolMgr;         //! event pool manager\r
151 \r
152   TList *fList; //fList object\r
153   TList *fListBF; //fList object\r
154   TList *fListBFS; //fList object\r
155   TList *fListBFM; //fList object\r
156   TList *fHistListPIDQA;  //! list of histograms\r
157 \r
158   TH2F *fHistEventStats; //event stats\r
159   TH2F *fHistCentStats; //centrality stats\r
160   TH1F *fHistTriggerStats; //trigger stats\r
161   TH1F *fHistTrackStats; //Track filter bit stats\r
162   TH1F *fHistVx; //x coordinate of the primary vertex\r
163   TH1F *fHistVy; //y coordinate of the primary vertex\r
164   TH2F *fHistVz; //z coordinate of the primary vertex\r
165 \r
166   TH2F *fHistEventPlane; //event plane distribution\r
167 \r
168   TH2F *fHistClus;//number of clusters (QA histogram)\r
169   TH2F *fHistDCA;//DCA  (QA histogram)\r
170   TH2F *fHistChi2;//track chi2 (QA histogram)\r
171   TH2F *fHistPt;//transverse momentum (QA histogram)\r
172   TH2F *fHistEta;//pseudorapidity (QA histogram)\r
173   TH2F *fHistRapidity;//rapidity (QA histogram)\r
174   TH2F *fHistPhi;//phi (QA histogram)\r
175   TH2F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)\r
176   TH2F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)\r
177   TH2F *fHistPhiPos;//phi for positive particles (QA histogram)\r
178   TH2F *fHistPhiNeg;//phi for negative particles (QA histogram)\r
179   TH2F *fHistV0M;//V0 multiplicities (QA histogram)\r
180   TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)\r
181 \r
182   //============PID============//\r
183   TH2D *fHistdEdxVsPTPCbeforePID;//TPC dEdx vs momentum before PID cuts (QA histogram)\r
184   TH2D *fHistBetavsPTOFbeforePID;//beta vs momentum before PID cuts (QA histogram)\r
185   TH2D *fHistProbTPCvsPtbeforePID; //TPC probability vs pT before PID cuts (QA histogram)\r
186   TH2D *fHistProbTOFvsPtbeforePID;//TOF probability vs pT before PID cuts (QA histogram)\r
187   TH2D *fHistProbTPCTOFvsPtbeforePID;//TOF/TPC probability vs pT before PID cuts (QA histogram)\r
188   TH2D *fHistNSigmaTPCvsPtbeforePID;//TPC nsigma vs pT before PID cuts (QA histogram)\r
189   TH2D *fHistNSigmaTOFvsPtbeforePID;//TOF nsigma vs pT before PID cuts (QA histogram)\r
190   TH2D *fHistdEdxVsPTPCafterPID;//TPC dEdx vs momentum after PID cuts (QA histogram)\r
191   TH2D *fHistBetavsPTOFafterPID;//beta vs momentum after PID cuts (QA histogram)\r
192   TH2D *fHistProbTPCvsPtafterPID; //TPC probability vs pT after PID cuts (QA histogram)\r
193   TH2D *fHistProbTOFvsPtafterPID;//TOF probability vs pT after PID cuts (QA histogram)\r
194   TH2D *fHistProbTPCTOFvsPtafterPID;//TOF/TPC probability vs pT after PID cuts (QA histogram)\r
195   TH2D *fHistNSigmaTPCvsPtafterPID;//TPC nsigma vs pT after PID cuts (QA histogram)\r
196   TH2D *fHistNSigmaTOFvsPtafterPID;//TOF nsigma vs pT after PID cuts (QA histogram)\r
197 \r
198   AliPIDResponse *fPIDResponse;     //! PID response object\r
199   AliPIDCombined       *fPIDCombined;     //! combined PID object\r
200   \r
201   kParticleOfInterest  fParticleOfInterest;//analyzed particle\r
202   kDetectorUsedForPID   fPidDetectorConfig;//used detector for PID\r
203 \r
204   Bool_t fUsePID; //flag to use PID \r
205   Bool_t fUsePIDnSigma;//flag to use nsigma method for PID\r
206   Bool_t fUsePIDPropabilities;//flag to use probability method for PID\r
207   Double_t fPIDNSigma;//nsigma cut for PID\r
208   Double_t fMinAcceptedPIDProbability;//probability cut for PID\r
209   //============PID============//\r
210 \r
211   AliESDtrackCuts *fESDtrackCuts; //ESD track cuts\r
212 \r
213   TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"\r
214   Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)\r
215   Double_t fCentralityPercentileMin;//centrality percentile min\r
216   Double_t fCentralityPercentileMax;//centrality percentile max\r
217   Double_t fImpactParameterMin;//impact parameter min (used for MC)\r
218   Double_t fImpactParameterMax;//impact parameter max (used for MC)\r
219 \r
220   Bool_t fUseMultiplicity;//use the multiplicity cuts\r
221   Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
222   Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
223   TH2F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks\r
224 \r
225   Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection\r
226 \r
227   Double_t fVxMax;//vxmax\r
228   Double_t fVyMax;//vymax\r
229   Double_t fVzMax;//vzmax\r
230 \r
231   Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)\r
232 \r
233   Double_t fPtMin;//only used for AODs\r
234   Double_t fPtMax;//only used for AODs\r
235   Double_t fEtaMin;//only used for AODs\r
236   Double_t fEtaMax;//only used for AODs\r
237 \r
238   Double_t fDCAxyCut;//only used for AODs\r
239   Double_t fDCAzCut;//only used for AODs\r
240 \r
241   Double_t fTPCchi2Cut;//only used for AODs\r
242   Int_t fNClustersTPCCut;//only used for AODs\r
243 \r
244   TF1 *fAcceptanceParameterization;//acceptance filter used for MC\r
245 \r
246   TF1 *fDifferentialV2;//pt-differential v2 (from real data)\r
247   Bool_t fUseFlowAfterBurner;//Usage of a flow after burner\r
248 \r
249   Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis\r
250   Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC\r
251   Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC\r
252 \r
253   \r
254 \r
255   AliAnalysisTaskBFPsi(const AliAnalysisTaskBFPsi&); // not implemented\r
256   AliAnalysisTaskBFPsi& operator=(const AliAnalysisTaskBFPsi&); // not implemented\r
257   \r
258   ClassDef(AliAnalysisTaskBFPsi, 5); // example of analysis\r
259 };\r
260 \r
261 \r
262 \r
263 #endif\r