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