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