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