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