]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveBase/AliEveEventManagerEditor.cxx
- use base class for multidimensional objects
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveEventManagerEditor.cxx
CommitLineData
5655e9ce 1// @(#)root/eve:$Id$
2// Author: Matevz Tadel 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9
10#include "AliEveEventManagerEditor.h"
11#include "AliEveEventManager.h"
12
b3b7b8d3 13#include <AliESDEvent.h>
14
15#include <TVirtualPad.h>
5655e9ce 16#include "TColor.h"
17
319f3084 18#include <TEveGValuators.h>
19#include <TGButton.h>
20#include <TGTextView.h>
21#include <TGLabel.h>
5655e9ce 22
fa6aa785 23#include "Riostream.h"
24
5655e9ce 25//______________________________________________________________________________
26// GUI editor for AliEveEventManager.
27//
28
f65f2d99 29using std::ofstream;
30using std::ios;
5655e9ce 31ClassImp(AliEveEventManagerEditor)
32
33//______________________________________________________________________________
34AliEveEventManagerEditor::AliEveEventManagerEditor(const TGWindow *p, Int_t width, Int_t height,
80547f2d 35 UInt_t options, Pixel_t back) :
5655e9ce 36 TGedFrame(p, width, height, options | kVerticalFrame, back),
319f3084 37 fM(0),
fa6aa785 38 fDumpEventInfo(0),
319f3084 39 fEventInfo(0)
5655e9ce 40{
41 // Constructor.
42
43 MakeTitle("AliEveEventManager");
44
319f3084 45 {
46 TGHorizontalFrame* f = new TGHorizontalFrame(this);
fa6aa785 47 fDumpEventInfo = new TGTextButton(f, "Dump Event Info");
48 fDumpEventInfo->SetToolTipText("Append information about current event to event_info.txt file.");
49 fDumpEventInfo->SetWidth(120);
50 fDumpEventInfo->ChangeOptions(fDumpEventInfo->GetOptions() | kFixedWidth);
51 f->AddFrame(fDumpEventInfo, new TGLayoutHints(kLHintsNormal, 4,0,0,0));
52 fDumpEventInfo->Connect("Clicked()",
53 "AliEveEventManagerEditor", this, "DumpEventInfo()");
319f3084 54 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
55 }
319f3084 56 {
57 TGVerticalFrame* f = new TGVerticalFrame(this);
58
59 TGLabel *eventInfoLabel = new TGLabel(f, "Event Information:");
60 f->AddFrame(eventInfoLabel, new TGLayoutHints(kLHintsNormal, 0,0,6,2));
61
ec835ab5 62 fEventInfo = new TGTextView(f, 200, 300);
319f3084 63 f->AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
64
65 AddFrame(f, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
66 }
5655e9ce 67}
68
69/******************************************************************************/
70
80547f2d 71//______________________________________________________________________________
5655e9ce 72void AliEveEventManagerEditor::SetModel(TObject* obj)
73{
74 // Set model object.
75
04a6d27f 76 fM = static_cast<AliEveEventManager*>(obj);
5655e9ce 77
12365217 78 fEventInfo->LoadBuffer(fM->GetEventInfoVertical());
5655e9ce 79}
80
81/******************************************************************************/
82
319f3084 83//______________________________________________________________________________
fa6aa785 84void AliEveEventManagerEditor::DumpEventInfo()
319f3084 85{
fa6aa785 86 // Dump event-info into event_info.txt.
87 // The info is appended into the file.
88
89 ofstream f("event_info.txt", ios::out | ios::app);
90
91 f << "================================================================================\n\n";
92 f << fM->GetEventInfoHorizontal() << std::endl << std::endl;
ca49b003 93
fa6aa785 94 f.close();
ca49b003 95}
f76c9e9b 96
97
80547f2d 98//==============================================================================
f76c9e9b 99// AliEveEventManagerWindow
80547f2d 100//==============================================================================
f76c9e9b 101
102//______________________________________________________________________________
103//
104// Horizontal GUI for AliEveEventManager, to be placed in the
105// bottom part of ROOT browser.
106
107ClassImp(AliEveEventManagerWindow)
108
4d62585e 109AliEveEventManagerWindow::AliEveEventManagerWindow(AliEveEventManager* mgr) :
12365217 110 TGMainFrame(gClient->GetRoot(), 400, 100, kVerticalFrame),
4d62585e 111 fM (mgr),
80547f2d 112 fFirstEvent (0),
113 fPrevEvent (0),
114 fNextEvent (0),
115 fLastEvent (0),
116 fRefresh (0),
117 fEventId (0),
118 fInfoLabel (0),
119 fAutoLoad (0),
120 fAutoLoadTime (0),
969d3431 121 fTrigSel (0),
80547f2d 122 fEventInfo (0)
f76c9e9b 123{
124 // Constructor.
125
488869c1 126 const TString cls("AliEveEventManagerWindow");
80547f2d 127 TGTextButton *b = 0;
f76c9e9b 128 {
129 Int_t width = 50;
130
131 TGHorizontalFrame* f = new TGHorizontalFrame(this);
80547f2d 132 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 0,0,2,2));
133
134 fFirstEvent = b = MkTxtButton(f, "First", width);
135 b->Connect("Clicked()", cls, this, "DoFirstEvent()");
136 fPrevEvent = b = MkTxtButton(f, "Prev", width);
137 b->Connect("Clicked()", cls, this, "DoPrevEvent()");
f76c9e9b 138
139 fEventId = new TGNumberEntry(f, 0, 5, -1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
140 TGNumberFormat::kNELLimitMinMax, 0, 10000);
141 f->AddFrame(fEventId, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
80547f2d 142 fEventId->Connect("ValueSet(Long_t)", cls, this, "DoSetEvent()");
f76c9e9b 143 fInfoLabel = new TGLabel(f);
144 f->AddFrame(fInfoLabel, new TGLayoutHints(kLHintsNormal, 5, 10, 4, 0));
145
80547f2d 146 fNextEvent = b = MkTxtButton(f, "Next", width);
147 b->Connect("Clicked()", cls, this, "DoNextEvent()");
148 fLastEvent = b = MkTxtButton(f, "Last", width);
149 b->Connect("Clicked()", cls, this, "DoLastEvent()");
f76c9e9b 150
80547f2d 151 MkLabel(f, "||", 0, 8, 8);
152
153 fRefresh = b = MkTxtButton(f, "Refresh", width + 8);
154 b->Connect("Clicked()",cls, this, "DoRefresh()");
155
156 MkLabel(f, "||", 0, 8, 8);
157
158 fAutoLoad = new TGCheckButton(f, "Autoload");
159 f->AddFrame(fAutoLoad, new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
160 fAutoLoad->SetToolTipText("Automatic event loading.");
161 fAutoLoad->Connect("Toggled(Bool_t)", cls, this, "DoSetAutoLoad()");
162
163 fAutoLoadTime = new TEveGValuator(f, "Time: ", 110, 0);
ecb84424 164 f->AddFrame(fAutoLoadTime);
80547f2d 165 fAutoLoadTime->SetShowSlider(kFALSE);
166 fAutoLoadTime->SetNELength(4);
167 fAutoLoadTime->Build();
168 fAutoLoadTime->SetLimits(0, 1000);
169 fAutoLoadTime->SetToolTip("Automatic event loading time in seconds.");
170 fAutoLoadTime->Connect("ValueSet(Double_t)", cls, this, "DoSetAutoLoadTime()");
ecb84424 171
969d3431 172 fTrigSel = new TGComboBox(f);
173 fTrigSel->Resize(4*width,b->GetDefaultHeight());
174 fTrigSel->AddEntry("No trigger selection",-1);
175 fTrigSel->Select(-1,kFALSE);
176 f->AddFrame(fTrigSel, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
177 fTrigSel->Connect("Selected(char*)", cls, this, "DoSetTrigSel()");
12365217 178 }
179
80547f2d 180 fEventInfo = new TGTextView(this, 400, 600);
181 AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
182
4d62585e 183 fM->Connect("NewEventLoaded()", cls, this, "Update()");
f76c9e9b 184
185 SetCleanup(kDeepCleanup);
186 Layout();
187 MapSubwindows();
188 MapWindow();
189}
190
191//______________________________________________________________________________
192AliEveEventManagerWindow::~AliEveEventManagerWindow()
193{
194 // Destructor.
195
4d62585e 196 fM->Disconnect("NewEventLoaded()", this);
f76c9e9b 197}
198
199//______________________________________________________________________________
200void AliEveEventManagerWindow::DoFirstEvent()
201{
202 // Load previous event
4d62585e 203 fM->GotoEvent(0);
f76c9e9b 204}
205
206//______________________________________________________________________________
207void AliEveEventManagerWindow::DoPrevEvent()
208{
209 // Load previous event
4d62585e 210 fM->PrevEvent();
f76c9e9b 211}
212
213//______________________________________________________________________________
214void AliEveEventManagerWindow::DoNextEvent()
215{
216 // Load next event
4d62585e 217 fM->NextEvent();
f76c9e9b 218}
219
220//______________________________________________________________________________
221void AliEveEventManagerWindow::DoLastEvent()
222{
223 // Load previous event
4d62585e 224 fM->GotoEvent(-1);
f76c9e9b 225}
226
227//______________________________________________________________________________
228void AliEveEventManagerWindow::DoSetEvent()
229{
230 // Set current event
4d62585e 231 fM->GotoEvent((Int_t) fEventId->GetNumber());
f76c9e9b 232}
233
80547f2d 234//______________________________________________________________________________
235void AliEveEventManagerWindow::DoRefresh()
236{
237 // Refresh event status.
238
4d62585e 239 Int_t ev = fM->GetEventId();
240 fM->Close();
241 fM->Open();
242 fM->GotoEvent(ev);
80547f2d 243}
244
245//______________________________________________________________________________
246void AliEveEventManagerWindow::DoSetAutoLoad()
247{
248 // Set the auto-load flag
249
4d62585e 250 fM->SetAutoLoad(fAutoLoad->IsOn());
80547f2d 251 Update();
252}
253
254//______________________________________________________________________________
255void AliEveEventManagerWindow::DoSetAutoLoadTime()
256{
257 // Set the auto-load time in seconds
258
4d62585e 259 fM->SetAutoLoadTime(fAutoLoadTime->GetValue());
80547f2d 260}
261
969d3431 262//______________________________________________________________________________
263void AliEveEventManagerWindow::DoSetTrigSel()
264{
265 // Set the trigger selection
266
267 fM->SetTrigSel(fTrigSel->GetSelectedEntry()->EntryId());
268}
269
f76c9e9b 270//______________________________________________________________________________
271void AliEveEventManagerWindow::Update()
272{
ecb84424 273 // Update current event, number of available events, list of active triggers
f76c9e9b 274
4d62585e 275 Bool_t autoLoad = fM->GetAutoLoad();
276 Bool_t extCtrl = fM->IsUnderExternalControl();
80547f2d 277 Bool_t evNavOn = !autoLoad && !extCtrl;
278
279 fFirstEvent->SetEnabled(evNavOn);
280 fPrevEvent ->SetEnabled(evNavOn);
281 fLastEvent ->SetEnabled(evNavOn);
282 fNextEvent ->SetEnabled(!autoLoad);
283 fRefresh ->SetEnabled(evNavOn);
284
4d62585e 285 fEventId->SetNumber(fM->GetEventId());
80547f2d 286 fEventId->SetState(evNavOn);
4d62585e 287 fInfoLabel->SetText(Form("/ %d", fM->GetMaxEventId()));
12365217 288
4d62585e 289 fAutoLoad->SetState(fM->GetAutoLoad() ? kButtonDown : kButtonUp);
290 fAutoLoadTime->SetValue(fM->GetAutoLoadTime());
80547f2d 291
969d3431 292 // Loop over active trigger classes
293 if (fM->GetESD()) {
294 for(Int_t iTrig = 0; iTrig < AliESDRun::kNTriggerClasses; iTrig++) {
295 TString trigName = fM->GetESD()->GetESDRun()->GetTriggerClass(iTrig);
296 if (trigName.IsNull()) {
297 if (fTrigSel->GetListBox()->GetEntry(iTrig)) {
298 if (fTrigSel->GetSelected() == iTrig) fTrigSel->Select(-1);
299 fTrigSel->RemoveEntry(iTrig);
300 }
301 continue;
302 }
303 if (!fTrigSel->FindEntry(trigName.Data()))
304 fTrigSel->AddEntry(trigName.Data(),iTrig);
305 }
306 }
307 fTrigSel->SetEnabled(!evNavOn);
308
4d62585e 309 fEventInfo->LoadBuffer(fM->GetEventInfoHorizontal());
12365217 310
f76c9e9b 311 Layout();
312}
80547f2d 313
314//------------------------------------------------------------------------------
315// Protected methods
316//------------------------------------------------------------------------------
317
318//______________________________________________________________________________
319TGTextButton* AliEveEventManagerWindow::MkTxtButton(TGCompositeFrame* p,
320 const char* txt, Int_t width,
321 Int_t lo, Int_t ro, Int_t to, Int_t bo)
322{
323 // Create a standard button.
324 // If width is not zero, the fixed-width flag is set.
325
326 TGTextButton* b = new TGTextButton(p, txt);
327 if (width > 0) {
328 b->SetWidth(width);
329 b->ChangeOptions(b->GetOptions() | kFixedWidth);
330 }
331 p->AddFrame(b, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
332 return b;
333}
334
335//______________________________________________________________________________
336TGLabel* AliEveEventManagerWindow::MkLabel(TGCompositeFrame* p,
337 const char* txt, Int_t width,
338 Int_t lo, Int_t ro, Int_t to, Int_t bo)
339{
340 // Create a standard button.
341 // If width is not zero, the fixed-width flag is set.
342
343 TGLabel* l = new TGLabel(p, txt);
344 if (width > 0) {
345 l->SetWidth(width);
346 l->ChangeOptions(l->GetOptions() | kFixedWidth);
347 }
348 p->AddFrame(l, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
349 return l;
350}
ecb84424 351