]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/Track.h
Separate import of standard macros into a special function so that
[u/mrichter/AliRoot.git] / EVE / Reve / Track.h
CommitLineData
5a5a1232 1#ifndef REVE_Track_H
2#define REVE_Track_H
3
37b09b91 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
5a5a1232 11#include <Reve/PODs.h>
12#include <Reve/RenderElement.h>
eadaa89b 13#include <Reve/Line.h>
5a5a1232 14
15#include <TPolyMarker3D.h>
32e219c2 16#include <TMarker.h>
3010c308 17#include <TQObject.h>
5a5a1232 18
19namespace Reve {
20
21class TrackRnrStyle;
22class TrackList;
23
32e219c2 24class Track : public Line,
25 public TQObject
5a5a1232 26{
32e219c2 27 friend class TrackRnrStyle;
5a5a1232 28 friend class TrackList;
9c39ede9 29 friend class TrackCounter;
915b2ab7 30 friend class TrackGL;
5a5a1232 31
a525aa60 32public:
265ecb21 33 typedef std::vector<Reve::PathMark*> vpPathMark_t;
34 typedef std::vector<Reve::PathMark*>::iterator vpPathMark_i;
32e219c2 35
a525aa60 36protected:
265ecb21 37 Reve::Vector fV;
38 Reve::Vector fP;
39 Double_t fBeta;
40 Int_t fCharge;
41 Int_t fLabel;
fa446a68 42 Int_t fIndex;
265ecb21 43 vpPathMark_t fPathMarks;
5a5a1232 44
32e219c2 45 TrackRnrStyle* fRnrStyle;
5a5a1232 46
dd2b04ce 47public:
5a5a1232 48 Track();
3d75306d 49 Track(TParticle* t, Int_t label, TrackRnrStyle* rs);
5a5a1232 50 Track(Reve::MCTrack* t, TrackRnrStyle* rs);
51 Track(Reve::RecTrack* t, TrackRnrStyle* rs);
5a5a1232 52 virtual ~Track();
53
32e219c2 54 Track(const Track& t);
55 virtual void SetTrackParams(const Track& t);
2b801b28 56 virtual void SetPathMarks (const Track& t);
32e219c2 57
58 virtual void MakeTrack(Bool_t recurse=kTRUE);
5a5a1232 59
48dc973d 60 TrackRnrStyle* GetRnrStyle() const { return fRnrStyle; }
32e219c2 61 void SetRnrStyle(TrackRnrStyle* rs);
62 void SetAttLineAttMarker(TrackList* tl);
5a5a1232 63
fa446a68 64 Int_t GetLabel() const { return fLabel; }
65 void SetLabel(Int_t lbl) { fLabel = lbl; }
66 Int_t GetIndex() const { return fIndex; }
67 void SetIndex(Int_t idx) { fIndex = idx; }
68
2b801b28 69 void AddPathMark(Reve::PathMark* pm) { fPathMarks.push_back(pm); }
70 vpPathMark_t& GetPathMarksRef() { return fPathMarks; }
71 const vpPathMark_t& GetPathMarksRef() const { return fPathMarks; }
72 void SortPathMarksByTime();
dd2b04ce 73
48dc973d 74 //--------------------------------
75
fa446a68 76 void ImportHits(); // *MENU*
77 void ImportClusters(); // *MENU*
dd2b04ce 78 void ImportClustersFromIndex(); // *MENU*
b8879e69 79 void ImportKine(); // *MENU*
80 void ImportKineWithArgs(Bool_t importMother=kTRUE,
81 Bool_t impDaugters =kTRUE); // *MENU*
b1f08706 82 void PrintKineStack(); // *MENU*
a525aa60 83 void PrintPathMarks(); // *MENU*
48dc973d 84
9c39ede9 85 //--------------------------------
86
32e219c2 87 virtual void CtrlClicked(Reve::Track*); // *SIGNAL*
88 virtual void SetLineStyle(Style_t lstyle);
89
90 virtual const TGPicture* GetListTreeIcon() { return fgListTreeIcons[4]; };
91
92 virtual TClass* ProjectedClass() const;
9c39ede9 93
5a5a1232 94 ClassDef(Track, 1);
95}; // endclass Track
96
97
98/**************************************************************************/
99// TrackRnrStyle
100/**************************************************************************/
101
102// This is decoupled from Track/TrackList to allow sharing of the
103// RnrStyle among several instances. The interface is half cooked and
104// there is no good way to set RnrStyle after the object has been
105// created (shouldn't be too hard to fix).
106//
107// TrackList has Get/Set methods for RnrStlye and
108// TrackListEditor provides editor access to them.
109
32e219c2 110class TrackRnrStyle : public TObject,
111 public ReferenceBackPtr
5a5a1232 112{
32e219c2 113private:
114 void RebuildTracks();
115
5a5a1232 116public:
dd2b04ce 117 Float_t fMagField;
5a5a1232 118 // track limits
dd2b04ce 119 Float_t fMaxR;
120 Float_t fMaxZ;
121 // helix limits
5a5a1232 122 Float_t fMaxOrbs; // Maximal angular path of tracks' orbits (1 ~ 2Pi).
123 Float_t fMinAng; // Minimal angular step between two helix points.
124 Float_t fDelta; // Maximal error at the mid-point of the line connecting to helix points.
125
32e219c2 126 Bool_t fEditPathMarks;
127 TMarker fPMAtt;
915b2ab7 128
dd2b04ce 129 Bool_t fFitDaughters;
130 Bool_t fFitReferences;
131 Bool_t fFitDecay;
5a5a1232 132
915b2ab7 133 Bool_t fRnrDaughters;
134 Bool_t fRnrReferences;
135 Bool_t fRnrDecay;
32e219c2 136
137 Bool_t fRnrFV; // first vertex
138 TMarker fFVAtt;
915b2ab7 139
265ecb21 140 TrackRnrStyle();
5a5a1232 141
32e219c2 142 // callbacks
143 void SetEditPathMarks(Bool_t x) { fEditPathMarks = x; }
144 void SetRnrDaughters(Bool_t x);
145 void SetRnrReferences(Bool_t x);
146 void SetRnrDecay(Bool_t x);
147
148 void SetRnrFV(Bool_t x){ fRnrFV = x;}
149
150 void SetFitDaughters(Bool_t x);
151 void SetFitReferences(Bool_t x);
152 void SetFitDecay(Bool_t x);
153
154 void SetMaxR(Float_t x);
155 void SetMaxZ(Float_t x);
156 void SetMaxOrbs(Float_t x);
157 void SetMinAng(Float_t x);
158 void SetDelta(Float_t x);
5a5a1232 159
48dc973d 160 Float_t GetMagField() const { return fMagField; }
161 void SetMagField(Float_t mf) { fMagField = mf; }
162
163 static Float_t fgDefMagField;
164 static const Float_t fgkB2C;
5a5a1232 165 static TrackRnrStyle fgDefStyle;
166
167 ClassDef(TrackRnrStyle, 1);
168}; // endclass TrackRnrStyle
169
170
171/**************************************************************************/
172// TrackList
173/**************************************************************************/
174
32e219c2 175class TrackList : public RenderElementList,
176 public NLTProjectable,
177 public TAttMarker,
178 public TAttLine
5a5a1232 179{
32e219c2 180 friend class TrackListEditor;
265ecb21 181
5a5a1232 182private:
32e219c2 183 TrackList(const TrackList&); // Not implemented
184 TrackList& operator=(const TrackList&); // Not implemented
185 Bool_t fRecurse;
5a5a1232 186
187protected:
a8600b56 188 TrackRnrStyle* fRnrStyle;
5a5a1232 189
32e219c2 190 Bool_t fRnrLine;
191 Bool_t fRnrPoints;
915b2ab7 192
32e219c2 193 Float_t fMinPt;
194 Float_t fMaxPt;
195 Float_t fLimPt;
196 Float_t fMinP;
197 Float_t fMaxP;
198 Float_t fLimP;
915b2ab7 199
32e219c2 200 Float_t RoundMomentumLimit(Float_t x);
915b2ab7 201
32e219c2 202public:
203 TrackList(TrackRnrStyle* rs=0);
204 TrackList(const Text_t* name, TrackRnrStyle* rs=0);
205 virtual ~TrackList();
915b2ab7 206
32e219c2 207 void MakeTracks(Bool_t recurse=kTRUE);
208 void FindMomentumLimits(RenderElement* el, Bool_t recurse);
5a5a1232 209
32e219c2 210 void SetRnrStyle(TrackRnrStyle* rs);
211 TrackRnrStyle* GetRnrStyle(){return fRnrStyle;}
5a5a1232 212
32e219c2 213 //--------------------------------
5a5a1232 214
32e219c2 215 virtual void SetMainColor(Color_t c);
216 virtual void SetLineColor(Color_t c){SetMainColor(c);}
217 virtual void SetLineColor(Color_t c, RenderElement* el);
218 virtual void SetLineWidth(Width_t w);
219 virtual void SetLineWidth(Width_t w, RenderElement* el);
220 virtual void SetLineStyle(Style_t s);
221 virtual void SetLineStyle(Style_t s, RenderElement* el);
222
223 virtual void SetMarkerColor(Color_t c);
224 virtual void SetMarkerColor(Color_t c, RenderElement* el);
225 virtual void SetMarkerSize(Size_t s);
226 virtual void SetMarkerSize(Size_t s, RenderElement* el);
227 virtual void SetMarkerStyle(Style_t s);
228 virtual void SetMarkerStyle(Style_t s, RenderElement* el);
229
230 void SetRnrLine(Bool_t rnr);
231 void SetRnrLine(Bool_t rnr, RenderElement* el);
232 Bool_t GetRnrLine(){return fRnrLine;}
233
234 void SetRnrPoints(Bool_t r);
235 void SetRnrPoints(Bool_t r, RenderElement* el);
236 Bool_t GetRnrPoints(){return fRnrPoints;}
237
238 void SelectByPt(Float_t min_pt, Float_t max_pt);
239 void SelectByPt(Float_t min_pt, Float_t max_pt, RenderElement* el);
240 void SelectByP (Float_t min_p, Float_t max_p);
241 void SelectByP (Float_t min_p, Float_t max_p, RenderElement* el);
5a5a1232 242
b99aed53 243 //--------------------------------
244
245 void ImportHits(); // *MENU*
246 void ImportClusters(); // *MENU*
5a5a1232 247
32e219c2 248 virtual TClass* ProjectedClass() const;
249
5a5a1232 250 ClassDef(TrackList, 1);
251};
252
9c39ede9 253/**************************************************************************/
254// TrackCounter
255/**************************************************************************/
256
257class TrackCounter : public RenderElement, public TNamed
258{
259 friend class TrackCounterEditor;
260
261public:
262 enum ClickAction_e { CA_PrintTrackInfo, CA_ToggleTrack };
263
264private:
265 TrackCounter(const TrackCounter&); // Not implemented
266 TrackCounter& operator=(const TrackCounter&); // Not implemented
267
268protected:
269 Int_t fBadLineStyle;
270 Int_t fClickAction;
271
7af62191 272 Int_t fEventId;
273
9c39ede9 274 Int_t fAllTracks;
275 Int_t fGoodTracks;
276
277 TList fTrackLists;
278
279public:
280 TrackCounter(const Text_t* name="TrackCounter", const Text_t* title="");
281 virtual ~TrackCounter();
282
7af62191 283 Int_t GetEventId() const { return fEventId; }
284 void SetEventId(Int_t id) { fEventId = id; }
285
9c39ede9 286 void Reset();
287
288 void RegisterTracks(TrackList* tlist, Bool_t goodTracks);
289
290 void DoTrackAction(Track* track);
291
292 Int_t GetClickAction() const { return fClickAction; }
293 void SetClickAction(Int_t a) { fClickAction = a; }
294
7af62191 295 void OutputEventTracks(FILE* out=0);
296
b1f08706 297 static TrackCounter* fgInstance;
298
9c39ede9 299 ClassDef(TrackCounter, 1);
300}; // endclass TrackCounter
301
5a5a1232 302
303} // namespace Reve
304
305#endif