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() :
28 //________________________________________________________________________
29 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask(const char *name) :
30 AliAnalysisTaskSE(name),
32 fTracksName("TpcSpdVertexConstrainedTracks"),
39 fBranchNames = "ESD:AliESDHeader.,Tracks";
42 //________________________________________________________________________
43 AliEmcalTrackPropagatorTask::~AliEmcalTrackPropagatorTask()
50 //________________________________________________________________________
51 void AliEmcalTrackPropagatorTask::UserCreateOutputObjects()
56 fRecoUtils = new AliEMCALRecoUtils;
57 fRecoUtils->SetStep(25);
58 AliInfo("No reco utils given, creating default utils");
62 //________________________________________________________________________
63 void AliEmcalTrackPropagatorTask::UserExec(Option_t *)
65 // Main loop, called for each event.
67 fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
69 AliError("Task works only on ESD events, returning");
73 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
75 AliError("Manager zero, returning");
79 // get tracks from event if not yet there
80 if (fTracksName == "Tracks")
81 am->LoadBranch("Tracks");
82 fTracks = dynamic_cast<TClonesArray*>((InputEvent()->FindListObject(fTracksName)));
84 AliError(Form("Could not get tracks %s, returning", fTracksName.Data()));
88 // Loop over all tracks
89 const Int_t ntr = fTracks->GetEntries();
90 for (Int_t i=0; i<ntr; ++i) {
91 AliESDtrack *eTrack = static_cast<AliESDtrack*>(fTracks->At(i));
94 eTrack->ResetStatus(AliVTrack::kEMCALmatch);
95 if(eTrack->Pt()<fMinPtCut)
97 Double_t phi = eTrack->Phi()*TMath::RadToDeg();
98 if (TMath::Abs(eTrack->Eta())>0.8 || phi <= 20 || phi >= 240)
100 AliExternalTrackParam *trackParam = const_cast<AliExternalTrackParam*>(eTrack->GetInnerParam());
104 // Extrapolate the track to EMCal surface
105 AliExternalTrackParam emcalParam(*trackParam);
106 Float_t etaout=-999, phiout=-999;
107 Bool_t ret = fRecoUtils->ExtrapolateTrackToEMCalSurface(&emcalParam,
109 fRecoUtils->GetMass(),
110 fRecoUtils->GetStepSurface(),
115 if (TMath::Abs(etaout)>0.75 || (phiout<70*TMath::DegToRad()) || (phiout>190*TMath::DegToRad()))
117 eTrack->SetOuterParam(&emcalParam,AliExternalTrackParam::kMultSec);
118 eTrack->SetStatus(AliVTrack::kEMCALmatch);