2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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__)
11 #include <TEveManager.h>
12 #include <TEveElement.h>
13 #include <TEveTrack.h>
14 #include <TEveTrackPropagator.h>
16 #include <AliESDEvent.h>
17 #include <AliESDVertex.h>
18 #include <AliMultiplicity.h>
20 #include <AliEveEventManager.h>
21 #include <AliEveTracklet.h>
22 #include <AliEveTrackCounter.h>
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)
29 // radius - cylindrical radius to which the tracklets should be extrapolated
31 AliESDEvent *esd = AliEveEventManager::AssertESD();
32 const AliESDVertex *pv = esd->GetPrimaryVertexSPD();
33 const AliMultiplicity *mul = esd->GetMultiplicity();
35 AliMagF *field = AliEveEventManager::AssertMagField();
37 TEveElementList* cont = new TEveElementList("SPD Tracklets");
38 gEve->AddElement(cont);
40 TEveTrackList *tg = new TEveTrackList("Good");
41 tg->SetMainColor(kCyan);
42 tg->SetLineWidth(line_width);
45 TEveTrackPropagator* pg = tg->GetPropagator();
48 TEveTrackList *tb = new TEveTrackList("Bad");
49 tb->SetMainColor(kMagenta);
50 tb->SetLineWidth(line_width);
53 TEveTrackPropagator* pb = tb->GetPropagator();
56 const Float_t Bz = TMath::Abs(field->SolenoidField());
58 const Double_t dPhiShift = dPhiShift05T / 5.0 * Bz;
59 const Double_t dPhiWindow2 = dPhiWindow * dPhiWindow;
60 const Double_t dThetaWindow2 = dThetaWindow * dThetaWindow;
62 for (Int_t i = 0; i < mul->GetNumberOfTracklets(); ++i)
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;
70 TEveTrackList* tl = (d < 1.0f) ? tg : tb;
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));
82 tg->SetTitle(Form("N=%d", tg->NumChildren()));
85 tb->SetTitle(Form("N=%d", tb->NumChildren()));
87 if (AliEveTrackCounter::IsActive())
89 AliEveTrackCounter::fgInstance->RegisterTracklets(tg, kTRUE);
90 AliEveTrackCounter::fgInstance->RegisterTracklets(tb, kFALSE);
94 //==========================================
97 //==========================================