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