First version of the pid code for the balance function (Alis Rodriguez Manso)
[u/mrichter/AliRoot.git] / PWGCF / EBYE / BalanceFunctions / AliAnalysisTaskBF.h
1 #ifndef ALIANALYSISTASKBF_CXX\r
2 #define ALIANALYSISTASKBF_CXX\r
3 \r
4 // Analysis task for the BF 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 AliBalance;\r
13 class AliESDtrackCuts;\r
14 \r
15 #include "AliAnalysisTaskSE.h"\r
16 #include "AliBalance.h"\r
17 \r
18 #include "AliPID.h"  \r
19 #include "AliPIDResponse.h"\r
20 #include "AliPIDCombined.h"\r
21  \r
22 enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)  \r
23 enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton };  \r
24 \r
25 class AliAnalysisTaskBF : public AliAnalysisTaskSE {\r
26  public:\r
27   AliAnalysisTaskBF(const char *name = "AliAnalysisTaskBF");\r
28   virtual ~AliAnalysisTaskBF(); \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(AliBalance *const analysis) {\r
37     fBalance         = analysis;\r
38     }\r
39   void SetShufflingObject(AliBalance *const analysisShuffled) {\r
40     fRunShuffling = kTRUE;\r
41     fShuffledBalance = analysisShuffled;\r
42   }\r
43   void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {\r
44     fESDtrackCuts = trackCuts;}\r
45   void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {\r
46     fVxMax = vx;\r
47     fVyMax = vy;\r
48     fVzMax = vz;\r
49   }\r
50 \r
51   //==============AOD analysis==============//\r
52   void SetAODtrackCutBit(Int_t bit){\r
53     nAODtrackCutBit = bit;\r
54   }\r
55 \r
56   void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){\r
57     fPtMin  = ptmin;\r
58     fPtMax  = ptmax;\r
59     fEtaMin = etamin;\r
60     fEtaMax = etamax;\r
61 \r
62   }\r
63 \r
64   void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){\r
65     fDCAxyCut  = DCAxy;\r
66     fDCAzCut = DCAz;\r
67   }\r
68 \r
69    void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){\r
70     fTPCchi2Cut      = maxTPCchi2;\r
71     fNClustersTPCCut = minNClustersTPC;\r
72   }\r
73 \r
74   //==============MC analysis==============//\r
75   void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax,\r
76                            Double_t etamin, Double_t etamax){\r
77     fPtMin  = ptmin; fPtMax  = ptmax;\r
78     fEtaMin = etamin; fEtaMax = etamax;\r
79   }\r
80   void UseFlowAfterBurner(TF1 *gDifferentialV2) {\r
81     fDifferentialV2 = gDifferentialV2;\r
82     fUseFlowAfterBurner = kTRUE;\r
83   }\r
84   void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}\r
85 \r
86   void SetPDGCode(Int_t gPdgCode) {\r
87     fUseMCPdgCode = kTRUE;\r
88     fPDGCodeToBeAnalyzed = gPdgCode;\r
89   }\r
90 \r
91   //Centrality\r
92   void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}\r
93   const char* GetCentralityEstimator(void)                     {return fCentralityEstimator;}\r
94   void SetCentralityPercentileRange(Double_t min, Double_t max) { \r
95     fUseCentrality = kTRUE;\r
96     fCentralityPercentileMin=min;\r
97     fCentralityPercentileMax=max;\r
98   }\r
99   void SetImpactParameterRange(Double_t min, Double_t max) { \r
100     fUseCentrality = kTRUE;\r
101     fImpactParameterMin=min;\r
102     fImpactParameterMax=max;\r
103   }\r
104 \r
105   //multiplicity\r
106   void SetMultiplicityRange(Int_t min, Int_t max) {\r
107     fUseMultiplicity = kTRUE;\r
108     fNumberOfAcceptedTracksMin = min;\r
109     fNumberOfAcceptedTracksMax = max;}\r
110   \r
111   void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}\r
112   \r
113   //Acceptance filter\r
114   void SetAcceptanceParameterization(TF1 *parameterization) {\r
115     fAcceptanceParameterization = parameterization;}\r
116 \r
117   //pid\r
118   void SetUseBayesianPID(Double_t gMinProbabilityValue) {\r
119     fUsePID = kTRUE; fUsePIDPropabilities = kTRUE;\r
120     fMinAcceptedPIDProbability = gMinProbabilityValue; }\r
121 \r
122   void SetUseNSigmaPID(Double_t gMaxNSigma) {\r
123     fUsePID = kTRUE; fUsePIDnSigma = kTRUE;\r
124     fPIDNSigma = gMaxNSigma; }\r
125 \r
126   void SetParticleOfInterest(kParticleOfInterest poi) {\r
127     fParticleOfInterest = poi;}\r
128   void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) {\r
129     fPidDetectorConfig = detConfig;}\r
130 \r
131  private:\r
132   AliBalance *fBalance; //BF object\r
133   Bool_t fRunShuffling;//run shuffling or not\r
134   AliBalance *fShuffledBalance; //BF object (shuffled)\r
135   TList *fList; //fList object\r
136   TList *fListBF; //fList object\r
137   TList *fListBFS; //fList object\r
138   TList *fHistListPIDQA;  //! list of histograms\r
139 \r
140   TH1F *fHistEventStats; //event stats\r
141   TH2F *fHistCentStats; //centrality stats\r
142   TH1F *fHistTriggerStats; //trigger stats\r
143   TH1F *fHistTrackStats; //Track filter bit stats\r
144   TH1F *fHistVx; //x coordinate of the primary vertex\r
145   TH1F *fHistVy; //y coordinate of the primary vertex\r
146   TH1F *fHistVz; //z coordinate of the primary vertex\r
147 \r
148   TH2F *fHistClus;//\r
149   TH2F *fHistDCA;//\r
150   TH1F *fHistChi2;//\r
151   TH1F *fHistPt;//\r
152   TH1F *fHistEta;//\r
153   TH1F *fHistPhi;//\r
154   TH1F *fHistPhiBefore;//\r
155   TH1F *fHistPhiAfter;//\r
156   TH2F *fHistV0M;//\r
157   TH2F *fHistRefTracks;//\r
158 \r
159   //============PID============//\r
160   TH2D *fHistdEdxVsPTPCbeforePID;//\r
161   TH2D *fHistBetavsPTOFbeforePID;//\r
162   TH2D *fHistProbTPCvsPtbeforePID; //\r
163   TH2D *fHistProbTOFvsPtbeforePID;//\r
164   TH2D *fHistNSigmaTPCvsPtbeforePID;//\r
165   TH2D *fHistNSigmaTOFvsPtbeforePID;//\r
166   TH2D *fHistdEdxVsPTPCafterPID;//\r
167   TH2D *fHistBetavsPTOFafterPID;//\r
168   TH2D *fHistProbTPCvsPtafterPID;//\r
169   TH2D *fHistProbTOFvsPtafterPID;//\r
170   TH2D *fHistNSigmaTPCvsPtafterPID;//\r
171   TH2D *fHistNSigmaTOFvsPtafterPID; //\r
172 \r
173   AliPIDResponse *fPIDResponse;     //! PID response object\r
174   AliPIDCombined       *fPIDCombined;     //! combined PID object\r
175   \r
176   kParticleOfInterest  fParticleOfInterest;\r
177   kDetectorUsedForPID   fPidDetectorConfig;\r
178 \r
179   Bool_t fUsePID; //\r
180   Bool_t fUsePIDnSigma;//\r
181   Bool_t fUsePIDPropabilities;//\r
182   Double_t fPIDNSigma;//\r
183   Double_t fMinAcceptedPIDProbability;//\r
184   //============PID============//\r
185 \r
186   AliESDtrackCuts *fESDtrackCuts; //ESD track cuts\r
187 \r
188   TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"\r
189   Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)\r
190   Double_t fCentralityPercentileMin;//centrality percentile min\r
191   Double_t fCentralityPercentileMax;//centrality percentile max\r
192   Double_t fImpactParameterMin;//impact parameter min (used for MC)\r
193   Double_t fImpactParameterMax;//impact parameter max (used for MC)\r
194 \r
195   Bool_t fUseMultiplicity;//use the multiplicity cuts\r
196   Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
197   Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
198   TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks\r
199 \r
200   Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection\r
201 \r
202   Double_t fVxMax;//vxmax\r
203   Double_t fVyMax;//vymax\r
204   Double_t fVzMax;//vzmax\r
205 \r
206   Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)\r
207 \r
208   Double_t fPtMin;//only used for AODs\r
209   Double_t fPtMax;//only used for AODs\r
210   Double_t fEtaMin;//only used for AODs\r
211   Double_t fEtaMax;//only used for AODs\r
212 \r
213   Double_t fDCAxyCut;//only used for AODs\r
214   Double_t fDCAzCut;//only used for AODs\r
215 \r
216   Double_t fTPCchi2Cut;//only used for AODs\r
217   Int_t fNClustersTPCCut;//only used for AODs\r
218 \r
219   TF1 *fAcceptanceParameterization;//acceptance filter used for MC\r
220 \r
221   TF1 *fDifferentialV2;//pt-differential v2 (from real data)\r
222   Bool_t fUseFlowAfterBurner;//Usage of a flow after burner\r
223 \r
224   Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis\r
225   Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC\r
226   Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC\r
227 \r
228   \r
229 \r
230   AliAnalysisTaskBF(const AliAnalysisTaskBF&); // not implemented\r
231   AliAnalysisTaskBF& operator=(const AliAnalysisTaskBF&); // not implemented\r
232   \r
233   ClassDef(AliAnalysisTaskBF, 5); // example of analysis\r
234 };\r
235 \r
236 #endif\r