TrackRnrStyle: add pt-range memebers.
[u/mrichter/AliRoot.git] / EVE / Reve / Track.h
1 #ifndef REVE_Track_H
2 #define REVE_Track_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 #include <vector>
10
11 #include <Reve/PODs.h>
12 #include <Reve/RenderElement.h>
13 #include <Reve/Line.h>
14
15 #include <TPolyMarker3D.h>
16 #include <TQObject.h>
17
18 namespace Reve {
19
20 class TrackRnrStyle;
21 class TrackList;
22
23 class Track : public Line, public TQObject
24 {
25   friend class TrackList;
26   friend class TrackCounter;
27   friend class TrackGL;
28
29   Track(const Track&);            // Not implemented
30   Track& operator=(const Track&); // Not implemented
31
32 public:
33   typedef std::vector<Reve::PathMark*>           vpPathMark_t;
34   typedef std::vector<Reve::PathMark*>::iterator vpPathMark_i;
35 protected:
36   Reve::Vector      fV;
37   Reve::Vector      fP;
38   Double_t          fBeta;
39   Int_t             fCharge;
40   Int_t             fLabel;
41   Int_t             fIndex;
42   vpPathMark_t      fPathMarks;
43
44   TrackRnrStyle*    fRnrStyle;
45
46 public: 
47   Track();
48   Track(TParticle* t, Int_t label, TrackRnrStyle* rs);
49   Track(Reve::MCTrack*  t, TrackRnrStyle* rs);
50   Track(Reve::RecTrack* t, TrackRnrStyle* rs);
51   virtual ~Track();
52
53   void MakeTrack();
54
55   TrackRnrStyle* GetRnrStyle() const  { return fRnrStyle; }
56   void SetRnrStyle(TrackRnrStyle* rs) { fRnrStyle = rs; }
57
58   Int_t GetLabel() const    { return fLabel; }
59   void  SetLabel(Int_t lbl) { fLabel = lbl;  }
60   Int_t GetIndex() const    { return fIndex; }
61   void  SetIndex(Int_t idx) { fIndex = idx;  }
62
63   void  AddPathMark(Reve::PathMark* pm) { fPathMarks.push_back(pm); }
64
65   //--------------------------------
66
67   void ImportHits();              // *MENU*
68   void ImportClusters();          // *MENU*
69   void ImportClustersFromIndex(); // *MENU*  
70   void ImportDaughters();         // *MENU*
71   void PrintKineStack();          // *MENU*
72   void PrintPathMarks();          // *MENU*
73
74   //--------------------------------
75
76   void CtrlClicked(Reve::Track*); // *SIGNAL*
77
78   ClassDef(Track, 1);
79 }; // endclass Track
80
81
82 /**************************************************************************/
83 // TrackRnrStyle
84 /**************************************************************************/
85
86 // This is decoupled from Track/TrackList to allow sharing of the
87 // RnrStyle among several instances. The interface is half cooked and
88 // there is no good way to set RnrStyle after the object has been
89 // created (shouldn't be too hard to fix).
90 //
91 // TrackList has Get/Set methods for RnrStlye and
92 // TrackListEditor provides editor access to them.
93
94 class TrackRnrStyle : public TObject
95 {
96 public:
97   Color_t                  fColor;
98   Width_t                  fWidth;
99   Float_t                  fMagField;  
100   // track limits
101   Float_t                  fMaxR;       
102   Float_t                  fMaxZ;       
103   // helix limits 
104   Float_t                  fMaxOrbs; // Maximal angular path of tracks' orbits (1 ~ 2Pi).
105   Float_t                  fMinAng;  // Minimal angular step between two helix points.
106   Float_t                  fDelta;   // Maximal error at the mid-point of the line connecting to helix points.
107
108   Float_t                  fMinPt;
109   Float_t                  fMaxPt;
110
111   Color_t                  fPMColor;
112   Style_t                  fPMStyle;
113   Size_t                   fPMSize;
114
115   Bool_t                   fFitDaughters;   
116   Bool_t                   fFitReferences;   
117   Bool_t                   fFitDecay;   
118
119   Bool_t                   fRnrDaughters;
120   Bool_t                   fRnrReferences;
121   Bool_t                   fRnrDecay;
122
123   TrackRnrStyle();
124
125   void    SetColor(Color_t c) { fColor = c; }
126   Color_t GetColor() const    { return fColor; }
127
128   Float_t GetMagField() const     { return fMagField; }
129   void    SetMagField(Float_t mf) { fMagField = mf; }
130
131   static Float_t       fgDefMagField;
132   static const Float_t fgkB2C;
133   static TrackRnrStyle fgDefStyle;
134
135   ClassDef(TrackRnrStyle, 1);
136 }; // endclass TrackRnrStyle
137
138
139 /**************************************************************************/
140 // TrackList
141 /**************************************************************************/
142
143 class TrackList : public RenderElementListBase,
144                   public TPolyMarker3D
145 {
146   TrackList(const TrackList&);            // Not implemented
147   TrackList& operator=(const TrackList&); // Not implemented
148
149 private:
150   void  Init();
151
152 protected:
153   TString              fTitle;
154
155   TrackRnrStyle*       fRnrStyle;
156
157   Bool_t               fRnrMarkers;
158   Bool_t               fRnrTracks;
159   Bool_t               fEditPathMarks;
160
161 public:
162   TrackList(Int_t n_tracks=0, TrackRnrStyle* rs=0);
163   TrackList(const Text_t* name, Int_t n_tracks=0, TrackRnrStyle* rs=0);
164
165   void Reset(Int_t n_tracks=0);
166
167   virtual const Text_t* GetTitle() const  { return fTitle; }
168   virtual void  SetTitle(const Text_t* t) { fTitle = t; }
169
170   virtual Bool_t CanEditMainColor()  { return kTRUE; }
171
172   virtual void Paint(Option_t* option="");
173
174   virtual void AddElement(RenderElement* el);
175
176   virtual void SetMarkerColor(Color_t c) {TAttMarker::SetMarkerColor(c); if(fRnrStyle) fRnrStyle->fPMColor =c;}
177   virtual void SetMarkerStyle(Style_t s){TAttMarker::SetMarkerStyle(s); if(fRnrStyle) fRnrStyle->fPMStyle = s;}
178   virtual void SetMarkerSize(Size_t s){TAttMarker::SetMarkerSize(s); if(fRnrStyle) fRnrStyle->fPMSize = s;}
179
180   TrackRnrStyle* GetRnrStyle()           { fRnrStyle->fPMColor = GetMarkerColor();fRnrStyle->fPMStyle = GetMarkerStyle();fRnrStyle->fPMSize = GetMarkerSize(); return fRnrStyle;  } 
181   void   SetRnrStyle(TrackRnrStyle* rst) { fRnrStyle= rst; }
182
183   Bool_t GetEditPathMarks() const   { return fEditPathMarks; }
184   void   SetEditPathMarks(Bool_t x) { fEditPathMarks = x; }
185
186   Bool_t GetRnrTracks() const { return fRnrTracks; }
187   void   SetRnrTracks(Bool_t);
188
189   Bool_t GetRnrDaughters()  const { return fRnrStyle->fRnrDaughters; }
190   Bool_t GetRnrReferences() const { return fRnrStyle->fRnrReferences; }
191   Bool_t GetRnrDecay()      const { return fRnrStyle->fRnrDecay; }
192
193   void   SetRnrDaughters(Bool_t x);
194   void   SetRnrReferences(Bool_t x);
195   void   SetRnrDecay(Bool_t x);
196
197   Bool_t GetRnrMarkers() const { return fRnrMarkers; }
198   void   SetRnrMarkers(Bool_t);
199
200   void   MakeTracks();
201   void   MakeMarkers();
202
203   Width_t GetWidth() const { return fRnrStyle->fWidth; }
204   void  SetWidth(Width_t w);
205
206   Float_t GetMaxR()         const { return fRnrStyle->fMaxZ; }
207   Float_t GetMaxZ()         const { return fRnrStyle->fMaxR; }
208   Float_t GetMaxOrbs()      const { return fRnrStyle->fMaxOrbs; }
209   Float_t GetMinAng()       const { return fRnrStyle->fMinAng; }
210   Float_t GetDelta()        const { return fRnrStyle->fDelta; }
211   
212   Float_t GetMinPt()        const { return fRnrStyle->fMinPt; }
213   Float_t GetMaxPt()        const { return fRnrStyle->fMaxPt; }
214
215   Bool_t  GetFitDaughters()  const { return fRnrStyle->fFitDaughters; }
216   Bool_t  GetFitReferences() const { return fRnrStyle->fFitReferences; }
217   Bool_t  GetFitDecay()      const { return fRnrStyle->fFitDecay; }
218
219   void SetFitDaughters(Bool_t x);
220   void SetFitReferences(Bool_t x);
221   void SetFitDecay(Bool_t x);
222
223   void SetMaxR(Float_t x);
224   void SetMaxZ(Float_t x);
225   void SetMaxOrbs(Float_t x);
226   void SetMinAng(Float_t x);
227   void SetDelta(Float_t x);
228
229   // void  UpdateBounds();
230   Int_t   GetNTracks() { return fN; }
231
232   void SelectByPt(Float_t min_pt=0.2, Float_t max_pt=10); // *MENU*
233
234   //--------------------------------
235
236   void ImportHits();     // *MENU*
237   void ImportClusters(); // *MENU*
238
239   ClassDef(TrackList, 1);
240 };
241
242 /**************************************************************************/
243 // TrackCounter
244 /**************************************************************************/
245
246 class TrackCounter : public RenderElement, public TNamed
247 {
248   friend class TrackCounterEditor;
249
250 public:
251   enum ClickAction_e { CA_PrintTrackInfo, CA_ToggleTrack };
252
253 private:
254   TrackCounter(const TrackCounter&);            // Not implemented
255   TrackCounter& operator=(const TrackCounter&); // Not implemented
256
257 protected:
258   Int_t fBadLineStyle;
259   Int_t fClickAction;
260
261   Int_t fEventId;
262
263   Int_t fAllTracks;
264   Int_t fGoodTracks;
265
266   TList fTrackLists;
267
268 public:
269   TrackCounter(const Text_t* name="TrackCounter", const Text_t* title="");
270   virtual ~TrackCounter();
271
272   Int_t GetEventId() const { return fEventId; }
273   void  SetEventId(Int_t id) { fEventId = id; }
274
275   void Reset();
276
277   void RegisterTracks(TrackList* tlist, Bool_t goodTracks);
278
279   void DoTrackAction(Track* track);
280
281   Int_t GetClickAction() const  { return fClickAction; }
282   void  SetClickAction(Int_t a) { fClickAction = a; }
283
284   void OutputEventTracks(FILE* out=0);
285
286   static TrackCounter* fgInstance;
287
288   ClassDef(TrackCounter, 1);
289 }; // endclass TrackCounter
290
291
292 } // namespace Reve
293
294 #endif