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
47 // void SetDebugLevel() {fDebugLevel = kTRUE;} //hides overloaded virtual function
\r
49 void SetAnalysisObject(AliBalancePsi *const analysis) {
\r
50 fBalance = analysis;
\r
52 void SetShufflingObject(AliBalancePsi *const analysisShuffled) {
\r
53 fRunShuffling = kTRUE;
\r
54 fShuffledBalance = analysisShuffled;
\r
56 void SetMixingObject(AliBalancePsi *const analysisMixed) {
\r
58 fMixedBalance = analysisMixed;
\r
60 void SetMixingWithEventPlane(Bool_t bMixingWithEventPlane = kTRUE) { fRunMixingEventPlane = bMixingWithEventPlane; }
\r
61 void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }
\r
62 void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {
\r
63 fESDtrackCuts = trackCuts;}
\r
64 void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {
\r
70 //==============AOD analysis==============//
\r
71 void SetAODtrackCutBit(Int_t bit){
\r
72 fnAODtrackCutBit = bit;
\r
75 void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){
\r
76 fPtMin = ptmin; fPtMax = ptmax;
\r
77 fEtaMin = etamin; fEtaMax = etamax;
\r
80 void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){
\r
85 void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){
\r
86 fTPCchi2Cut = maxTPCchi2;
\r
87 fNClustersTPCCut = minNClustersTPC;
\r
90 //==============MC analysis==============//
\r
91 void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax,
\r
92 Double_t etamin, Double_t etamax){
\r
93 fPtMin = ptmin; fPtMax = ptmax;
\r
94 fEtaMin = etamin; fEtaMax = etamax;
\r
96 void UseFlowAfterBurner(TF1 *gDifferentialV2) {
\r
97 fDifferentialV2 = gDifferentialV2;
\r
98 fUseFlowAfterBurner = kTRUE;
\r
100 void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}
\r
101 void ExcludeElectronsInMC() {fExcludeElectronsInMC = kTRUE;}
\r
103 void SetPDGCode(Int_t gPdgCode) {
\r
104 fUseMCPdgCode = kTRUE;
\r
105 fPDGCodeToBeAnalyzed = gPdgCode;
\r
109 void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}
\r
110 const char* GetCentralityEstimator(void) const {return fCentralityEstimator;}
\r
111 void SetCentralityPercentileRange(Double_t min, Double_t max) {
\r
112 fUseCentrality = kTRUE;
\r
113 fCentralityPercentileMin=min;
\r
114 fCentralityPercentileMax=max;
\r
116 void SetImpactParameterRange(Double_t min, Double_t max) {
\r
117 fUseCentrality = kTRUE;
\r
118 fImpactParameterMin=min;
\r
119 fImpactParameterMax=max;
\r
123 void SetMultiplicityEstimator(const char* multiplicityEstimator) {fMultiplicityEstimator = multiplicityEstimator;}
\r
124 const char* GetMultiplicityEstimator(void) const {return fMultiplicityEstimator;}
\r
125 void SetMultiplicityRange(Double_t min, Double_t max) {
\r
126 fUseMultiplicity = kTRUE;
\r
127 fNumberOfAcceptedTracksMin = min;
\r
128 fNumberOfAcceptedTracksMax = max;}
\r
130 // additional event cuts (default = kFALSE)
\r
131 void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}
\r
132 void CheckFirstEventInChunk() {fCheckFirstEventInChunk = kTRUE;}
\r
133 void CheckPileUp() {fCheckPileUp = kTRUE;}
\r
134 void UseMCforKinematics() {fUseMCforKinematics = kTRUE;}
\r
136 //Acceptance filter
\r
137 void SetAcceptanceParameterization(TF1 *parameterization) {
\r
138 fAcceptanceParameterization = parameterization;}
\r
141 enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)
\r
142 enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton };
\r
144 void SetUseBayesianPID(Double_t gMinProbabilityValue) {
\r
145 fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE;
\r
146 fMinAcceptedPIDProbability = gMinProbabilityValue; }
\r
148 void SetUseNSigmaPID(Double_t gMaxNSigma) {
\r
149 fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE;
\r
150 fPIDNSigma = gMaxNSigma; }
\r
152 void SetParticleOfInterest(kParticleOfInterest poi) {
\r
153 fParticleOfInterest = poi;}
\r
154 void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) {
\r
155 fPidDetectorConfig = detConfig;}
\r
156 void SetEventClass(TString receivedEventClass){
\r
157 fEventClass = receivedEventClass;
\r
160 void SetCustomBinning(TString receivedCustomBinning) { fCustomBinning = receivedCustomBinning; }
\r
163 // electron rejection
\r
164 void SetElectronRejection(Double_t gMaxNSigma){
\r
165 fElectronRejection = kTRUE;
\r
166 fElectronRejectionNSigma = gMaxNSigma;
\r
169 void SetElectronOnlyRejection(Double_t gMaxNSigma){
\r
170 fElectronRejection = kTRUE;
\r
171 fElectronOnlyRejection = kTRUE;
\r
172 fElectronRejectionNSigma = gMaxNSigma;
\r
175 void SetElectronRejectionPt(Double_t minPt,Double_t maxPt){
\r
176 fElectronRejectionMinPt = minPt;
\r
177 fElectronRejectionMaxPt = maxPt;
\r
180 void SetVZEROCalibrationFile(const char* filename, const char* lhcPeriod);
\r
183 Double_t IsEventAccepted(AliVEvent* event);
\r
184 Double_t GetRefMultiOrCentrality(AliVEvent* event);
\r
185 Double_t GetReferenceMultiplicityFromAOD(AliVEvent* event);
\r
186 Double_t GetEventPlane(AliVEvent* event);
\r
187 //===============================correction
\r
188 Double_t GetTrackbyTrackCorrectionMatrix(Double_t vEta,
\r
192 Double_t gCentrality);
\r
193 //===============================correction
\r
194 TObjArray* GetAcceptedTracks(AliVEvent* event, Double_t gCentrality, Double_t gReactionPlane);
\r
195 TObjArray* GetShuffledTracks(TObjArray* tracks, Double_t gCentrality);
\r
197 Double_t GetChannelEqualizationFactor(Int_t run, Int_t channel);
\r
198 Double_t GetEqualizationFactor(Int_t run, const char *side);
\r
200 Bool_t fDebugLevel; // debug level
\r
202 TClonesArray* fArrayMC; //! AOD object //+++++++++++++++++++++
\r
203 AliBalancePsi *fBalance; //BF object
\r
204 Bool_t fRunShuffling;//run shuffling or not
\r
205 AliBalancePsi *fShuffledBalance; //BF object (shuffled)
\r
206 Bool_t fRunMixing;//run mixing or not
\r
207 Bool_t fRunMixingEventPlane;//run mixing with Event Plane
\r
208 Int_t fMixingTracks;
\r
209 AliBalancePsi *fMixedBalance; //TriggeredBF object (mixed)
\r
210 AliEventPoolManager* fPoolMgr; //! event pool manager
\r
212 TList *fList; //fList object
\r
213 TList *fListBF; //fList object
\r
214 TList *fListBFS; //fList object
\r
215 TList *fListBFM; //fList object
\r
216 TList *fHistListPIDQA; //! list of histograms
\r
218 TH2F *fHistEventStats; //event stats
\r
219 TH2F *fHistCentStats; //centrality stats
\r
220 TH2F *fHistCentStatsUsed; //centrality stats USED +++++++++++++++++++++++
\r
221 TH1F *fHistTriggerStats; //trigger stats
\r
222 TH1F *fHistTrackStats; //Track filter bit stats
\r
223 TH1F *fHistVx; //x coordinate of the primary vertex
\r
224 TH1F *fHistVy; //y coordinate of the primary vertex
\r
225 TH2F *fHistVz; //z coordinate of the primary vertex
\r
227 TH2F *fHistTPCvsVZEROMultiplicity; //VZERO vs TPC reference multiplicity
\r
228 TH2F *fHistVZEROSignal; //VZERO channel vs signal
\r
230 TH2F *fHistEventPlane; //event plane distribution
\r
232 TH2F *fHistClus;//number of clusters (QA histogram)
\r
233 TH2F *fHistDCA;//DCA (QA histogram)
\r
234 TH2F *fHistChi2;//track chi2 (QA histogram)
\r
235 TH2F *fHistPt;//transverse momentum (QA histogram)
\r
236 TH2F *fHistEta;//pseudorapidity (QA histogram)
\r
237 TH2F *fHistRapidity;//rapidity (QA histogram)
\r
238 TH2F *fHistPhi;//phi (QA histogram)
\r
239 TH3F *fHistEtaPhiPos;//eta-phi pos particles (QA histogram)
\r
240 TH3F *fHistEtaPhiNeg;//eta-phi neg particles (QA histogram)
\r
241 TH2F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)
\r
242 TH2F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)
\r
243 TH2F *fHistPhiPos;//phi for positive particles (QA histogram)
\r
244 TH2F *fHistPhiNeg;//phi for negative particles (QA histogram)
\r
245 TH2F *fHistV0M;//V0 multiplicities (QA histogram)
\r
246 TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)
\r
248 //============PID============//
\r
249 TH2D *fHistdEdxVsPTPCbeforePID;//TPC dEdx vs momentum before PID cuts (QA histogram)
\r
250 TH2D *fHistBetavsPTOFbeforePID;//beta vs momentum before PID cuts (QA histogram)
\r
251 TH2D *fHistProbTPCvsPtbeforePID; //TPC probability vs pT before PID cuts (QA histogram)
\r
252 TH2D *fHistProbTOFvsPtbeforePID;//TOF probability vs pT before PID cuts (QA histogram)
\r
253 TH2D *fHistProbTPCTOFvsPtbeforePID;//TOF/TPC probability vs pT before PID cuts (QA histogram)
\r
254 TH2D *fHistNSigmaTPCvsPtbeforePID;//TPC nsigma vs pT before PID cuts (QA histogram)
\r
255 TH2D *fHistNSigmaTOFvsPtbeforePID;//TOF nsigma vs pT before PID cuts (QA histogram)
\r
256 TH2D *fHistBetaVsdEdXbeforePID;//TPCTOF before PID cuts (QA histogram)//+++++++++++++++++++++
\r
257 TH2D *fHistNSigmaTPCTOFvsPtbeforePID;//TPCTOF before PID cuts (QA histogram)//+++++++++++++++++++++
\r
258 TH2D *fHistdEdxVsPTPCafterPID;//TPC dEdx vs momentum after PID cuts (QA histogram)
\r
259 TH2D *fHistBetavsPTOFafterPID;//beta vs momentum after PID cuts (QA histogram)
\r
260 TH2D *fHistProbTPCvsPtafterPID; //TPC probability vs pT after PID cuts (QA histogram)
\r
261 TH2D *fHistProbTOFvsPtafterPID;//TOF probability vs pT after PID cuts (QA histogram)
\r
262 TH2D *fHistProbTPCTOFvsPtafterPID;//TOF/TPC probability vs pT after PID cuts (QA histogram)
\r
263 TH2D *fHistNSigmaTPCvsPtafterPID;//TPC nsigma vs pT after PID cuts (QA histogram)
\r
264 TH2D *fHistNSigmaTOFvsPtafterPID;//TOF nsigma vs pT after PID cuts (QA histogram)
\r
265 TH2D *fHistBetaVsdEdXafterPID;//TPCTOF before PID cuts (QA histogram)//+++++++++++++++++++++
\r
266 TH2D *fHistNSigmaTPCTOFvsPtafterPID;//TPCTOF before PID cuts (QA histogram)//+++++++++++++++++++++
\r
268 TH3F *fHistCorrectionPlus[kCENTRALITY]; //====correction
\r
269 TH3F *fHistCorrectionMinus[kCENTRALITY]; //===correction
\r
270 Double_t fCentralityArrayForCorrections[kCENTRALITY];
\r
271 Int_t fCentralityArrayBinsForCorrections;
\r
273 AliPIDResponse *fPIDResponse; //! PID response object
\r
274 AliPIDCombined *fPIDCombined; //! combined PID object
\r
276 kParticleOfInterest fParticleOfInterest;//analyzed particle
\r
277 kDetectorUsedForPID fPidDetectorConfig;//used detector for PID
\r
279 Bool_t fUsePID; //flag to use PID
\r
280 Bool_t fUsePIDnSigma;//flag to use nsigma method for PID
\r
281 Bool_t fUsePIDPropabilities;//flag to use probability method for PID
\r
282 Double_t fPIDNSigma;//nsigma cut for PID
\r
283 Double_t fMinAcceptedPIDProbability;//probability cut for PID
\r
285 Bool_t fElectronRejection;//flag to use electron rejection
\r
286 Bool_t fElectronOnlyRejection;//flag to use electron rejection with exclusive electron PID (no other particle in nsigma range)
\r
287 Double_t fElectronRejectionNSigma;//nsigma cut for electron rejection
\r
288 Double_t fElectronRejectionMinPt;//minimum pt for electron rejection (default = 0.)
\r
289 Double_t fElectronRejectionMaxPt;//maximum pt for electron rejection (default = 1000.)
\r
290 //============PID============//
\r
292 AliESDtrackCuts *fESDtrackCuts; //ESD track cuts
\r
294 TString fCentralityEstimator; //"V0M","TRK","TKL","ZDC","FMD"
\r
295 Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)
\r
296 Double_t fCentralityPercentileMin;//centrality percentile min
\r
297 Double_t fCentralityPercentileMax;//centrality percentile max
\r
298 Double_t fImpactParameterMin;//impact parameter min (used for MC)
\r
299 Double_t fImpactParameterMax;//impact parameter max (used for MC)
\r
301 TString fMultiplicityEstimator;//"V0M","V0A","V0C","TPC"
\r
302 Bool_t fUseMultiplicity;//use the multiplicity cuts
\r
303 Double_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)
\r
304 Double_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)
\r
305 TH2F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks
\r
306 TH1F *fHistMultiplicity;//hisot to store the number of accepted tracks //++++++++++++++++++
\r
308 Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection
\r
309 Bool_t fCheckFirstEventInChunk;//Usage of the "First Event in Chunk" check (not needed for new productions)
\r
310 Bool_t fCheckPileUp;//Usage of the "Pile-Up" event check
\r
311 Bool_t fUseMCforKinematics;//Usage of MC information for filling the kinematics information of particles (only in MCAODrec mode)
\r
313 Double_t fVxMax;//vxmax
\r
314 Double_t fVyMax;//vymax
\r
315 Double_t fVzMax;//vzmax
\r
317 Int_t fnAODtrackCutBit;//track cut bit from track selection (only used for AODs)
\r
319 Double_t fPtMin;//only used for AODs
\r
320 Double_t fPtMax;//only used for AODs
\r
321 Double_t fPtMinForCorrections;//only used for AODs
\r
322 Double_t fPtMaxForCorrections;//only used for AODs
\r
323 Double_t fPtBinForCorrections; //=================================correction
\r
324 Double_t fEtaMin;//only used for AODs
\r
325 Double_t fEtaMax;//only used for AODs
\r
326 Double_t fEtaMinForCorrections;//only used for AODs
\r
327 Double_t fEtaMaxForCorrections;//only used for AODs
\r
328 Double_t fEtaBinForCorrections; //=================================correction
\r
329 Double_t fPhiMin; //=================================correction
\r
330 Double_t fPhiMax; //=================================correction
\r
331 Double_t fPhiMinForCorrections;//only used for AODs
\r
332 Double_t fPhiMaxForCorrections;//only used for AODs
\r
333 Double_t fPhiBinForCorrections; //=================================correction
\r
335 Double_t fDCAxyCut;//only used for AODs
\r
336 Double_t fDCAzCut;//only used for AODs
\r
338 Double_t fTPCchi2Cut;//only used for AODs
\r
339 Int_t fNClustersTPCCut;//only used for AODs
\r
341 TF1 *fAcceptanceParameterization;//acceptance filter used for MC
\r
343 TF1 *fDifferentialV2;//pt-differential v2 (from real data)
\r
344 Bool_t fUseFlowAfterBurner;//Usage of a flow after burner
\r
346 Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products (and conversion) from the MC analysis
\r
347 Bool_t fExcludeElectronsInMC;//flag to exclude the electrons from the MC analysis
\r
348 Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC
\r
349 Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC
\r
350 TString fEventClass; //Can be "EventPlane", "Centrality", "Multiplicity"
\r
351 TString fCustomBinning;//for setting customized binning (for output AliTHn of AliBalancePsi)
\r
353 //VZERO calibration
\r
354 TH1F *fHistVZEROAGainEqualizationMap;//VZERO calibration map
\r
355 TH1F *fHistVZEROCGainEqualizationMap;//VZERO calibration map
\r
356 TH2F *fHistVZEROChannelGainEqualizationMap; //VZERO calibration map
\r
358 AliAnalysisTaskBFPsi(const AliAnalysisTaskBFPsi&); // not implemented
\r
359 AliAnalysisTaskBFPsi& operator=(const AliAnalysisTaskBFPsi&); // not implemented
\r
361 ClassDef(AliAnalysisTaskBFPsi, 6); // example of analysis
\r