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() :
97 TGMainFrame(gClient->GetRoot(), 400, 100, kVerticalFrame),
112 const TString cls("AliEveEventManagerWindow");
117 TGHorizontalFrame* f = new TGHorizontalFrame(this);
118 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 0,0,2,2));
120 fFirstEvent = b = MkTxtButton(f, "First", width);
121 b->Connect("Clicked()", cls, this, "DoFirstEvent()");
122 fPrevEvent = b = MkTxtButton(f, "Prev", width);
123 b->Connect("Clicked()", cls, this, "DoPrevEvent()");
125 fEventId = new TGNumberEntry(f, 0, 5, -1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
126 TGNumberFormat::kNELLimitMinMax, 0, 10000);
127 f->AddFrame(fEventId, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
128 fEventId->Connect("ValueSet(Long_t)", cls, this, "DoSetEvent()");
129 fInfoLabel = new TGLabel(f);
130 f->AddFrame(fInfoLabel, new TGLayoutHints(kLHintsNormal, 5, 10, 4, 0));
132 fNextEvent = b = MkTxtButton(f, "Next", width);
133 b->Connect("Clicked()", cls, this, "DoNextEvent()");
134 fLastEvent = b = MkTxtButton(f, "Last", width);
135 b->Connect("Clicked()", cls, this, "DoLastEvent()");
137 MkLabel(f, "||", 0, 8, 8);
139 fRefresh = b = MkTxtButton(f, "Refresh", width + 8);
140 b->Connect("Clicked()",cls, this, "DoRefresh()");
142 MkLabel(f, "||", 0, 8, 8);
144 fAutoLoad = new TGCheckButton(f, "Autoload");
145 f->AddFrame(fAutoLoad, new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
146 fAutoLoad->SetToolTipText("Automatic event loading.");
147 fAutoLoad->Connect("Toggled(Bool_t)", cls, this, "DoSetAutoLoad()");
149 fAutoLoadTime = new TEveGValuator(f, "Time: ", 110, 0);
150 f->AddFrame(fAutoLoadTime);
151 fAutoLoadTime->SetShowSlider(kFALSE);
152 fAutoLoadTime->SetNELength(4);
153 fAutoLoadTime->Build();
154 fAutoLoadTime->SetLimits(0, 1000);
155 fAutoLoadTime->SetToolTip("Automatic event loading time in seconds.");
156 fAutoLoadTime->Connect("ValueSet(Double_t)", cls, this, "DoSetAutoLoadTime()");
158 MkLabel(f, "||", 0, 8, 8);
160 MkLabel(f, "TRG select:", 0, 0, 4, 4);
161 fTrigger = new TGComboBox(f);
162 f->AddFrame(fTrigger, new TGLayoutHints(kLHintsNormal));
163 fTrigger->Resize(75,20);
164 //fTrigger->EnableTextInput(kTRUE);
165 fTrigger->Connect("Selected(const char*)", cls, this, "DoSetTriggerType(const char*)");
168 fEventInfo = new TGTextView(this, 400, 600);
169 AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
171 gAliEveEvent->Connect("NewEventLoaded()", cls, this, "Update()");
173 SetCleanup(kDeepCleanup);
179 //______________________________________________________________________________
180 AliEveEventManagerWindow::~AliEveEventManagerWindow()
184 gAliEveEvent->Disconnect("NewEventLoaded()", this);
187 //______________________________________________________________________________
188 void AliEveEventManagerWindow::DoFirstEvent()
190 // Load previous event
191 gAliEveEvent->GotoEvent(0);
194 //______________________________________________________________________________
195 void AliEveEventManagerWindow::DoPrevEvent()
197 // Load previous event
198 gAliEveEvent->PrevEvent();
201 //______________________________________________________________________________
202 void AliEveEventManagerWindow::DoNextEvent()
205 gAliEveEvent->NextEvent();
208 //______________________________________________________________________________
209 void AliEveEventManagerWindow::DoLastEvent()
211 // Load previous event
212 gAliEveEvent->GotoEvent(-1);
215 //______________________________________________________________________________
216 void AliEveEventManagerWindow::DoSetEvent()
219 gAliEveEvent->GotoEvent((Int_t) fEventId->GetNumber());
222 //______________________________________________________________________________
223 void AliEveEventManagerWindow::DoRefresh()
225 // Refresh event status.
227 Int_t ev = gAliEveEvent->GetEventId();
228 gAliEveEvent->Close();
229 gAliEveEvent->Open();
230 gAliEveEvent->GotoEvent(ev);
233 //______________________________________________________________________________
234 void AliEveEventManagerWindow::DoSetAutoLoad()
236 // Set the auto-load flag
238 gAliEveEvent->SetAutoLoad(fAutoLoad->IsOn());
242 //______________________________________________________________________________
243 void AliEveEventManagerWindow::DoSetAutoLoadTime()
245 // Set the auto-load time in seconds
247 gAliEveEvent->SetAutoLoadTime(fAutoLoadTime->GetValue());
250 //______________________________________________________________________________
251 void AliEveEventManagerWindow::DoSetTriggerType(const char* type)
253 // Slot for setting trigger type.
255 TString typestr = type;
258 gAliEveEvent->SetSelectOnTriggerType(kFALSE);
262 gAliEveEvent->SetTriggerType( typestr );
263 gAliEveEvent->SetSelectOnTriggerType(kTRUE);
267 //______________________________________________________________________________
268 void AliEveEventManagerWindow::Update()
270 // Update current event, number of available events, list of active triggers
272 Bool_t autoLoad = gAliEveEvent->GetAutoLoad();
273 Bool_t extCtrl = gAliEveEvent->IsUnderExternalControl();
274 Bool_t evNavOn = !autoLoad && !extCtrl;
276 fFirstEvent->SetEnabled(evNavOn);
277 fPrevEvent ->SetEnabled(evNavOn);
278 fLastEvent ->SetEnabled(evNavOn);
279 fNextEvent ->SetEnabled(!autoLoad);
280 fRefresh ->SetEnabled(evNavOn);
282 fEventId->SetNumber(gAliEveEvent->GetEventId());
283 fEventId->SetState(evNavOn);
284 fInfoLabel->SetText(Form("/ %d", gAliEveEvent->GetMaxEventId()));
286 // fAutoLoadTime->SetEnabled(gAliEveEvent->GetAutoLoad());
287 fAutoLoad->SetState(gAliEveEvent->GetAutoLoad() ? kButtonDown : kButtonUp);
288 fAutoLoadTime->SetValue(gAliEveEvent->GetAutoLoadTime());
290 fEventInfo->LoadBuffer(gAliEveEvent->GetEventInfoHorizontal());
292 SetupTriggerSelect();
297 //------------------------------------------------------------------------------
299 //------------------------------------------------------------------------------
301 //______________________________________________________________________________
302 TGTextButton* AliEveEventManagerWindow::MkTxtButton(TGCompositeFrame* p,
303 const char* txt, Int_t width,
304 Int_t lo, Int_t ro, Int_t to, Int_t bo)
306 // Create a standard button.
307 // If width is not zero, the fixed-width flag is set.
309 TGTextButton* b = new TGTextButton(p, txt);
312 b->ChangeOptions(b->GetOptions() | kFixedWidth);
314 p->AddFrame(b, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
318 //______________________________________________________________________________
319 TGLabel* AliEveEventManagerWindow::MkLabel(TGCompositeFrame* p,
320 const char* txt, Int_t width,
321 Int_t lo, Int_t ro, Int_t to, Int_t bo)
323 // Create a standard button.
324 // If width is not zero, the fixed-width flag is set.
326 TGLabel* l = new TGLabel(p, txt);
329 l->ChangeOptions(l->GetOptions() | kFixedWidth);
331 p->AddFrame(l, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
335 void AliEveEventManagerWindow::SetupTriggerSelect()
337 if (fTrigger->GetNumberOfEntries()>0) return; //do nothing if already enabled
339 AliESDEvent* esd = gAliEveEvent->AssertESD(); //get ESD
342 TString activetrg = esd->GetESDRun()->GetActiveTriggerClasses(); //Get list of active classes
343 TObjArray* activetrgarr = activetrg.Tokenize(" "); //break up the classes string, space as separator
344 Int_t entries = activetrgarr->GetEntries(); //how many triggerclasses
345 TString entry; //to hold the triger class name
346 TObjString* entryobj;
349 fTrigger->SetEnabled(kFALSE); //no trigger classes
353 fTrigger->RemoveAll(); //some initial cleanup
354 fTrigger->SetEnabled(kTRUE); //no trigger classes
355 fTrigger->AddEntry("",-1); //first entry empty - select to not filter by trigger
356 for (Int_t i=0;i<entries;i++)
358 entryobj = (TObjString*)activetrgarr->At(i);
359 entry = entryobj->GetString();
360 fTrigger->AddEntry(entry.Data(), i);
363 fTrigger->Select(-1, kTRUE); //set default no filtering and emit
367 fTrigger->SetEnabled(kFALSE);