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