Small fix (Mikolaj)
[u/mrichter/AliRoot.git] / MONITOR / AliQAHistViewer.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 ////////////////////////////////////////////////////////////////////////////
17 //
18 //  QA histogram viewer
19 //
20 //  origin: Mikolaj Krzewicki, Nikhef, Mikolaj.Krzewicki@cern.ch
21 //
22 ///////////////////////////////////////////////////////////////////////////
23
24 #include "AliQAHistViewer.h"
25
26 ClassImp(AliQAHistViewer)
27
28 //_________________________________________________________________________
29 void AliQAHistViewer::DoDrawNext()
30 {
31    Int_t rows = 2;
32    Int_t cols = 2;
33    TString oldDirStr;
34    TString newDirStr;
35    oldDirStr = fQANavigator->GetDirName();
36
37    UpdateAllPathComboBoxes();
38
39    TCanvas *c1 = fEcan->GetCanvas();
40    c1->Clear();
41    c1->Divide(rows,cols);
42    for (Int_t i=1; i<=rows*cols;i++)
43    {
44        newDirStr = fQANavigator->GetDirName();
45        if (newDirStr!=oldDirStr)
46        {
47            oldDirStr=newDirStr;
48            break;
49        }
50        c1->cd(i);
51        TH1* hist;
52        if (fQANavigator->GetHistogram(hist))
53        {
54           if (hist) hist->Draw();
55        }
56        if (!fQANavigator->Next())
57        {
58            break;
59        }
60    }
61    c1->cd(0);
62    c1->Update();
63 }
64
65 //_________________________________________________________________________
66 void AliQAHistViewer::DoDrawPrev()
67 {
68    Int_t rows = 2;
69    Int_t cols = 2;
70    TString oldDirStr;
71    TString newDirStr;
72    oldDirStr = fQANavigator->GetDirName();
73
74    UpdateAllPathComboBoxes();
75
76    TCanvas *c1 = fEcan->GetCanvas();
77    c1->Clear();
78    c1->Divide(rows,cols);
79    for (Int_t i=1; i<=rows*cols;i++)
80    {
81        newDirStr = fQANavigator->GetDirName();
82        if (newDirStr!=oldDirStr)
83        {
84            oldDirStr=newDirStr;
85            break;
86        }
87        c1->cd(i);
88        TH1* hist;
89        if (fQANavigator->GetHistogram(hist))
90        {
91           if (hist) hist->Draw();
92        }
93        if (!fQANavigator->Prev())
94        {
95            break;
96        }
97    }
98    c1->cd(0);
99    c1->Update();
100 }
101
102 //_________________________________________________________________________
103 void AliQAHistViewer::DoExit()
104 {
105    printf("Exit application...");
106    gApplication->Terminate(0);
107 }
108
109 //_________________________________________________________________________
110 AliQAHistViewer::AliQAHistViewer(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
111     TGMainFrame(p, w, h),
112     fEcan(NULL),
113     fQANavigator(new AliQAHistNavigator()),
114     fFileListBox(NULL),
115     fDetectorListBox(NULL),
116     fLevelListBox(NULL),
117     fHistListBox(NULL),
118     fExpertMode(NULL),
119     fIsEmbedded(embed)
120 {
121    //initialize the QA navigator
122    // horizontal frame with comboboxes for navigation
123    TGHorizontalFrame *hframenav = new TGHorizontalFrame(this, 200,40);
124    fFileListBox = new TGComboBox(hframenav); 
125    fFileListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetFile(Int_t)");
126    fFileListBox->Resize(150,20);
127    hframenav->AddFrame(fFileListBox, new TGLayoutHints(kLHintsExpandY|kLHintsLeft));
128    fDetectorListBox = new TGComboBox(hframenav);
129    fDetectorListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetDetector(Int_t)");
130    fDetectorListBox->Resize(100,20);
131    hframenav->AddFrame(fDetectorListBox, new TGLayoutHints(kLHintsLeft));
132    fLevelListBox = new TGComboBox(hframenav);
133    fLevelListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetLevel(Int_t)");
134    fLevelListBox->Resize(100,20);
135    hframenav->AddFrame(fLevelListBox, new TGLayoutHints(kLHintsLeft));
136    fHistListBox = new TGComboBox(hframenav);
137    fHistListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetHistogram(Int_t)");
138    fHistListBox->Resize(250,20);
139    hframenav->AddFrame(fHistListBox, new TGLayoutHints(kLHintsLeft));
140    AddFrame(hframenav, new TGLayoutHints((kLHintsLeft|kLHintsExpandX), 5,5,5,5));
141    UpdateAllPathComboBoxes();
142    fExpertMode = new TGCheckButton(hframenav,"Expert");
143    hframenav->AddFrame(fExpertMode,new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
144    fExpertMode->SetToolTipText("Show expert histograms");
145    fExpertMode->Connect("Toggled(Bool_t)", "AliQAHistViewer", this, "DoSetExpertMode(Bool_t)");
146    // Create the embedded canvas
147    fEcan = new TRootEmbeddedCanvas(0,this,800,600);
148    Int_t wid = fEcan->GetCanvasWindowId();
149    TCanvas *myc = new TCanvas("MyCanvas", 10,10,wid);
150    fEcan->AdoptCanvas(myc);
151    //myc->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","AliQAHistViewer",this, 
152    //            "EventInfo(Int_t,Int_t,Int_t,TObject*)");
153
154    AddFrame(fEcan, new TGLayoutHints(kLHintsTop | kLHintsLeft | 
155                                      kLHintsExpandX  | kLHintsExpandY,0,0,1,1));
156   
157    // Create a horizontal frame containing the buttons
158    TGHorizontalFrame *hframebuttons = new TGHorizontalFrame(this, 200, 40); 
159    TGTextButton *prev = new TGTextButton(hframebuttons, "&Prev");
160    prev->Connect("Clicked()", "AliQAHistViewer", this, "DoDrawPrev()");
161    hframebuttons->AddFrame(prev, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
162    TGTextButton *next = new TGTextButton(hframebuttons, "&Next");
163    next->Connect("Clicked()", "AliQAHistViewer", this, "DoDrawNext()");
164    hframebuttons->AddFrame(next, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
165    AddFrame(hframebuttons, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
166
167    if ((!fIsEmbedded))
168    {
169        TGTextButton *exit = new TGTextButton(hframebuttons, "&Exit ");
170        exit->Connect("Pressed()", "AliQAHistViewer", this, "DoExit()");
171        hframebuttons->AddFrame(exit, new TGLayoutHints(kLHintsRight, 5, 5, 3, 4));
172    }
173    
174    // Set a name to the main frame   
175    SetWindowName("Quality Assurance Monitoring");
176    MapSubwindows();
177
178    // Initialize the layout algorithm via Resize()
179    Resize(GetDefaultSize());
180
181    // Map main frame
182    MapWindow();
183    DoDrawNext();
184 }
185
186 //_________________________________________________________________________
187 AliQAHistViewer::~AliQAHistViewer()
188 {
189    // Clean up main frame...
190    Cleanup();
191    delete fEcan;
192    delete fQANavigator;
193 }
194
195 //_________________________________________________________________________
196 void AliQAHistViewer::FillComboBoxWithListEntries( TGComboBox* box, const TList* list )
197 {
198     box->RemoveAll();
199     Int_t i=0;
200     TIter listiter(list);
201     TObject* o = NULL;
202     while ((o = (TObject*)listiter.Next()))
203     {
204         TString name = o->GetName();
205         box->AddEntry( name.Data(), i++ );
206     }
207 }
208
209 //_________________________________________________________________________
210 void AliQAHistViewer::UpdateAllPathComboBoxes()
211 {
212     if (!fQANavigator->InitOK()) return;
213     FillComboBoxWithListEntries( fFileListBox, (TList*)fQANavigator->GetFileList()->GetDirs() );
214     FillComboBoxWithListEntries( fDetectorListBox, (TList*)fQANavigator->GetDetectorList()->GetDirs() );
215     FillComboBoxWithListEntries( fLevelListBox, (TList*)fQANavigator->GetLevelList()->GetDirs() );
216     FillComboBoxWithListEntries( fHistListBox, (TList*)fQANavigator->GetItemList() );
217     fFileListBox->Select(fQANavigator->GetCurrListOfFiles()->GetDirs()->IndexOf(fQANavigator->GetCurrFile()),kFALSE);
218     fDetectorListBox->Select(fQANavigator->GetCurrFile()->GetDirs()->IndexOf(fQANavigator->GetCurrDetector()),kFALSE);
219     fLevelListBox->Select(fQANavigator->GetCurrDetector()->GetDirs()->IndexOf(fQANavigator->GetCurrLevel()),kFALSE);
220     fHistListBox->Select(fQANavigator->GetItemList()->IndexOf(fQANavigator->GetCurrItem()),kFALSE);
221 }
222
223 //_________________________________________________________________________
224 void AliQAHistViewer::DoSetFile( Int_t s )
225 {
226     fQANavigator->SetFile(s);
227     DoDrawNext();
228 }
229
230 //_________________________________________________________________________
231 void AliQAHistViewer::DoSetDetector( Int_t s )
232 {
233     fQANavigator->SetDetector(s);
234     DoDrawNext();
235 }
236
237 //_________________________________________________________________________
238 void AliQAHistViewer::DoSetLevel( Int_t s )
239 {
240     fQANavigator->SetLevel(s);
241     DoDrawNext();
242 }
243
244 //_________________________________________________________________________
245 void AliQAHistViewer::DoSetHistogram( Int_t s )
246 {
247     fQANavigator->SetItem(s);
248     DoDrawNext();
249 }
250
251 //_________________________________________________________________________
252 void AliQAHistViewer::DoSetExpertMode(Bool_t mode)
253 {
254     fQANavigator->SetExpertMode(mode);
255     DoDrawNext();
256 }