7 #include <Reve/RenderElement.h>
10 #include <TPolyMarker3D.h>
11 // #include <TPolyLine3D.h>
18 class Track : public Line, public TQObject
20 friend class TrackList;
21 friend class TrackCounter;
23 Track(const Track&); // Not implemented
24 Track& operator=(const Track&); // Not implemented
27 typedef std::vector<Reve::PathMark*> vpPathMark_t;
28 typedef std::vector<Reve::PathMark*>::iterator vpPathMark_i;
36 vpPathMark_t fPathMarks;
38 TrackRnrStyle* fRnrStyle;
42 Track(TParticle* t, Int_t label, TrackRnrStyle* rs);
43 Track(Reve::MCTrack* t, TrackRnrStyle* rs);
44 Track(Reve::RecTrack* t, TrackRnrStyle* rs);
49 TrackRnrStyle* GetRnrStyle() const { return fRnrStyle; }
50 void SetRnrStyle(TrackRnrStyle* rs) { fRnrStyle = rs; }
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; }
57 void AddPathMark(Reve::PathMark* pm) { fPathMarks.push_back(pm); }
59 //--------------------------------
61 void ImportHits(); // *MENU*
62 void ImportClusters(); // *MENU*
63 void ImportClustersFromIndex(); // *MENU*
64 void PrintKineStack(); // *MENU*
66 //--------------------------------
68 void CtrlClicked(Reve::Track*); // *SIGNAL*
74 /**************************************************************************/
76 /**************************************************************************/
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).
83 // TrackList has Get/Set methods for RnrStlye and
84 // TrackListEditor provides editor access to them.
86 class TrackRnrStyle : public TObject
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.
100 Bool_t fFitDaughters;
105 void SetColor(Color_t c) { fColor = c; }
106 Color_t GetColor() const { return fColor; }
108 Float_t GetMagField() const { return fMagField; }
109 void SetMagField(Float_t mf) { fMagField = mf; }
111 static Float_t fgDefMagField;
112 static const Float_t fgkB2C;
113 static TrackRnrStyle fgDefStyle;
115 ClassDef(TrackRnrStyle, 1);
116 }; // endclass TrackRnrStyle
119 /**************************************************************************/
121 /**************************************************************************/
123 class TrackList : public RenderElementListBase,
126 TrackList(const TrackList&); // Not implemented
127 TrackList& operator=(const TrackList&); // Not implemented
135 TrackRnrStyle* fRnrStyle;
141 TrackList(Int_t n_tracks=0, TrackRnrStyle* rs=0);
142 TrackList(const Text_t* name, Int_t n_tracks=0, TrackRnrStyle* rs=0);
144 void Reset(Int_t n_tracks=0);
146 virtual const Text_t* GetTitle() const { return fTitle; }
147 virtual void SetTitle(const Text_t* t) { fTitle = t; }
149 virtual Bool_t CanEditMainColor() { return kTRUE; }
151 virtual void Paint(Option_t* option="");
153 virtual void AddElement(RenderElement* el);
155 void SetRnrStyle(TrackRnrStyle* rst) { fRnrStyle= rst; }
156 TrackRnrStyle* GetRnrStyle() { return fRnrStyle; }
158 Bool_t GetRnrTracks() const { return fRnrTracks; }
159 void SetRnrTracks(Bool_t);
161 Bool_t GetRnrMarkers() const { return fRnrMarkers; }
162 void SetRnrMarkers(Bool_t);
167 Width_t GetWidth() const { return fRnrStyle->fWidth; }
168 void SetWidth(Width_t w);
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; }
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);
187 // void UpdateBounds();
188 Int_t GetNTracks() { return fN; }
190 void SelectByPt(Float_t min_pt=0.2, Float_t max_pt=10); // *MENU*
192 //--------------------------------
194 void ImportHits(); // *MENU*
195 void ImportClusters(); // *MENU*
197 ClassDef(TrackList, 1);
200 /**************************************************************************/
202 /**************************************************************************/
204 class TrackCounter : public RenderElement, public TNamed
206 friend class TrackCounterEditor;
209 enum ClickAction_e { CA_PrintTrackInfo, CA_ToggleTrack };
212 TrackCounter(const TrackCounter&); // Not implemented
213 TrackCounter& operator=(const TrackCounter&); // Not implemented
227 TrackCounter(const Text_t* name="TrackCounter", const Text_t* title="");
228 virtual ~TrackCounter();
230 Int_t GetEventId() const { return fEventId; }
231 void SetEventId(Int_t id) { fEventId = id; }
235 void RegisterTracks(TrackList* tlist, Bool_t goodTracks);
237 void DoTrackAction(Track* track);
239 Int_t GetClickAction() const { return fClickAction; }
240 void SetClickAction(Int_t a) { fClickAction = a; }
242 void OutputEventTracks(FILE* out=0);
244 static TrackCounter* fgInstance;
246 ClassDef(TrackCounter, 1);
247 }; // endclass TrackCounter