3 #include "TrackEditors.h"
4 #include <Reve/Track.h>
6 #include <Reve/RGValuators.h>
8 #include <TVirtualPad.h>
13 #include <TGNumberEntry.h>
14 #include <TGColorSelect.h>
15 #include <TGDoubleSlider.h>
19 //______________________________________________________________________
23 ClassImp(TrackListEditor)
25 TrackListEditor::TrackListEditor(const TGWindow *p,
26 Int_t width, Int_t height,
27 UInt_t options, Pixel_t back) :
28 TGedFrame(p, width, height, options | kVerticalFrame, back),
46 MakeTitle("TrackList");
51 TGHorizontalFrame* f = new TGHorizontalFrame(this);
52 TGLabel *l = new TGLabel(f, "Max R:");
53 f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 25, 2, 1, 1));
54 fMaxR = new TGNumberEntry(f, 0., 6, -1,
55 TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,
56 TGNumberFormat::kNELLimitMinMax, 0.1, 2000.0);
57 fMaxR->GetNumberEntry()->SetToolTipText("Maximum radius to which the tracks will be drawn.");
58 f->AddFrame(fMaxR, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
60 fMaxR->Connect("ValueSet(Long_t)", "Reve::TrackListEditor", this, "DoMaxR()");
61 AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
65 TGHorizontalFrame* f = new TGHorizontalFrame(this);
66 TGLabel *l = new TGLabel(f, "Max Z:");
67 f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 24, 2, 1, 1));
68 fMaxZ = new TGNumberEntry(f, 0., 6, -1,
69 TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,
70 TGNumberFormat::kNELLimitMinMax, 0.1, 2000.0);
71 fMaxZ->GetNumberEntry()->SetToolTipText("Maximum z-coordinate to which the tracks will be drawn.");
72 f->AddFrame(fMaxZ, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
74 fMaxZ->Connect("ValueSet(Long_t)", "Reve::TrackListEditor", this, "DoMaxZ()");
75 AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
79 TGHorizontalFrame* f = new TGHorizontalFrame(this);
80 TGLabel *l = new TGLabel(f, "Max Orbits:");
81 f->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsCenterY, 0, 2, 1, 1));
82 fMaxOrbits = new TGNumberEntry(f, 0., 6, -1,
83 TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,
84 TGNumberFormat::kNELLimitMinMax, 0.1, 100.0);
85 fMaxOrbits->GetNumberEntry()->SetToolTipText("Maximal angular path of tracks' orbits (1 ~ 2Pi).");
86 f->AddFrame(fMaxOrbits, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
87 fMaxOrbits->Associate(f);
88 fMaxOrbits->Connect("ValueSet(Long_t)", "Reve::TrackListEditor", this, "DoMaxOrbits()");
89 AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
93 TGHorizontalFrame* f = new TGHorizontalFrame(this);
94 TGLabel *l = new TGLabel(f, "Min Angle:");
95 f->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsCenterY, 3, 2, 1, 1));
96 fMinAng = new TGNumberEntry(f, 0., 6, -1,
97 TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,
98 TGNumberFormat::kNELLimitMinMax, 1, 180.0);
99 fMinAng->GetNumberEntry()->SetToolTipText("Minimal angular step between two helix points.");
100 f->AddFrame(fMinAng, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
101 fMinAng->Associate(f);
102 fMinAng->Connect("ValueSet(Long_t)", "Reve::TrackListEditor", this, "DoMinAng()");
103 AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
107 TGHorizontalFrame* f = new TGHorizontalFrame(this);
108 TGLabel *l = new TGLabel(f, "Delta:");
109 f->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsCenterY, 32, 2, 1, 1));
110 fDelta = new TGNumberEntry(f, 0., 6, -1,
111 TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,
112 TGNumberFormat::kNELLimitMinMax, 0.001, 100.0);
113 fDelta->GetNumberEntry()->SetToolTipText("Maximal error at the mid-point of the line connecting to helix points.");
114 f->AddFrame(fDelta, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
115 fDelta->Associate(f);
116 fDelta->Connect("ValueSet(Long_t)", "Reve::TrackListEditor", this, "DoDelta()");
117 AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
120 // --- Rendering control
122 fRnrTracks = new TGCheckButton(this, "Render tracks");
123 AddFrame(fRnrTracks, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
126 "Reve::TrackListEditor", this, "DoRnrTracks()");
128 fRnrMarkers = new TGCheckButton(this, "Render markers");
129 AddFrame(fRnrMarkers, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
132 "Reve::TrackListEditor", this, "DoRnrMarkers()");
134 // --- Kinematics fitting
136 fFitDaughters = new TGCheckButton(this, "Fit daughters");
137 AddFrame(fFitDaughters, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
138 fFitDaughters->Connect("Toggled(Bool_t)","Reve::TrackListEditor", this, "DoFitDaughters()");
140 fFitDecay = new TGCheckButton(this, "Fit decay");
141 AddFrame(fFitDecay, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
142 fFitDecay->Connect("Toggled(Bool_t)","Reve::TrackListEditor", this, "DoFitDecay()");
146 fPtRange = new RGDoubleValuator(this,"Pt Range", 200, 0);
147 fPtRange->SetNELength(6);
149 fPtRange->GetSlider()->SetWidth(224);
150 fPtRange->SetLimits(0.1, 10, TGNumberFormat::kNESRealTwo);
151 fPtRange->Connect("ValueSet()",
152 "Reve::TrackListEditor", this, "DoPtRange()");
153 AddFrame(fPtRange, new TGLayoutHints(kLHintsTop, 1, 1, 2, 1));
156 TrackListEditor::~TrackListEditor()
159 /**************************************************************************/
161 void TrackListEditor::SetModel(TObject* obj)
163 fTC = dynamic_cast<TrackList*>(obj);
165 fMaxR->SetNumber(fTC->GetMaxR());
166 fMaxZ->SetNumber(fTC->GetMaxZ());
167 fMaxOrbits->SetNumber(fTC->GetMaxOrbs());
168 fMinAng->SetNumber(fTC->GetMinAng());
169 fDelta->SetNumber(fTC->GetDelta());
171 fRnrTracks->SetState(fTC->GetRnrTracks() ? kButtonDown : kButtonUp);
172 fRnrMarkers->SetState(fTC->GetRnrMarkers() ? kButtonDown : kButtonUp);
174 fFitDaughters->SetState(fTC->GetFitDaughters() ? kButtonDown : kButtonUp);
175 fFitDecay->SetState(fTC->GetFitDecay() ? kButtonDown : kButtonUp);
177 fPtRange->SetValues(0.1, 10);
180 /**************************************************************************/
182 void TrackListEditor::DoMaxR()
184 Double_t maxr = fMaxR->GetNumber();
189 void TrackListEditor::DoMaxZ()
191 fTC->SetMaxZ(fMaxZ->GetNumber());
195 void TrackListEditor::DoMaxOrbits()
197 fTC->SetMaxOrbs(fMaxOrbits->GetNumber());
201 void TrackListEditor::DoMinAng()
203 fTC->SetMinAng(fMinAng->GetNumber());
207 void TrackListEditor::DoDelta()
209 fTC->SetDelta(fDelta->GetNumber());
213 /**************************************************************************/
215 void TrackListEditor::DoRnrTracks()
217 fTC->SetRnrTracks(fRnrTracks->IsOn());
221 void TrackListEditor::DoRnrMarkers()
223 fTC->SetRnrMarkers(fRnrMarkers->IsOn());
227 /**************************************************************************/
229 void TrackListEditor::DoFitDaughters()
231 fTC->SetFitDaughters(fFitDaughters->IsOn());
235 void TrackListEditor::DoFitDecay()
237 fTC->SetFitDecay(fFitDecay->IsOn());
241 /**************************************************************************/
243 void TrackListEditor::DoPtRange()
245 fTC->SelectByPt(fPtRange->GetMin(), fPtRange->GetMax());