1 // $Id: AliEmcalTrackPropagatorTask.cxx | Mon Dec 9 12:59:28 2013 +0100 | Constantin Loizides $
3 // Task to propagate tracks to EMCAL surface.
7 #include "AliEmcalTrackPropagatorTask.h"
8 #include <TClonesArray.h>
9 #include "AliAODEvent.h"
10 #include "AliAnalysisManager.h"
11 #include "AliEMCALRecoUtils.h"
12 #include "AliESDEvent.h"
14 ClassImp(AliEmcalTrackPropagatorTask)
16 //________________________________________________________________________
17 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask() :
18 AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"),
29 //________________________________________________________________________
30 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask(const char *name) :
31 AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"),
46 fBranchNames = "ESD:AliESDHeader.,Tracks";
49 //________________________________________________________________________
50 AliEmcalTrackPropagatorTask::~AliEmcalTrackPropagatorTask()
55 //________________________________________________________________________
56 void AliEmcalTrackPropagatorTask::UserCreateOutputObjects()
58 // User create output objects.
61 //________________________________________________________________________
62 void AliEmcalTrackPropagatorTask::UserExec(Option_t *)
64 // Main loop, called for each event.
66 AliESDEvent *esdev = dynamic_cast<AliESDEvent*>(InputEvent());
67 AliAODEvent *aodev = 0;
69 aodev = dynamic_cast<AliAODEvent*>(InputEvent());
71 AliError("Task needs AOD or ESD event, returning");
76 if (fTracksInName.Length()==0) {
78 fTracksInName = "Tracks";
80 fTracksInName = "tracks";
84 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
86 AliError("Manager zero, returning");
89 if (fTracksInName == "Tracks")
90 am->LoadBranch("Tracks");
91 else if (fTracksInName == "tracks")
92 am->LoadBranch("tracks");
95 fTracksIn = dynamic_cast<TClonesArray*>((InputEvent()->FindListObject(fTracksInName)));
97 AliError(Form("Could not get tracks %s, returning", fTracksInName.Data()));
102 if ((fTracksOutName.Length()>0) && !fTracksOut) {
103 if ((InputEvent()->FindListObject(fTracksOutName))) {
104 AliError(Form("Could not add tracks %s to event, returning", fTracksOutName.Data()));
108 fTracksOut = new TClonesArray("AliESDtrack");
110 fTracksOut = new TClonesArray("AliAODTrack");
111 fTracksOut->SetName(fTracksOutName);
112 InputEvent()->AddObject(fTracksOut);
115 const Int_t ntr = fTracksIn->GetEntries();
116 for (Int_t i=0; i<ntr; ++i) {
117 AliVTrack *inTrack = dynamic_cast<AliVTrack*>(fTracksIn->At(i));
120 if (inTrack->IsExtrapolatedToEMCAL() && fOnlyIfNotSet)
122 AliVTrack *outTrack = inTrack;
125 outTrack = new ((*fTracksOut)[i]) AliESDtrack(*((AliESDtrack*)inTrack));
127 outTrack = new ((*fTracksOut)[i]) AliAODTrack(*((AliAODTrack*)inTrack));
129 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(outTrack,fDist);