1 #ifndef AliAnalysisTaskEMCalHFEpA_cxx
2 #define AliAnalysisTaskEMCalHFEpA_cxx
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 ////////////////////////////////////////////////////////////////////////
9 // Task for Heavy-flavour electron analysis in pPb collisions //
10 // (+ Electron-Hadron Jetlike Azimuthal Correlation) //
12 // version: March 18, 2014. //
15 // Elienos Pereira de Oliveira Filho (epereira@cern.ch) //
16 // Cristiane Jahnke (cristiane.jahnke@cern.ch) //
18 ////////////////////////////////////////////////////////////////////////
23 class AliESDtrackCuts;
25 class AliHFEcontainer;
28 class AliHFEpidQAmanager;
35 class AliSelectNonHFE;
36 class AliEventPoolManager;
40 class AliCaloTrackAODReader;
41 class AliCaloTrackReader;
44 //______________________________________________________________________
46 #include "AliAnalysisTaskSE.h"
47 #include "AliHFEpid.h"
49 //______________________________________________________________________
51 //______________________________________________________________________
52 class AliAnalysisTaskEMCalHFEpA : public AliAnalysisTaskSE
54 //______________________________________________________________________
56 AliAnalysisTaskEMCalHFEpA();
57 AliAnalysisTaskEMCalHFEpA(const char *name);
58 virtual ~AliAnalysisTaskEMCalHFEpA();
60 virtual void UserCreateOutputObjects();
61 virtual void UserExec(Option_t *option);
62 virtual void Terminate(Option_t *);
65 void SetAssHadronPtRange(Double_t AssHadronPtMin, Double_t AssHadronPtMax) {fAssHadronPtMin = AssHadronPtMin; fAssHadronPtMax = AssHadronPtMax; };
66 void SetHFECuts(AliHFEcuts * const cuts) {fCuts = cuts;};
67 void SetRejectKinkMother(Bool_t rejectKinkMother = kFALSE) {fRejectKinkMother = rejectKinkMother;};
68 void SetCorrelationAnalysis(Bool_t CorrelationFlag=kTRUE) {fCorrelationFlag = CorrelationFlag;};
69 void SetMCanalysis() {fIsMC = kTRUE;};
70 void SetCentrality(Double_t CentralityMin, Double_t CentralityMax) { fCentralityMin = CentralityMin; fCentralityMax = CentralityMax; fHasCentralitySelection = kTRUE; };
71 void SetAODanalysis(Bool_t IsAOD) {fIsAOD = IsAOD;};
72 void SetEventMixing(Bool_t EventMixingFlag) { fEventMixingFlag = EventMixingFlag;};
73 void SetNonHFEmassCut(Double_t MassCut) { fMassCut = MassCut; fMassCutFlag = kTRUE;};
74 void SetEtaCut(Double_t EtaCutMin,Double_t EtaCutMax ) { fEtaCutMin = EtaCutMin; fEtaCutMax = EtaCutMax; };
76 void SetdPhidEtaCut(Double_t dPhiCut, Double_t dEtaCut ) { fdPhiCut = dPhiCut;fdEtaCut = dEtaCut ;};
78 void SetEoverPCut(Double_t EoverPCutMin,Double_t EoverPCutMax ) { fEoverPCutMin = EoverPCutMin; fEoverPCutMax = EoverPCutMax; };
80 void SetM02Cut(Double_t M02CutMin,Double_t M02CutMax ) { fM02CutMin = M02CutMin; fM02CutMax = M02CutMax; };
81 void SetM20Cut(Double_t M20CutMin,Double_t M20CutMax ) { fM20CutMin = M20CutMin; fM20CutMax = M20CutMax; };
84 void SetNonHFEangleCut(Double_t AngleCut) { fAngleCut = AngleCut; fAngleCutFlag = kTRUE;};
85 void SetNonHFEchi2Cut(Double_t Chi2Cut) { fChi2Cut = Chi2Cut; fChi2CutFlag = kTRUE;};
86 void SetNonHFEdcaCut(Double_t DCAcut) { fDCAcut = DCAcut; fDCAcutFlag = kTRUE;};
87 void SetUseEMCal() { fUseEMCal=kTRUE;};
88 void SetUseTrigger() { fUseTrigger=kTRUE;};
89 void SetUseShowerShapeCut(Bool_t UseShowerShapeCut=kFALSE) { fUseShowerShapeCut=UseShowerShapeCut;};
90 void SetBackground(Bool_t FillBackground=kFALSE) { fFillBackground=FillBackground;};
91 void SetEMCalTriggerEG1() { fEMCEG1=kTRUE; };
92 void SetEMCalTriggerEG2() { fEMCEG2=kTRUE; };
93 void SetCentralityEstimator(Int_t Estimator) { fEstimator=Estimator; }; //0 = V0A, 1 = Other
94 void SetAdditionalCuts(Double_t PtMinAsso, Int_t TpcNclsAsso) {fPtMinAsso = PtMinAsso; fTpcNclsAsso = TpcNclsAsso;};
95 void SetSPDCutForHadrons() {fAssocWithSPD = kTRUE;};
98 AliHFEpid *GetPID() const {return fPID;};
99 //______________________________________________________________________
101 //______________________________________________________________________
104 //Function to process track cuts
105 Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
106 //Function to process eh analysis
107 void ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack);
108 //Function to find non-HFE and fill histos
109 void Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly);
110 //Selected Hadrons, for mixed event analysis
111 TObjArray* SelectedHadrons();
112 //DiHadron Correlation Background
113 void DiHadronCorrelation(AliVTrack *track, Int_t trackIndex);
114 //Find Mothers (Finde HFE and NonHFE from MC information)
115 Bool_t FindMother(Int_t mcIndex);
117 //Flags for specifics analysis
118 Bool_t fCorrelationFlag;
122 Bool_t fUseShowerShapeCut;
123 Bool_t fFillBackground;
124 Bool_t fAssocWithSPD;
130 //Used in the function FindMother
142 AliAODEvent *fAOD; /// new
143 AliVEvent *fVevent; /// new
144 AliESDtrackCuts *fPartnerCuts;
146 AliPIDResponse *fPidResponse;
147 AliSelectNonHFE *fNonHFE;
149 //For the case of AOD analysis
150 Bool_t fIsAOD; //flag for AOD analysis
152 //For Centrality Selection
153 AliCentrality *fCentrality;
154 Double_t fCentralityMin;
155 Double_t fCentralityMax;
156 Bool_t fHasCentralitySelection;
157 TH1F *fCentralityHist;
158 TH1F *fCentralityHistPass;
165 //AliESDCaloCluster *fClusESD;
188 TH1F *fPtElec_ULS_NoPid;
189 TH1F *fPtElec_LS_NoPid;
191 TH1F *fPtElec_ULS_MC;
192 TH1F *fPtElec_ULS_MC_weight;
197 TH1F *fPtElec_ULS_weight;
198 TH1F *fPtElec_LS_weight;
199 TH1F *fPtElec_ULS2_weight;
200 TH1F *fPtElec_LS2_weight;
216 TH1F **fTPCnsigma_pt;
218 TH2F *fTPCnsigma_pt_2D;
219 TH2F *fShowerShapeCut;
220 TH2F *fShowerShapeM02_EoverP;
221 TH2F *fShowerShapeM20_EoverP;
222 TH2F *fShowerShape_ha;
223 TH2F *fShowerShape_ele;
225 TH2F *fTPCnsigma_eta;
226 TH2F *fTPCnsigma_phi;
230 TH1F *fECluster_pure;
235 TH2F *fpt_reco_pt_MC_num;
236 TH2F *fpt_reco_pt_MC_den;
253 TH2F **fTPCNcls_EoverP;
261 TH2F **fNcells_EoverP;
262 TH1F **fNcells_electrons;
263 TH1F **fNcells_hadrons;
264 TH1F **fECluster_ptbins;
265 TH1F **fEoverP_ptbins;
266 TH1F **fEoverP_wSSCut;
269 TH2F **fTPCnsigma_eta_electrons;
270 TH2F **fTPCnsigma_eta_hadrons;
272 TH2F *fEoverP_pt_pions;
274 TH2F *ftpc_p_EoverPcut;
275 TH2F *fnsigma_p_EoverPcut;
277 TH2F *fEoverP_pt_pions2;
279 TH2F *fEoverP_pt_hadrons;
281 //Electron-Hadron Correlation Histograms
286 TH2F **fCEtaPhi_ULS_NoP;
287 TH2F **fCEtaPhi_LS_NoP;
289 TH2F **fCEtaPhi_ULS_Weight;
290 TH2F **fCEtaPhi_LS_Weight;
291 TH2F **fCEtaPhi_ULS_NoP_Weight;
292 TH2F **fCEtaPhi_LS_NoP_Weight;
315 Double_t fEoverPCutMin;
316 Double_t fEoverPCutMax;
326 Bool_t fAngleCutFlag;
330 //Correlation Function
331 Double_t fAssHadronPtMin;
332 Double_t fAssHadronPtMax;
334 //Non-HFE reconstruction efficiency
335 TH1F *fPtBackgroundBeforeReco;
336 TH1F *fPtBackgroundBeforeReco2;
337 TH1F *fPtBackgroundBeforeReco_weight;
338 TH1F *fPtBackgroundBeforeReco2_weight;
340 TH2F *fpT_m_electron;
341 TH2F *fpT_gm_electron;
343 TH1F *fPtBackgroundAfterReco;
348 //Tracking Efficiency
349 TH1F *fPtMCparticleAll;
350 TH1F *fPtMCparticleAll_nonPrimary;
351 TH1F *fPtMCparticleAlle_nonPrimary;
352 TH1F *fPtMCparticleAlle_Primary;
354 TH1F *fPtMCparticleReco;
355 TH1F *fPtMCparticleReco_nonPrimary;
356 TH1F *fPtMCparticleAllHfe1;
357 TH1F *fPtMCparticleRecoHfe1;
358 TH1F *fPtMCparticleAllHfe2;
359 TH1F *fPtMCparticleRecoHfe2;
360 TH1F *fPtMCelectronAfterAll;
361 TH1F *fPtMCelectronAfterAll_unfolding;
362 TH1F *fPtMCelectronAfterAll_nonPrimary;
363 TH1F *fPtMCelectronAfterAll_Primary;
370 TH1F *fPtMC_EMCal_All;
371 TH1F *fPtMC_EMCal_Selected;
373 TH1F *fPtMC_TPC_Selected;
374 TH1F *fPt_track_match_den;
375 TH1F *fPt_track_match_num;
378 TH1F *fPtMCWithLabel;
379 TH1F *fPtMCWithoutLabel;
380 TH1F *fPtIsPhysicaPrimary;
382 //For the HFE package
383 AliHFEcuts *fCuts; // Cut Collection for HFE
385 //AliCaloTrackAODReader *reader;
386 AliCFManager *fCFM; // Correction Framework Manager
387 AliHFEpid *fPID; // PID
388 AliHFEpidQAmanager *fPIDqa; // PID QA manager
391 AliStack *fMCstack; //
392 Bool_t fRejectKinkMother; //
394 TParticle *fMCtrackMother;
395 TParticle *fMCtrackGMother;
396 TParticle *fMCtrackGGMother;
397 TParticle *fMCtrackGGGMother;
398 TClonesArray *fMCarray;
399 AliAODMCHeader *fMCheader;
400 AliAODMCParticle *fMCparticle;
401 AliAODMCParticle *fMCparticle2;
402 AliAODMCParticle *fMCparticleMother;
403 AliAODMCParticle *fMCparticleGMother;
404 AliAODMCParticle *fMCparticleGGMother;
405 AliAODMCParticle *fMCparticleGGGMother;
406 AliMCEventHandler *fEventHandler;
407 AliMCEvent *fMCevent;
409 //______________________________________________________________________
410 //Mixed event analysis
411 AliEventPoolManager *fPoolMgr;
413 TObjArray *fTracksClone;
416 TH2F **fCEtaPhi_Inc_EM;
418 TH2F **fCEtaPhi_ULS_EM;
419 TH2F **fCEtaPhi_LS_EM;
421 TH2F **fCEtaPhi_ULS_Weight_EM;
422 TH2F **fCEtaPhi_LS_Weight_EM;
426 Bool_t fEventMixingFlag;
427 //______________________________________________________________________
429 //______________________________________________________________________
430 //Di-hadron correlation
431 TH2F **fCEtaPhi_Inc_DiHadron;
432 TH1F *fPtTrigger_Inc;
433 //______________________________________________________________________
435 AliAnalysisTaskEMCalHFEpA(const AliAnalysisTaskEMCalHFEpA&); // not implemented
436 AliAnalysisTaskEMCalHFEpA& operator=(const AliAnalysisTaskEMCalHFEpA&); // not implemented
438 ClassDef(AliAnalysisTaskEMCalHFEpA, 1); // example of analysis
439 //______________________________________________________________________
442 ///_________________________________________________________________________________________________
443 ///Class copied from : $ALICE_ROOT/PWGCF/Correlations/DPhi/AliAnalysisTaskLongRangeCorrelations.h
444 ///Author: Christoph Mayer
445 class AliEHCParticle : public TObject {
447 AliEHCParticle(Double_t eta=0, Double_t phi=0, Double_t pt=0)
448 : fEta(eta), fPhi(phi), fPt(pt) {}
449 virtual ~AliEHCParticle() {}
451 Double_t Eta() const { return fEta; }
452 Double_t Phi() const { return fPhi; }
453 Double_t Pt() const { return fPt; }
457 AliEHCParticle(const AliEHCParticle&);
458 AliEHCParticle& operator=(const AliEHCParticle&);
464 ClassDef(AliEHCParticle, 1);
466 ///_________________________________________________________________________________________________