]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/alice-macros/esd_tracks.C
adding new sample component for RAW data analysis
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_tracks.C
CommitLineData
5a5a1232 1// $Id$
d810d0de 2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
5a5a1232 9
e9ece5b4 10#if !defined(__CINT__) || defined(__MAKECINT__)
11
15c12442 12#include <TString.h>
13#include <TSystem.h>
14#include <TROOT.h>
15#include <TMath.h>
16#include <TGListTree.h>
17
18#include <TEveVSDStructs.h>
19#include <TEveManager.h>
20#include <TEveTrackPropagator.h>
21
22#include <EveBase/AliEveTrack.h>
23#include <EveBase/AliEveTrackCounter.h>
24#include <EveBase/AliEveMagField.h>
25#include <EveBase/AliEveEventManager.h>
26
27#include <AliESDEvent.h>
8e37954c 28#include <AliESDfriend.h>
15c12442 29#include <AliESDtrackCuts.h>
30#include <AliESDtrack.h>
8e37954c 31#include <AliESDfriendTrack.h>
15c12442 32#include <AliExternalTrackParam.h>
33
b264afb8 34#include <AliPWG0Helper.h>
e9ece5b4 35
36#endif
37
38
29207369 39// Use inner-tpc track params when its refit failed.
40Bool_t g_esd_tracks_use_ip_on_failed_its_refit = kFALSE;
41
6336e5d7 42// Use magnetic-field as retrieved from GRP.
43Bool_t g_esd_tracks_true_field = kTRUE;
44
45// Use Runge-Kutta track stepper.
46Bool_t g_esd_tracks_rk_stepper = kFALSE;
47
48
49//==============================================================================
50
51void esd_track_propagator_setup(TEveTrackPropagator* trkProp,
52 Float_t magF, Float_t maxR)
53{
54 if (g_esd_tracks_true_field)
55 {
56 trkProp->SetMagFieldObj(new AliEveMagField);
57 }
58 else
59 {
60 trkProp->SetMagField(magF);
61 }
62 if (g_esd_tracks_rk_stepper)
63 {
64 trkProp->SetStepper(TEveTrackPropagator::kRungeKutta);
65 }
66 trkProp->SetMaxR(maxR);
67}
68
69//==============================================================================
70
29207369 71TString esd_track_title(AliESDtrack* t)
ad5abc55 72{
73 TString s;
29207369 74
75 Int_t label = t->GetLabel(), index = t->GetID();
76 TString idx(index == kMinInt ? "<undef>" : Form("%d", index));
77 TString lbl(label == kMinInt ? "<undef>" : Form("%d", label));
78
79 Double_t p[3], v[3];
80 t->GetXYZ(v);
81 t->GetPxPyPz(p);
d6962cc4 82 Double_t pt = t->Pt();
83 Double_t ptsig = TMath::Sqrt(t->GetSigma1Pt2());
84 Double_t ptsq = pt*pt;
85 Double_t ptm = pt / (1.0 + pt*ptsig);
86 Double_t ptM = pt / (1.0 - pt*ptsig);
29207369 87
88 s = Form("Index=%s, Label=%s\nChg=%d, Pdg=%d\n"
d6962cc4 89 "pT = %.3f + %.3f - %.3f [%.3f]\n"
90 "P = (%.3f, %.3f, %.3f)\n"
91 "V = (%.3f, %.3f, %.3f)\n",
29207369 92 idx.Data(), lbl.Data(), t->Charge(), 0,
d6962cc4 93 pt, ptM - pt, pt - ptm, ptsig*ptsq,
94 p[0], p[1], p[2],
95 v[0], v[1], v[2]);
29207369 96
ad5abc55 97 Int_t o;
d6962cc4 98 s += "Det (in,out,refit,pid):\n";
ad5abc55 99 o = AliESDtrack::kITSin;
6b7fd3a4 100 s += Form("ITS (%d,%d,%d,%d) ", t->IsOn(o), t->IsOn(o<<1), t->IsOn(o<<2), t->IsOn(o<<3));
ad5abc55 101 o = AliESDtrack::kTPCin;
6b7fd3a4 102 s += Form("TPC(%d,%d,%d,%d)\n", t->IsOn(o), t->IsOn(o<<1), t->IsOn(o<<2), t->IsOn(o<<3));
ad5abc55 103 o = AliESDtrack::kTRDin;
6b7fd3a4 104 s += Form("TRD(%d,%d,%d,%d) ", t->IsOn(o), t->IsOn(o<<1), t->IsOn(o<<2), t->IsOn(o<<3));
ad5abc55 105 o = AliESDtrack::kTOFin;
6b7fd3a4 106 s += Form("TOF(%d,%d,%d,%d)\n", t->IsOn(o), t->IsOn(o<<1), t->IsOn(o<<2), t->IsOn(o<<3));
ad5abc55 107 o = AliESDtrack::kHMPIDout;
6b7fd3a4 108 s += Form("HMPID(out=%d,pid=%d)\n", t->IsOn(o), t->IsOn(o<<1));
ad5abc55 109 s += Form("ESD pid=%d", t->IsOn(AliESDtrack::kESDpid));
86f12f78 110
29207369 111 if (t->IsOn(AliESDtrack::kESDpid))
112 {
113 Double_t pid[5];
114 t->GetESDpid(pid);
115 s += Form("\n[%.2f %.2f %.2f %.2f %.2f]", pid[0], pid[1], pid[2], pid[3], pid[4]);
116 }
51346b82 117
29207369 118 return s;
86f12f78 119}
120
6336e5d7 121//==============================================================================
122
e9ece5b4 123void esd_track_add_param(AliEveTrack* track, const AliExternalTrackParam* tp)
c222eb1d 124{
29207369 125 // Add additional track parameters as a path-mark to track.
126
c222eb1d 127 if (tp == 0)
128 return;
129
29207369 130 Double_t pbuf[3], vbuf[3];
c222eb1d 131 tp->GetXYZ(vbuf);
132 tp->GetPxPyPz(pbuf);
133
a15e6d7d 134 TEvePathMark pm(TEvePathMark::kReference);
135 pm.fV.Set(vbuf);
136 pm.fP.Set(pbuf);
c222eb1d 137 track->AddPathMark(pm);
138}
139
6336e5d7 140//==============================================================================
141
8e37954c 142AliEveTrack* esd_make_track_TPC(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
143{
144 // Make a TPC track representation and put it into given container.
145
146 AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
147 track->SetAttLineAttMarker(cont);
148 track->SetName(Form("AliEveTrack %d", at->GetID()));
149 track->SetElementTitle(esd_track_title(at));
150 track->SetSourceObject(at);
151
152 // Add inner/outer track parameters as start point and pathmark.
153 if (at->GetInnerParam()) track->SetStartParams(at->GetInnerParam());
154 else return NULL;
155 if (aft->GetTPCOut()) esd_track_add_param(track, aft->GetTPCOut());
156 else return NULL;
157
158 return track;
159}
160
7b4a06f8 161AliEveTrack* esd_make_track_ITS_standalone(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
162{
163 // Make a ITS standalone track representation and put it into given container.
164
165 if ( !(!at->IsOn(AliESDtrack::kTPCin) &&
166 at->IsOn(AliESDtrack::kITSout)) ) return NULL; //only ITS standalone
167 AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
168 track->SetAttLineAttMarker(cont);
169 track->SetName(Form("AliEveTrack %d", at->GetID()));
170 track->SetElementTitle(esd_track_title(at));
171 track->SetSourceObject(at);
172
173 // Add inner/outer track parameters as path-marks.
174 if (aft->GetITSOut())
175 {
176 esd_track_add_param(track, aft->GetITSOut());
177 }
178 else return NULL;
179
180 return track;
181}
182
8e37954c 183AliEveTrack* esd_make_track_ITS(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
184{
185 // Make a ITS track representation and put it into given container.
186
7b4a06f8 187 if ( (!at->IsOn(AliESDtrack::kTPCin) &&
188 at->IsOn(AliESDtrack::kITSout)) ) return NULL; //ignore ITS standalone
8e37954c 189 AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
190 track->SetAttLineAttMarker(cont);
191 track->SetName(Form("AliEveTrack %d", at->GetID()));
192 track->SetElementTitle(esd_track_title(at));
193 track->SetSourceObject(at);
194
195 // Add inner/outer track parameters as path-marks.
196 if (aft->GetITSOut())
197 {
8e37954c 198 esd_track_add_param(track, aft->GetITSOut());
199 }
200 else return NULL;
201
202 return track;
203}
204
e9ece5b4 205AliEveTrack* esd_make_track(AliESDtrack *at, TEveTrackList* cont)
29207369 206{
207 // Make a standard track representation and put it into given container.
208
209 // Choose which parameters to use a track's starting point.
210 // If gkFixFailedITSExtr is TRUE (FALSE by default) and
211 // if ITS refit failed, take track parameters at inner TPC radius.
e9ece5b4 212
213 const AliExternalTrackParam* tp = at;
29207369 214
215 Bool_t innerTaken = kFALSE;
216 if ( ! at->IsOn(AliESDtrack::kITSrefit) && g_esd_tracks_use_ip_on_failed_its_refit)
217 {
218 tp = at->GetInnerParam();
219 innerTaken = kTRUE;
220 }
221
50ac85c6 222 AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
29207369 223 track->SetAttLineAttMarker(cont);
0e33c639 224 track->SetName(Form("AliEveTrack %d", at->GetID()));
29207369 225 track->SetElementTitle(esd_track_title(at));
9b6216c0 226 track->SetSourceObject(at);
29207369 227
228 // Add inner/outer track parameters as path-marks.
229 if (at->IsOn(AliESDtrack::kTPCrefit))
230 {
231 if ( ! innerTaken)
232 {
233 esd_track_add_param(track, at->GetInnerParam());
234 }
235 esd_track_add_param(track, at->GetOuterParam());
236 }
a15e6d7d 237
29207369 238 return track;
239}
86f12f78 240
6336e5d7 241
242//==============================================================================
243// esd_tracks()
244//==============================================================================
245
8e37954c 246TEveTrackList* esd_tracks_TPC()
247{
248 AliESDEvent* esd = AliEveEventManager::AssertESD();
249 AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
250
251 TEveTrackList* cont = new TEveTrackList("TPC Tracks");
7b4a06f8 252 cont->SetMainColor(kMagenta);
8e37954c 253
254 esd_track_propagator_setup(cont->GetPropagator(),
255 0.1*esd->GetMagneticField(), 520);
256
257 gEve->AddElement(cont);
258
259 Int_t count = 0;
260 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
261 {
262 ++count;
263 if (!esd->GetTrack(n)) continue;
264 if (!esd_friend->GetTrack(n)) continue;
265 AliEveTrack* track = esd_make_track_TPC(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
266 if (!track) continue;
267
268 cont->AddElement(track);
269 }
270 cont->SetTitle(Form("N=%d", count));
271 cont->MakeTracks();
272
273 gEve->Redraw3D();
274
275 return cont;
276}
277
278TEveTrackList* esd_tracks_ITS()
279{
280 AliESDEvent* esd = AliEveEventManager::AssertESD();
281 AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
282
283 TEveTrackList* cont = new TEveTrackList("ITS Tracks");
7b4a06f8 284 cont->SetMainColor(kMagenta+3);
8e37954c 285
286 esd_track_propagator_setup(cont->GetPropagator(),
287 0.1*esd->GetMagneticField(), 520);
288 cont->GetPropagator()->SetMaxR(85.0);
289 cont->SetLineWidth(1);
290
291 gEve->AddElement(cont);
292
293 Int_t count = 0;
294 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
295 {
296 ++count;
297 if (!esd->GetTrack(n)) continue;
298 if (!esd_friend->GetTrack(n)) continue;
299 AliEveTrack* track = esd_make_track_ITS(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
300 if (!track) continue;
301
302 cont->AddElement(track);
303 }
304 cont->SetTitle(Form("N=%d", count));
305 cont->MakeTracks();
306
7b4a06f8 307 gEve->Redraw3D();
308
309 return cont;
310}
311
312TEveTrackList* esd_tracks_ITS_standalone()
313{
314 AliESDEvent* esd = AliEveEventManager::AssertESD();
315 AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
316
317 TEveTrackList* cont = new TEveTrackList("ITS Standalone Tracks");
318 cont->SetMainColor(kBlue);
319
320 esd_track_propagator_setup(cont->GetPropagator(),
321 0.1*esd->GetMagneticField(), 520);
322 cont->GetPropagator()->SetMaxR(85.0);
323 cont->SetLineWidth(1);
324
325 gEve->AddElement(cont);
326
327 Int_t count = 0;
328 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
329 {
330 ++count;
331 if (!esd->GetTrack(n)) continue;
332 if (!esd_friend->GetTrack(n)) continue;
333 AliEveTrack* track = esd_make_track_ITS_standalone(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
334 if (!track) continue;
335
336 cont->AddElement(track);
337 }
338 cont->SetTitle(Form("N=%d", count));
339 cont->MakeTracks();
340
8e37954c 341 gEve->Redraw3D();
342
343 return cont;
344}
345
29207369 346TEveTrackList* esd_tracks()
5a5a1232 347{
d810d0de 348 AliESDEvent* esd = AliEveEventManager::AssertESD();
5a5a1232 349
51346b82 350 TEveTrackList* cont = new TEveTrackList("ESD Tracks");
fbc350a3 351 cont->SetMainColor(6);
6336e5d7 352
353 esd_track_propagator_setup(cont->GetPropagator(),
354 0.1*esd->GetMagneticField(), 520);
5a5a1232 355
84aff7a4 356 gEve->AddElement(cont);
5a5a1232 357
29207369 358 Int_t count = 0;
359 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
d31ac39d 360 {
29207369 361 ++count;
0e33c639 362 AliEveTrack* track = esd_make_track(esd->GetTrack(n), cont);
5a5a1232 363
29207369 364 cont->AddElement(track);
365 }
366 cont->SetTitle(Form("N=%d", count));
367 cont->MakeTracks();
5a5a1232 368
29207369 369 gEve->Redraw3D();
5a5a1232 370
29207369 371 return cont;
372}
5a5a1232 373
06219f85 374TEveTrackList* esd_tracks_MI()
29207369 375{
376 AliESDEvent* esd = AliEveEventManager::AssertESD();
c222eb1d 377
06219f85 378 TEveTrackList* cont = new TEveTrackList("ESD Tracks MI");
379 cont->SetLineColor(5);
29207369 380 gEve->AddElement(cont);
c222eb1d 381
29207369 382 Int_t count = 0;
383 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
384 {
385 ++count;
386 AliESDtrack* at = esd->GetTrack(n);
06219f85 387 AliEveTrack* l = new AliEveTrack(at, cont->GetPropagator());
29207369 388 l->SetName(Form("ESDTrackMI %d", at->GetID()));
389 l->SetElementTitle(esd_track_title(at));
06219f85 390 l->SetAttLineAttMarker(cont);
9b6216c0 391 l->SetSourceObject(at);
c222eb1d 392
06219f85 393 at->FillPolymarker(l, esd->GetMagneticField(), 0, 250, 5);
394
395 l->SetLockPoints(kTRUE);
29207369 396 cont->AddElement(l);
5a5a1232 397 }
29207369 398 cont->SetTitle(Form("N=%d", count));
32e219c2 399
84aff7a4 400 gEve->Redraw3D();
5a5a1232 401
402 return cont;
403}
404
6336e5d7 405
406//==============================================================================
a8600b56 407// esd_tracks_from_array()
6336e5d7 408//==============================================================================
a8600b56 409
84aff7a4 410TEveTrackList* esd_tracks_from_array(TCollection* col, AliESDEvent* esd=0)
5a5a1232 411{
412 // Retrieves AliESDTrack's from collection.
413 // See example usage with AliAnalysisTrackCuts in the next function.
414
d810d0de 415 if (esd == 0) esd = AliEveEventManager::AssertESD();
86f12f78 416
51346b82 417 TEveTrackList* cont = new TEveTrackList("ESD Tracks");
fbc350a3 418 cont->SetMainColor(6);
6336e5d7 419
420 esd_track_propagator_setup(cont->GetPropagator(),
421 0.1*esd->GetMagneticField(), 520);
5a5a1232 422
84aff7a4 423 gEve->AddElement(cont);
5a5a1232 424
5a5a1232 425 Int_t count = 0;
426 TIter next(col);
427 TObject *obj;
84aff7a4 428 while ((obj = next()) != 0)
d31ac39d 429 {
29207369 430 if (obj->IsA()->InheritsFrom("AliESDtrack") == kFALSE)
431 {
432 Warning("esd_tracks_from_array", "Object '%s', '%s' is not an AliESDtrack.",
5a5a1232 433 obj->GetName(), obj->GetTitle());
434 continue;
435 }
436
437 ++count;
e9ece5b4 438 AliESDtrack* at = reinterpret_cast<AliESDtrack*>(obj);
5a5a1232 439
0e33c639 440 AliEveTrack* track = esd_make_track(at, cont);
29207369 441 cont->AddElement(track);
5a5a1232 442 }
6b7fd3a4 443 cont->SetTitle(Form("N=%d", count));
5a5a1232 444 cont->MakeTracks();
32e219c2 445
84aff7a4 446 gEve->Redraw3D();
5a5a1232 447
448 return cont;
449}
450
451void esd_tracks_alianalcuts_demo()
452{
d810d0de 453 AliESDEvent* esd = AliEveEventManager::AssertESD();
5a5a1232 454
fcfc8b01 455 AliESDtrackCuts atc;
5a5a1232 456 atc.SetPtRange(0.1, 5);
457 atc.SetRapRange(-1, 1);
458
fcfc8b01 459 esd_tracks_from_array(atc.GetAcceptedTracks(esd), esd);
5a5a1232 460}
a8600b56 461
6336e5d7 462
463//==============================================================================
29207369 464// esd_tracks_by_category
6336e5d7 465//==============================================================================
a8600b56 466
467Float_t get_sigma_to_vertex(AliESDtrack* esdTrack)
468{
469 // Taken from: PWG0/esdTrackCuts/AliESDtrackCuts.cxx
470 // Float_t AliESDtrackCuts::GetSigmaToVertex(AliESDtrack* esdTrack)
471
472 Float_t b[2];
473 Float_t bRes[2];
474 Float_t bCov[3];
475 esdTrack->GetImpactParameters(b,bCov);
29207369 476 if (bCov[0] <= 0 || bCov[2] <= 0)
477 {
d31ac39d 478 printf("Estimated b resolution lower or equal zero!\n");
29207369 479 bCov[0] = bCov[2] = 0;
a8600b56 480 }
481 bRes[0] = TMath::Sqrt(bCov[0]);
482 bRes[1] = TMath::Sqrt(bCov[2]);
483
484 // -----------------------------------
485 // How to get to a n-sigma cut?
486 //
487 // The accumulated statistics from 0 to d is
488 //
489 // -> Erf(d/Sqrt(2)) for a 1-dim gauss (d = n_sigma)
490 // -> 1 - Exp(-d**2) for a 2-dim gauss (d*d = dx*dx + dy*dy != n_sigma)
491 //
492 // It means that for a 2-dim gauss: n_sigma(d) = Sqrt(2)*ErfInv(1 - Exp((-x**2)/2)
493 // Can this be expressed in a different way?
494
29207369 495 if (bRes[0] == 0 || bRes[1] == 0)
a8600b56 496 return -1;
497
498 Float_t d = TMath::Sqrt(TMath::Power(b[0]/bRes[0],2) + TMath::Power(b[1]/bRes[1],2));
499
500 // stupid rounding problem screws up everything:
501 // if d is too big, TMath::Exp(...) gets 0, and TMath::ErfInverse(1) that should be infinite, gets 0 :(
502 if (TMath::Exp(-d * d / 2) < 1e-10)
503 return 1000;
504
505 d = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
506 return d;
507}
508
29207369 509TEveElementList* esd_tracks_by_category()
a8600b56 510{
440a8bc6 511 // Import ESD tracks, separate them into several containers
512 // according to primary-vertex cut and ITS&TPC refit status.
513
514 AliESDEvent* esd = AliEveEventManager::AssertESD();
515
516 TEveElementList* cont = new TEveElementList("ESD Tracks by category");
517 gEve->AddElement(cont);
518
519 const Int_t nCont = 9;
520 const Float_t maxR = 520;
521 const Float_t magF = 0.1*esd->GetMagneticField();
522
523 TEveTrackList *tl[nCont];
524 Int_t tc[nCont];
525 Int_t count = 0;
526
527 tl[0] = new TEveTrackList("Sigma < 3");
528 tc[0] = 0;
529 esd_track_propagator_setup(tl[0]->GetPropagator(), magF, maxR);
530 tl[0]->SetMainColor(3);
531 cont->AddElement(tl[0]);
532
533 tl[1] = new TEveTrackList("3 < Sigma < 5");
534 tc[1] = 0;
535 esd_track_propagator_setup(tl[1]->GetPropagator(), magF, maxR);
536 tl[1]->SetMainColor(7);
537 cont->AddElement(tl[1]);
538
539 tl[2] = new TEveTrackList("5 < Sigma");
540 tc[2] = 0;
541 esd_track_propagator_setup(tl[2]->GetPropagator(), magF, maxR);
542 tl[2]->SetMainColor(46);
543 cont->AddElement(tl[2]);
544
545 tl[3] = new TEveTrackList("no ITS refit; Sigma < 5");
546 tc[3] = 0;
547 esd_track_propagator_setup(tl[3]->GetPropagator(), magF, maxR);
548 tl[3]->SetMainColor(41);
549 cont->AddElement(tl[3]);
550
551 tl[4] = new TEveTrackList("no ITS refit; Sigma > 5");
552 tc[4] = 0;
553 esd_track_propagator_setup(tl[4]->GetPropagator(), magF, maxR);
554 tl[4]->SetMainColor(48);
555 cont->AddElement(tl[4]);
556
557 tl[5] = new TEveTrackList("no TPC refit");
558 tc[5] = 0;
559 esd_track_propagator_setup(tl[5]->GetPropagator(), magF, maxR);
560 tl[5]->SetMainColor(kRed);
561 cont->AddElement(tl[5]);
562
563 tl[6] = new TEveTrackList("ITS ncl>=3 & SPD Inner");
564 tc[6] = 0;
565 esd_track_propagator_setup(tl[6]->GetPropagator(), magF, maxR);
566 tl[6]->SetMainColor(kGreen);
567 cont->AddElement(tl[6]);
568
569 tl[7] = new TEveTrackList("ITS ncl>=3 & b<3 cm");
570 tc[7] = 0;
571 esd_track_propagator_setup(tl[7]->GetPropagator(), magF, maxR);
572 tl[7]->SetMainColor(kMagenta - 9);
573 cont->AddElement(tl[7]);
574
575 tl[8] = new TEveTrackList("ITS others");
576 tc[8] = 0;
577 esd_track_propagator_setup(tl[8]->GetPropagator(), magF, maxR);
578 tl[8]->SetMainColor(kRed + 2);
579 cont->AddElement(tl[8]);
580
581 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
582 {
583 AliESDtrack* at = esd->GetTrack(n);
584
585 Float_t s = get_sigma_to_vertex(at);
586 Int_t ti;
587 if (s < 3) ti = 0;
588 else if (s <= 5) ti = 1;
589 else ti = 2;
590
591 Int_t nclits;
592 Double_t dtobeam;
593
594 if (at->IsOn(AliESDtrack::kITSin) && ! at->IsOn(AliESDtrack::kTPCin))
595 {
596 UChar_t itsclmap = at->GetITSClusterMap();
597 Bool_t spdinner = (itsclmap & 3) != 0;
598
599 nclits = 0;
600 for (Int_t iter = 0; iter < 6; ++iter)
601 if (itsclmap & (1 << iter)) nclits ++;
602
603 Double_t xyz[3];
604 at->GetXYZ(xyz);
605 dtobeam = TMath::Hypot(xyz[0], xyz[1]);
606
607 if ((nclits >= 3) && (spdinner))
608 ti = 6;
609 else if ((nclits >= 3) && (dtobeam < 3.0))
610 ti = 7;
611 else
612 ti = 8;
613 }
614 else if (at->IsOn(AliESDtrack::kTPCin) && ! at->IsOn(AliESDtrack::kTPCrefit))
615 {
616 ti = 5;
617 }
618 else if ( ! at->IsOn(AliESDtrack::kITSrefit))
619 {
620 ti = (ti == 2) ? 4 : 3;
621 }
622
623 TEveTrackList* tlist = tl[ti];
624 ++tc[ti];
625 ++count;
626
627 AliEveTrack* track = esd_make_track(at, tlist);
628 if (ti<6)
629 track->SetName(Form("ESD Track idx=%d, sigma=%5.3f", at->GetID(), s));
630 else
631 track->SetName(Form("ESD Track idx=%d, dxy=%5.3f cl=%i", at->GetID(), dtobeam, nclits));
632 tlist->AddElement(track);
633 }
634
635 for (Int_t ti = 0; ti < nCont; ++ti)
636 {
637 TEveTrackList* tlist = tl[ti];
638 tlist->SetName(Form("%s [%d]", tlist->GetName(), tlist->NumChildren()));
639 tlist->SetTitle(Form("N tracks=%d", tc[ti]));
640
641 tlist->MakeTracks();
642
643 // Bool_t good_cont = ti <= 1;
644 Bool_t good_cont = ((ti == 6) || (ti == 7));
645 if (AliEveTrackCounter::IsActive())
646 {
647 AliEveTrackCounter::fgInstance->RegisterTracks(tlist, good_cont);
648 }
649 else
650 {
651 if ( ! good_cont)
652 tlist->SetLineStyle(6);
653 }
654 }
655 cont->SetTitle(Form("N all tracks = %d", count));
656 // ??? The following does not always work:
657 cont->FindListTreeItem(gEve->GetListTree())->SetOpen(kTRUE);
658
659 gEve->Redraw3D();
660
661 return cont;
a8600b56 662}
5320a363 663
664
665//==============================================================================
666// esd_tracks_by_anal_cuts
667//==============================================================================
668
669AliESDtrackCuts* g_esd_tracks_anal_cuts = 0;
670
671TEveElementList* esd_tracks_by_anal_cuts()
672{
673 AliESDEvent* esd = AliEveEventManager::AssertESD();
674
675 if (g_esd_tracks_anal_cuts == 0)
676 {
677 gSystem->Load("libPWG0base");
678 gROOT->ProcessLine(".L $ALICE_ROOT/PWG0/CreateStandardCuts.C");
5065a65b 679 Int_t mode = AliPWG0Helper::kTPC;
5320a363 680 if (TMath::Abs(esd->GetMagneticField()) > 0.01)
681 mode |= AliPWG0Helper::kFieldOn;
15c12442 682 gROOT->ProcessLine(Form("g_esd_tracks_anal_cuts = CreateTrackCuts(%d, kFALSE)", mode));
5320a363 683 }
684
685 TEveElementList* cont = new TEveElementList("ESD Tracks by Analysis Cuts");
686 gEve->AddElement(cont);
687
688 const Int_t nCont = 2;
689 const Float_t maxR = 520;
690 const Float_t magF = 0.1*esd->GetMagneticField();
691
692 TEveTrackList *tl[nCont];
693 Int_t tc[nCont];
694 Int_t count = 0;
695
696 tl[0] = new TEveTrackList("Passed");
697 tc[0] = 0;
698 esd_track_propagator_setup(tl[0]->GetPropagator(), magF, maxR);
699 tl[0]->SetMainColor(3);
700 cont->AddElement(tl[0]);
701
702 tl[1] = new TEveTrackList("Rejected");
703 tc[1] = 0;
704 esd_track_propagator_setup(tl[1]->GetPropagator(), magF, maxR);
705 tl[1]->SetMainColor(kRed);
706 cont->AddElement(tl[1]);
707
708 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
709 {
710 AliESDtrack* at = esd->GetTrack(n);
711
712 Float_t s = get_sigma_to_vertex(at);
713 Int_t ti = (g_esd_tracks_anal_cuts->AcceptTrack(at)) ? 0 : 1;
714
715 TEveTrackList* tlist = tl[ti];
716 ++tc[ti];
717 ++count;
718
719 AliEveTrack* track = esd_make_track(at, tlist);
720 track->SetName(Form("ESD Track idx=%d, sigma=%5.3f", at->GetID(), s));
721 tlist->AddElement(track);
722 }
723
724 for (Int_t ti = 0; ti < nCont; ++ti)
725 {
726 TEveTrackList* tlist = tl[ti];
727 tlist->SetName(Form("%s [%d]", tlist->GetName(), tlist->NumChildren()));
728 tlist->SetTitle(Form("N tracks=%d", tc[ti]));
729
730 tlist->MakeTracks();
731
732 Bool_t good_cont = ti < 1;
733 if (AliEveTrackCounter::IsActive())
734 {
735 AliEveTrackCounter::fgInstance->RegisterTracks(tlist, good_cont);
736 }
737 else
738 {
739 if ( ! good_cont)
740 tlist->SetLineStyle(6);
741 }
742 }
743 cont->SetTitle(Form("N all tracks = %d", count));
744 // ??? The following does not always work:
745 cont->FindListTreeItem(gEve->GetListTree())->SetOpen(kTRUE);
746
747 gEve->Redraw3D();
748
749 return cont;
750}