AliRoot Core  v5-06-30 (35d6c57)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliQAHistViewer.cxx
Go to the documentation of this file.
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  **************************************************************************/
16 //
17 // QA histogram viewer
18 // scans the current directory fro files with QA
19 // and plots them.
20 //
21 // origin: Mikolaj Krzewicki, Nikhef, Mikolaj.Krzewicki@cern.ch
22 //
24 
25 #include <TApplication.h>
26 #include <TGButton.h>
27 #include <TGFrame.h>
28 #include <TFrame.h>
29 #include <TRootEmbeddedCanvas.h>
30 #include <TGStatusBar.h>
31 #include <TCanvas.h>
32 #include <TH1.h>
33 #include <TF1.h>
34 #include <TString.h>
35 #include <TGComboBox.h>
36 #include <TList.h>
37 #include "AliQAHistNavigator.h"
38 #include "AliQAHistViewer.h"
39 
41 
42 //_________________________________________________________________________
43 void AliQAHistViewer::DoDrawNext()
44 {
45  //draw next histogram
46  Int_t rows = 2;
47  Int_t cols = 2;
48  TString oldDirStr;
49  TString newDirStr;
50  oldDirStr = fQANavigator->GetDirName();
51 
52  UpdateAllPathComboBoxes();
53 
54  TCanvas *c1 = fEcan->GetCanvas();
55  c1->Clear();
56  c1->Divide(rows,cols);
57  for (Int_t i=1; i<=rows*cols;i++)
58  {
59  newDirStr = fQANavigator->GetDirName();
60  if (newDirStr!=oldDirStr)
61  {
62  oldDirStr=newDirStr;
63  break;
64  }
65  c1->cd(i);
66  TH1* hist;
67  if (fQANavigator->GetHistogram(hist))
68  {
69  if (hist) hist->Draw();
70  }
71  if (!fQANavigator->Next())
72  {
73  break;
74  }
75  }
76  c1->cd(0);
77  c1->Update();
78 }
79 
80 //_________________________________________________________________________
82 {
83  //draw previous histogram
84  Int_t rows = 2;
85  Int_t cols = 2;
86  TString oldDirStr;
87  TString newDirStr;
88  oldDirStr = fQANavigator->GetDirName();
89 
91 
92  TCanvas *c1 = fEcan->GetCanvas();
93  c1->Clear();
94  c1->Divide(rows,cols);
95  for (Int_t i=1; i<=rows*cols;i++)
96  {
97  newDirStr = fQANavigator->GetDirName();
98  if (newDirStr!=oldDirStr)
99  {
100  oldDirStr=newDirStr;
101  break;
102  }
103  c1->cd(i);
104  TH1* hist;
105  if (fQANavigator->GetHistogram(hist))
106  {
107  if (hist) hist->Draw();
108  }
109  if (!fQANavigator->Prev())
110  {
111  break;
112  }
113  }
114  c1->cd(0);
115  c1->Update();
116 }
117 
118 //_________________________________________________________________________
120 {
121  //exit
122  printf("Exit application...");
123  gApplication->Terminate(0);
124 }
125 
126 //_________________________________________________________________________
127 AliQAHistViewer::AliQAHistViewer(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
128  TGMainFrame(p, w, h),
129  fEcan(NULL),
130  fQANavigator(new AliQAHistNavigator()),
131  fFileListBox(NULL),
132  fDetectorListBox(NULL),
133  fLevelListBox(NULL),
134  fHistListBox(NULL),
135  fExpertMode(NULL),
136  fIsEmbedded(embed)
137 {
138  //initialize the QA navigator
139  // horizontal frame with comboboxes for navigation
140  TGHorizontalFrame *hframenav = new TGHorizontalFrame(this, 200,40);
141  fFileListBox = new TGComboBox(hframenav);
142  fFileListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetFile(Int_t)");
143  fFileListBox->Resize(150,20);
144  hframenav->AddFrame(fFileListBox, new TGLayoutHints(kLHintsExpandY|kLHintsLeft));
145  fDetectorListBox = new TGComboBox(hframenav);
146  fDetectorListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetDetector(Int_t)");
147  fDetectorListBox->Resize(100,20);
148  hframenav->AddFrame(fDetectorListBox, new TGLayoutHints(kLHintsLeft));
149  fLevelListBox = new TGComboBox(hframenav);
150  fLevelListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetLevel(Int_t)");
151  fLevelListBox->Resize(100,20);
152  hframenav->AddFrame(fLevelListBox, new TGLayoutHints(kLHintsLeft));
153  fHistListBox = new TGComboBox(hframenav);
154  fHistListBox->Connect("Selected(Int_t)", "AliQAHistViewer", this, "DoSetHistogram(Int_t)");
155  fHistListBox->Resize(250,20);
156  hframenav->AddFrame(fHistListBox, new TGLayoutHints(kLHintsLeft));
157  AddFrame(hframenav, new TGLayoutHints((kLHintsLeft|kLHintsExpandX), 5,5,5,5));
159  fExpertMode = new TGCheckButton(hframenav,"Expert");
160  hframenav->AddFrame(fExpertMode,new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
161  fExpertMode->SetToolTipText("Show expert histograms");
162  fExpertMode->Connect("Toggled(Bool_t)", "AliQAHistViewer", this, "DoSetExpertMode(Bool_t)");
163  // Create the embedded canvas
164  fEcan = new TRootEmbeddedCanvas(0,this,800,600);
165  Int_t wid = fEcan->GetCanvasWindowId();
166  TCanvas *myc = new TCanvas("MyCanvas", 10,10,wid);
167  fEcan->AdoptCanvas(myc);
168  //myc->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","AliQAHistViewer",this,
169  // "EventInfo(Int_t,Int_t,Int_t,TObject*)");
170 
171  AddFrame(fEcan, new TGLayoutHints(kLHintsTop | kLHintsLeft |
172  kLHintsExpandX | kLHintsExpandY,0,0,1,1));
173 
174  // Create a horizontal frame containing the buttons
175  TGHorizontalFrame *hframebuttons = new TGHorizontalFrame(this, 200, 40);
176  TGTextButton *prev = new TGTextButton(hframebuttons, "&Prev");
177  prev->Connect("Clicked()", "AliQAHistViewer", this, "DoDrawPrev()");
178  hframebuttons->AddFrame(prev, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
179  TGTextButton *next = new TGTextButton(hframebuttons, "&Next");
180  next->Connect("Clicked()", "AliQAHistViewer", this, "DoDrawNext()");
181  hframebuttons->AddFrame(next, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
182  AddFrame(hframebuttons, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
183 
184  if ((!fIsEmbedded))
185  {
186  TGTextButton *exit = new TGTextButton(hframebuttons, "&Exit ");
187  exit->Connect("Pressed()", "AliQAHistViewer", this, "DoExit()");
188  hframebuttons->AddFrame(exit, new TGLayoutHints(kLHintsRight, 5, 5, 3, 4));
189  }
190 
191  // Set a name to the main frame
192  SetWindowName("Quality Assurance Monitoring");
193  MapSubwindows();
194 
195  // Initialize the layout algorithm via Resize()
196  Resize(GetDefaultSize());
197 
198  // Map main frame
199  MapWindow();
200  DoDrawNext();
201 }
202 
203 //_________________________________________________________________________
205 {
206  // Clean up main frame...
207  Cleanup();
208  //delete fEcan;
209  delete fQANavigator;
210 }
211 
212 //_________________________________________________________________________
213 void AliQAHistViewer::FillComboBoxWithListEntries( TGComboBox* box, const TList* list )
214 {
215  //fill the combobox with list entries
216  box->RemoveAll();
217  Int_t i=0;
218  TIter listiter(list);
219  TObject* o = NULL;
220  while ((o = (TObject*)listiter.Next()))
221  {
222  TString name = o->GetName();
223  box->AddEntry( name.Data(), i++ );
224  }
225 }
226 
227 //_________________________________________________________________________
229 {
230  //make gui elements up to date
231  if (!fQANavigator->InitOK()) return;
236  fFileListBox->Select(fQANavigator->GetCurrListOfFiles()->GetDirs()->IndexOf(fQANavigator->GetCurrFile()),kFALSE);
238  fLevelListBox->Select(fQANavigator->GetCurrDetector()->GetDirs()->IndexOf(fQANavigator->GetCurrLevel()),kFALSE);
239  fHistListBox->Select(fQANavigator->GetItemList()->IndexOf(fQANavigator->GetCurrItem()),kFALSE);
240 }
241 
242 //_________________________________________________________________________
244 {
245  //set file from user choice
246  fQANavigator->SetFile(s);
247  DoDrawNext();
248 }
249 
250 //_________________________________________________________________________
252 {
253  //set detector number from user choice
255  DoDrawNext();
256 }
257 
258 //_________________________________________________________________________
260 {
261  //set QA level
263  DoDrawNext();
264 }
265 
266 //_________________________________________________________________________
268 {
269  //set histogram
270  fQANavigator->SetItem(s);
271  DoDrawNext();
272 }
273 
274 //_________________________________________________________________________
276 {
277  //set expert mode
279  DoDrawNext();
280 }
AliQADirList * GetLevelList() const
Bool_t SetFile(TString file)
AliQAHistViewer(const AliQAHistViewer &)
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
void DoSetFile(Int_t s)
void DoSetLevel(Int_t s)
Bool_t GetHistogram(TH1 *&hist)
virtual ~AliQAHistViewer()
void DoSetExpertMode(Bool_t mode=kTRUE)
AliQADirList * GetDetectorList() const
AliQADirList * GetCurrDetector() const
void SetExpertMode(Bool_t mode)
TGComboBox * fDetectorListBox
void FillComboBoxWithListEntries(TGComboBox *box, const TList *list)
AliQADirList * GetCurrFile() const
AliQADirList * GetFileList() const
Bool_t SetItem(TString histo)
AliQADirListItem * GetCurrItem() const
TGComboBox * fHistListBox
Bool_t SetLevel(TString type)
TList * GetDirs() const
void DoSetDetector(Int_t s)
AliQAHistNavigator * fQANavigator
Bool_t SetDetector(TString detector)
TGComboBox * fLevelListBox
AliQADirList * GetCurrListOfFiles() const
Bool_t InitOK() const
TRootEmbeddedCanvas * fEcan
ClassImp(AliQAHistViewer) void AliQAHistViewer
TGCheckButton * fExpertMode
AliQADirList * GetCurrLevel() const
void DoSetHistogram(Int_t s)
TGComboBox * fFileListBox
void UpdateAllPathComboBoxes()