]>
Commit | Line | Data |
---|---|---|
5f2a3bf7 | 1 | // $Id: AliEmcalTrackPropagatorTask.cxx | Mon Dec 9 12:59:28 2013 +0100 | Constantin Loizides $ |
6ea93b32 | 2 | // |
3 | // Task to propagate tracks to EMCAL surface. | |
4 | // | |
cd231d42 | 5 | // Author: C.Loizides |
6ea93b32 | 6 | |
5f2a3bf7 | 7 | #include "AliEmcalTrackPropagatorTask.h" |
6ea93b32 | 8 | #include <TClonesArray.h> |
5f2a3bf7 | 9 | #include "AliAODEvent.h" |
6ea93b32 | 10 | #include "AliAnalysisManager.h" |
11 | #include "AliEMCALRecoUtils.h" | |
12 | #include "AliESDEvent.h" | |
6ea93b32 | 13 | |
14 | ClassImp(AliEmcalTrackPropagatorTask) | |
15 | ||
16 | //________________________________________________________________________ | |
17 | AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask() : | |
27fde6c7 | 18 | AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"), |
5f2a3bf7 | 19 | fTracksInName(), |
20 | fTracksOutName(), | |
af2f024d | 21 | fDist(440), |
5f2a3bf7 | 22 | fOnlyIfNotSet(kTRUE), |
23 | fTracksIn(0), | |
24 | fTracksOut(0) | |
6ea93b32 | 25 | { |
26 | // Constructor. | |
27 | } | |
28 | ||
29 | //________________________________________________________________________ | |
30 | AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask(const char *name) : | |
27fde6c7 | 31 | AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"), |
5f2a3bf7 | 32 | fTracksInName(), |
33 | fTracksOutName(), | |
af2f024d | 34 | fDist(440), |
5f2a3bf7 | 35 | fOnlyIfNotSet(kTRUE), |
36 | fTracksIn(0), | |
37 | fTracksOut(0) | |
6ea93b32 | 38 | { |
39 | // Constructor. | |
27fde6c7 | 40 | |
41 | if (!name) | |
42 | return; | |
43 | ||
44 | SetName(name); | |
45 | ||
6ea93b32 | 46 | fBranchNames = "ESD:AliESDHeader.,Tracks"; |
47 | } | |
48 | ||
49 | //________________________________________________________________________ | |
50 | AliEmcalTrackPropagatorTask::~AliEmcalTrackPropagatorTask() | |
51 | { | |
a7985532 | 52 | // Destructor. |
6ea93b32 | 53 | } |
54 | ||
55 | //________________________________________________________________________ | |
56 | void AliEmcalTrackPropagatorTask::UserCreateOutputObjects() | |
57 | { | |
5f2a3bf7 | 58 | // User create output objects. |
6ea93b32 | 59 | } |
60 | ||
61 | //________________________________________________________________________ | |
62 | void AliEmcalTrackPropagatorTask::UserExec(Option_t *) | |
63 | { | |
64 | // Main loop, called for each event. | |
65 | ||
5f2a3bf7 | 66 | AliESDEvent *esdev = dynamic_cast<AliESDEvent*>(InputEvent()); |
67 | AliAODEvent *aodev = 0; | |
68 | if (!esdev) { | |
69 | aodev = dynamic_cast<AliAODEvent*>(InputEvent()); | |
70 | if (!aodev) { | |
71 | AliError("Task needs AOD or ESD event, returning"); | |
72 | return; | |
73 | } | |
74 | } | |
75 | ||
76 | if (fTracksInName.Length()==0) { | |
77 | if (esdev) { | |
78 | fTracksInName = "Tracks"; | |
79 | } else { | |
80 | fTracksInName = "tracks"; | |
81 | } | |
6ea93b32 | 82 | } |
83 | ||
84 | AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); | |
85 | if (!am) { | |
86 | AliError("Manager zero, returning"); | |
87 | return; | |
88 | } | |
5f2a3bf7 | 89 | if (fTracksInName == "Tracks") |
6ea93b32 | 90 | am->LoadBranch("Tracks"); |
5f2a3bf7 | 91 | else if (fTracksInName == "tracks") |
92 | am->LoadBranch("tracks"); | |
93 | ||
94 | if (!fTracksIn) { | |
95 | fTracksIn = dynamic_cast<TClonesArray*>((InputEvent()->FindListObject(fTracksInName))); | |
96 | if (!fTracksIn) { | |
97 | AliError(Form("Could not get tracks %s, returning", fTracksInName.Data())); | |
98 | return; | |
99 | } | |
6ea93b32 | 100 | } |
101 | ||
5f2a3bf7 | 102 | if ((fTracksOutName.Length()>0) && !fTracksOut) { |
103 | if ((InputEvent()->FindListObject(fTracksOutName))) { | |
104 | AliError(Form("Could not add tracks %s to event, returning", fTracksOutName.Data())); | |
105 | return; | |
af2f024d | 106 | } |
5f2a3bf7 | 107 | if (esdev) |
18a566f2 | 108 | fTracksOut = new TClonesArray("AliESDtrack"); |
5f2a3bf7 | 109 | else |
94b25737 | 110 | fTracksOut = new TClonesArray("AliAODTrack"); |
5f2a3bf7 | 111 | fTracksOut->SetName(fTracksOutName); |
112 | InputEvent()->AddObject(fTracksOut); | |
113 | } | |
6ea93b32 | 114 | |
5f2a3bf7 | 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)); | |
118 | if (!inTrack) | |
6ea93b32 | 119 | continue; |
5f2a3bf7 | 120 | if (inTrack->IsExtrapolatedToEMCAL() && fOnlyIfNotSet) |
6c11816d | 121 | continue; |
5f2a3bf7 | 122 | AliVTrack *outTrack = inTrack; |
123 | if (fTracksOut) { | |
124 | if (esdev) | |
125 | outTrack = new ((*fTracksOut)[i]) AliESDtrack(*((AliESDtrack*)inTrack)); | |
126 | else | |
127 | outTrack = new ((*fTracksOut)[i]) AliAODTrack(*((AliAODTrack*)inTrack)); | |
128 | } | |
129 | AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(outTrack,fDist); | |
6ea93b32 | 130 | } |
131 | } |