]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALTasks/AliEmcalEsdTpcTrackTask.cxx
AddTasdk for v2 with EP modified to run in the lego train
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliEmcalEsdTpcTrackTask.cxx
CommitLineData
cc2b5fb5 1// $Id$
b0a53615 2//
a93ef37c 3// Task to constrain TPC tracks to SPD vertex.
b0a53615 4//
5//
cc2b5fb5 6
7#include <TClonesArray.h>
8#include <TGeoGlobalMagField.h>
9#include "AliAnalysisManager.h"
10#include "AliESDEvent.h"
11#include "AliESDtrackCuts.h"
12#include "AliEmcalEsdTpcTrackTask.h"
13#include "AliMagF.h"
14
15ClassImp(AliEmcalEsdTpcTrackTask)
16
17//________________________________________________________________________
18AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask() :
19 AliAnalysisTaskSE(),
20 fEsdTrackCuts(0),
4d1e3842 21 fDoSpdVtxCon(0),
57184cc6 22 fHybridTrackCuts(0),
cc2b5fb5 23 fTracksName(),
24 fEsdEv(0),
25 fTracks(0)
26{
a93ef37c 27 // Constructor.
cc2b5fb5 28}
29
30//________________________________________________________________________
31AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask(const char *name) :
32 AliAnalysisTaskSE(name),
33 fEsdTrackCuts(0),
4d1e3842 34 fDoSpdVtxCon(0),
57184cc6 35 fHybridTrackCuts(0),
cc2b5fb5 36 fTracksName("TpcSpdVertexConstrainedTracks"),
37 fEsdEv(0),
38 fTracks(0)
39{
a93ef37c 40 // Constructor.
41 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
cc2b5fb5 42}
43
44//________________________________________________________________________
45AliEmcalEsdTpcTrackTask::~AliEmcalEsdTpcTrackTask()
46{
47 //Destructor
48
49 delete fEsdTrackCuts;
50}
51
52//________________________________________________________________________
53void AliEmcalEsdTpcTrackTask::UserCreateOutputObjects()
54{
a93ef37c 55 // Create histograms.
cc2b5fb5 56
57 fTracks = new TClonesArray("AliESDtrack");
58 fTracks->SetName(fTracksName);
59
60 if (!fEsdTrackCuts) {
dd5a823e 61 AliInfo("No track cuts given, creating default (standard only TPC) cuts");
cc2b5fb5 62 fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
63 fEsdTrackCuts->SetPtRange(0.15,1e3);
64 }
65}
66
67//________________________________________________________________________
68void AliEmcalEsdTpcTrackTask::UserExec(Option_t *)
69{
70 // Main loop, called for each event.
71
72 fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
73 if (!fEsdEv) {
74 AliError("Task works only on ESD events, returning");
75 return;
76 }
77
78 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
79 if (!am) {
80 AliError("Manager zero, returning");
81 return;
82 }
83
84 // add tracks to event if not yet there
85 if (!(InputEvent()->FindListObject(fTracksName)))
86 InputEvent()->AddObject(fTracks);
87
dd5a823e 88 if (!fHybridTrackCuts) { // contrain TPC tracks to SPD vertex if fDoSpdVtxCon==kTRUE
57184cc6 89 am->LoadBranch("AliESDRun.");
90 am->LoadBranch("AliESDHeader.");
57184cc6 91 am->LoadBranch("Tracks");
4d1e3842 92
93 if (fDoSpdVtxCon) {
94 if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
95 fEsdEv->InitMagneticField();
57184cc6 96 }
4d1e3842 97 am->LoadBranch("SPDVertex.");
98 const AliESDVertex *vtxSPD = fEsdEv->GetPrimaryVertexSPD();
99 if (!vtxSPD) {
100 AliError("No SPD vertex, returning");
101 return;
57184cc6 102 }
4d1e3842 103 Int_t ntr = fEsdEv->GetNumberOfTracks();
104 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
105 AliESDtrack *etrack = fEsdEv->GetTrack(i);
106 if (!etrack)
107 continue;
108 if (!fEsdTrackCuts->AcceptTrack(etrack))
109 continue;
110 AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(fEsdEv,etrack->GetID());
111 if (!ntrack)
112 continue;
113 if (ntrack->Pt()<=0) {
114 delete ntrack;
115 continue;
116 }
117 Double_t bfield[3] = {0,0,0};
118 ntrack->GetBxByBz(bfield);
119 AliExternalTrackParam exParam;
120 Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam);
121 if (!relate) {
122 delete ntrack;
123 continue;
124 }
125 // set the constraint parameters to the track
126 ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
127 if (ntrack->Pt()<=0) {
128 delete ntrack;
129 continue;
130 }
131 new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
57184cc6 132 delete ntrack;
57184cc6 133 }
4d1e3842 134 } else { /* no spd vtx constraint */
135 Int_t ntr = fEsdEv->GetNumberOfTracks();
136 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
137 AliESDtrack *etrack = fEsdEv->GetTrack(i);
138 if (!etrack)
139 continue;
140 if (!fEsdTrackCuts->AcceptTrack(etrack))
141 continue;
142 new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
143 }
cc2b5fb5 144 }
145
10d1f756 146 } else { // use hybrid track cuts
57184cc6 147
148 am->LoadBranch("Tracks");
149 Int_t ntr = fEsdEv->GetNumberOfTracks();
150 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
151 AliESDtrack *etrack = fEsdEv->GetTrack(i);
152 if (!etrack)
153 continue;
154 if (fEsdTrackCuts->AcceptTrack(etrack)) {
155 new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
156 AliESDtrack *newTrack = static_cast<AliESDtrack*>(fTracks->At(ntrnew));
157 newTrack->SetLabel(0);
158 ++ntrnew;
159 } else if (fHybridTrackCuts->AcceptTrack(etrack)) {
160 if (etrack->GetConstrainedParam()) {
161 new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
162 AliESDtrack *newTrack = static_cast<AliESDtrack*>(fTracks->At(ntrnew));
163 ++ntrnew;
164 const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
165 newTrack->Set(constrainParam->GetX(),
166 constrainParam->GetAlpha(),
167 constrainParam->GetParameter(),
168 constrainParam->GetCovariance());
169 UInt_t status = etrack->GetStatus();
170 if ((status&AliESDtrack::kITSrefit)==0)
171 newTrack->SetLabel(2);
172 else
173 newTrack->SetLabel(1);
174 }
175 }
176 }
cc2b5fb5 177 }
178}