Added contructor from TPartice.
[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   Float_t                  fMagField;  
96   // track limits
97   Float_t                  fMaxR;       
98   Float_t                  fMaxZ;       
99   // helix limits 
100   Float_t                  fMaxOrbs; // Maximal angular path of tracks' orbits (1 ~ 2Pi).
101   Float_t                  fMinAng;  // Minimal angular step between two helix points.
102   Float_t                  fDelta;   // Maximal error at the mid-point of the line connecting to helix points.
103
104   Bool_t                   fFitDaughters;   
105   Bool_t                   fFitDecay;   
106
107   TrackRnrStyle();
108
109   void    SetColor(Color_t c) { fColor = c; }
110   Color_t GetColor() const    { return fColor; }
111
112   Float_t GetMagField() const     { return fMagField; }
113   void    SetMagField(Float_t mf) { fMagField = mf; }
114
115   static Float_t       fgDefMagField;
116   static const Float_t fgkB2C;
117   static TrackRnrStyle fgDefStyle;
118
119   ClassDef(TrackRnrStyle, 1);
120 }; // endclass TrackRnrStyle
121
122
123 /**************************************************************************/
124 // TrackList
125 /**************************************************************************/
126
127 class TrackList : public RenderElementListBase,
128                   public TPolyMarker3D
129 {
130   TrackList(const TrackList&);            // Not implemented
131   TrackList& operator=(const TrackList&); // Not implemented
132
133 private:
134   void  Init();
135
136 protected:
137   TString              fTitle;
138
139   TrackRnrStyle*       fRnrStyle;
140
141   Bool_t               fRnrMarkers;
142   Bool_t               fRnrTracks;
143
144 public:
145   TrackList(Int_t n_tracks=0, TrackRnrStyle* rs=0);
146   TrackList(const Text_t* name, Int_t n_tracks=0, TrackRnrStyle* rs=0);
147
148   void Reset(Int_t n_tracks=0);
149
150   virtual const Text_t* GetTitle() const { return fTitle; }
151   virtual void SetTitle(const Text_t* t) { fTitle = t; }
152
153   virtual Bool_t CanEditMainColor()  { return kTRUE; }
154
155   virtual void Paint(Option_t* option="");
156
157   virtual void AddElement(RenderElement* el);
158
159   void  SetRnrStyle(TrackRnrStyle* rst) { fRnrStyle= rst; }
160   TrackRnrStyle* GetRnrStyle()          { return fRnrStyle; } 
161
162   Bool_t GetRnrTracks() const { return fRnrTracks; }
163   void   SetRnrTracks(Bool_t);
164
165   Bool_t GetRnrMarkers() const { return fRnrMarkers; }
166   void   SetRnrMarkers(Bool_t);
167
168   void   MakeTracks();
169   void   MakeMarkers();
170
171   Float_t GetMaxR()         const { return fRnrStyle->fMaxZ; }
172   Float_t GetMaxZ()         const { return fRnrStyle->fMaxR; }
173   Float_t GetMaxOrbs()      const { return fRnrStyle->fMaxOrbs; }
174   Float_t GetMinAng()       const { return fRnrStyle->fMinAng; }
175   Float_t GetDelta()        const { return fRnrStyle->fDelta; }
176   Bool_t  GetFitDaughters() const { return fRnrStyle->fFitDaughters; }
177   Bool_t  GetFitDecay()     const { return fRnrStyle->fFitDecay; }
178
179   void SetMaxR(Float_t x);
180   void SetMaxZ(Float_t x);
181   void SetMaxOrbs(Float_t x);
182   void SetMinAng(Float_t x);
183   void SetDelta(Float_t x);
184   void SetFitDaughters(Bool_t x);
185   void SetFitDecay(Bool_t x);
186
187
188   // void  UpdateBounds();
189   Int_t   GetNTracks() { return fN; }
190
191   void SelectByPt(Float_t min_pt=0.2, Float_t max_pt=10); // *MENU*
192
193   //--------------------------------
194
195   void ImportHits();     // *MENU*
196   void ImportClusters(); // *MENU*
197
198   ClassDef(TrackList, 1);
199 };
200
201
202 } // namespace Reve
203
204 #endif