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