]>
Commit | Line | Data |
---|---|---|
cc2b5fb5 | 1 | // $Id$ |
2 | ||
3 | #include <TClonesArray.h> | |
4 | #include <TGeoGlobalMagField.h> | |
5 | #include "AliAnalysisManager.h" | |
6 | #include "AliESDEvent.h" | |
7 | #include "AliESDtrackCuts.h" | |
8 | #include "AliEmcalEsdTpcTrackTask.h" | |
9 | #include "AliMagF.h" | |
10 | ||
11 | ClassImp(AliEmcalEsdTpcTrackTask) | |
12 | ||
13 | //________________________________________________________________________ | |
14 | AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask() : | |
15 | AliAnalysisTaskSE(), | |
16 | fEsdTrackCuts(0), | |
17 | fTracksName(), | |
18 | fEsdEv(0), | |
19 | fTracks(0) | |
20 | { | |
21 | // Constructor | |
22 | } | |
23 | ||
24 | //________________________________________________________________________ | |
25 | AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask(const char *name) : | |
26 | AliAnalysisTaskSE(name), | |
27 | fEsdTrackCuts(0), | |
28 | fTracksName("TpcSpdVertexConstrainedTracks"), | |
29 | fEsdEv(0), | |
30 | fTracks(0) | |
31 | { | |
32 | // Constructor | |
33 | } | |
34 | ||
35 | //________________________________________________________________________ | |
36 | AliEmcalEsdTpcTrackTask::~AliEmcalEsdTpcTrackTask() | |
37 | { | |
38 | //Destructor | |
39 | ||
40 | delete fEsdTrackCuts; | |
41 | } | |
42 | ||
43 | //________________________________________________________________________ | |
44 | void AliEmcalEsdTpcTrackTask::UserCreateOutputObjects() | |
45 | { | |
46 | // Create histograms | |
47 | ||
48 | fTracks = new TClonesArray("AliESDtrack"); | |
49 | fTracks->SetName(fTracksName); | |
50 | ||
51 | if (!fEsdTrackCuts) { | |
52 | AliInfo("No track cuts given, creating default cuts"); | |
53 | fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); | |
54 | fEsdTrackCuts->SetPtRange(0.15,1e3); | |
55 | } | |
56 | } | |
57 | ||
58 | //________________________________________________________________________ | |
59 | void AliEmcalEsdTpcTrackTask::UserExec(Option_t *) | |
60 | { | |
61 | // Main loop, called for each event. | |
62 | ||
63 | fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent()); | |
64 | if (!fEsdEv) { | |
65 | AliError("Task works only on ESD events, returning"); | |
66 | return; | |
67 | } | |
68 | ||
69 | AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); | |
70 | if (!am) { | |
71 | AliError("Manager zero, returning"); | |
72 | return; | |
73 | } | |
74 | ||
75 | // add tracks to event if not yet there | |
76 | if (!(InputEvent()->FindListObject(fTracksName))) | |
77 | InputEvent()->AddObject(fTracks); | |
78 | ||
79 | am->LoadBranch("AliESDRun."); | |
80 | am->LoadBranch("AliESDHeader."); | |
81 | if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map | |
82 | const AliESDRun *erun = fEsdEv->GetESDRun(); | |
83 | AliMagF *field = AliMagF::CreateFieldMap(erun->GetCurrentL3(), | |
84 | erun->GetCurrentDip(), | |
85 | AliMagF::kConvLHC, | |
86 | kFALSE, | |
87 | erun->GetBeamEnergy(), | |
88 | erun->GetBeamType()); | |
89 | TGeoGlobalMagField::Instance()->SetField(field); | |
90 | } | |
91 | ||
92 | am->LoadBranch("SPDVertex."); | |
93 | const AliESDVertex *vtxSPD = fEsdEv->GetPrimaryVertexSPD(); | |
94 | if (!vtxSPD) { | |
95 | AliError("No SPD vertex, returning"); | |
96 | return; | |
97 | } | |
98 | ||
99 | am->LoadBranch("Tracks"); | |
100 | Int_t ntr = fEsdEv->GetNumberOfTracks(); | |
817a96c8 | 101 | for (Int_t i=0, ntrnew=0; i<ntr; ++i) { |
cc2b5fb5 | 102 | AliESDtrack *etrack = fEsdEv->GetTrack(i); |
103 | if (!etrack) | |
104 | continue; | |
105 | if (!fEsdTrackCuts->AcceptTrack(etrack)) | |
106 | continue; | |
107 | ||
108 | AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(fEsdEv,etrack->GetID()); | |
109 | if (!ntrack) | |
110 | continue; | |
111 | if (ntrack->Pt()<=0) { | |
112 | delete ntrack; | |
113 | continue; | |
114 | } | |
115 | ||
116 | Double_t bfield[3] = {0,0,0}; | |
117 | ntrack->GetBxByBz(bfield); | |
118 | AliExternalTrackParam exParam; | |
119 | Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam); | |
120 | if (!relate) { | |
121 | delete ntrack; | |
122 | continue; | |
123 | } | |
124 | ||
125 | // set the constraint parameters to the track | |
126 | ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance()); | |
127 | ||
128 | if (ntrack->Pt()<=0) { | |
129 | delete ntrack; | |
130 | continue; | |
131 | } | |
132 | ||
b47c9af6 | 133 | new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack); |
134 | delete ntrack; | |
cc2b5fb5 | 135 | } |
136 | } |