]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/analysis2/corrs/ForwardOADBGui.C
Merge remote-tracking branch 'remotes/origin/master' into TPCdev
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / corrs / ForwardOADBGui.C
CommitLineData
e5e569fd 1
2#ifndef __CINT__
3#include "AliOADBForward.h"
8449e3e0 4#include <TGListBox.h>
5#include <TGNumberEntry.h>
6#include <TGTextEntry.h>
7#include <TGComboBox.h>
8#include <TGFrame.h>
9#include <TGFileDialog.h>
10#include <TGButtonGroup.h>
11#include <TGButton.h>
12#include <TGLabel.h>
13#include <TGMsgBox.h>
14#include <TSystem.h>
15#include <TError.h>
16#include <TTimer.h>
17#include <TCanvas.h>
18#include <TTree.h>
19#include <TGListView.h>
20#include <TDatime.h>
21#include <TParameter.h>
22#include <TPaveText.h>
e65b8b56 23#include <TBrowser.h>
8449e3e0 24
8449e3e0 25namespace {
26 void
27 ForwardOADBGUIErrorHandler(Int_t lvl, Bool_t doAbort,
28 const char* location,
29 const char* msg)
30 {
31 if (!doAbort && lvl >= kWarning) {
32 EMsgBoxIcon msgIcon = kMBIconAsterisk;
33 // if (lvl >= kInfo) msgIcon = kMBIconAsterisk;
34 if (lvl >= kWarning) msgIcon = kMBIconExclamation;
35 if (lvl >= kError) msgIcon = kMBIconStop;
36
37 new TGMsgBox(gClient->GetRoot(), gClient->GetRoot(),
38 location, msg, msgIcon);
39 }
40 DefaultErrorHandler(lvl, doAbort, location, msg);
41 }
42}
43#else
e5e569fd 44class AliOADBForward;
45class AliOADBForward::Entry;
e65b8b56 46#if 0
e5e569fd 47class TGFrame;
e65b8b56 48class TGLVEntry;
e5e569fd 49class TGHorizontalFrame;
50class TGTextButton;
51class TGTextEntry;
52class TGVerticalFrame;
53class TGLabel;
54class TGComboBox;
55class TGMainFrame;
56class TGListView;
57class TGLVContainer;
58class TGHButtonGroup;
59class TGLayoutHints;
60class TGNumberEntry;
8449e3e0 61#endif
e65b8b56 62#endif
8449e3e0 63
c8b1a7db 64struct ForwardOADBDialog
65{
66 ForwardOADBDialog(TGMainFrame* p)
67 : fFrame(gClient->GetRoot(), p, 200, 40, kVerticalFrame),
68 fHints(kLHintsExpandX,30,30,30,30),
69 fLabel(&fFrame, ""),
70 // fProgress(&fFrame, 100),
71 fIsShown(false),
72 fIncrement(0,false)
73 {
74 fFrame.AddFrame(&fLabel, &fHints );
75 // fFrame.AddFrame(&fProgress, &fHints);
76 fFrame.SetWindowName("Please wait ...");
77 // fProgress.SetRange(0,1);
78 fIncrement.Connect("Timeout()","ForwardOADBDialog",this,"HandleIncr()");
79 }
80 void HandleIncr()
81 {
82 Float_t dp = 0.1;
83 // Float_t p = fProgress.GetPosition();
84 // Info("HandleIncr", "Handing increment (%f)", p);
85 // if (p+dp >= 1) fProgress.SetPosition(0);
86 // fProgress.Increment(dp);
87 // fFrame.GetClient()->NeedRedraw(&fFrame);
88 }
89 void Show(const char* msg)
90 {
91 fLabel.SetText(msg);
92 // fProgress.SetPosition(0);
93 fFrame.MapSubwindows();
94 Int_t width = fFrame.GetDefaultWidth();
95 Int_t height = fFrame.GetDefaultHeight();
96 fFrame.Resize(width, height);
97 fFrame.SetWMSize(width, height);
98 fFrame.SetWMSizeHints(width, height, width, height, 0, 0);
99 fFrame.MapRaised();
100 fIsShown = true;
101 // fIncrement.Start(0,false);
102 fFrame.GetClient()->WaitForUnmap(&fFrame);
103 }
104 void Hide()
105 {
106 if (!fIsShown) return;
107 // fIncrement.Stop();
108 fFrame.UnmapWindow();
109 }
110 TGTransientFrame fFrame;
111 TGLayoutHints fHints;
112 TGLabel fLabel;
113 //TGHProgressBar fProgress;
114 Bool_t fIsShown;
115 TTimer fIncrement;
116};
117
8449e3e0 118struct ForwardOADBGUI
119{
120 enum {
121 kLabelWidth = 200
122 };
123 ForwardOADBGUI()
124 : fMain(gClient->GetRoot(), 10, 10, kVerticalFrame),
125 fOpenFrame(&fMain),
126 fFileText(&fOpenFrame, "fmd_corrections.root"),
127 fFileSelect(&fOpenFrame, "Browse"),
128 fTablesText(&fOpenFrame, "*"),
129 fOpenButton(&fOpenFrame, "Open"),
130 fCloseButton(&fOpenFrame, "Close"),
131 fSelectFrame(&fMain),
132 fTableFrame(&fSelectFrame),
133 fTableLabel(&fTableFrame, "Table: "),
134 fTableSelect(&fTableFrame),
135 fRunFrame(&fSelectFrame),
136 fRunLabel(&fRunFrame, "Run: "),
137 fRunInput(&fRunFrame, 0, 0, -1,
138 TGNumberFormat::kNESReal,
139 TGNumberFormat::kNEANonNegative,
140 TGNumberFormat::kNELLimitMin, 0),
141 fRunMode(&fRunFrame),
142 fSysFrame(&fSelectFrame),
143 fSysLabel(&fSysFrame, "System: "),
144 fSysSelect(&fSysFrame),
145 fSNNFrame(&fSelectFrame),
146 fSNNLabel(&fSNNFrame, "sqrt(sNN) [GeV]: "),
147 fSNNInput(&fSNNFrame, 0, 0, -1, TGNumberFormat::kNESReal,
148 TGNumberFormat::kNEANonNegative,
149 TGNumberFormat::kNELLimitMin, 0),
150 fFldFrame(&fSelectFrame),
151 fFldLabel(&fFldFrame, "L3 field [kG]: "),
152 fFldSelect(&fFldFrame),
153 fOtherFrame(&fSelectFrame),
154 fMCButton(&fOtherFrame, "MC"),
155 fSatButton(&fOtherFrame, "Satellite"),
156 fOptionsFrame(&fSelectFrame),
157 fOptionsLabel(&fOptionsFrame, "Draw/Print options:"),
158 fOptionsText(&fOptionsFrame, ""),
159 fCommandFrame(&fSelectFrame),
160 fQueryButton(&fCommandFrame, "Query"),
161 fListButton(&fCommandFrame, "List table"),
162 fPrintButton(&fCommandFrame, "Print entry"),
163 fDrawButton(&fCommandFrame, "Draw entry"),
164 fPDFButton(&fCommandFrame, "Summarize entry"),
fe218435 165 fList(&fMain, 800, 400),
166 fListContainer(&fList),
8449e3e0 167 fFrameHints(kLHintsExpandX, 0, 0, 2, 0),
168 fLabelHints(kLHintsNoHints, 4, 2, 0, 0),
169 fEntryHints(kLHintsExpandX|kLHintsExpandY, 2, 4, 0, 0),
170 fButtonHints(kLHintsExpandX, 2, 2, 0, 0),
171 fListHints(kLHintsExpandX|kLHintsExpandY, 2, 2, 4, 2),
c8b1a7db 172 fMsg(&fMain),
8449e3e0 173 fDB(0),
174 fEntry(0)
175 {
176 fMain.Connect("CloseWindow()", "ForwardOADBGUI", this, "HandleKill()");
fe218435 177 fMain.DontCallClose();
178
8449e3e0 179 fFileSelect.Connect("Clicked()", "ForwardOADBGUI", this, "HandleBrowse()");
180 fOpenButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleOpen()");
181 fCloseButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleClose()");
182 fMain.AddFrame(&fOpenFrame, &fFrameHints);
183 fOpenFrame.AddFrame(&fFileText, &fEntryHints);
184 fOpenFrame.AddFrame(&fFileSelect, &fEntryHints);
185 fOpenFrame.AddFrame(&fTablesText, &fEntryHints);
186 fOpenFrame.AddFrame(&fOpenButton, &fEntryHints);
187 fOpenFrame.AddFrame(&fCloseButton, &fEntryHints);
188
189 fMain.AddFrame(&fSelectFrame, &fFrameHints);
190
191 fTableLabel.SetWidth(kLabelWidth); fTableLabel.SetMinWidth(kLabelWidth);
192 fTableSelect.SetHeight(22);
c8b1a7db 193 fTableSelect.Connect("Selected(Int_t)","ForwardOADBGUI",this,
194 "HandleTable(Int_t)");
8449e3e0 195 fSelectFrame.AddFrame(&fTableFrame, &fFrameHints);
196 fTableFrame.AddFrame(&fTableLabel, &fLabelHints);
197 fTableFrame.AddFrame(&fTableSelect, &fEntryHints);
198
199 fRunLabel.SetWidth(kLabelWidth); fRunLabel.SetMinWidth(kLabelWidth);
200 fRunMode.AddEntry("default", 0);
201 fRunMode.AddEntry("Exact", 1);
202 fRunMode.AddEntry("Newest", 2);
203 fRunMode.AddEntry("Near", 3);
204 fRunMode.AddEntry("Older", 4);
205 fRunMode.AddEntry("Newer", 5);
206 fRunMode.SetHeight(22);
207 fSelectFrame.AddFrame(&fRunFrame, &fFrameHints);
208 fRunFrame.AddFrame(&fRunLabel, &fLabelHints);
209 fRunFrame.AddFrame(&fRunInput, &fEntryHints);
210 fRunFrame.AddFrame(&fRunMode, &fEntryHints);
211
212 fSysLabel.SetWidth(kLabelWidth); fSysLabel.SetMinWidth(kLabelWidth);
213 fSysSelect.AddEntry("- select -", 0);
214 fSysSelect.AddEntry("p-p", 1);
215 fSysSelect.AddEntry("Pb-Pb ",2);
216 fSysSelect.AddEntry("p-Pb", 3);
217 fSysSelect.SetHeight(22);
218 fSelectFrame.AddFrame(&fSysFrame, &fFrameHints);
219 fSysFrame.AddFrame(&fSysLabel, &fLabelHints);
220 fSysFrame.AddFrame(&fSysSelect, &fEntryHints);
221
222 fSNNLabel.SetWidth(kLabelWidth); fSNNLabel.SetMinWidth(kLabelWidth);
223 fSNNInput.SetHeight(22);
224 fSelectFrame.AddFrame(&fSNNFrame, &fFrameHints);
225 fSNNFrame.AddFrame(&fSNNLabel, &fLabelHints);
226 fSNNFrame.AddFrame(&fSNNInput, &fEntryHints);
227
228 fFldLabel.SetWidth(kLabelWidth); fFldLabel.SetMinWidth(kLabelWidth);
229 fFldSelect.AddEntry("- select -", 999);
230 fFldSelect.AddEntry("-5", -5);
231 fFldSelect.AddEntry("0 ", 0);
232 fFldSelect.AddEntry("+5", +5);
233 fFldSelect.SetHeight(22);
234 fSelectFrame.AddFrame(&fFldFrame, &fFrameHints);
235 fFldFrame.AddFrame(&fFldLabel, &fLabelHints);
236 fFldFrame.AddFrame(&fFldSelect, &fEntryHints);
237
238 fSelectFrame.AddFrame(&fOtherFrame, &fFrameHints);
239 fOtherFrame.SetLayoutHints(&fButtonHints);
240 fMCButton.AllowStayDown(true);
241 fSatButton.AllowStayDown(true);
242 // fOtherFrame.AddFrame(&fMCButton, &fEntryHints);
243 // fOtherFrame.AddFrame(&fSatButton, &fEntryHints);
244 // new TGCheckButton(&fOtherFrame, "MC:");
245 // new TGCheckButton(&fOtherFrame, "Satellite:");
246
247 fOptionsLabel.SetWidth(2*kLabelWidth);
248 fSelectFrame.AddFrame(&fOptionsFrame, &fFrameHints);
249 fOptionsFrame.AddFrame(&fOptionsLabel, &fLabelHints);
250 fOptionsFrame.AddFrame(&fOptionsText, &fEntryHints);
251
252 fQueryButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleQuery()");
253 fListButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleList()");
254 fDrawButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleDraw()");
255 fPDFButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandlePDF()");
256 fPrintButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandlePrint()");
257 fSelectFrame.AddFrame(&fCommandFrame, &fFrameHints);
258 fCommandFrame.SetLayoutHints(&fButtonHints);
259
fe218435 260 // fList = new TGListView(&fMain, 800, 400);
261 // fListContainer = new TGLVContainer(fList);
262 fListContainer.SetColHeaders("Entry",
263 "Run",
264 "System",
265 "sqrt(sNN)",
266 "L3 Field",
267 "Type",
268 "IP",
269 "Date",
270 "Author",
271 "AliROOT",
272 "Data");
273 fList.SetViewMode(kLVDetails);
274 fList.Connect("Clicked(TGLVEntry*,Int_t)",
8449e3e0 275 "ForwardOADBGUI", this, "HandleItem(TGLVEntry*,Int_t)");
fe218435 276 fList.Connect("DoubleClicked(TGLVEntry*,Int_t)",
8449e3e0 277 "ForwardOADBGUI", this, "HandleItem(TGLVEntry*,Int_t)");
fe218435 278 fListContainer.Connect("Clicked(TGFrame*,Int_t)",
8449e3e0 279 "ForwardOADBGUI", this,
280 "HandleItem(TGFrame*,Int_t)");
fe218435 281 fList.SetMinWidth(400);
282 fList.SetMinHeight(200);
283 fMain.AddFrame(&fList, &fListHints);
8449e3e0 284
285#ifndef __CINT__
286 ::SetErrorHandler(ForwardOADBGUIErrorHandler);
287#endif
288 HandleEnable();
289
bfab35d9 290 fMain.SetMinWidth(600);
291 fMain.SetMinHeight(480);
8449e3e0 292 fMain.MapSubwindows();
bfab35d9 293 fMain.Resize(600, 480); // fMain.GetDefaultSize());
8449e3e0 294 fMain.MapWindow();
295 }
296 ~ForwardOADBGUI()
297 {
298 HandleClose();
299#ifndef __CINT__
300 ::SetErrorHandler(::DefaultErrorHandler);
301#endif
8449e3e0 302 Info("~ForwardOADBGUI", "Closing");
303 }
304 void UseDB(AliOADBForward* db)
305 {
306 if (!db) return;
307
308 if (fDB) HandleClose();
309 fEntry = 0;
310 fDB = db;
311
312 TString lt;
313 const TMap& tables = fDB->GetTables();
314 TIter next(&tables);
315 TObject* key = 0;
316 // Int_t i = 0;
317 while ((key = next())) {
318 AliOADBForward::Table* t = fDB->FindTable(key->GetName());
319
320 lt.Append(Form("%s/%s", t->GetName(), t->fTree->GetTitle()));
321 }
322 fTablesText.SetText(lt);
323 HandleEnable();
324 }
325 void HandleKill()
326 {
fe218435 327 // fMain.DontCallClose();
328 fMain.DeleteWindow();
8449e3e0 329 Printf("Starting timer");
fe218435 330 // TTimer* t = new TTimer(Form("delete (ForwardOADBGUI*)%p", this), 100);
331 // t->Start(100, true);
8449e3e0 332 }
333 void HandleDBEntry(AliOADBForward::Entry* e)
334 {
335 Info("HandleDBEntry", "Selected entry %p", e);
336 Bool_t en = (e != 0);
337 fDrawButton.SetEnabled(en);
338 fPrintButton.SetEnabled(en);
339 fPDFButton.SetEnabled(en);
fe218435 340
8449e3e0 341 fEntry = e;
342 }
343 void HandleEnable()
344 {
345 Bool_t enabled = fDB ? true : false;
c8b1a7db 346 Bool_t hasTable = fTableSelect.GetSelected() != 0;
8449e3e0 347
348 fTableSelect.SetEnabled(enabled);
349 fRunMode.SetEnabled(enabled);
350 fSysSelect.SetEnabled(enabled);
351 fFldSelect.SetEnabled(enabled);
352 fMCButton.SetEnabled(enabled);
353 fSatButton.SetEnabled(enabled);
c8b1a7db 354 fQueryButton.SetEnabled(enabled && hasTable);
355 fListButton.SetEnabled(enabled && hasTable);
356 fPrintButton.SetEnabled(enabled && hasTable);
357 fDrawButton.SetEnabled(enabled && hasTable);
358 fPDFButton.SetEnabled(enabled && hasTable);
8449e3e0 359 fOpenButton.SetEnabled(!enabled);
360 fCloseButton.SetEnabled(enabled);
361 HandleDBEntry(0);
362
363 Int_t tsel = 0;
364 if (!enabled) {
365 fTableSelect.RemoveAll();
366 fTableSelect.AddEntry("- select -", 0);
8449e3e0 367 }
368 else {
369 const TMap& tables = fDB->GetTables();
370 TIter next(&tables);
371 TObject* key = 0;
372 Int_t i = 0;
373 while ((key = next())) {
374 fTableSelect.AddEntry(key->GetName(), ++i);
375 }
376 if (tables.GetEntries() == 1) tsel = 1;
377 }
378 fTableSelect.Select(tsel, true);
379 fSysSelect.Select(0, true);
380 fFldSelect.Select(999, true);
381 fRunMode.Select(0, true);
382
383 fMain.Layout();
384 }
385 void HandleClose()
386 {
387 if (fDB) {
388 delete fDB;
389 fDB = 0;
390 }
391 HandleEnable();
392 }
393 void HandleOpen()
394 {
395 if (fDB) HandleClose();
e65b8b56 396 fDB = new AliOADBForward;
8449e3e0 397 Info("HandleOpen", "Opening DB file %s for tables %s",
398 fFileText.GetText(), fTablesText.GetText());
e65b8b56 399 TString fn(fFileText.GetText());
400 TString tn(fTablesText.GetText());
401 if (!fDB->Open(fn, tn, false, true, true)) {
8449e3e0 402 Error("HandleOpen", "Failed to open database");
403 delete fDB;
404 fDB = 0;
405 }
406 // else
407 // fDB->Print();
408 HandleEnable();
409 }
410 void HandleBrowse()
411 {
412 TGFileInfo fi;
fe218435 413 TString iniDir(gSystem->ExpandPathName("$(OADB_PATH)"));
414 if (iniDir.IsNull())
415 iniDir = gSystem->ExpandPathName("$(ALICE_ROOT)/OADB");
416 iniDir.Append("/PWGLF/FORWARD/CORRECTIONS/data");
417 char* ini = new char[iniDir.Length()+1];
418 for (int i = 0; i < iniDir.Length(); i++) ini[i] = iniDir[i];
419 ini[iniDir.Length()] = '\0';
420 Printf("Initial directory: %s (%s)", iniDir.Data(), ini);
421 fi.fIniDir = ini;
8449e3e0 422 new TGFileDialog(gClient->GetRoot(), &fMain, kFDOpen, &fi);
423
424 TString nf = fi.fFilename; //
425 // nf = gSystem->ConcatFileName(fi.fIniDir, fi.fFilename);
426 Info("HandleBrowse", "New file: %s", nf.Data());
427 fFileText.SetText(nf);
428 }
429 void HandleEntry(Int_t i, AliOADBForward::Entry* e)
430 {
fe218435 431 TGLVEntry* lve = new TGLVEntry(&fListContainer, Form("%d", i), "");
8449e3e0 432 if (i < 0) lve->SetUserData(e);
433 lve->SetUniqueID(i);
434 TDatime dt(e->fTimestamp);
435 lve->SetSubnames(Form("%lu", e->fRunNo),
436 (e->fSys == 1 ? "p-p" :
437 e->fSys == 2 ? "Pb-Pb" : "p-Pb"),
438 Form("%4huGeV",e->fSNN),
439 Form("%+2hdkG", e->fField),
440 (e->fMC ? "MC" : "Real"),
441 (e->fSatellite ? "Satellite" : "Nominal"),
442 dt.AsSQLString(),
443 e->fAuthor, Form("%lu", e->fAliROOTRevision),
444 (e->fData ? e->fData->GetName() : "null"));
fe218435 445 fListContainer.AddItem(lve);
8449e3e0 446 }
447 void HandleList()
448 {
449 if (!fDB) return;
450 TString table;
451 SelectedTable(table);
452
453 if (table.IsNull()) {
454 // Error("HandleList", "No table selected");
455 return;
456 }
457 HandleDBEntry(0);
458 AliOADBForward::Table* t= fDB->FindTable(table);
459 if (!t) {
460 Error("HandleList", "No table named %s in DB", table.Data());
461 return;
462 }
463 // HandleQuery();
464 t->Print(fOptionsText.GetText());
fe218435 465 // if (!fListContainer) return;
8449e3e0 466
fe218435 467 fListContainer.RemoveAll();
8449e3e0 468 TTree* tree = t->fTree;
469 Int_t n = tree->GetEntries();
470 for (Int_t i = 0; i < n; i++) {
471 tree->GetEntry(i);
472 AliOADBForward::Entry* e = t->fEntry;
473 HandleEntry(i, e);
474 }
fe218435 475 fList.AdjustHeaders();
8449e3e0 476 fMain.Layout();
477 }
478 void SelectedTable(TString& ret) const
479 {
480 ret = "";
481 TGLBEntry* e = fTableSelect.GetSelectedEntry();
482 if (!e) {
483 Error("SelectedTable", "No table selected");
484 return ;
485 }
486 ret = e->GetTitle();
487 }
c8b1a7db 488 void HandleTable(Int_t id)
489 {
490 Info("HandleTable", "Id=%d", id);
491 fListButton.SetEnabled(id != 0);
492 fQueryButton.SetEnabled(id != 0);
493 fListContainer.RemoveAll();
494 fList.AdjustHeaders();
495 fMain.Layout();
496 // fPrintButton.SetEnabled(enabled);
497 // fDrawButton.SetEnabled(enabled);
498 // fPDFButton.SetEnabled(enabled);
499 }
8449e3e0 500 void HandleItem(TGFrame* lve, Int_t btn)
501 {
502 Info("HandleItem", "frame=%p", lve);
503 HandleItem(static_cast<TGLVEntry*>(lve), btn);
504 }
505 void HandleItem(TGLVEntry* lve, Int_t)
506 {
507 Info("HandleItem", "entry=%p", lve);
508 if (!lve) {
509 Warning("HandleItem", "No item");
510 return;
511 }
512 void* data = lve->GetUserData();
513 AliOADBForward::Entry* e = 0;
514 if (data) {
515 e = reinterpret_cast<AliOADBForward::Entry*>(data);
516 }
517 else {
518 TString tab;
519 SelectedTable(tab);
520 if (tab.IsNull()) return;
521
522 AliOADBForward::Table* t = fDB->FindTable(tab);
523 // Info("HandleItem", "Fetching item %d from table", lve->GetUniqueID());
524 t->fTree->GetEntry(lve->GetUniqueID());
525 e = t->fEntry;
526 }
527 if (!e) {
528 Warning("HandleItem", "No entry");
529 return;
530 }
531 // if (!gPad) TCanvas::MakeDefCanvas();
532 e->Print();
533 HandleDBEntry(e);
534 // e->fData->Draw();
535 }
536 void HandlePrint()
537 {
538 // TObject* o = HandleQuery();
539 // if (!o) return;
540 if (!fEntry) {
541 Warning("HandlePrint", "No entry selected");
542 return;
543 }
544 fEntry->fData->Print(fOptionsText.GetText());
545 }
546 void HandleDraw()
547 {
548 if (!fEntry) {
549 Warning("HandleDraw", "No entry selected");
550 return;
551 }
552
553 TObject* o = fEntry->fData;
554 Info("HandleDraw", "Will draw object of type %s", o->ClassName());
555 TString msg;
556 if (o->IsA()->InheritsFrom(TParameter<Double_t>::Class())) {
557 TParameter<Double_t>* pd = static_cast<TParameter<Double_t>*>(o);
558 msg = Form("%f", pd->GetVal());
559 }
560 if (o->IsA()->InheritsFrom(TParameter<Float_t>::Class())) {
561 TParameter<Float_t>* pf = static_cast<TParameter<Float_t>*>(o);
562 msg = Form("%f", pf->GetVal());
563 }
564 if (!msg.IsNull()) {
565 if (!gPad) TCanvas::MakeDefCanvas();
566
567 TPaveText* t = new TPaveText(.1, .1, .9, .9);
568 t->AddText(msg);
569 t->Draw();
570 return;
571 }
572 CorrDraw(o, false);
573 // o->Draw(fOptionsText.GetText());
574 }
575 void HandlePDF()
576 {
577 if (!fEntry) {
578 Warning("HandlePrint", "No entry selected");
579 return;
580 }
581
582
583 TObject* o = fEntry->fData;
584 gROOT->SetBatch(true);
585 CorrDraw(o, true);
586 gROOT->SetBatch(false);
587 // fEntry->fData->SaveAs(out, fOptionsText.GetText());
588
589 }
c8b1a7db 590 void LoadCorrDraw()
591 {
592 const char* opt = "++g";
593 const char* fwd = "$ALICE_ROOT/PWGLF/FORWARD/analysis2";
594 gSystem->AddIncludePath(Form("-I$ALICE_ROOT/include -I%s -I%s/scripts",
595 fwd, fwd));
596 Info("CorrDraw", "Loading SummaryDrawer.C%s", opt);
597 gROOT->LoadMacro(Form("%s/scripts/SummaryDrawer.C%s", fwd, opt));
598 // gROOT->ProcessLine(".Class SummaryDrawer");
599 Info("CorrDraw", "Loading CorrDrawer.C%s", opt);
600 gROOT->LoadMacro(Form("%s/corrs/CorrDrawer.C%s", fwd, opt));
601 // gROOT->ProcessLine(".Class SummaryDrawer");
602 // gROOT->ProcessLine(".Class CorrDrawer");
603 CloseMsg();
604 }
8449e3e0 605 void CorrDraw(const TObject* o, Bool_t summarize)
606 {
607 if (!gROOT->GetClass("CorrDrawer")) {
c8b1a7db 608 TTimer* t = new TTimer(Form("((ForwardOADBGUI*)%p)->LoadCorrDraw()",this),
609 0, kTRUE);
610 t->Start(100, true);
611 MakeMsg("Compiling drawer");
8449e3e0 612 }
bfab35d9 613 o->Print();
c8b1a7db 614 if (summarize) {
615 TTimer* t = new TTimer(Form("((ForwardOADBGUI*)%p)"
616 "->DoCorrDraw((TObject*)%p,1)",this, o),
617 0, kTRUE);
618 t->Start(100, true);
619 MakeMsg("Drawing to PDF");
620 }
621 else
622 DoCorrDraw(o, false);
8449e3e0 623 }
c8b1a7db 624 void DoCorrDraw(const TObject* o, Bool_t summarize)
625 {
626 TString cmd(Form("CorrDrawer cd; cd.Summarize((const %s*)%p,%d);",
627 o->ClassName(), o, summarize));
628 gROOT->ProcessLine(cmd);
629 CloseMsg();
630 }
bfab35d9 631 void MakeFileName(TString& out) const
632 {
633 if (!fEntry) return;
634
635 SelectedTable(out);
636 if (out.IsNull()) return;
637
638 out.Append(Form("_run%09lu", fEntry->fRunNo));
639 out.Append(Form("_%s", (fEntry->fSys == 1 ? "pp" :
640 fEntry->fSys == 2 ? "PbPb" :
641 fEntry->fSys == 3 ? "pPb" : "XX")));
642 out.Append(Form("_%04huGeV", fEntry->fSNN));
643 out.Append(Form("_%c%hukG", fEntry->fField >= 0 ? 'p' : 'm',
644 TMath::Abs(fEntry->fField)));
645 out.Append(Form("_%s", fEntry->fMC ? "mc" : "real"));
646 out.Append(Form("_%s", fEntry->fSatellite ? "sat" : "nom"));
647 out.Append(".pdf");
648 }
649 TObject* HandleQuery()
8449e3e0 650 {
651 ULong_t run = fRunInput.GetHexNumber();
652 Short_t mode = fRunMode.GetSelected();
653 Short_t sys = fSysSelect.GetSelected();
654 UShort_t sNN = fSNNInput.GetIntNumber();
655 Short_t fld = fFldSelect.GetSelected();
656 Bool_t mc = fMCButton.IsDown();
657 Bool_t sat = fSatButton.IsDown();
658 TString tab;
659 SelectedTable(tab);
660
661 Info("HandleQuery", "tab=%s runNo=%lu mode=%d sys=%d "
662 "sNN=%d fld=%d mc=%d sat=%d",
663 tab.Data(), run, mode, sys, sNN, fld, mc, sat);
664
665 if (tab.IsNull()) {
666 // Error("HandleQuery", "No table selected");
667 return 0;
668 }
669 AliOADBForward::ERunSelectMode qmode = AliOADBForward::kDefault;
670 switch (mode) {
671 case 0: qmode = AliOADBForward::kDefault; break;
672 case 1: qmode = AliOADBForward::kExact; break;
673 case 2: qmode = AliOADBForward::kNewest; break;
674 case 3: qmode = AliOADBForward::kNear; break;
675 case 4: qmode = AliOADBForward::kOlder; break;
676 case 5: qmode = AliOADBForward::kNewer; break;
677 }
678
679 Info("HandleQuery", "tab=%s runNo=%lu mode=%d sys=%d "
680 "sNN=%d fld=%d mc=%d sat=%d",
681 tab.Data(), run, qmode, sys, sNN, fld, mc, sat);
682
683 AliOADBForward::Entry* e = fDB->Get(tab, run, qmode, sys, sNN,
684 fld, mc, sat);
685 if (!e) return 0;
686 // if (drawNotPrint) e->Inspect();
687 // else e->Print(fOptionsText.GetText());
688 e->Print();
fe218435 689 // if (fListContainer) {
690 fListContainer.RemoveAll();
691 HandleEntry(-1, e);
692 // }
8449e3e0 693 if (!e->fData) return 0;
694 HandleDBEntry(e);
695
fe218435 696 fList.AdjustHeaders();
8449e3e0 697 fMain.Layout();
698
699 return e->fData;
700 }
701 TGMainFrame* GetMain() { return &fMain; }
c8b1a7db 702 void MakeMsg(const char* what)
703 {
704 fMsg.Show(what);
705 }
706 void CloseMsg()
707 {
708 Info("CloseMsg", "Closing message window");
709 fMsg.Hide();
710 }
8449e3e0 711 TGMainFrame fMain;
712 TGHorizontalFrame fOpenFrame;
713 TGTextEntry fFileText;
714 TGTextButton fFileSelect;
715 TGTextEntry fTablesText;
716 TGTextButton fOpenButton;
717 TGTextButton fCloseButton;
718 TGVerticalFrame fSelectFrame;
719 TGHorizontalFrame fTableFrame;
720 TGLabel fTableLabel;
721 TGComboBox fTableSelect;
722 TGHorizontalFrame fRunFrame;
723 TGLabel fRunLabel;
724 TGNumberEntry fRunInput;
725 TGComboBox fRunMode;
726 TGHorizontalFrame fSysFrame;
727 TGLabel fSysLabel;
728 TGComboBox fSysSelect;
729 TGHorizontalFrame fSNNFrame;
730 TGLabel fSNNLabel;
731 TGNumberEntry fSNNInput;
732 TGHorizontalFrame fFldFrame;
733 TGLabel fFldLabel;
734 TGComboBox fFldSelect;
735 TGHButtonGroup fOtherFrame;
736 TGTextButton fMCButton;
737 TGTextButton fSatButton;
738 TGHorizontalFrame fOptionsFrame;
739 TGLabel fOptionsLabel;
740 TGTextEntry fOptionsText;
741 TGHButtonGroup fCommandFrame;
742 TGTextButton fQueryButton;
743 TGTextButton fListButton;
744 TGTextButton fPrintButton;
745 TGTextButton fDrawButton;
746 TGTextButton fPDFButton;
fe218435 747 TGListView fList;
748 TGLVContainer fListContainer;
8449e3e0 749 TGLayoutHints fFrameHints;
750 TGLayoutHints fLabelHints;
751 TGLayoutHints fEntryHints;
752 TGLayoutHints fButtonHints;
753 TGLayoutHints fListHints;
c8b1a7db 754 ForwardOADBDialog fMsg;
8449e3e0 755 AliOADBForward* fDB;
756 AliOADBForward::Entry* fEntry;
757 // TCanvas* fDataCanvas;
758 // TCanvas* fEntryCanvas;
759};
760
e5e569fd 761
8449e3e0 762TGMainFrame* ForwardOADBGui(AliOADBForward* db=0)
763{
fe218435 764 const char* fwd = "$ALICE_ROOT/PWGLF/FORWARD/analysis2";
e65b8b56 765 if (!gROOT->GetClass("AliOADBForward"))
766 // gSystem->Load("libGui");
767 gROOT->Macro(Form("%s/scripts/LoadLibs.C", fwd));
e5e569fd 768
769 // gSystem->AddIncludePath(Form("-I%s", fwd));
770 // gROOT->LoadMacro(Form("%s/corrs/ForwardOADBGUI.C", fwd));
771
fe218435 772 new TBrowser;
773 // new TGClient();
8449e3e0 774 ForwardOADBGUI* gui = new ForwardOADBGUI();
775 if (db) gui->UseDB(db);
776 return gui->GetMain();
777}
8449e3e0 778
779//
780// EOF
781//
782