3 // Task to propagate tracks to EMCAL surface.
7 #include <TClonesArray.h>
8 #include "AliAnalysisManager.h"
9 #include "AliEMCALRecoUtils.h"
10 #include "AliESDEvent.h"
11 #include "AliEmcalTrackPropagatorTask.h"
13 ClassImp(AliEmcalTrackPropagatorTask)
15 //________________________________________________________________________
16 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask() :
17 AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"),
28 //________________________________________________________________________
29 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask(const char *name) :
30 AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"),
32 fTracksName("TpcSpdVertexConstrainedTracks"),
45 fBranchNames = "ESD:AliESDHeader.,Tracks";
48 //________________________________________________________________________
49 AliEmcalTrackPropagatorTask::~AliEmcalTrackPropagatorTask()
56 //________________________________________________________________________
57 void AliEmcalTrackPropagatorTask::UserCreateOutputObjects()
62 fRecoUtils = new AliEMCALRecoUtils;
63 fRecoUtils->SetStep(25);
64 AliInfo("No reco utils given, creating default utils");
68 //________________________________________________________________________
69 void AliEmcalTrackPropagatorTask::UserExec(Option_t *)
71 // Main loop, called for each event.
73 fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
75 AliError("Task works only on ESD events, returning");
79 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
81 AliError("Manager zero, returning");
85 // get tracks from event if not yet there
86 if (fTracksName == "Tracks")
87 am->LoadBranch("Tracks");
88 fTracks = dynamic_cast<TClonesArray*>((InputEvent()->FindListObject(fTracksName)));
90 AliError(Form("Could not get tracks %s, returning", fTracksName.Data()));
94 // Loop over all tracks
95 const Int_t ntr = fTracks->GetEntries();
96 for (Int_t i=0; i<ntr; ++i) {
97 AliESDtrack *eTrack = static_cast<AliESDtrack*>(fTracks->At(i));
100 eTrack->ResetStatus(AliVTrack::kEMCALmatch);
101 if(eTrack->Pt()<fMinPtCut)
103 Double_t phi = eTrack->Phi()*TMath::RadToDeg();
104 if (TMath::Abs(eTrack->Eta())>0.8 || phi <= 20 || phi >= 240)
106 AliExternalTrackParam *trackParam = const_cast<AliExternalTrackParam*>(eTrack->GetInnerParam());
110 // Extrapolate the track to EMCal surface
111 AliExternalTrackParam emcalParam(*trackParam);
112 Float_t etaout=-999, phiout=-999, ptout=-999;
113 Bool_t ret = fRecoUtils->ExtrapolateTrackToEMCalSurface(&emcalParam,
115 fRecoUtils->GetMass(),
116 fRecoUtils->GetStepSurface(),
122 if (TMath::Abs(etaout)>0.75 || (phiout<70*TMath::DegToRad()) || (phiout>190*TMath::DegToRad()))
124 eTrack->SetOuterParam(&emcalParam,AliExternalTrackParam::kMultSec);
125 eTrack->SetTrackPhiEtaPtOnEMCal(phiout, etaout, ptout);
126 eTrack->SetStatus(AliVTrack::kEMCALmatch);