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: September 16, 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;
43 class AliEMCALRecoUtils;
45 class AliCalorimeterUtils;
47 // --- ROOT system ---
50 #include <TObjArray.h>
53 #include <TGeoMatrix.h>
55 //--- ANALYSIS system ---
58 class AliAODPWG4Particle;
59 class AliAODCaloCluster;
61 class AliPHOSGeoUtils;
62 class AliEMCALGeometry;
63 #include "AliEMCALRecoUtils.h"
66 //______________________________________________________________________
68 #include "AliAnalysisTaskSE.h"
69 #include "AliHFEpid.h"
71 //______________________________________________________________________
73 //______________________________________________________________________
74 class AliAnalysisTaskEMCalHFEpA : public AliAnalysisTaskSE
76 //______________________________________________________________________
78 AliAnalysisTaskEMCalHFEpA();
79 AliAnalysisTaskEMCalHFEpA(const char *name);
80 virtual ~AliAnalysisTaskEMCalHFEpA();
82 virtual void UserCreateOutputObjects();
83 virtual void UserExec(Option_t *option);
84 virtual void Terminate(Option_t *);
87 void SetAssHadronPtRange(Double_t AssHadronPtMin, Double_t AssHadronPtMax) {fAssHadronPtMin = AssHadronPtMin; fAssHadronPtMax = AssHadronPtMax; };
88 void SetHFECuts(AliHFEcuts * const cuts) {fCuts = cuts;};
89 void SetRejectKinkMother(Bool_t rejectKinkMother = kFALSE) {fRejectKinkMother = rejectKinkMother;};
90 void SetCorrelationAnalysis(Bool_t CorrelationFlag=kTRUE) {fCorrelationFlag = CorrelationFlag;};
91 void SetMCanalysis() {fIsMC = kTRUE;};
92 void SetCentrality(Double_t CentralityMin, Double_t CentralityMax) { fCentralityMin = CentralityMin; fCentralityMax = CentralityMax; fHasCentralitySelection = kTRUE; };
93 void SetAODanalysis(Bool_t IsAOD) {fIsAOD = IsAOD;};
94 void SetEventMixing(Bool_t EventMixingFlag) { fEventMixingFlag = EventMixingFlag;};
95 void SetNonHFEmassCut(Double_t MassCut) { fMassCut = MassCut; fMassCutFlag = kTRUE;};
96 void SetEtaCut(Double_t EtaCutMin,Double_t EtaCutMax ) { fEtaCutMin = EtaCutMin; fEtaCutMax = EtaCutMax; };
98 void SetdPhidEtaCut(Double_t dPhiCut, Double_t dEtaCut ) { fdPhiCut = dPhiCut;fdEtaCut = dEtaCut ;};
100 void SetEoverPCut(Double_t EoverPCutMin,Double_t EoverPCutMax ) { fEoverPCutMin = EoverPCutMin; fEoverPCutMax = EoverPCutMax; };
102 void SetM02Cut(Double_t M02CutMin,Double_t M02CutMax ) { fM02CutMin = M02CutMin; fM02CutMax = M02CutMax; };
103 void SetM20Cut(Double_t M20CutMin,Double_t M20CutMax ) { fM20CutMin = M20CutMin; fM20CutMax = M20CutMax; };
106 void SetNonHFEangleCut(Double_t AngleCut) { fAngleCut = AngleCut; fAngleCutFlag = kTRUE;};
107 void SetNonHFEchi2Cut(Double_t Chi2Cut) { fChi2Cut = Chi2Cut; fChi2CutFlag = kTRUE;};
108 void SetNonHFEdcaCut(Double_t DCAcut) { fDCAcut = DCAcut; fDCAcutFlag = kTRUE;};
110 //DCA cut main particle
111 void SetdcaCut(Double_t DCAcutr, Double_t DCAcutz) { fDCAcutr = DCAcutr; fDCAcutz = DCAcutz;};
113 void SetUseEMCal() { fUseEMCal=kTRUE;};
114 void SetUseTrigger() { fUseTrigger=kTRUE;};
115 void SetUseTender() { fUseTender=kTRUE;};
116 void SetUseShowerShapeCut(Bool_t UseShowerShapeCut=kFALSE) { fUseShowerShapeCut=UseShowerShapeCut;};
117 void SetBackground(Bool_t FillBackground=kFALSE) { fFillBackground=FillBackground;};
118 void SetEoverPnsigma(Bool_t EoverPnsigma=kFALSE) { fEoverPnsigma=EoverPnsigma;};
119 void SetEMCalTriggerEG1() { fEMCEG1=kTRUE; };
120 void SetEMCalTriggerEG2() { fEMCEG2=kTRUE; };
121 void SetCentralityEstimator(Int_t Estimator) { fEstimator=Estimator; }; //0 = V0A, 1 = Other
122 void SetAdditionalCuts(Double_t PtMinAsso, Int_t TpcNclsAsso) {fPtMinAsso = PtMinAsso; fTpcNclsAsso = TpcNclsAsso;};
123 void SetSPDCutForHadrons() {fAssocWithSPD = kTRUE;};
126 AliHFEpid *GetPID() const {return fPID;};
128 //AliEMCALGeometry * GetEMCALGeometry() const { return fEMCALGeo; }
129 //AliCalorimeterUtils * GetCaloUtils() const { return fCaloUtils; }
130 /*AliCalorimeterUtils * GetCaloUtils() { if(!fCaloUtils) fCaloUtils = new AliCalorimeterUtils();
131 return fCaloUtils ; }*/
133 //______________________________________________________________________
135 //______________________________________________________________________
138 //Function to process track cuts
139 Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
140 //Function to process eh analysis
141 void ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack);
142 //Function to find non-HFE and fill histos
143 void Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly);
144 //Selected Hadrons, for mixed event analysis
145 TObjArray* SelectedHadrons();
146 //DiHadron Correlation Background
147 void DiHadronCorrelation(AliVTrack *track, Int_t trackIndex);
148 //Find Mothers (Finde HFE and NonHFE from MC information)
149 Bool_t FindMother(Int_t mcIndex);
150 Bool_t ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells);
151 TArrayI GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1);
152 Double_t CalculateWeight(Int_t pdg_particle, Double_t x);
153 Double_t SetEoverPCutPtDependentMC(Double_t pt);
155 //Flags for specifics analysis
156 Bool_t fCorrelationFlag;
161 Bool_t fUseShowerShapeCut;
162 Bool_t fFillBackground;
163 Bool_t fEoverPnsigma;
164 Bool_t fAssocWithSPD;
170 //Used in the function FindMother
182 AliAODEvent *fAOD; /// new
183 AliVEvent *fVevent; /// new
184 AliESDtrackCuts *fPartnerCuts;
186 AliPIDResponse *fPidResponse;
187 AliSelectNonHFE *fNonHFE;
189 //For the case of AOD analysis
190 Bool_t fIsAOD; //flag for AOD analysis
192 //For Centrality Selection
193 AliCentrality *fCentrality;
194 Double_t fCentralityMin;
195 Double_t fCentralityMax;
196 Bool_t fHasCentralitySelection;
197 TH1F *fCentralityHist;
198 TH1F *fCentralityHistPass;
205 //AliESDCaloCluster *fClusESD;
229 TH1F *fPtElec_ULS_NoPid;
230 TH1F *fPtElec_LS_NoPid;
232 TH1F *fPtElec_ULS_MC;
233 TH1F *fPtElec_ULS_MC_weight;
239 TH1F *fPtElec_ULS_mc_closure;
240 TH1F *fPtElec_LS_mc_closure;
241 TH1F *fPtElec_ULS2_mc_closure;
242 TH1F *fPtElec_LS2_mc_closure;
246 TH1F *fPtElec_ULS_weight;
247 TH1F *fPtElec_LS_weight;
248 TH1F *fPtElec_ULS2_weight;
249 TH1F *fPtElec_LS2_weight;
257 TH2F *fEoverP_pt_true_electrons;
258 TH2F *fEoverP_pt_true_hadrons;
259 TH2F *fEoverP_pt_true_electrons0;
260 TH2F *fEoverP_pt_true_hadrons0;
263 TH2F **fEoverP_tpc_p_trigger;
264 TH2F **fEoverP_tpc_pt_trigger;
267 TH1F **fTPCnsigma_pt;
270 TH2F *fTPCnsigma_p_TPC;
271 TH2F *fTPCnsigma_p_TPC_on_EMCal_acc;
272 TH2F *fTPCnsigma_p_TPC_EoverP_cut;
274 TH2F *fTPCnsigma_pt_2D;
275 TH2F *fShowerShapeCut;
276 TH2F *fShowerShapeM02_EoverP;
277 TH2F *fShowerShapeM20_EoverP;
278 TH2F *fShowerShape_ha;
279 TH2F *fShowerShape_ele;
280 TH2F *fTPCnsigma_eta;
281 TH2F *fTPCnsigma_phi;
283 TH1F *fECluster_pure;
284 TH1F *fECluster_not_exotic;
285 TH1F *fECluster_not_exotic1;
286 TH1F *fECluster_not_exotic2;
287 TH1F *fECluster_exotic;
288 TH1F *fNCluster_pure;
289 TH1F *fNCluster_pure_aod;
290 TH2F *fNCluster_ECluster;
291 TH2F *fNcells_energy;
292 TH2F *fNcells_energy_elec_selected;
293 TH2F *fNcells_energy_not_exotic;
298 TH2F *fpt_reco_pt_MC_num;
299 TH2F *fpt_reco_pt_MC_den;
308 TH1F *fSPD_track_vtx1;
309 TH1F *fSPD_track_vtx2;
318 TH2F **fTPCNcls_EoverP;
325 TH2F **fNcells_EoverP;
326 TH1F **fNcells_electrons;
327 TH1F **fNcells_hadrons;
328 TH1F **fECluster_ptbins;
329 TH1F **fEoverP_ptbins;
330 TH1F **fEoverP_wSSCut;
333 TH2F **fTPCnsigma_eta_electrons;
334 TH2F **fTPCnsigma_eta_hadrons;
335 TH2F *fEoverP_pt_pions;
336 TH2F *ftpc_p_EoverPcut;
337 TH2F *fnsigma_p_EoverPcut;
338 TH2F *fEoverP_pt_pions2;
340 TH2F *fEoverP_pt_hadrons;
341 //Electron-Hadron Correlation Histograms
345 TH2F **fCEtaPhi_ULS_NoP;
346 TH2F **fCEtaPhi_LS_NoP;
347 TH2F **fCEtaPhi_ULS_Weight;
348 TH2F **fCEtaPhi_LS_Weight;
349 TH2F **fCEtaPhi_ULS_NoP_Weight;
350 TH2F **fCEtaPhi_LS_NoP_Weight;
368 Double_t fEoverPCutMin;
369 Double_t fEoverPCutMax;
381 Bool_t fAngleCutFlag;
384 //Correlation Function
385 Double_t fAssHadronPtMin;
386 Double_t fAssHadronPtMax;
387 //Non-HFE reconstruction efficiency
388 TH1F *fPtBackgroundBeforeReco;
389 TH1F *fPtBackgroundBeforeReco2;
390 TH1F *fPtBackgroundBeforeReco_weight;
391 TH1F *fPtBackgroundBeforeReco2_weight;
392 TH2F *fpT_m_electron;
393 TH2F *fpT_gm_electron;
394 TH1F *fPtBackgroundAfterReco;
397 //Tracking Efficiency
398 TH1F *fPtMCparticleAll;
399 TH1F *fPtMCparticleAll_nonPrimary;
400 TH1F *fPtMCparticleAlle_nonPrimary;
401 TH1F *fPtMCparticleAlle_Primary;
402 TH1F *fPtMCparticleReco;
403 TH1F *fPtMCparticleReco_nonPrimary;
404 TH1F *fPtMCparticleAllHfe1;
405 TH1F *fPtMCparticleRecoHfe1;
406 TH1F *fPtMCparticleAllHfe2;
407 TH1F *fPtMCparticleRecoHfe2;
408 TH1F *fPtMCelectronAfterAll;
409 TH1F *fPtMCelectronAfterAll_unfolding;
410 TH1F *fPtMCelectronAfterAll_nonPrimary;
411 TH1F *fPtMCelectronAfterAll_Primary;
420 TH1F *fPtMC_EMCal_All;
421 TH1F *fPtMC_EMCal_Selected;
423 TH1F *fPtMC_TPC_Selected;
424 TH1F *fPt_track_match_den;
425 TH1F *fPt_track_match_num;
428 TH1F *fPtMCWithLabel;
429 TH1F *fPtMCWithoutLabel;
430 TH1F *fPtIsPhysicaPrimary;
432 //For the HFE package
433 AliHFEcuts *fCuts; // Cut Collection for HFE
435 //AliCaloTrackAODReader *reader;
436 AliCFManager *fCFM; // Correction Framework Manager
437 AliHFEpid *fPID; // PID
438 AliHFEpidQAmanager *fPIDqa; // PID QA manager
441 AliStack *fMCstack; //
442 Bool_t fRejectKinkMother; //
444 TParticle *fMCtrackMother;
445 TParticle *fMCtrackGMother;
446 TParticle *fMCtrackGGMother;
447 TParticle *fMCtrackGGGMother;
448 TClonesArray *fMCarray;
449 AliAODMCHeader *fMCheader;
450 AliAODMCParticle *fMCparticle;
451 AliAODMCParticle *fMCparticle2;
452 AliAODMCParticle *fMCparticleMother;
453 AliAODMCParticle *fMCparticleGMother;
454 AliAODMCParticle *fMCparticleGGMother;
455 AliAODMCParticle *fMCparticleGGGMother;
456 AliMCEventHandler *fEventHandler;
457 AliMCEvent *fMCevent;
459 //______________________________________________________________________
460 //Mixed event analysis
461 AliEventPoolManager *fPoolMgr;
463 TObjArray *fTracksClone;
466 TH2F **fCEtaPhi_Inc_EM;
468 TH2F **fCEtaPhi_ULS_EM;
469 TH2F **fCEtaPhi_LS_EM;
471 TH2F **fCEtaPhi_ULS_Weight_EM;
472 TH2F **fCEtaPhi_LS_Weight_EM;
476 Bool_t fEventMixingFlag;
477 //______________________________________________________________________
479 //______________________________________________________________________
480 //Di-hadron correlation
481 TH2F **fCEtaPhi_Inc_DiHadron;
482 TH1F *fPtTrigger_Inc;
484 //AliEMCALRecoUtils *fEMCALRecoUtils; // EMCAL Reco Utils //exotic
485 //AliEMCALGeometry *fEMCALGeo ; //! EMCAL geometry pointer
486 //AliCalorimeterUtils *fCaloUtils;
488 Int_t fBitEGA; // Trigger bit on VCaloTrigger for EGA
491 //______________________________________________________________________
493 AliAnalysisTaskEMCalHFEpA(const AliAnalysisTaskEMCalHFEpA&); // not implemented
494 AliAnalysisTaskEMCalHFEpA& operator=(const AliAnalysisTaskEMCalHFEpA&); // not implemented
496 ClassDef(AliAnalysisTaskEMCalHFEpA, 1); // example of analysis
497 //______________________________________________________________________
500 ///_________________________________________________________________________________________________
501 ///Class copied from : $ALICE_ROOT/PWGCF/Correlations/DPhi/AliAnalysisTaskLongRangeCorrelations.h
502 ///Author: Christoph Mayer
503 class AliEHCParticle : public TObject {
505 AliEHCParticle(Double_t eta=0, Double_t phi=0, Double_t pt=0)
506 : fEta(eta), fPhi(phi), fPt(pt) {}
507 virtual ~AliEHCParticle() {}
509 Double_t Eta() const { return fEta; }
510 Double_t Phi() const { return fPhi; }
511 Double_t Pt() const { return fPt; }
515 AliEHCParticle(const AliEHCParticle&);
516 AliEHCParticle& operator=(const AliEHCParticle&);
522 ClassDef(AliEHCParticle, 1);
524 ///_________________________________________________________________________________________________