Add full support for SPD tracklets.
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveTracklet.cxx
1 // $Id$
2 // Author: Matevz Tadel 2009
3
4 /**************************************************************************
5  * Copyright(c) 1998-2009, 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 #include "AliEveTracklet.h"
11
12 #include <AliVVertex.h>
13 #include <TEveTrackPropagator.h>
14
15 //______________________________________________________________________________
16 // AliEveTracklet is a representation of SPD tracklet.
17 // It inherits from AliEveTrack to allow for common functionality
18 // regarding track counting.
19 //
20 // TEveTrack::fV - stores primary vertex.
21 // TEveTrack::fP - stores vector in direction of the tracklet with
22 //                 transverse component equal to 1.
23
24 ClassImp(AliEveTracklet)
25
26 Float_t AliEveTracklet::fgDefaultRadius = 10;
27
28 //______________________________________________________________________________
29 Float_t AliEveTracklet::GetDefaultRadius()
30 {
31   // Static - return defualt extrapolation radius.
32
33   return fgDefaultRadius;
34 }
35
36 //______________________________________________________________________________
37 void AliEveTracklet::SetDefaultRadius(Float_t r)
38 {
39   // Static - set defualt extrapolation radius.
40
41   fgDefaultRadius = r;
42 }
43
44 //==============================================================================
45
46 //______________________________________________________________________________
47 AliEveTracklet::AliEveTracklet(const AliVVertex* pv, Float_t theta, Float_t phi,
48                                TEveTrackPropagator* prop) :
49   AliEveTrack()
50 {
51   // Constructor.
52
53   using namespace TMath;
54
55   fV.Set(pv->GetX(), pv->GetY(), pv->GetZ());
56   fP.Set(Cos(phi), Sin(phi), 1.0/Tan(theta));
57
58   if (prop) SetPropagator(prop);
59 }
60
61 //==============================================================================
62
63 //______________________________________________________________________________
64 void AliEveTracklet::MakeTrack(Bool_t recurse)
65 {
66   // Make track -- just make a line to radius specified in propagator
67   // or use the default if it is not set.
68
69   Float_t r = fPropagator ? fPropagator->GetMaxR() : fgDefaultRadius;
70   Reset(2);
71   SetPoint(0, fV.fX, fV.fY, fV.fZ);
72   SetPoint(1, fV.fX + r*fP.fX, fV.fY + r*fP.fY, fV.fZ + r*fP.fZ);
73
74   if (recurse)
75   {
76     for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
77     {
78       TEveTrack* t = dynamic_cast<TEveTrack*>(*i);
79       if (t) t->MakeTrack(recurse);
80     }
81   }
82 }
83
84 //______________________________________________________________________________
85 void AliEveTracklet::SecSelected(TEveTrack* track)
86 {
87   // Emits "SecSelected(TEveTrack*)" signal.
88   // Called from TEveTrackGL on secondary-selection.
89
90   Emit("SecSelected(TEveTrack*)", (Long_t)track);
91   SecSelectedTracklet((AliEveTracklet*) track);
92 }
93
94 //______________________________________________________________________________
95 void AliEveTracklet::SecSelectedTracklet(AliEveTracklet* track)
96 {
97   // Emits "SecSelectedTracklet(AliEveTracklet*)" signal.
98
99   Emit("SecSelectedTracklet(AliEveTracklet*)", (Long_t)track);
100 }