2 #include <TGNumberEntry.h>
3 #include <TGTextEntry.h>
4 #include <TGComboBox.h>
6 #include <TGFileDialog.h>
7 #include <TGButtonGroup.h>
16 #include <TGListView.h>
18 #include <TParameter.h>
19 #include <TPaveText.h>
20 #include "/opt/alice/aliroot/inst/include/AliOADBForward.h"
25 ForwardOADBGUIErrorHandler(Int_t lvl, Bool_t doAbort,
29 if (!doAbort && lvl >= kWarning) {
30 EMsgBoxIcon msgIcon = kMBIconAsterisk;
31 // if (lvl >= kInfo) msgIcon = kMBIconAsterisk;
32 if (lvl >= kWarning) msgIcon = kMBIconExclamation;
33 if (lvl >= kError) msgIcon = kMBIconStop;
35 new TGMsgBox(gClient->GetRoot(), gClient->GetRoot(),
36 location, msg, msgIcon);
38 DefaultErrorHandler(lvl, doAbort, location, msg);
42 // class AliOADBForward;
43 // class TGHorizontalFrame;
44 // class TGTextButton;
46 // class TGVerticalFrame;
51 // class TGLVContainer;
52 // class TGHButtonGroup;
53 // class TGLayoutHints;
54 // class TGNumberEntry;
63 : fMain(gClient->GetRoot(), 10, 10, kVerticalFrame),
65 fFileText(&fOpenFrame, "fmd_corrections.root"),
66 fFileSelect(&fOpenFrame, "Browse"),
67 fTablesText(&fOpenFrame, "*"),
68 fOpenButton(&fOpenFrame, "Open"),
69 fCloseButton(&fOpenFrame, "Close"),
71 fTableFrame(&fSelectFrame),
72 fTableLabel(&fTableFrame, "Table: "),
73 fTableSelect(&fTableFrame),
74 fRunFrame(&fSelectFrame),
75 fRunLabel(&fRunFrame, "Run: "),
76 fRunInput(&fRunFrame, 0, 0, -1,
77 TGNumberFormat::kNESReal,
78 TGNumberFormat::kNEANonNegative,
79 TGNumberFormat::kNELLimitMin, 0),
81 fSysFrame(&fSelectFrame),
82 fSysLabel(&fSysFrame, "System: "),
83 fSysSelect(&fSysFrame),
84 fSNNFrame(&fSelectFrame),
85 fSNNLabel(&fSNNFrame, "sqrt(sNN) [GeV]: "),
86 fSNNInput(&fSNNFrame, 0, 0, -1, TGNumberFormat::kNESReal,
87 TGNumberFormat::kNEANonNegative,
88 TGNumberFormat::kNELLimitMin, 0),
89 fFldFrame(&fSelectFrame),
90 fFldLabel(&fFldFrame, "L3 field [kG]: "),
91 fFldSelect(&fFldFrame),
92 fOtherFrame(&fSelectFrame),
93 fMCButton(&fOtherFrame, "MC"),
94 fSatButton(&fOtherFrame, "Satellite"),
95 fOptionsFrame(&fSelectFrame),
96 fOptionsLabel(&fOptionsFrame, "Draw/Print options:"),
97 fOptionsText(&fOptionsFrame, ""),
98 fCommandFrame(&fSelectFrame),
99 fQueryButton(&fCommandFrame, "Query"),
100 fListButton(&fCommandFrame, "List table"),
101 fPrintButton(&fCommandFrame, "Print entry"),
102 fDrawButton(&fCommandFrame, "Draw entry"),
103 fPDFButton(&fCommandFrame, "Summarize entry"),
106 fFrameHints(kLHintsExpandX, 0, 0, 2, 0),
107 fLabelHints(kLHintsNoHints, 4, 2, 0, 0),
108 fEntryHints(kLHintsExpandX|kLHintsExpandY, 2, 4, 0, 0),
109 fButtonHints(kLHintsExpandX, 2, 2, 0, 0),
110 fListHints(kLHintsExpandX|kLHintsExpandY, 2, 2, 4, 2),
114 fMain.Connect("CloseWindow()", "ForwardOADBGUI", this, "HandleKill()");
115 fFileSelect.Connect("Clicked()", "ForwardOADBGUI", this, "HandleBrowse()");
116 fOpenButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleOpen()");
117 fCloseButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleClose()");
118 fMain.AddFrame(&fOpenFrame, &fFrameHints);
119 fOpenFrame.AddFrame(&fFileText, &fEntryHints);
120 fOpenFrame.AddFrame(&fFileSelect, &fEntryHints);
121 fOpenFrame.AddFrame(&fTablesText, &fEntryHints);
122 fOpenFrame.AddFrame(&fOpenButton, &fEntryHints);
123 fOpenFrame.AddFrame(&fCloseButton, &fEntryHints);
125 fMain.AddFrame(&fSelectFrame, &fFrameHints);
127 fTableLabel.SetWidth(kLabelWidth); fTableLabel.SetMinWidth(kLabelWidth);
128 fTableSelect.SetHeight(22);
129 fSelectFrame.AddFrame(&fTableFrame, &fFrameHints);
130 fTableFrame.AddFrame(&fTableLabel, &fLabelHints);
131 fTableFrame.AddFrame(&fTableSelect, &fEntryHints);
133 fRunLabel.SetWidth(kLabelWidth); fRunLabel.SetMinWidth(kLabelWidth);
134 fRunMode.AddEntry("default", 0);
135 fRunMode.AddEntry("Exact", 1);
136 fRunMode.AddEntry("Newest", 2);
137 fRunMode.AddEntry("Near", 3);
138 fRunMode.AddEntry("Older", 4);
139 fRunMode.AddEntry("Newer", 5);
140 fRunMode.SetHeight(22);
141 fSelectFrame.AddFrame(&fRunFrame, &fFrameHints);
142 fRunFrame.AddFrame(&fRunLabel, &fLabelHints);
143 fRunFrame.AddFrame(&fRunInput, &fEntryHints);
144 fRunFrame.AddFrame(&fRunMode, &fEntryHints);
146 fSysLabel.SetWidth(kLabelWidth); fSysLabel.SetMinWidth(kLabelWidth);
147 fSysSelect.AddEntry("- select -", 0);
148 fSysSelect.AddEntry("p-p", 1);
149 fSysSelect.AddEntry("Pb-Pb ",2);
150 fSysSelect.AddEntry("p-Pb", 3);
151 fSysSelect.SetHeight(22);
152 fSelectFrame.AddFrame(&fSysFrame, &fFrameHints);
153 fSysFrame.AddFrame(&fSysLabel, &fLabelHints);
154 fSysFrame.AddFrame(&fSysSelect, &fEntryHints);
156 fSNNLabel.SetWidth(kLabelWidth); fSNNLabel.SetMinWidth(kLabelWidth);
157 fSNNInput.SetHeight(22);
158 fSelectFrame.AddFrame(&fSNNFrame, &fFrameHints);
159 fSNNFrame.AddFrame(&fSNNLabel, &fLabelHints);
160 fSNNFrame.AddFrame(&fSNNInput, &fEntryHints);
162 fFldLabel.SetWidth(kLabelWidth); fFldLabel.SetMinWidth(kLabelWidth);
163 fFldSelect.AddEntry("- select -", 999);
164 fFldSelect.AddEntry("-5", -5);
165 fFldSelect.AddEntry("0 ", 0);
166 fFldSelect.AddEntry("+5", +5);
167 fFldSelect.SetHeight(22);
168 fSelectFrame.AddFrame(&fFldFrame, &fFrameHints);
169 fFldFrame.AddFrame(&fFldLabel, &fLabelHints);
170 fFldFrame.AddFrame(&fFldSelect, &fEntryHints);
172 fSelectFrame.AddFrame(&fOtherFrame, &fFrameHints);
173 fOtherFrame.SetLayoutHints(&fButtonHints);
174 fMCButton.AllowStayDown(true);
175 fSatButton.AllowStayDown(true);
176 // fOtherFrame.AddFrame(&fMCButton, &fEntryHints);
177 // fOtherFrame.AddFrame(&fSatButton, &fEntryHints);
178 // new TGCheckButton(&fOtherFrame, "MC:");
179 // new TGCheckButton(&fOtherFrame, "Satellite:");
181 fOptionsLabel.SetWidth(2*kLabelWidth);
182 fSelectFrame.AddFrame(&fOptionsFrame, &fFrameHints);
183 fOptionsFrame.AddFrame(&fOptionsLabel, &fLabelHints);
184 fOptionsFrame.AddFrame(&fOptionsText, &fEntryHints);
186 fQueryButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleQuery()");
187 fListButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleList()");
188 fDrawButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandleDraw()");
189 fPDFButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandlePDF()");
190 fPrintButton.Connect("Clicked()", "ForwardOADBGUI", this, "HandlePrint()");
191 fSelectFrame.AddFrame(&fCommandFrame, &fFrameHints);
192 fCommandFrame.SetLayoutHints(&fButtonHints);
194 fList = new TGListView(&fMain, 800, 400);
195 fListContainer = new TGLVContainer(fList);
196 fListContainer->SetColHeaders("Entry",
207 fList->SetViewMode(kLVDetails);
208 fList->Connect("Clicked(TGLVEntry*,Int_t)",
209 "ForwardOADBGUI", this, "HandleItem(TGLVEntry*,Int_t)");
210 fList->Connect("DoubleClicked(TGLVEntry*,Int_t)",
211 "ForwardOADBGUI", this, "HandleItem(TGLVEntry*,Int_t)");
212 fListContainer->Connect("Clicked(TGFrame*,Int_t)",
213 "ForwardOADBGUI", this,
214 "HandleItem(TGFrame*,Int_t)");
215 fMain.AddFrame(fList, &fListHints);
218 ::SetErrorHandler(ForwardOADBGUIErrorHandler);
222 fMain.MapSubwindows();
223 fMain.Resize(fMain.GetDefaultSize());
230 ::SetErrorHandler(::DefaultErrorHandler);
232 fMain.DontCallClose();
233 Info("~ForwardOADBGUI", "Closing");
235 void UseDB(AliOADBForward* db)
239 if (fDB) HandleClose();
244 const TMap& tables = fDB->GetTables();
248 while ((key = next())) {
249 AliOADBForward::Table* t = fDB->FindTable(key->GetName());
251 lt.Append(Form("%s/%s", t->GetName(), t->fTree->GetTitle()));
253 fTablesText.SetText(lt);
258 fMain.DontCallClose();
259 Printf("Starting timer");
260 TTimer* t = new TTimer(Form("delete (ForwardOADBGUI*)%p", this), 100);
263 void HandleDBEntry(AliOADBForward::Entry* e)
265 Info("HandleDBEntry", "Selected entry %p", e);
266 Bool_t en = (e != 0);
267 fDrawButton.SetEnabled(en);
268 fPrintButton.SetEnabled(en);
269 fPDFButton.SetEnabled(en);
275 Bool_t enabled = fDB ? true : false;
277 fTableSelect.SetEnabled(enabled);
278 fRunMode.SetEnabled(enabled);
279 fSysSelect.SetEnabled(enabled);
280 fFldSelect.SetEnabled(enabled);
281 fMCButton.SetEnabled(enabled);
282 fSatButton.SetEnabled(enabled);
283 fQueryButton.SetEnabled(enabled);
284 fListButton.SetEnabled(enabled);
285 fPrintButton.SetEnabled(enabled);
286 fDrawButton.SetEnabled(enabled);
287 fPDFButton.SetEnabled(enabled);
288 fOpenButton.SetEnabled(!enabled);
289 fCloseButton.SetEnabled(enabled);
294 fTableSelect.RemoveAll();
295 fTableSelect.AddEntry("- select -", 0);
299 const TMap& tables = fDB->GetTables();
303 while ((key = next())) {
304 fTableSelect.AddEntry(key->GetName(), ++i);
306 if (tables.GetEntries() == 1) tsel = 1;
308 fTableSelect.Select(tsel, true);
309 fSysSelect.Select(0, true);
310 fFldSelect.Select(999, true);
311 fRunMode.Select(0, true);
325 if (fDB) HandleClose();
326 fDB = new AliOADBForward();
327 Info("HandleOpen", "Opening DB file %s for tables %s",
328 fFileText.GetText(), fTablesText.GetText());
329 if (!fDB->Open(fFileText.GetText(), fTablesText.GetText(), false, true)) {
330 Error("HandleOpen", "Failed to open database");
341 new TGFileDialog(gClient->GetRoot(), &fMain, kFDOpen, &fi);
343 TString nf = fi.fFilename; //
344 // nf = gSystem->ConcatFileName(fi.fIniDir, fi.fFilename);
345 Info("HandleBrowse", "New file: %s", nf.Data());
346 fFileText.SetText(nf);
348 void HandleEntry(Int_t i, AliOADBForward::Entry* e)
350 TGLVEntry* lve = new TGLVEntry(fListContainer, Form("%d", i), "");
351 if (i < 0) lve->SetUserData(e);
353 TDatime dt(e->fTimestamp);
354 lve->SetSubnames(Form("%lu", e->fRunNo),
355 (e->fSys == 1 ? "p-p" :
356 e->fSys == 2 ? "Pb-Pb" : "p-Pb"),
357 Form("%4huGeV",e->fSNN),
358 Form("%+2hdkG", e->fField),
359 (e->fMC ? "MC" : "Real"),
360 (e->fSatellite ? "Satellite" : "Nominal"),
362 e->fAuthor, Form("%lu", e->fAliROOTRevision),
363 (e->fData ? e->fData->GetName() : "null"));
364 fListContainer->AddItem(lve);
370 SelectedTable(table);
372 if (table.IsNull()) {
373 // Error("HandleList", "No table selected");
377 AliOADBForward::Table* t= fDB->FindTable(table);
379 Error("HandleList", "No table named %s in DB", table.Data());
383 t->Print(fOptionsText.GetText());
384 if (!fListContainer) return;
386 fListContainer->RemoveAll();
387 TTree* tree = t->fTree;
388 Int_t n = tree->GetEntries();
389 for (Int_t i = 0; i < n; i++) {
391 AliOADBForward::Entry* e = t->fEntry;
394 fList->AdjustHeaders();
397 void SelectedTable(TString& ret) const
400 TGLBEntry* e = fTableSelect.GetSelectedEntry();
402 Error("SelectedTable", "No table selected");
407 void HandleItem(TGFrame* lve, Int_t btn)
409 Info("HandleItem", "frame=%p", lve);
410 HandleItem(static_cast<TGLVEntry*>(lve), btn);
412 void HandleItem(TGLVEntry* lve, Int_t)
414 Info("HandleItem", "entry=%p", lve);
416 Warning("HandleItem", "No item");
419 void* data = lve->GetUserData();
420 AliOADBForward::Entry* e = 0;
422 e = reinterpret_cast<AliOADBForward::Entry*>(data);
427 if (tab.IsNull()) return;
429 AliOADBForward::Table* t = fDB->FindTable(tab);
430 // Info("HandleItem", "Fetching item %d from table", lve->GetUniqueID());
431 t->fTree->GetEntry(lve->GetUniqueID());
435 Warning("HandleItem", "No entry");
438 // if (!gPad) TCanvas::MakeDefCanvas();
445 // TObject* o = HandleQuery();
448 Warning("HandlePrint", "No entry selected");
451 fEntry->fData->Print(fOptionsText.GetText());
456 Warning("HandleDraw", "No entry selected");
460 TObject* o = fEntry->fData;
461 Info("HandleDraw", "Will draw object of type %s", o->ClassName());
463 if (o->IsA()->InheritsFrom(TParameter<Double_t>::Class())) {
464 TParameter<Double_t>* pd = static_cast<TParameter<Double_t>*>(o);
465 msg = Form("%f", pd->GetVal());
467 if (o->IsA()->InheritsFrom(TParameter<Float_t>::Class())) {
468 TParameter<Float_t>* pf = static_cast<TParameter<Float_t>*>(o);
469 msg = Form("%f", pf->GetVal());
472 if (!gPad) TCanvas::MakeDefCanvas();
474 TPaveText* t = new TPaveText(.1, .1, .9, .9);
480 // o->Draw(fOptionsText.GetText());
485 Warning("HandlePrint", "No entry selected");
490 TObject* o = fEntry->fData;
491 gROOT->SetBatch(true);
493 gROOT->SetBatch(false);
494 // fEntry->fData->SaveAs(out, fOptionsText.GetText());
497 void CorrDraw(const TObject* o, Bool_t summarize)
499 if (!gROOT->GetClass("CorrDrawer")) {
500 const char* fwd = "$ALICE_ROOT/PWGLF/FORWARD/analysis2";
501 gROOT->LoadMacro(Form("%s/scripts/SummaryDrawer.C", fwd));
502 gROOT->LoadMacro(Form("%s/corrs/CorrDrawer.C", fwd));
504 gROOT->ProcessLine(Form("CorrDrawer cd; cd.%s((const %s*)%p);",
505 (summarize ? "Summarize" : "Draw"),
508 void MakeFileName(TString& out) const
513 if (out.IsNull()) return;
515 out.Append(Form("_run%09lu", fEntry->fRunNo));
516 out.Append(Form("_%s", (fEntry->fSys == 1 ? "pp" :
517 fEntry->fSys == 2 ? "PbPb" :
518 fEntry->fSys == 3 ? "pPb" : "XX")));
519 out.Append(Form("_%04huGeV", fEntry->fSNN));
520 out.Append(Form("_%c%hukG", fEntry->fField >= 0 ? 'p' : 'm',
521 TMath::Abs(fEntry->fField)));
522 out.Append(Form("_%s", fEntry->fMC ? "mc" : "real"));
523 out.Append(Form("_%s", fEntry->fSatellite ? "sat" : "nom"));
526 TObject* HandleQuery()
528 ULong_t run = fRunInput.GetHexNumber();
529 Short_t mode = fRunMode.GetSelected();
530 Short_t sys = fSysSelect.GetSelected();
531 UShort_t sNN = fSNNInput.GetIntNumber();
532 Short_t fld = fFldSelect.GetSelected();
533 Bool_t mc = fMCButton.IsDown();
534 Bool_t sat = fSatButton.IsDown();
538 Info("HandleQuery", "tab=%s runNo=%lu mode=%d sys=%d "
539 "sNN=%d fld=%d mc=%d sat=%d",
540 tab.Data(), run, mode, sys, sNN, fld, mc, sat);
543 // Error("HandleQuery", "No table selected");
546 AliOADBForward::ERunSelectMode qmode = AliOADBForward::kDefault;
548 case 0: qmode = AliOADBForward::kDefault; break;
549 case 1: qmode = AliOADBForward::kExact; break;
550 case 2: qmode = AliOADBForward::kNewest; break;
551 case 3: qmode = AliOADBForward::kNear; break;
552 case 4: qmode = AliOADBForward::kOlder; break;
553 case 5: qmode = AliOADBForward::kNewer; break;
556 Info("HandleQuery", "tab=%s runNo=%lu mode=%d sys=%d "
557 "sNN=%d fld=%d mc=%d sat=%d",
558 tab.Data(), run, qmode, sys, sNN, fld, mc, sat);
560 AliOADBForward::Entry* e = fDB->Get(tab, run, qmode, sys, sNN,
563 // if (drawNotPrint) e->Inspect();
564 // else e->Print(fOptionsText.GetText());
566 if (fListContainer) {
567 fListContainer->RemoveAll();
570 if (!e->fData) return 0;
573 fList->AdjustHeaders();
578 TGMainFrame* GetMain() { return &fMain; }
580 TGHorizontalFrame fOpenFrame;
581 TGTextEntry fFileText;
582 TGTextButton fFileSelect;
583 TGTextEntry fTablesText;
584 TGTextButton fOpenButton;
585 TGTextButton fCloseButton;
586 TGVerticalFrame fSelectFrame;
587 TGHorizontalFrame fTableFrame;
589 TGComboBox fTableSelect;
590 TGHorizontalFrame fRunFrame;
592 TGNumberEntry fRunInput;
594 TGHorizontalFrame fSysFrame;
596 TGComboBox fSysSelect;
597 TGHorizontalFrame fSNNFrame;
599 TGNumberEntry fSNNInput;
600 TGHorizontalFrame fFldFrame;
602 TGComboBox fFldSelect;
603 TGHButtonGroup fOtherFrame;
604 TGTextButton fMCButton;
605 TGTextButton fSatButton;
606 TGHorizontalFrame fOptionsFrame;
607 TGLabel fOptionsLabel;
608 TGTextEntry fOptionsText;
609 TGHButtonGroup fCommandFrame;
610 TGTextButton fQueryButton;
611 TGTextButton fListButton;
612 TGTextButton fPrintButton;
613 TGTextButton fDrawButton;
614 TGTextButton fPDFButton;
616 TGLVContainer* fListContainer;
617 TGLayoutHints fFrameHints;
618 TGLayoutHints fLabelHints;
619 TGLayoutHints fEntryHints;
620 TGLayoutHints fButtonHints;
621 TGLayoutHints fListHints;
623 AliOADBForward::Entry* fEntry;
624 // TCanvas* fDataCanvas;
625 // TCanvas* fEntryCanvas;
628 TGMainFrame* ForwardOADBGui(AliOADBForward* db=0)
630 ForwardOADBGUI* gui = new ForwardOADBGUI();
631 if (db) gui->UseDB(db);
632 return gui->GetMain();