b6d6d00e570842bd24f6615bf320be57697d6840
[u/mrichter/AliRoot.git] / EVE / Reve / Track.h
1 // $Header$
2
3 #ifndef REVE_Track_H
4 #define REVE_Track_H
5
6 #include <Reve/PODs.h>
7 #include <Reve/RenderElement.h>
8
9 #include <TPolyMarker3D.h>
10 #include <TPolyLine3D.h>
11
12 namespace Reve {
13
14 class TrackRnrStyle;
15 class TrackList;
16
17 class Track : public RenderElement,
18               public TPolyLine3D
19 {
20   friend class TrackList;
21
22   Track(const Track&);            // Not implemented
23   Track& operator=(const Track&); // Not implemented
24
25 protected:
26   typedef std::vector<Reve::PathMark*>           vpPathMark_t;
27   typedef std::vector<Reve::PathMark*>::iterator vpPathMark_i;
28
29   Reve::Vector      fV;
30   Reve::Vector      fP;
31   Double_t          fBeta;
32   Int_t             fCharge;
33   Int_t             fLabel;
34   vpPathMark_t      fPathMarks;
35
36   TrackRnrStyle*    fRnrStyle;
37     
38   TString           fName;
39   TString           fTitle;
40
41 public: 
42   Track();
43   Track(TParticle* t, Int_t label, TrackRnrStyle* rs);
44   Track(Reve::MCTrack*  t, TrackRnrStyle* rs);
45   Track(Reve::RecTrack* t, TrackRnrStyle* rs);
46   virtual ~Track();
47
48   void Reset(Int_t n_points=0);
49
50   virtual void SetLineColor(Color_t col)
51   { SetMainColor(col); }
52
53   virtual void Paint(Option_t* option="")
54   { if(fRnrElement) TPolyLine3D::Paint(option); }
55
56   void MakeTrack();
57
58   TrackRnrStyle* GetRnrStyle() const  { return fRnrStyle; }
59   void SetRnrStyle(TrackRnrStyle* rs) { fRnrStyle = rs; }
60
61   virtual const Text_t* GetName() const    { return fName; }
62   virtual void SetName(const Text_t* name) { fName = name; }
63
64   virtual const Text_t* GetTitle() const     { return fTitle; }
65   virtual void SetTitle(const Text_t* title) { fTitle = title; }
66
67   Int_t GetLabel() const { return fLabel; }
68   void  AddPathMark(Reve::PathMark* pm) { fPathMarks.push_back(pm); }
69
70   //--------------------------------
71
72   void ImportHits();     // *MENU*
73   void ImportClusters(); // *MENU*
74
75   ClassDef(Track, 1);
76 }; // endclass Track
77
78
79 /**************************************************************************/
80 // TrackRnrStyle
81 /**************************************************************************/
82
83 // This is decoupled from Track/TrackList to allow sharing of the
84 // RnrStyle among several instances. The interface is half cooked and
85 // there is no good way to set RnrStyle after the object has been
86 // created (shouldn't be too hard to fix).
87 //
88 // TrackList has Get/Set methods for RnrStlye and
89 // TrackListEditor provides editor access to them.
90
91 class TrackRnrStyle : public TObject 
92 {
93 public:
94   Color_t                  fColor;
95   Width_t                  fWidth;
96   Float_t                  fMagField;  
97   // track limits
98   Float_t                  fMaxR;       
99   Float_t                  fMaxZ;       
100   // helix limits 
101   Float_t                  fMaxOrbs; // Maximal angular path of tracks' orbits (1 ~ 2Pi).
102   Float_t                  fMinAng;  // Minimal angular step between two helix points.
103   Float_t                  fDelta;   // Maximal error at the mid-point of the line connecting to helix points.
104
105   Bool_t                   fFitDaughters;   
106   Bool_t                   fFitDecay;   
107
108   TrackRnrStyle();
109
110   void    SetColor(Color_t c) { fColor = c; }
111   Color_t GetColor() const    { return fColor; }
112
113   Float_t GetMagField() const     { return fMagField; }
114   void    SetMagField(Float_t mf) { fMagField = mf; }
115
116   static Float_t       fgDefMagField;
117   static const Float_t fgkB2C;
118   static TrackRnrStyle fgDefStyle;
119
120   ClassDef(TrackRnrStyle, 1);
121 }; // endclass TrackRnrStyle
122
123
124 /**************************************************************************/
125 // TrackList
126 /**************************************************************************/
127
128 class TrackList : public RenderElementListBase,
129                   public TPolyMarker3D
130 {
131   TrackList(const TrackList&);            // Not implemented
132   TrackList& operator=(const TrackList&); // Not implemented
133
134 private:
135   void  Init();
136
137 protected:
138   TString              fTitle;
139
140   TrackRnrStyle*       fRnrStyle;
141
142   Bool_t               fRnrMarkers;
143   Bool_t               fRnrTracks;
144
145 public:
146   TrackList(Int_t n_tracks=0, TrackRnrStyle* rs=0);
147   TrackList(const Text_t* name, Int_t n_tracks=0, TrackRnrStyle* rs=0);
148
149   void Reset(Int_t n_tracks=0);
150
151   virtual const Text_t* GetTitle() const { return fTitle; }
152   virtual void SetTitle(const Text_t* t) { fTitle = t; }
153
154   virtual Bool_t CanEditMainColor()  { return kTRUE; }
155
156   virtual void Paint(Option_t* option="");
157
158   virtual void AddElement(RenderElement* el);
159
160   void  SetRnrStyle(TrackRnrStyle* rst) { fRnrStyle= rst; }
161   TrackRnrStyle* GetRnrStyle()          { return fRnrStyle; } 
162
163   Bool_t GetRnrTracks() const { return fRnrTracks; }
164   void   SetRnrTracks(Bool_t);
165
166   Bool_t GetRnrMarkers() const { return fRnrMarkers; }
167   void   SetRnrMarkers(Bool_t);
168
169   void   MakeTracks();
170   void   MakeMarkers();
171
172   Width_t GetWidth() const { return fRnrStyle->fWidth; }
173   void SetWidth(Width_t w);
174
175   Float_t GetMaxR()         const { return fRnrStyle->fMaxZ; }
176   Float_t GetMaxZ()         const { return fRnrStyle->fMaxR; }
177   Float_t GetMaxOrbs()      const { return fRnrStyle->fMaxOrbs; }
178   Float_t GetMinAng()       const { return fRnrStyle->fMinAng; }
179   Float_t GetDelta()        const { return fRnrStyle->fDelta; }
180   Bool_t  GetFitDaughters() const { return fRnrStyle->fFitDaughters; }
181   Bool_t  GetFitDecay()     const { return fRnrStyle->fFitDecay; }
182
183   void SetMaxR(Float_t x);
184   void SetMaxZ(Float_t x);
185   void SetMaxOrbs(Float_t x);
186   void SetMinAng(Float_t x);
187   void SetDelta(Float_t x);
188   void SetFitDaughters(Bool_t x);
189   void SetFitDecay(Bool_t x);
190
191
192   // void  UpdateBounds();
193   Int_t   GetNTracks() { return fN; }
194
195   void SelectByPt(Float_t min_pt=0.2, Float_t max_pt=10); // *MENU*
196
197   //--------------------------------
198
199   void ImportHits();     // *MENU*
200   void ImportClusters(); // *MENU*
201
202   ClassDef(TrackList, 1);
203 };
204
205
206 } // namespace Reve
207
208 #endif