1 #ifndef ALIANALYSISTASKBFPSI_H
\r
2 #define ALIANALYSISTASKBFPSI_H
\r
4 // Analysis task for the BF vs Psi code
\r
5 // Authors: Panos Cristakoglou@cern.ch
\r
14 class AliBalancePsi;
\r
15 class AliESDtrackCuts;
\r
16 class AliEventPoolManager;
\r
19 #include "AliAnalysisTaskSE.h"
\r
20 #include "AliBalancePsi.h"
\r
22 #include "AliPID.h"
\r
23 #include "AliPIDResponse.h"
\r
24 #include "AliPIDCombined.h"
\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
32 class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {
\r
34 AliAnalysisTaskBFPsi(const char *name = "AliAnalysisTaskBFPsi");
\r
35 virtual ~AliAnalysisTaskBFPsi();
\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
42 //========================correction
\r
43 virtual void SetInputCorrection(TString filename,
\r
44 Int_t nCentralityBins,
\r
45 Double_t *centralityArrayForCorrections);
\r
46 //========================correction
\r
48 void SetAnalysisObject(AliBalancePsi *const analysis) {
\r
49 fBalance = analysis;
\r
51 void SetShufflingObject(AliBalancePsi *const analysisShuffled) {
\r
52 fRunShuffling = kTRUE;
\r
53 fShuffledBalance = analysisShuffled;
\r
55 void SetMixingObject(AliBalancePsi *const analysisMixed) {
\r
57 fMixedBalance = analysisMixed;
\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
69 //==============AOD analysis==============//
\r
70 void SetAODtrackCutBit(Int_t bit){
\r
71 nAODtrackCutBit = bit;
\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
79 void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){
\r
84 void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){
\r
85 fTPCchi2Cut = maxTPCchi2;
\r
86 fNClustersTPCCut = minNClustersTPC;
\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
95 void UseFlowAfterBurner(TF1 *gDifferentialV2) {
\r
96 fDifferentialV2 = gDifferentialV2;
\r
97 fUseFlowAfterBurner = kTRUE;
\r
99 void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}
\r
101 void SetPDGCode(Int_t gPdgCode) {
\r
102 fUseMCPdgCode = kTRUE;
\r
103 fPDGCodeToBeAnalyzed = gPdgCode;
\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
114 void SetImpactParameterRange(Double_t min, Double_t max) {
\r
115 fUseCentrality = kTRUE;
\r
116 fImpactParameterMin=min;
\r
117 fImpactParameterMax=max;
\r
121 void SetMultiplicityRange(Double_t min, Double_t max) {
\r
122 fUseMultiplicity = kTRUE;
\r
123 fNumberOfAcceptedTracksMin = min;
\r
124 fNumberOfAcceptedTracksMax = max;}
\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
131 //Acceptance filter
\r
132 void SetAcceptanceParameterization(TF1 *parameterization) {
\r
133 fAcceptanceParameterization = parameterization;}
\r
136 enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)
\r
137 enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton };
\r
139 void SetUseBayesianPID(Double_t gMinProbabilityValue) {
\r
140 fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE;
\r
141 fMinAcceptedPIDProbability = gMinProbabilityValue; }
\r
143 void SetUseNSigmaPID(Double_t gMaxNSigma) {
\r
144 fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE;
\r
145 fPIDNSigma = gMaxNSigma; }
\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
155 // electron rejection
\r
156 void SetElectronRejection(Double_t gMaxNSigma){
\r
157 fElectronRejection = kTRUE;
\r
158 fElectronRejectionNSigma = gMaxNSigma;
\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
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
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
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
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
201 TH2F *fHistEventPlane; //event plane distribution
\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
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
235 TH3F *fHistCorrectionPlus[kCENTRALITY]; //====correction
\r
236 TH3F *fHistCorrectionMinus[kCENTRALITY]; //===correction
\r
237 Double_t fCentralityArrayForCorrections[kCENTRALITY];
\r
238 Int_t fCentralityArrayBinsForCorrections;
\r
240 AliPIDResponse *fPIDResponse; //! PID response object
\r
241 AliPIDCombined *fPIDCombined; //! combined PID object
\r
243 kParticleOfInterest fParticleOfInterest;//analyzed particle
\r
244 kDetectorUsedForPID fPidDetectorConfig;//used detector for PID
\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
252 Bool_t fElectronRejection;//flag to use electron rejection
\r
253 Double_t fElectronRejectionNSigma;//nsigma cut for electron rejection
\r
255 //============PID============//
\r
257 AliESDtrackCuts *fESDtrackCuts; //ESD track cuts
\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
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
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
275 Double_t fVxMax;//vxmax
\r
276 Double_t fVyMax;//vymax
\r
277 Double_t fVzMax;//vzmax
\r
279 Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)
\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
297 Double_t fDCAxyCut;//only used for AODs
\r
298 Double_t fDCAzCut;//only used for AODs
\r
300 Double_t fTPCchi2Cut;//only used for AODs
\r
301 Int_t fNClustersTPCCut;//only used for AODs
\r
303 TF1 *fAcceptanceParameterization;//acceptance filter used for MC
\r
305 TF1 *fDifferentialV2;//pt-differential v2 (from real data)
\r
306 Bool_t fUseFlowAfterBurner;//Usage of a flow after burner
\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
314 AliAnalysisTaskBFPsi(const AliAnalysisTaskBFPsi&); // not implemented
\r
315 AliAnalysisTaskBFPsi& operator=(const AliAnalysisTaskBFPsi&); // not implemented
\r
317 ClassDef(AliAnalysisTaskBFPsi, 6); // example of analysis
\r