2 // Author: Matevz Tadel 2007
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 **************************************************************************/
10 #include "AliEveEventManagerEditor.h"
11 #include "AliEveEventManager.h"
13 #include "TVirtualPad.h"
16 #include <TEveGValuators.h>
18 #include <TGTextView.h>
21 //______________________________________________________________________________
22 // GUI editor for AliEveEventManager.
25 ClassImp(AliEveEventManagerEditor)
27 //______________________________________________________________________________
28 AliEveEventManagerEditor::AliEveEventManagerEditor(const TGWindow *p, Int_t width, Int_t height,
29 UInt_t options, Pixel_t back) :
30 TGedFrame(p, width, height, options | kVerticalFrame, back),
37 MakeTitle("AliEveEventManager");
40 TGHorizontalFrame* f = new TGHorizontalFrame(this);
41 fNextEvent = new TGTextButton(f, "Next Event");
42 fNextEvent->SetWidth(100);
43 fNextEvent->ChangeOptions(fNextEvent->GetOptions() | kFixedWidth);
44 f->AddFrame(fNextEvent, new TGLayoutHints(kLHintsNormal, 4,0,0,0));
45 fNextEvent->Connect("Clicked()",
46 "AliEveEventManagerEditor", this, "DoNextEvent()");
47 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
50 TGVerticalFrame* f = new TGVerticalFrame(this);
52 TGLabel *eventInfoLabel = new TGLabel(f, "Event Information:");
53 f->AddFrame(eventInfoLabel, new TGLayoutHints(kLHintsNormal, 0,0,6,2));
55 fEventInfo = new TGTextView(f, 200, 300);
56 f->AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
58 AddFrame(f, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
62 /******************************************************************************/
64 //______________________________________________________________________________
65 void AliEveEventManagerEditor::SetModel(TObject* obj)
69 fM = dynamic_cast<AliEveEventManager*>(obj);
71 fEventInfo->LoadBuffer(fM->GetEventInfoVertical());
74 /******************************************************************************/
76 //______________________________________________________________________________
77 void AliEveEventManagerEditor::DoNextEvent()
85 //==============================================================================
86 // AliEveEventManagerWindow
87 //==============================================================================
89 //______________________________________________________________________________
91 // Horizontal GUI for AliEveEventManager, to be placed in the
92 // bottom part of ROOT browser.
94 ClassImp(AliEveEventManagerWindow)
96 AliEveEventManagerWindow::AliEveEventManagerWindow(AliEveEventManager* mgr) :
97 TGMainFrame(gClient->GetRoot(), 400, 100, kVerticalFrame),
113 const TString cls("AliEveEventManagerWindow");
118 TGHorizontalFrame* f = new TGHorizontalFrame(this);
119 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 0,0,2,2));
121 fFirstEvent = b = MkTxtButton(f, "First", width);
122 b->Connect("Clicked()", cls, this, "DoFirstEvent()");
123 fPrevEvent = b = MkTxtButton(f, "Prev", width);
124 b->Connect("Clicked()", cls, this, "DoPrevEvent()");
126 fEventId = new TGNumberEntry(f, 0, 5, -1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
127 TGNumberFormat::kNELLimitMinMax, 0, 10000);
128 f->AddFrame(fEventId, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
129 fEventId->Connect("ValueSet(Long_t)", cls, this, "DoSetEvent()");
130 fInfoLabel = new TGLabel(f);
131 f->AddFrame(fInfoLabel, new TGLayoutHints(kLHintsNormal, 5, 10, 4, 0));
133 fNextEvent = b = MkTxtButton(f, "Next", width);
134 b->Connect("Clicked()", cls, this, "DoNextEvent()");
135 fLastEvent = b = MkTxtButton(f, "Last", width);
136 b->Connect("Clicked()", cls, this, "DoLastEvent()");
138 MkLabel(f, "||", 0, 8, 8);
140 fRefresh = b = MkTxtButton(f, "Refresh", width + 8);
141 b->Connect("Clicked()",cls, this, "DoRefresh()");
143 MkLabel(f, "||", 0, 8, 8);
145 fAutoLoad = new TGCheckButton(f, "Autoload");
146 f->AddFrame(fAutoLoad, new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
147 fAutoLoad->SetToolTipText("Automatic event loading.");
148 fAutoLoad->Connect("Toggled(Bool_t)", cls, this, "DoSetAutoLoad()");
150 fAutoLoadTime = new TEveGValuator(f, "Time: ", 110, 0);
151 f->AddFrame(fAutoLoadTime);
152 fAutoLoadTime->SetShowSlider(kFALSE);
153 fAutoLoadTime->SetNELength(4);
154 fAutoLoadTime->Build();
155 fAutoLoadTime->SetLimits(0, 1000);
156 fAutoLoadTime->SetToolTip("Automatic event loading time in seconds.");
157 fAutoLoadTime->Connect("ValueSet(Double_t)", cls, this, "DoSetAutoLoadTime()");
159 MkLabel(f, "||", 0, 8, 8);
161 MkLabel(f, "TRG select:", 0, 0, 4, 4);
162 fTrigger = new TGComboBox(f);
163 f->AddFrame(fTrigger, new TGLayoutHints(kLHintsNormal));
164 fTrigger->Resize(75,20);
165 //fTrigger->EnableTextInput(kTRUE);
166 fTrigger->Connect("Selected(const char*)", cls, this, "DoSetTriggerType(const char*)");
169 fEventInfo = new TGTextView(this, 400, 600);
170 AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
172 fM->Connect("NewEventLoaded()", cls, this, "Update()");
174 SetCleanup(kDeepCleanup);
180 //______________________________________________________________________________
181 AliEveEventManagerWindow::~AliEveEventManagerWindow()
185 fM->Disconnect("NewEventLoaded()", this);
188 //______________________________________________________________________________
189 void AliEveEventManagerWindow::DoFirstEvent()
191 // Load previous event
195 //______________________________________________________________________________
196 void AliEveEventManagerWindow::DoPrevEvent()
198 // Load previous event
202 //______________________________________________________________________________
203 void AliEveEventManagerWindow::DoNextEvent()
209 //______________________________________________________________________________
210 void AliEveEventManagerWindow::DoLastEvent()
212 // Load previous event
216 //______________________________________________________________________________
217 void AliEveEventManagerWindow::DoSetEvent()
220 fM->GotoEvent((Int_t) fEventId->GetNumber());
223 //______________________________________________________________________________
224 void AliEveEventManagerWindow::DoRefresh()
226 // Refresh event status.
228 Int_t ev = fM->GetEventId();
234 //______________________________________________________________________________
235 void AliEveEventManagerWindow::DoSetAutoLoad()
237 // Set the auto-load flag
239 fM->SetAutoLoad(fAutoLoad->IsOn());
243 //______________________________________________________________________________
244 void AliEveEventManagerWindow::DoSetAutoLoadTime()
246 // Set the auto-load time in seconds
248 fM->SetAutoLoadTime(fAutoLoadTime->GetValue());
251 //______________________________________________________________________________
252 void AliEveEventManagerWindow::DoSetTriggerType(const char* type)
254 // Slot for setting trigger type.
256 TString typestr = type;
259 fM->SetSelectOnTriggerType(kFALSE);
263 fM->SetTriggerType( typestr );
264 fM->SetSelectOnTriggerType(kTRUE);
268 //______________________________________________________________________________
269 void AliEveEventManagerWindow::Update()
271 // Update current event, number of available events, list of active triggers
273 Bool_t autoLoad = fM->GetAutoLoad();
274 Bool_t extCtrl = fM->IsUnderExternalControl();
275 Bool_t evNavOn = !autoLoad && !extCtrl;
277 fFirstEvent->SetEnabled(evNavOn);
278 fPrevEvent ->SetEnabled(evNavOn);
279 fLastEvent ->SetEnabled(evNavOn);
280 fNextEvent ->SetEnabled(!autoLoad);
281 fRefresh ->SetEnabled(evNavOn);
283 fEventId->SetNumber(fM->GetEventId());
284 fEventId->SetState(evNavOn);
285 fInfoLabel->SetText(Form("/ %d", fM->GetMaxEventId()));
287 // fAutoLoadTime->SetEnabled(fM->GetAutoLoad());
288 fAutoLoad->SetState(fM->GetAutoLoad() ? kButtonDown : kButtonUp);
289 fAutoLoadTime->SetValue(fM->GetAutoLoadTime());
291 fEventInfo->LoadBuffer(fM->GetEventInfoHorizontal());
293 SetupTriggerSelect();
298 //------------------------------------------------------------------------------
300 //------------------------------------------------------------------------------
302 //______________________________________________________________________________
303 TGTextButton* AliEveEventManagerWindow::MkTxtButton(TGCompositeFrame* p,
304 const char* txt, Int_t width,
305 Int_t lo, Int_t ro, Int_t to, Int_t bo)
307 // Create a standard button.
308 // If width is not zero, the fixed-width flag is set.
310 TGTextButton* b = new TGTextButton(p, txt);
313 b->ChangeOptions(b->GetOptions() | kFixedWidth);
315 p->AddFrame(b, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
319 //______________________________________________________________________________
320 TGLabel* AliEveEventManagerWindow::MkLabel(TGCompositeFrame* p,
321 const char* txt, Int_t width,
322 Int_t lo, Int_t ro, Int_t to, Int_t bo)
324 // Create a standard button.
325 // If width is not zero, the fixed-width flag is set.
327 TGLabel* l = new TGLabel(p, txt);
330 l->ChangeOptions(l->GetOptions() | kFixedWidth);
332 p->AddFrame(l, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
336 void AliEveEventManagerWindow::SetupTriggerSelect()
338 // Do nothing if already enabled.
339 if (fTrigger->GetNumberOfEntries() > 0)
342 AliESDEvent* esd = fM->GetESD();
343 if (esd && fM->GetESDFile() != 0)
345 TString activetrg = esd->GetESDRun()->GetActiveTriggerClasses(); //Get list of active classes
346 TObjArray* activetrgarr = activetrg.Tokenize(" "); //break up the classes string, space as separator
347 Int_t entries = activetrgarr->GetEntries(); //how many triggerclasses
348 TString entry; //to hold the triger class name
349 TObjString* entryobj;
352 fTrigger->SetEnabled(kFALSE); //no trigger classes
356 fTrigger->RemoveAll(); //some initial cleanup
357 fTrigger->SetEnabled(kTRUE); //no trigger classes
358 fTrigger->AddEntry("",-1); //first entry empty - select to not filter by trigger
359 for (Int_t i=0;i<entries;i++)
361 entryobj = (TObjString*)activetrgarr->At(i);
362 entry = entryobj->GetString();
363 fTrigger->AddEntry(entry.Data(), i);
366 fTrigger->Select(-1, kTRUE); //set default no filtering and emit
367 fTrigger->SetEnabled(kTRUE);
371 fTrigger->SetEnabled(kFALSE);