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