]>
Commit | Line | Data |
---|---|---|
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 | 25 | namespace { |
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 | 44 | class AliOADBForward; |
45 | class AliOADBForward::Entry; | |
e65b8b56 | 46 | #if 0 |
e5e569fd | 47 | class TGFrame; |
e65b8b56 | 48 | class TGLVEntry; |
e5e569fd | 49 | class TGHorizontalFrame; |
50 | class TGTextButton; | |
51 | class TGTextEntry; | |
52 | class TGVerticalFrame; | |
53 | class TGLabel; | |
54 | class TGComboBox; | |
55 | class TGMainFrame; | |
56 | class TGListView; | |
57 | class TGLVContainer; | |
58 | class TGHButtonGroup; | |
59 | class TGLayoutHints; | |
60 | class TGNumberEntry; | |
8449e3e0 | 61 | #endif |
e65b8b56 | 62 | #endif |
8449e3e0 | 63 | |
c8b1a7db | 64 | struct 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 | 118 | struct 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 | 762 | TGMainFrame* 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 |