7 #include <TEveManager.h>
8 #include <TEveBrowser.h>
12 #include <TGNumberEntry.h>
49 int nn = m_list_run.size();
50 int run = nn > 0 ? m_list_run[nn-1] : RUN_MIN;
51 while (++run < RUN_MAX) {
53 if (! gSystem->AccessPathName(fname.c_str())) {
54 m_list_run.push_back(run);
57 return m_list_run.size() > nn;
63 TFile* file =
new TFile(
GetDstPath(run).c_str());
65 TTree* tree = (TTree*)file->Get(
"T");
66 if (tree) ret = tree->GetEntries();
74 cout <<
"EventDispUI::OpenRunFile(): run = " << run << endl;
85 if (m_online_mode && m_auto_mode) {
86 cout <<
"NextEvent(): Ignored in auto mode." << endl;
89 if (m_i_evt >= m_n_evt) {
90 cout <<
"NextEvent(): No next event." << endl;
95 cout <<
"Next: " << m_i_evt <<
" / " << m_n_evt << endl;
97 if (se->
run(1,
true) != 0) {
98 cout <<
"NextEvent() failed. No event remains?" << endl;
104 if (m_online_mode && m_auto_mode) {
105 cout <<
"PrevEvent(): Ignored in auto mode." << endl;
109 cout <<
"PrevEvent(): No previous events." << endl;
112 int i_new = m_i_evt - 1;
113 cout <<
"Prev: " << i_new <<
" / " << m_n_evt << endl;
115 cout <<
"PrevEvent(): Cannot reopen DST." << endl;
121 if (m_i_evt > 1) se->
skip(m_i_evt - 1);
122 if (se->
run(1,
true) != 0) {
123 cout <<
"PrevEvent() failed." << endl;
129 if (i_evt > m_n_evt) {
131 if (i_evt > m_n_evt) {
132 cout <<
"Unexpected!!" << endl;
136 int i_move = i_evt - m_i_evt;
140 if (i_move > 1) se->
skip(i_move - 1);
141 if (se->
run(1,
true) != 0) {
142 cout <<
"MoveEvent() failed." << endl;
148 int num = (int)m_ne_evt_id->GetNumberEntry()->GetIntNumber();
149 cout <<
"ReqEvtID: " << num << endl;
156 int num = (int)m_ne_trig->GetNumberEntry()->GetIntNumber();
157 cout <<
"ReqTrig: " << num << endl;
164 cout <<
"Top View" << endl;
171 cout <<
"Side View" << endl;
178 cout <<
"3D View" << endl;
186 oss << (m_online_mode ?
"Online" :
"Offline") <<
" Mode";
187 m_lbl_mode->SetText(oss.str().c_str());
190 oss <<
"Run " << m_run;
191 m_lbl_run->SetText(oss.str().c_str());
194 oss <<
"Event " << m_i_evt <<
" / " << m_n_evt;
195 m_lbl_n_evt->SetText(oss.str().c_str());
209 m_online_mode = online_mode;
211 cout <<
"EventDispUI::Init(): Found no run. Abort." << endl;
214 m_run = m_list_run.back();
216 cout <<
"\nHit only 'Enter' to select the last run, " << m_list_run.back() <<
".\n"
217 <<
"Or input a run number that you select.\n";
219 cout <<
"Run? " << flush;
221 cin.getline(line, 64);
222 if (line[0] ==
'\0') {
223 m_run = m_list_run.back();
224 }
else if ((m_run = atoi(line)) <= 0) {
225 cout <<
" Invalid input." << endl;
245 TEveBrowser* browser = gEve->GetBrowser();
246 browser->StartEmbedding(TRootBrowser::kLeft);
248 m_fr_main =
new TGMainFrame(gClient->GetRoot(), 1000, 600);
249 m_fr_main->SetWMPosition(0, 0);
250 m_fr_main->SetWindowName(
"Event Display");
251 m_fr_main->SetCleanup(kDeepCleanup);
253 m_fr_menu =
new TGVerticalFrame(m_fr_main);
256 lab =
new TGLabel(m_fr_menu,
"- - - Event Info - - -");
257 m_fr_menu->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 2,2,2,2));
259 m_lbl_mode =
new TGLabel(m_fr_menu,
"Online/Offline Mode");
260 m_fr_menu->AddFrame(m_lbl_mode,
new TGLayoutHints(kLHintsExpandX, 2,2,2,2));
262 m_lbl_run =
new TGLabel(m_fr_menu,
"Run ??????");
263 m_fr_menu->AddFrame(m_lbl_run,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX | kLHintsLeft, 2,2,2,2));
265 m_lbl_n_evt =
new TGLabel(m_fr_menu,
"Event ?? / ??");
266 m_fr_menu->AddFrame(m_lbl_n_evt,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX | kLHintsLeft, 2,2,2,2));
268 lab =
new TGLabel(m_fr_menu,
"- - - Event Navigation - - -");
269 m_fr_menu->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 2,2,10,2));
272 m_fr_evt_mode =
new TGCompositeFrame(m_fr_menu);
273 TGCheckButton* check =
new TGCheckButton(m_fr_evt_mode,
new TGHotString(
"Auto mode"), 99);
274 check->SetToolTipText(
"When checked, the last sampled event is automatically shown.");
275 check->SetState(m_auto_mode ? kButtonDown : kButtonUp);
276 check->Connect(
"Toggled(Bool_t)",
"EventDispUI",
this,
"SetAutoMode(Bool_t)");
277 m_fr_evt_mode->AddFrame(check);
278 m_fr_menu->AddFrame(m_fr_evt_mode,
new TGLayoutHints(kLHintsCenterX, 5, 5, 2, 2));
283 m_fr_evt_sel =
new TGCompositeFrame(m_fr_menu);
285 TGHorizontalFrame* frm1 = 0;
286 frm1 =
new TGHorizontalFrame(m_fr_evt_sel);
287 lab =
new TGLabel(frm1,
"Event ID");
288 frm1->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4));
289 m_ne_evt_id =
new TGNumberEntry(frm1, -1, 9, 999, TGNumberFormat::kNESInteger,
290 TGNumberFormat::kNEAAnyNumber,
291 TGNumberFormat::kNELLimitMinMax,
293 m_ne_evt_id->Connect(
"ValueSet(Long_t)",
"EventDispUI",
this,
"ReqEvtID()");
294 frm1->AddFrame(m_ne_evt_id,
new TGLayoutHints(kLHintsCenterY | kLHintsRight, 5, 5, 5, 5));
295 m_fr_evt_sel->AddFrame(frm1);
297 frm1 =
new TGHorizontalFrame(m_fr_evt_sel);
298 lab =
new TGLabel(frm1,
"Trigger");
299 frm1->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4));
300 m_ne_trig =
new TGNumberEntry(frm1, -1, 9, 999, TGNumberFormat::kNESInteger,
301 TGNumberFormat::kNEAAnyNumber,
302 TGNumberFormat::kNELLimitMinMax,
304 m_ne_trig->Connect(
"ValueSet(Long_t)",
"EventDispUI",
this,
"ReqTrig()");
305 frm1->AddFrame(m_ne_trig,
new TGLayoutHints(kLHintsCenterY | kLHintsRight, 5, 5, 5, 5));
306 m_fr_evt_sel->AddFrame(frm1);
308 m_fr_menu->AddFrame(m_fr_evt_sel,
new TGLayoutHints(kLHintsCenterX, 5, 5, 2, 2));
312 m_fr_evt_next =
new TGCompositeFrame(m_fr_menu);
314 butt =
new TGTextButton(m_fr_evt_next,
"Next Event");
315 m_fr_evt_next->AddFrame(butt);
316 butt->Connect(
"Clicked()",
"EventDispUI",
this,
"NextEvent()");
318 m_fr_menu->AddFrame(m_fr_evt_next,
new TGLayoutHints(kLHintsCenterX, 5, 5, 2, 2));
322 m_fr_evt_prev =
new TGCompositeFrame(m_fr_menu);
324 butt =
new TGTextButton(m_fr_evt_prev,
"Previous Event");
325 m_fr_evt_prev->AddFrame(butt);
326 butt->Connect(
"Clicked()",
"EventDispUI",
this,
"PrevEvent()");
328 m_fr_menu->AddFrame(m_fr_evt_prev,
new TGLayoutHints(kLHintsCenterX, 5, 5, 2, 2));
331 lab =
new TGLabel(m_fr_menu,
"- - - View Navigation - - -");
332 m_fr_menu->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 2,2,10,2));
334 butt =
new TGTextButton(m_fr_menu,
" Top View ");
335 m_fr_menu->AddFrame(butt,
new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
336 butt->Connect(
"Clicked()",
"EventDispUI",
this,
"ViewTop()");
338 butt =
new TGTextButton(m_fr_menu,
" Side View ");
339 m_fr_menu->AddFrame(butt,
new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
340 butt->Connect(
"Clicked()",
"EventDispUI",
this,
"ViewSide()");
342 butt =
new TGTextButton(m_fr_menu,
" 3D View ");
343 m_fr_menu->AddFrame(butt,
new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
344 butt->Connect(
"Clicked()",
"EventDispUI",
this,
"View3D()");
346 lab =
new TGLabel(m_fr_menu,
"Left-button drag = Rotate");
347 m_fr_menu->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 2,2,2,2));
349 lab =
new TGLabel(m_fr_menu,
"Middle-button drag = Pan");
350 m_fr_menu->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 2,2,2,2));
352 lab =
new TGLabel(m_fr_menu,
"Middle-button scroll = Zoom");
353 m_fr_menu->AddFrame(lab,
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 2,2,2,2));
355 butt =
new TGTextButton(m_fr_menu,
"Exit",
"gApplication->Terminate(0)");
356 m_fr_menu->AddFrame(butt,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2,2,10,2));
358 m_fr_main->AddFrame(m_fr_menu);
360 m_fr_main->MapSubwindows();
362 m_fr_main->MapWindow();
364 browser->StopEmbedding();
365 browser->SetTabTitle(
"Event Control", 0);
373 m_fr_menu->ShowFrame(m_fr_evt_mode);
374 m_fr_menu->HideFrame(m_fr_evt_sel);
376 m_fr_menu->HideFrame(m_fr_evt_next);
377 m_fr_menu->HideFrame(m_fr_evt_prev);
379 m_fr_menu->ShowFrame(m_fr_evt_next);
380 m_fr_menu->ShowFrame(m_fr_evt_prev);
383 m_fr_menu->HideFrame(m_fr_evt_mode);
384 m_fr_menu->ShowFrame(m_fr_evt_sel);
385 m_fr_menu->ShowFrame(m_fr_evt_next);
386 m_fr_menu->HideFrame(m_fr_evt_prev);
389 m_fr_menu->MapWindow();
402 cout <<
"AutoMode()" << endl;
404 cout <<
" New run." << endl;
408 if (n_now > m_i_evt) {
409 cout <<
" New event." << endl;
void SetAutoMode(bool value)
Fun4AllInputManager * getInputManager(const char *name)
static Fun4AllServer * instance()
event display interface, set parameters/switches, call detector modules, control display.
int run(const int nEvents=1)
int skip(const int nevnts=0)
skip n events (0 means up to the end of file). Skip means read, don't process.
static std::string GetDstFilePath(const int run)
int run(const int nevnts=0, const bool require_nevents=false)
run n events (0 means up to end of file)
std::string GetDstPath(const int run)
static std::string GetEDDstFilePath(const int run)
int FetchNumEvents(const int run)
void set_event_id_req(int eventIdReq)
static void * FuncNewEventCheck(void *arg)
void Init(const bool online_mode)
void set_trigger_req(unsigned short triggerReq)
int OpenRunFile(const int run)
SubsysReco * getSubsysReco(const std::string &name)
void MoveEvent(const int i_evt)