]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/FORWARD/analysis2/corrs/ForwardOADBGui.C
Mega commit of many changes to PWGLFforward
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / corrs / ForwardOADBGui.C
1 #include <TGListBox.h>
2 #include <TGNumberEntry.h>
3 #include <TGTextEntry.h>
4 #include <TGComboBox.h>
5 #include <TGFrame.h>
6 #include <TGFileDialog.h>
7 #include <TGButtonGroup.h>
8 #include <TGButton.h>
9 #include <TGLabel.h>
10 #include <TGMsgBox.h>
11 #include <TSystem.h>
12 #include <TError.h>
13 #include <TTimer.h>
14 #include <TCanvas.h>
15 #include <TTree.h>
16 #include <TGListView.h>
17 #include <TDatime.h>
18 #include <TParameter.h>
19 #include <TPaveText.h>
20 #include "/opt/alice/aliroot/inst/include/AliOADBForward.h"
21
22 #ifndef __CINT__
23 namespace {
24   void 
25   ForwardOADBGUIErrorHandler(Int_t lvl, Bool_t doAbort, 
26                              const char* location, 
27                              const char* msg)
28   {
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;
34       
35       new TGMsgBox(gClient->GetRoot(), gClient->GetRoot(), 
36                    location, msg, msgIcon);
37     }
38     DefaultErrorHandler(lvl, doAbort, location, msg);
39   }
40 }
41 #else 
42 // class AliOADBForward;
43 // class TGHorizontalFrame;
44 // class TGTextButton;
45 // class TGTextEntry;
46 // class TGVerticalFrame;
47 // class TGLabel;
48 // class TGComboBox;
49 // class TGMainFrame;
50 // class TGListView;
51 // class TGLVContainer;
52 // class TGHButtonGroup;
53 // class TGLayoutHints;
54 // class TGNumberEntry;
55 #endif
56
57 struct ForwardOADBGUI
58 {
59   enum { 
60     kLabelWidth = 200
61   };
62   ForwardOADBGUI()
63     : fMain(gClient->GetRoot(), 10, 10, kVerticalFrame),
64       fOpenFrame(&fMain),
65       fFileText(&fOpenFrame, "fmd_corrections.root"),
66       fFileSelect(&fOpenFrame, "Browse"), 
67       fTablesText(&fOpenFrame, "*"),
68       fOpenButton(&fOpenFrame, "Open"),
69       fCloseButton(&fOpenFrame, "Close"),
70       fSelectFrame(&fMain), 
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),
80     fRunMode(&fRunFrame),
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"),
104     fList(0), 
105     fListContainer(0),
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),
111     fDB(0),
112     fEntry(0)
113   {
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);
124
125     fMain.AddFrame(&fSelectFrame, &fFrameHints);
126
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);
132     
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);
145
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);
155
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);
161
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);
171
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:");
180
181     fOptionsLabel.SetWidth(2*kLabelWidth);
182     fSelectFrame.AddFrame(&fOptionsFrame, &fFrameHints);
183     fOptionsFrame.AddFrame(&fOptionsLabel, &fLabelHints);
184     fOptionsFrame.AddFrame(&fOptionsText, &fEntryHints);
185
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);
193     
194     fList          = new TGListView(&fMain, 800, 400);
195     fListContainer = new TGLVContainer(fList);
196     fListContainer->SetColHeaders("Entry", 
197                                   "Run", 
198                                   "System", 
199                                   "sqrt(sNN)", 
200                                   "L3 Field", 
201                                   "Type", 
202                                   "IP",
203                                   "Date",
204                                   "Author",
205                                   "AliROOT",
206                                   "Data");
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);
216     
217 #ifndef __CINT__
218     ::SetErrorHandler(ForwardOADBGUIErrorHandler);
219 #endif
220     HandleEnable();
221
222     fMain.MapSubwindows();    
223     fMain.Resize(fMain.GetDefaultSize());
224     fMain.MapWindow();
225   }
226   ~ForwardOADBGUI()
227   {
228     HandleClose();
229 #ifndef __CINT__
230     ::SetErrorHandler(::DefaultErrorHandler);
231 #endif
232     fMain.DontCallClose();
233     Info("~ForwardOADBGUI", "Closing");
234   }
235   void UseDB(AliOADBForward* db)
236   {
237     if (!db) return;
238
239     if (fDB) HandleClose();
240     fEntry = 0;
241     fDB = db;
242
243     TString lt;
244     const TMap& tables = fDB->GetTables();
245     TIter next(&tables);
246     TObject* key = 0;
247     // Int_t    i   = 0;
248     while ((key = next())) {
249       AliOADBForward::Table* t = fDB->FindTable(key->GetName());
250       
251       lt.Append(Form("%s/%s", t->GetName(), t->fTree->GetTitle()));
252     }
253     fTablesText.SetText(lt);
254     HandleEnable();    
255   }
256   void HandleKill()
257   {
258     fMain.DontCallClose();
259     Printf("Starting timer");
260     TTimer* t = new TTimer(Form("delete (ForwardOADBGUI*)%p", this), 100);
261     t->Start(100, true);
262   }
263   void HandleDBEntry(AliOADBForward::Entry* e)
264   {
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);
270
271     fEntry = e;
272   }
273   void HandleEnable()
274   {
275     Bool_t enabled = fDB ? true : false;
276
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);
290     HandleDBEntry(0);
291
292     Int_t tsel = 0;
293     if (!enabled) {
294       fTableSelect.RemoveAll();
295       fTableSelect.AddEntry("- select -", 0);
296       
297     }
298     else {
299       const TMap& tables = fDB->GetTables();
300       TIter next(&tables);
301       TObject* key = 0;
302       Int_t    i   = 0;
303       while ((key = next())) {
304         fTableSelect.AddEntry(key->GetName(), ++i);
305       }    
306       if (tables.GetEntries() == 1) tsel = 1;
307     }
308     fTableSelect.Select(tsel, true);
309     fSysSelect.Select(0, true);
310     fFldSelect.Select(999, true);
311     fRunMode.Select(0, true);
312
313     fMain.Layout();
314   }
315   void HandleClose()
316   {
317     if (fDB) { 
318       delete fDB;
319       fDB = 0;
320     }
321     HandleEnable();
322   }
323   void HandleOpen()
324   {
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");
331       delete fDB;
332       fDB = 0;
333     }
334     // else 
335     // fDB->Print();
336     HandleEnable();
337   }
338   void HandleBrowse()
339   {
340     TGFileInfo fi;
341     new TGFileDialog(gClient->GetRoot(), &fMain, kFDOpen, &fi);
342
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);
347   }
348   void HandleEntry(Int_t i, AliOADBForward::Entry* e) 
349   {
350     TGLVEntry* lve = new TGLVEntry(fListContainer, Form("%d", i), "");
351     if (i < 0) lve->SetUserData(e);
352     lve->SetUniqueID(i);
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"), 
361                      dt.AsSQLString(),
362                      e->fAuthor, Form("%lu", e->fAliROOTRevision),
363                      (e->fData ? e->fData->GetName() : "null"));
364     fListContainer->AddItem(lve);
365   }
366   void HandleList()
367   {
368     if (!fDB) return;
369     TString table;
370     SelectedTable(table);
371
372     if (table.IsNull()) {
373       // Error("HandleList", "No table selected");
374       return;
375     }
376     HandleDBEntry(0);
377     AliOADBForward::Table* t= fDB->FindTable(table);
378     if (!t) {
379       Error("HandleList", "No table named %s in DB", table.Data());
380       return;
381     }
382     // HandleQuery();
383     t->Print(fOptionsText.GetText());
384     if (!fListContainer) return;
385     
386     fListContainer->RemoveAll();
387     TTree* tree = t->fTree;
388     Int_t  n    = tree->GetEntries();
389     for (Int_t i = 0; i < n; i++) { 
390       tree->GetEntry(i);
391       AliOADBForward::Entry* e = t->fEntry;
392       HandleEntry(i, e);
393     }
394     fList->AdjustHeaders();
395     fMain.Layout();
396   }
397   void SelectedTable(TString& ret) const
398   {
399     ret = "";
400     TGLBEntry* e = fTableSelect.GetSelectedEntry();
401     if (!e) {
402       Error("SelectedTable", "No table selected");
403       return ;
404     }
405     ret = e->GetTitle();
406   }
407   void HandleItem(TGFrame* lve, Int_t btn)
408   {
409     Info("HandleItem", "frame=%p", lve);
410     HandleItem(static_cast<TGLVEntry*>(lve), btn);
411   }
412   void HandleItem(TGLVEntry* lve, Int_t)
413   {
414     Info("HandleItem", "entry=%p", lve);
415     if (!lve) {
416       Warning("HandleItem", "No item");
417       return;
418     }
419     void* data = lve->GetUserData();
420     AliOADBForward::Entry* e = 0;
421     if (data) { 
422       e = reinterpret_cast<AliOADBForward::Entry*>(data);
423     }
424     else { 
425       TString tab;
426       SelectedTable(tab);
427       if (tab.IsNull()) return;
428       
429       AliOADBForward::Table* t = fDB->FindTable(tab);
430       // Info("HandleItem", "Fetching item %d from table", lve->GetUniqueID());
431       t->fTree->GetEntry(lve->GetUniqueID());
432       e = t->fEntry;
433     }
434     if (!e) {
435       Warning("HandleItem", "No entry");
436       return;
437     }
438     // if (!gPad) TCanvas::MakeDefCanvas();
439     e->Print();
440     HandleDBEntry(e);
441     // e->fData->Draw();
442   }
443   void HandlePrint() 
444   {
445     // TObject* o = HandleQuery();
446     // if (!o) return;
447     if (!fEntry) { 
448       Warning("HandlePrint", "No entry selected");
449       return;
450     }
451     fEntry->fData->Print(fOptionsText.GetText()); 
452   }
453   void HandleDraw()
454   {
455     if (!fEntry) { 
456       Warning("HandleDraw", "No entry selected");
457       return;
458     }
459
460     TObject* o = fEntry->fData;
461     Info("HandleDraw", "Will draw object of type %s", o->ClassName());
462     TString msg;
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());
466     }
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());
470     }
471     if (!msg.IsNull()) {
472       if (!gPad) TCanvas::MakeDefCanvas();
473       
474       TPaveText* t = new TPaveText(.1, .1, .9, .9);
475       t->AddText(msg);
476       t->Draw();
477       return;
478     }
479     CorrDraw(o, false);
480     // o->Draw(fOptionsText.GetText()); 
481   }
482   void HandlePDF()
483   {
484     if (!fEntry) { 
485       Warning("HandlePrint", "No entry selected");
486       return;
487     }
488
489
490     TObject* o = fEntry->fData;
491     gROOT->SetBatch(true);
492     CorrDraw(o, true);
493     gROOT->SetBatch(false);
494     // fEntry->fData->SaveAs(out, fOptionsText.GetText()); 
495
496   }
497   void CorrDraw(const TObject* o, Bool_t summarize)
498   {
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));
503     }
504     gROOT->ProcessLine(Form("CorrDrawer cd; cd.%s((const %s*)%p);",
505                             (summarize ? "Summarize" : "Draw"), 
506                             o->ClassName(), o));
507   }
508   void MakeFileName(TString& out) const
509   {
510     if (!fEntry) return;
511
512     SelectedTable(out);
513     if (out.IsNull()) return;
514
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"));
524     out.Append(".pdf");
525   }
526   TObject* HandleQuery()
527   {
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();
535     TString  tab;
536     SelectedTable(tab);
537     
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);
541
542     if (tab.IsNull()) {
543       // Error("HandleQuery", "No table selected");
544       return 0;
545     }
546     AliOADBForward::ERunSelectMode qmode = AliOADBForward::kDefault;
547     switch (mode) { 
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;
554     }
555
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);
559
560     AliOADBForward::Entry* e = fDB->Get(tab, run, qmode, sys, sNN, 
561                                         fld, mc, sat);
562     if (!e) return 0;
563     // if (drawNotPrint) e->Inspect();
564     // else              e->Print(fOptionsText.GetText());
565     e->Print();
566     if (fListContainer) { 
567       fListContainer->RemoveAll();
568       HandleEntry(-1, e);
569     }
570     if (!e->fData) return 0;
571     HandleDBEntry(e);
572
573     fList->AdjustHeaders();
574     fMain.Layout();
575
576     return e->fData;
577   }
578   TGMainFrame* GetMain() { return &fMain; }
579   TGMainFrame       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;
588   TGLabel           fTableLabel;
589   TGComboBox        fTableSelect;
590   TGHorizontalFrame fRunFrame;
591   TGLabel           fRunLabel;
592   TGNumberEntry     fRunInput;
593   TGComboBox        fRunMode;
594   TGHorizontalFrame fSysFrame;
595   TGLabel           fSysLabel;
596   TGComboBox        fSysSelect;
597   TGHorizontalFrame fSNNFrame;
598   TGLabel           fSNNLabel;
599   TGNumberEntry     fSNNInput;
600   TGHorizontalFrame fFldFrame;
601   TGLabel           fFldLabel;
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;
615   TGListView*       fList;
616   TGLVContainer*    fListContainer;
617   TGLayoutHints     fFrameHints;
618   TGLayoutHints     fLabelHints;
619   TGLayoutHints     fEntryHints; 
620   TGLayoutHints     fButtonHints;
621   TGLayoutHints     fListHints;
622   AliOADBForward*   fDB;
623   AliOADBForward::Entry* fEntry;
624   // TCanvas*          fDataCanvas;
625   // TCanvas*          fEntryCanvas;
626 };
627
628 TGMainFrame* ForwardOADBGui(AliOADBForward* db=0)
629 {
630   ForwardOADBGUI* gui = new ForwardOADBGUI();
631   if (db) gui->UseDB(db);
632   return gui->GetMain();
633 }
634
635   
636 //
637 // EOF
638 //
639