SPD trackelts were too thick.
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_spd_tracklets.C
1 // $Id$
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          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 TEveElementList* esd_spd_tracklets(Float_t radius=8, Width_t line_width=2,
11                                    Float_t dPhiWindow=0.080, Float_t dThetaWindow=0.025, 
12                                    Float_t dPhiShift05T=0.0045)
13 {
14   // radius - cylindrical radius to which the tracklets should be extrapolated
15
16   AliESDEvent     *esd = AliEveEventManager::AssertESD();
17   AliESDVertex    *pv  = esd->GetPrimaryVertexSPD();
18   AliMultiplicity *mul = esd->GetMultiplicity();
19
20   AliMagF *field = AliEveEventManager::AssertMagField();
21
22   TEveElementList* cont = new TEveElementList("SPD Tracklets");
23   gEve->AddElement(cont);
24
25   TEveTrackList *tg = new TEveTrackList("Good");
26   tg->SetMainColor(7);
27   tg->SetLineWidth(line_width);
28   cont->AddElement(tg);
29
30   TEveTrackPropagator* pg = tg->GetPropagator();
31   pg->SetMaxR(radius);
32
33   TEveTrackList *tb = new TEveTrackList("Bad");
34   tb->SetMainColor(7);
35   tb->SetLineWidth(line_width);
36   cont->AddElement(tb);
37
38   TEveTrackPropagator* pb = tb->GetPropagator();
39   pb->SetMaxR(radius);
40
41   const Float_t  Bz = TMath::Abs(field->SolenoidField());
42
43   const Double_t dPhiShift     = dPhiShift05T / 5.0 * Bz;
44   const Double_t dPhiWindow2   = dPhiWindow * dPhiWindow;
45   const Double_t dThetaWindow2 = dThetaWindow * dThetaWindow;
46
47   for (Int_t i = 0; i < mul->GetNumberOfTracklets(); ++i)
48   {
49     Float_t theta  = mul->GetTheta(i);
50     Float_t phi    = mul->GetPhi(i);
51     Float_t dTheta = mul->GetDeltaTheta(i);
52     Float_t dPhi   = mul->GetDeltaPhi(i) - dPhiShift;
53     Float_t d      = dPhi*dPhi/dPhiWindow2 + dTheta*dTheta/dThetaWindow2;
54
55     TEveTrackList* tl = (d < 1.0f) ? tg : tb;
56
57     AliEveTracklet *t = new AliEveTracklet(i, pv, theta, phi, tl->GetPropagator());
58     t->SetAttLineAttMarker(tl);
59     t->SetElementName(Form("Tracklet %d", i));
60     t->SetElementTitle(Form("Id = %d\nEta=%.3f, Theta=%.3f, dTheta=%.3f\nPhi=%.3f dPhi=%.3f",
61                             i, mul->GetEta(i), theta, dTheta, phi, dPhi));
62
63     tl->AddElement(t);
64   }
65
66   tg->MakeTracks();
67   tg->SetTitle(Form("N=%d", tg->NumChildren()));
68
69   tb->MakeTracks();
70   tb->SetTitle(Form("N=%d", tb->NumChildren()));
71
72   if (AliEveTrackCounter::IsActive())
73   {
74     AliEveTrackCounter::fgInstance->RegisterTracklets(tg, kTRUE);
75     AliEveTrackCounter::fgInstance->RegisterTracklets(tb, kFALSE);
76   }
77   else
78   {
79     tb->SetLineStyle(6);
80   }
81
82   gEve->Redraw3D();
83
84   return cont;
85 }